Firmographic data is the set of facts that describe a company, the way demographics describe a person. Industry, headcount, headquarters, revenue, funding stage and company type are the core fields. You use them to decide which companies belong on a list before you look at any individual.
This guide gives the definition, the fields that matter, and a working query against the LeadOcean API. It sizes a list, pulls it, and enriches one row.
TL;DR
- Firmographics are company attributes: industry, employee range, HQ location, funding, revenue, company type, technologies.
- The recipe takes about 15 minutes: resolve filter values, count for free, pull 25 companies, enrich one.
- It spends about 26 LeadOcean records. The count and the filter lookups cost nothing.
Prerequisites
- A LeadOcean account on the Free plan (1,000 records for life, no card): app.leadocean.io/register.
- An API key stored as
$LEADOCEAN_API_KEY. curlandjq, or any HTTP client. Requests go tohttps://api.leadocean.iowith thex-api-keyheader.
Step 1: Know the fields
Firmographic fields fall into five groups. Match each to a filter before you write a query.
| Group | Example fields | LeadOcean filter |
|---|---|---|
| Industry | Computer Software, Banking | industry (534 values), naicsSector, naicsPrimary |
| Size | 51-200 employees, 201-500 | employeeRange, minEmployees, maxEmployees |
| Location | US, Texas, EMEA | hqCountry, hqState, hqContinent, hqSalesRegion |
| Money | Series A, last funded in 2025 | fundingType, minLastFundingYear, minFunding |
| Type and stack | Privately Held, uses Analytics | companyType, technologyCategories |
Firmographics differ from demographics (who the person is) and technographics (what the company runs). Most real lists combine all three. The related guides cover the wider context: what is B2B data and firmographic segmentation.
Step 2: Resolve the exact filter values
Enum filters match exact strings. A guessed industry name returns nothing. Look the value up first. The lookup is free.
curl -s "https://api.leadocean.io/v1/enums" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq 'keys'In an MCP client such as Claude, the same lookup is a tool call:
Use leadocean_list_enum_values with name "industry" and q "software".Pick the exact string, for example Computer Software. Employee ranges are fixed brackets: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+.
Step 3: Size the list for free
Count before you pull. A company count spends no records and returns an exact total with breakdowns.
curl -s -G "https://api.leadocean.io/v1/companies/count" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
--data-urlencode "industry=Computer Software" \
--data-urlencode "employeeRange=51-200" \
--data-urlencode "hqCountry=US"The MCP equivalent is leadocean_count_companies with the same filters. To size the people at those companies, use leadocean_count_leads. It counts mailable people by default (verified, catch_all_valid or catch_all), so say what you filtered when you report the number.
Step 4: Pull the companies
Search takes a flat JSON body. Filters are arrays. limit runs 1 to 100, and you page with cursor. This request returns 25 rows, which is 25 records.
curl -s -X POST "https://api.leadocean.io/v1/companies/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"industry": ["Computer Software"],
"employeeRange": ["51-200"],
"hqCountry": ["US"],
"limit": 25
}' | jq '.data[0], .meta'One search pages to 10,000 rows. If meta.depthCapped is true, narrow the filters instead of walking further. For the people at these companies, POST /v1/exports writes a CSV (up to 50,000 rows a request, 500,000 a day). Bulk CSV export is not on Free.
Step 5: Enrich one row
Enrich takes exactly one of linkedin_url, email, phone or person_id. For a company record, use the company endpoint with its domain.
curl -s -X POST "https://api.leadocean.io/v1/companies/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "acme.com"}'To reach people at the company, GET /v1/companies/acme.com/people lists everyone we hold there. To spend records only on buyers, run POST /v1/people/search with domain plus jobLevel and jobFunction instead.
What you get
Run on 2026-10-21 with the free MCP tools, no records spent.
leadocean_count_companies with industry Computer Software, employeeRange 51-200, hqCountry US:
{
"total": 460,
"totalIsExact": true,
"facets": {
"hq_state": [
{"value": "California", "count": 136},
{"value": "New York", "count": 36},
{"value": "Texas", "count": 26}
]
}
}The facet list is trimmed to three of twenty states. leadocean_count_leads for VP-level people in Sales & Business Development at those companies returned 76 mailable people across 36 companies. The same filters with no email condition match 296 people. The 76 is a mailable count (verified, catch_all_valid or catch_all), not everyone.
Company record from Step 5, as the response shape from the API reference, with placeholder values:
{
"success": true,
"data": {
"company_data": {
"company_name": "Acme",
"company_domain": "acme.com",
"company_type": "Privately Held",
"company_industries": [{ "name2": "Computer Software", "priority": 1 }],
"company_employees": { "number_of_employees": 120, "number_of_employees_code": "51-200" },
"company_primary_address": { "city": "Austin", "state": "Texas", "country_code": "US" },
"company_funding": { "last_round_type": "Series A", "last_round_year": 2025 }
},
"company_metrics": { "completion_score": 90, "marketability_score": 80 },
"meta": { "fetched_at": "2026-10-01", "schema": "leadocean.company.v1" }
}
}Fields we hold nothing for come back as null. Funding and revenue are held for a small share of companies.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Check $LEADOCEAN_API_KEY is exported and sent in the header |
| 429 | Above the plan rate limit (5 a second on Free, 200 on Agency) | Wait for Retry-After, then slow the loop |
| 402 | Records spent (Free has 1,000 for life) | Upgrade to Solo ($97 a month) or Agency ($497 a month) |
| Empty results | Guessed enum value, such as Software for the industry | Resolve the exact string with leadocean_list_enum_values |
Search stops with meta.depthCapped | One search pages to 10,000 rows | Add filters such as hqState and run several searches |
| Export refused | Over 50,000 rows a request or 500,000 a day, or on Free | Split the request, or move to a paid plan |
FAQ
What is the difference between firmographic and demographic data?
Demographics describe a person: title, seniority, location. Firmographics describe the employer: industry, size, headquarters, funding. B2B lists need both.
What are examples of firmographic data?
Industry, employee count, annual revenue, headquarters country and state, company type, year founded, funding stage and last funding year. Technology on the company website is often added as a technographic layer.
Is revenue a reliable filter?
Revenue is the thinnest firmographic field in most datasets. Filters like minRevenue only match records where a figure is on file, so check the count before you build a list on it. Prefer employeeRange.
How often is firmographic data refreshed?
LeadOcean refreshes its dataset monthly, and each record carries its own fetched_at date. Check it before a campaign.
Can I see more provider options?
Yes. See best firmographic data providers and LeadOcean pricing.
Size your firmographic segment in minutes
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →