Fsome Data API v1

Access 76M+ verified B2B contacts, organizations, funding rounds, acquisitions, investments, events, and press data via a simple REST API.

Base URL: https://fsome.com/v1/data/ — All requests require an API key.

Authentication

Include your API key in every request using either method:

# Header method (recommended)
curl -H "X-API-Key: fs_your_api_key_here" \
     https://fsome.com/v1/data/searches/contacts

# Bearer token method
curl -H "Authorization: Bearer fs_your_api_key_here" \
     https://fsome.com/v1/data/searches/contacts
import requests

API_KEY = "fs_your_api_key_here"
BASE_URL = "https://fsome.com/v1/data"

headers = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json"
}

# Example: search contacts
response = requests.post(
    f"{BASE_URL}/searches/contacts",
    headers=headers,
    json={"limit": 25, "query": []}
)
data = response.json()
print(data)
const API_KEY = 'fs_your_api_key_here';
const BASE_URL = 'https://fsome.com/v1/data';

// Using fetch (Node 18+ / Browser)
const response = await fetch(`${BASE_URL}/searches/contacts`, {
  method: 'POST',
  headers: {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ limit: 25, query: [] })
});
const data = await response.json();
console.log(data);
<?php
$apiKey  = 'fs_your_api_key_here';
$baseUrl = 'https://fsome.com/v1/data';

$payload = json_encode(['limit' => 25, 'query' => []]);

$ch = curl_init("$baseUrl/searches/contacts");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => [
        "X-API-Key: $apiKey",
        'Content-Type: application/json',
    ],
]);
$body = curl_exec($ch);
curl_close($ch);
$data = json_decode($body, true);
print_r($data);
require 'net/http'
require 'json'

API_KEY  = 'fs_your_api_key_here'
BASE_URL = 'https://fsome.com/v1/data'

uri  = URI("#{BASE_URL}/searches/contacts")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['X-API-Key']    = API_KEY
request['Content-Type'] = 'application/json'
request.body = { limit: 25, query: [] }.to_json

response = http.request(request)
data     = JSON.parse(response.body)
p data

Generate API keys from your Account page. API access requires a paid plan. Free trial users will receive a 403 error with an upgrade link.

Rate Limits

Limit TypeValueScope
Requests per second400Per account
Daily request limitSet by adminPer account, resets at UTC midnight
Records per pageMax 1000Per request

When you exceed a limit, the API returns 429 Too Many Requests with a Retry-After header.

Pagination

All search endpoints accept limit (1–1000, default 100) and offset (default 0).

{
  "limit": 500,
  "offset": 1000,
  "query": [...]
}

The response includes a count field with the total matching records, so you can calculate total pages.

Bulk export tip: Use limit=1000 and increment offset by 1000 each request to export large datasets efficiently.

Error Handling

CodeErrorDescription
401missing_api_keyNo API key provided
401invalid_api_keyKey is invalid or revoked
403free_planAPI requires paid plan
403api_not_enabledAdmin hasn't enabled API for this account
429rate_limit_exceeded400 req/s limit hit
429daily_limit_exceededDaily request quota exhausted

Search Contacts

POST /v1/data/searches/contacts

Search 76M+ verified B2B contacts with email, phone, job title, company, and more.

Query Fields

field_idTypeDescription
namestringContact full name (prefix match)
emailstringEmail address (prefix match)
titlestringJob title (prefix match)
company_namestringCompany name (prefix match)
locationstringContact location
departmentstringJob department
seniority_levelstringSeniority level
industrystringCompany industry
company_sizestringCompany size range
skillsstringSkills (contains match)
has_emailbooleanOnly contacts with email
has_phonebooleanOnly contacts with phone

Response Fields

FieldTypeDescription
contact_idintUnique contact ID
unique_idstringExternal unique identifier
full_namestringContact full name
emailstringVerified email address
email_scorestringEmail verification confidence score
direct_phonestringPersonal / direct phone
work_phonestringWork / office phone
job_titlestringCurrent job title
locationstringContact location
linkedin_urlstringLinkedIn profile URL
skillsstringSkills (comma-separated)
past_companiesstringPrevious companies worked at
departmentstringJob department / division
seniority_levelstringSeniority level (C-Suite, VP, Director, etc.)
decision_making_powerstringDecision-making power level
company_idintAssociated company ID
company_namestringCompany name
company_industrystringCompany industry
company_sizestringCompany employee count range
company_websitestringCompany website URL
company_locationstringCompany HQ location
company_phonestringCompany phone numbers
company_logo_urlstringCompany profile image URL
company_descriptionstringCompany description
company_linkedinstringCompany LinkedIn page
company_facebookstringCompany Facebook page
company_twitterstringCompany Twitter page

Example

curl -X POST https://fsome.com/v1/data/searches/contacts \
  -H "X-API-Key: fs_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "query": [
      {"field_id": "title",     "value": "VP Sales"},
      {"field_id": "industry",  "value": "Software"},
      {"field_id": "has_email", "value": "true"}
    ]
  }'
import requests

response = requests.post(
    "https://fsome.com/v1/data/searches/contacts",
    headers={"X-API-Key": "fs_your_key"},
    json={
        "limit": 25,
        "query": [
            {"field_id": "title",     "value": "VP Sales"},
            {"field_id": "industry",  "value": "Software"},
            {"field_id": "has_email", "value": "true"},
        ]
    }
)
results = response.json()
for contact in results.get("data", []):
    print(contact["full_name"], contact.get("email"))
const res = await fetch('https://fsome.com/v1/data/searches/contacts', {
  method: 'POST',
  headers: { 'X-API-Key': 'fs_your_key', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    limit: 25,
    query: [
      { field_id: 'title',     value: 'VP Sales' },
      { field_id: 'industry',  value: 'Software' },
      { field_id: 'has_email', value: 'true' },
    ]
  })
});
const { data, count } = await res.json();
console.log(`Found ${count} contacts`);
data.forEach(c => console.log(c.full_name, c.email));
<?php
$payload = json_encode([
    'limit' => 25,
    'query' => [
        ['field_id' => 'title',     'value' => 'VP Sales'],
        ['field_id' => 'industry',  'value' => 'Software'],
        ['field_id' => 'has_email', 'value' => 'true'],
    ],
]);

$ch = curl_init('https://fsome.com/v1/data/searches/contacts');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_HTTPHEADER     => ['X-API-Key: fs_your_key', 'Content-Type: application/json'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);

foreach ($data['data'] as $contact) {
    echo $contact['full_name'] . ' <' . $contact['email'] . ">\n";
}
require 'net/http'; require 'json'

uri = URI('https://fsome.com/v1/data/searches/contacts')
http = Net::HTTP.new(uri.host, uri.port); http.use_ssl = true

req = Net::HTTP::Post.new(uri, 'X-API-Key' => 'fs_your_key', 'Content-Type' => 'application/json')
req.body = {
  limit: 25,
  query: [
    { field_id: 'title',     value: 'VP Sales' },
    { field_id: 'industry',  value: 'Software' },
    { field_id: 'has_email', value: 'true' },
  ]
}.to_json

result = JSON.parse(http.request(req).body)
result['data'].each { |c| puts "#{c['full_name']} <#{c['email']}>" }

Search Organizations

POST /v1/data/searches/organizations

Search millions of organizations with funding, revenue, employee, and industry data.

Query Fields

field_idTypeDescription
namestringOrganization name
locationstringHQ location (contains)
industrystringIndustry category
operating_statusstringactive, closed
funding_stagestringearly_stage_venture, late_stage_venture, etc.
company_typestringfor_profit, non_profit
ipo_statusstringpublic, private, delisted
founded_afterdateFounded on or after (YYYY-MM-DD)
founded_beforedateFounded on or before
num_employees_minintegerMin employees
num_employees_maxintegerMax employees

Response Fields

