Skip to main content
POST

Company Search DB

Cost: 10 credits/search. Search Datamagnet’s internal database of company profiles by firmographics. Like People Search DB, this queries records already collected rather than fetching live, so it returns instantly and doesn’t consume collection capacity. Each page returns up to 500 companies.

Company search DB endpoint

Every list field is OR’d within itself and AND’d across fields — industries: ["Retail", "Restaurants"] with countries: ["US"] means retail or restaurants, in the US. At least one filter is required. A search with none is refused with a 422, uncharged: there is no useful answer to “return anything” over 38 million companies.
Most of these filters match the stored value exactly, not as a substring — that is what lets an index answer them on a table this size. Exact means exact: "Software Development" matches, "software" matches nothing. Where a field has more than one spelling in the data, pass every spelling you want, and see the coverage table at the end for how much of the database each field is filled on.

Industry and type

string[]
Filter by industry, matched exactly against LinkedIn’s own taxonomy string — Medical Practices, Construction, Restaurants, Retail, Real Estate, Insurance, Software Development.Two vintages of the taxonomy coexist in the data and nothing merges them: Computer Software is the legacy spelling of Software Development. Pass both when you want both.Example: ["Software Development", "Computer Software"]
string[]
Filter by company type, matched exactly. Values seen in the data: Privately Held, Public Company, Nonprofit, Self-Owned, Self-Employed, Partnership, Government Agency, Educational.Example: ["Privately Held", "Public Company"]
string[]
What kind of LinkedIn page this is: company, school or showcase. Case-insensitive.Example: ["company"]

Location

string[]
Filter by country as an ISO-3166-1 alpha-2 code, not a name — US, not United States. Case-insensitive.Example: ["US", "GB", "DE"]
string[]
State, province or other first-level region, matched exactly as stored. Example: ["California", "Texas"]
string[]
City, matched exactly as stored. Example: ["San Francisco", "Austin"]

Size

integer
Minimum employee count. This is the numeric headcount, filled on about 42% of companies — for broader coverage use size_bands, which is filled on 98%.Example: 50
integer
Maximum employee count. Example: 500
string[]
Filter by LinkedIn’s headcount band, matched exactly as stored: 1 employee, 2-10 employees, 11-50 employees, 51-200 employees, 201-500 employees, 501-1,000 employees, 1,001-5,000 employees, 5,001-10,000 employees, 10,001+ employees.Older records carry shorter spellings of the same bands (1-10, 11-50) and a few carry 0+ employees. Pass every spelling you want matched — these are exact comparisons, not ranges.Example: ["11-50 employees", "51-200 employees"]

Age and reach

integer
Founded in or after this year. Example: 2010
integer
Founded in or before this year.The founding year is stored as free text, so it is read as the first four digits of the value — 1998-2000 (relocated 2015) reads as 1998, 2,024 reads as 2024. A company whose stored value holds no year at all never matches either bound.Example: 2020
integer
Minimum LinkedIn follower count. Example: 1000

Web presence

boolean
true returns only companies we hold a website for, false only those we hold none for. Like the contactability filters on the people search, this describes our records rather than the company.Example: true

LinkedIn identity

string[]
Filter by numeric LinkedIn company ID. Exact match, and the fastest way to hydrate a list of companies you already know.Example: ["1035", "1441"]
string[]
Filter by LinkedIn universal name — the last path segment of the company URL. Case-insensitive, exact match.Example: ["stripe", "plaid"]

Paging

Results are not ordered. Nothing worth sorting by is indexed on a table this size, so a sort would mean collecting every match before returning a page of them. Paging with limit/offset is therefore best-effort: it walks the result set, but the order it walks in is not guaranteed to be stable between calls.
integer
default:50
Maximum number of companies to return per page, from 1 to 500. A value outside that range is rejected rather than quietly reduced.
integer
default:0
Number of results to skip, for pagination.

Unrecognised fields

A field name this endpoint doesn’t know is not applied. The search still runs, and the response carries an ignored_filters array naming what was dropped — so a mistyped industry (for industries) shows up as a named mistake instead of a page of results that looks filtered but isn’t. If every filter in the request was unrecognised, the search is refused with a 422 and no credits are charged.

Response

The response model

Results never carry the company description, the long-form info block or the raw collected payload. Those three are the bulk of the stored record, and a search that returned them would spend its whole budget fetching them. Use Company on a result’s linkedin_url for the full profile.
array
List of matching companies.
integer
Number of credits used for this request. Example: 10
integer
Number of results returned in this response.
string[]
Present only when the request contained field names this endpoint doesn’t recognise. Names them, so a typo shows up as a typo rather than as results that look filtered but aren’t.

Field coverage

A filter can only return companies whose record holds that field, so coverage is the real ceiling on any search. Measured across 38.4M companies on 2026-09-22: Combining a well-covered filter with a sparse one narrows twice: min_employees with founded_min can only return the companies that carry both.

Errors

Nothing is charged on any error.