POST /api/linkedin/search/sql/companies
Price: 1 credit
Bulk-discover companies in the cached ~70M-record LinkedIn DB. Use for ICP discovery, competitor/lookalike lists, and account-list building.
Bulk discovery of LinkedIn companies by keywords + filters. Use `keywords` for cross-field search; per-field DSL for narrower queries. Returns up to 1000 companies, ordered by text-match relevance (see `sort`).
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)keywords string — Global search across name, description, short_description, specialities, hashtags, locations. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")name string — Search in `name`. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")alias string — Search in `alias` (LinkedIn slug). Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")urn array — Batch lookup by exact URN list, e.g. ['fsd_company:11130470']. (default: [])description string — Search in `description` OR `short_description`. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")website string — Search in `website`. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")headquarter_location string — Search in `headquarter_location`. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")locations string — Search in `locations` array (word-boundary tokens). For country filtering country_hq/country_any (ISO2 codes) are the structured alternative. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")specialities string — Search in `specialities` array. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")hashtags string — Exact-match search in `hashtags` array (case-insensitive, element equality, not substring). Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")similar_organizations string — Search in `similar_organizations` array. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")industry array — Exact-match industry URNs (e.g. ['industry:96', 'industry:28']). (default: [])industry_name string — DSL search over industry Label (industries.tsv). Resolves to URN set, then filters `industry IN (...)`. Mini-DSL: whitespace=AND, `|`=OR (no spaces around `|`), `"phrase"`=substring phrase, `-token`=NOT. A bare single word matches whole words case-insensitively (`sdr` matches `SDR/BDR`, not `adviseur`); there is no stemming, so `integration` does not match `integrations` — use a quoted `"phrase"` for substring matching. Bare terms with separators (`b2b-saas`, `S.E.E.D.`) and non-ASCII terms match as substrings. Example: `acme|tech "machine learning" -intern`. (default: "")employee_count_min integer nullable — Min employee_count (inclusive).employee_count_max integer nullable — Max employee_count (inclusive).founded_on_min integer nullable — Min founded year (inclusive).founded_on_max integer nullable — Max founded year (inclusive).last_modified_after integer nullable — Min last_modified_at timestamp (inclusive).is_active boolean nullable — Filter by is_active flag.page_verification_status boolean nullable — Filter by page_verification_status flag.headquarter_status boolean nullable — Filter by headquarter_status flag.country_hq array — ISO2 country codes (e.g. ['US', 'GB']). Token-aware match strictly in `headquarter_location`. Avoids substring false positives like 'US' ⊂ 'Russia'. (default: [])country_any array — ISO2 country codes. Token-aware match in `headquarter_location` OR any element of `locations` array — company is present in any of the listed countries. (default: [])has_website boolean nullable — If true, only results with non-empty `website`. If false, only empty.has_description boolean nullable — If true, only results with non-empty `description`. If false, only empty.min_description_length integer nullable — Minimum length of `description` (helps drop stub cards). (min: 0)sort string — Result ordering. `relevance`: weighted text-match score built from the `keywords`, `name`, `specialities` and `description` queries over name, specialities, hashtags and descriptions; ties break by freshness, and when none of those four queries is set the order is freshness. `last_modified`: newest first. (default: "relevance"; one of: "relevance", "last_modified")count integer required — Max result count. A `dry_run` request ignores it, and `sort`. (max: 1000; >: 0)dry_run boolean — Return how many companies match these filters instead of the companies. The response is a 209 with an empty body and the number in the headers, so a filter set can be sized before it is run for real. It stops at 100000 — a wider filter set reports exactly that and means 'at least'. (default: false)@type string (default: "LinkedinDBCompany")urn string requiredname string requiredalias string requiredurl string requiredwebsite string nullablelocations array (default: [])short_description string nullabledescription string nullableemployee_count integer nullablefounded_on integer nullablephone string nullableorganizational_urn string nullablepage_verification_status boolean nullablelast_modified_at integer nullableheadquarter_status boolean nullableheadquarter_location string nullableindustry string nullablespecialities array (default: [])is_active boolean nullableemployee_count_range string nullablesimilar_organizations array (default: [])hashtags array (default: [])crunchbase_link string nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.