FieldTypeDescription
organization_idintInternal entity ID
permalinkstringURL-friendly slug
namestringDisplay name
legal_namestringLegal / registered name
short_descriptionstringOne-line description
full_descriptionstringFull description
image_urlstringLogo / profile image URL
website_urlstringCompany website
linkedinstringLinkedIn URL
twitterstringTwitter URL
facebookstringFacebook URL
aliasesjsonAlternative names (JSON array)
headquarters_locationstringFull HQ location string
location_citystringHQ city
location_regionstringHQ state/region
location_countrystringHQ country
location_country_codestringISO country code
postal_codestringHQ postal/zip code
operating_statusstringactive, closed
company_typestringfor_profit, non_profit
funding_stagestringearly_stage_venture, late_stage_venture, etc.
ipo_statusstringpublic, private, delisted
revenue_rangestringRevenue range code
num_employees_enumstringEmployee count range code
contact_emailstringPublic contact email
phone_numberstringPublic phone number
stock_symbolstringStock ticker symbol
stock_exchange_symbolstringStock exchange (NYSE, NASDAQ)
founded_ondateFounded date (YYYY-MM-DD)
closed_ondateClosed date
exited_ondateExit date (acquisition completion)
funding_total_usddecimalTotal funding raised (USD)
last_funding_typestringMost recent funding round type
last_funding_atdateMost recent funding date
num_investmentsintNumber of investments made
num_exitsintNumber of exits
num_exits_ipointNumber of IPO exits
num_portfolio_organizationsintPortfolio org count
num_lead_investmentsintLead investments count
investor_typestringInvestor type (VC, PE, Angel, etc.)
valuation_usddecimalLatest valuation (USD)
num_articlesintNumber of press articles
rankintGlobal rank
rank_orgintOrganization-specific rank
rank_delta_7dintRank change (7 days)
rank_delta_30dintRank change (30 days)
created_atdatetimeRecord creation timestamp
updated_atdatetimeLast update timestamp

Example

curl -X POST https://fsome.com/v1/data/searches/organizations \
  -H "X-API-Key: fs_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 50,
    "query": [
      {"field_id": "industry",         "value": "Artificial Intelligence"},
      {"field_id": "num_employees_min", "value": "51"},
      {"field_id": "operating_status",  "value": "active"}
    ]
  }'
import requests

response = requests.post(
    "https://fsome.com/v1/data/searches/organizations",
    headers={"X-API-Key": "fs_your_key"},
    json={
        "limit": 50,
        "query": [
            {"field_id": "industry",         "value": "Artificial Intelligence"},
            {"field_id": "num_employees_min", "value": "51"},
            {"field_id": "operating_status",  "value": "active"},
        ]
    }
)
for org in response.json().get("data", []):
    print(org["name"], org.get("headquarters_location"))
const res = await fetch('https://fsome.com/v1/data/searches/organizations', {
  method: 'POST',
  headers: { 'X-API-Key': 'fs_your_key', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    limit: 50,
    query: [
      { field_id: 'industry',         value: 'Artificial Intelligence' },
      { field_id: 'num_employees_min', value: '51' },
      { field_id: 'operating_status',  value: 'active' },
    ]
  })
});
const { data } = await res.json();
data.forEach(o => console.log(o.name, o.headquarters_location));
<?php
$ch = curl_init('https://fsome.com/v1/data/searches/organizations');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode([
        'limit' => 50,
        'query' => [
            ['field_id' => 'industry',         'value' => 'Artificial Intelligence'],
            ['field_id' => 'num_employees_min', 'value' => '51'],
            ['field_id' => 'operating_status',  'value' => 'active'],
        ],
    ]),
    CURLOPT_HTTPHEADER => ['X-API-Key: fs_your_key', 'Content-Type: application/json'],
]);
$data = json_decode(curl_exec($ch), true)['data'];
curl_close($ch);
foreach ($data as $org) echo $org['name'] . "\n";
require 'net/http'; require 'json'

uri = URI('https://fsome.com/v1/data/searches/organizations')
http = Net::HTTP.new(uri.host, uri.port); http.use_ssl = true
req = Net::HTTP::Post.new(uri, 'X-API-Key' => 'fs_your_key', 'Content-Type' => 'application/json')
req.body = {
  limit: 50,
  query: [
    { field_id: 'industry',         value: 'Artificial Intelligence' },
    { field_id: 'num_employees_min', value: '51' },
    { field_id: 'operating_status',  value: 'active' },
  ]
}.to_json
JSON.parse(http.request(req).body)['data'].each { |o| puts o['name'] }

