Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

Firmographic data

How to Use Firmographic Data to Build a Target List (Definition and Examples)

Firmographic data is the company-level attributes you filter on: industry, headcount, location, funding. Here is each field, the query, and the output.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

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.
  • curl and jq, or any HTTP client. Requests go to https://api.leadocean.io with the x-api-key header.

Step 1: Know the fields

Firmographic fields fall into five groups. Match each to a filter before you write a query.

GroupExample fieldsLeadOcean filter
IndustryComputer Software, Bankingindustry (534 values), naicsSector, naicsPrimary
Size51-200 employees, 201-500employeeRange, minEmployees, maxEmployees
LocationUS, Texas, EMEAhqCountry, hqState, hqContinent, hqSalesRegion
MoneySeries A, last funded in 2025fundingType, minLastFundingYear, minFunding
Type and stackPrivately Held, uses AnalyticscompanyType, 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.

bash
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:

text
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.

bash
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.

bash
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.

bash
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:

json
{
  "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:

json
{
  "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

ErrorCauseFix
401Missing or wrong x-api-keyCheck $LEADOCEAN_API_KEY is exported and sent in the header
429Above the plan rate limit (5 a second on Free, 200 on Agency)Wait for Retry-After, then slow the loop
402Records spent (Free has 1,000 for life)Upgrade to Solo ($97 a month) or Agency ($497 a month)
Empty resultsGuessed enum value, such as Software for the industryResolve the exact string with leadocean_list_enum_values
Search stops with meta.depthCappedOne search pages to 10,000 rowsAdd filters such as hqState and run several searches
Export refusedOver 50,000 rows a request or 500,000 a day, or on FreeSplit 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?

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 →