Search People

POST /v1/data/searches/people

Query Fields

field_idTypeDescription
namestringPerson name
titlestringPrimary job title
organizationstringPrimary organization name
genderstringmale, female, non_binary
locationstringLocation (contains)

Response Fields

FieldTypeDescription
person_idintInternal entity ID
permalinkstringURL-friendly slug
namestringFull display name
first_namestringFirst name
middle_namestringMiddle name
last_namestringLast name
short_descriptionstringOne-line bio
full_descriptionstringFull biography
image_urlstringProfile photo URL
genderstringGender
born_ondateDate of birth
died_ondateDate of death
primary_job_titlestringCurrent primary job title
primary_organization_idintCurrent employer entity ID
primary_organization_namestringCurrent employer name
primary_organization_permalinkstringCurrent employer permalink
website_urlstringPersonal website
linkedinstringLinkedIn URL
twitterstringTwitter URL
facebookstringFacebook URL
location_citystringCity
location_regionstringState / region
location_countrystringCountry
rankintGlobal rank
rank_delta_7dintRank change (7 days)
num_articlesintPress article count
created_atdatetimeRecord creation timestamp
updated_atdatetimeLast update timestamp

Search Funding Rounds

POST /v1/data/searches/funding-rounds

Query Fields

field_idTypeDescription
organization_namestringFunded org name
investment_typestringseries_a, seed, etc.
funding_stagestringFunding stage
announced_afterdateYYYY-MM-DD
announced_beforedateYYYY-MM-DD
money_raised_minnumberMin amount (USD)
money_raised_maxnumberMax amount (USD)

Response Fields

funding_round_id, round_name, organization_name, funded_organization_id, announced_on, closed_on, funding_stage, investment_type, money_raised_usd, target_money_raised_usd, pre_money_valuation_usd, num_investors, num_lead_investors

Search Acquisitions

POST /v1/data/searches/acquisitions

Query Fields

field_idTypeDescription
acquiree_namestringAcquired company name
acquirer_namestringAcquiring company name
acquisition_typestringacquihire, lbo, merge
statusstringpending, complete
announced_afterdateYYYY-MM-DD
announced_beforedateYYYY-MM-DD
price_minnumberMin price (USD)
price_maxnumberMax price (USD)

Response Fields

acquisition_id, acquiree_name, acquiree_organization_id, acquirer_name, acquirer_organization_id, acquisition_type, announced_on, completed_on, price_usd, status, disposition

Search Investments

POST /v1/data/searches/investments

Query Fields

field_idTypeDescription
investor_namestringInvestor name
funded_organization_namestringFunded org name
investment_typestringseries_a, seed, etc.
is_lead_investorbooleanOnly lead investors
announced_afterdateYYYY-MM-DD
announced_beforedateYYYY-MM-DD

Response Fields

investment_id, investor_name, investor_id, funded_organization_name, funded_organization_id, investment_type, is_lead_investor, announced_on, money_raised_usd, num_investors

Search Events

POST /v1/data/searches/events

Query Fields

field_idTypeDescription
namestringEvent name
locationstringEvent location
starts_afterdateYYYY-MM-DD
starts_beforedateYYYY-MM-DD

Response Fields

event_id, name, short_description, starts_on, ends_on, location, event_type, event_format, event_status, registration_url

Search Press / News

POST /v1/data/searches/press

Query Fields

field_idTypeDescription
titlestringArticle title (contains)
authorstringAuthor name
published_afterdateYYYY-MM-DD
published_beforedateYYYY-MM-DD

Response Fields

press_id, title, author, publisher, published_on, url

Check API Usage

GET /v1/data/usage

Returns your current API usage for today.

curl -H "X-API-Key: fs_your_key" https://fsome.com/v1/data/usage
{
  "user_id": 42,
  "daily_limit": "10000",
  "requests_today": 234,
  "records_today": 11500,
  "reset_at_utc": "2026-03-28T00:00:00.0000000+00:00",
  "rate_limit_per_second": 400
}
Security: Never expose your API key in client-side code. Store it in environment variables or a secrets manager. Revoke compromised keys immediately from your Account page.