Skip to content

MaintenanceThe former company search endpoint goes into maintenance on November 9Migration guide

Use cases // Build lists

Build a list of companies

New

Last verified

Build a company list with the search API. Count matches for free, filter by industry, headcount and location, use prompts, and cap credit spending.

You have

Industry · size · locationcompany search filters
A search promptfor Agentic Company Search

The API

  • Company search count

    POST /v2/search/organizations/count

    sync response
  • Company search

    POST /v2/search/organizations

    sync response
  • Agentic Company Search

    POST /v2/search/organizations/prompt

    sync response

You get

Acme CorpMatching company profiles
credit per company delivered by Search
1
credit per Agentic Company Search page
1
additional credit per Agentic company delivered
1
credits to count matches
0

Find companies by industry, headcount and headquarters location, or describe the companies you want in a sentence. You can count a filtered search for free before retrieving profiles. Search returns full company profiles synchronously from the index, within your credit budget.

Which endpoint

Input you haveEndpointCostMode
Filters to count matches before buying profilesCompany search countFreeSynchronous
Explicit company filtersCompany search1 credit per company delivered. An empty page is freeSynchronous
A description of the companies to findAgentic Company Search1 credit per page plus 1 per company deliveredSynchronous

The API routes use /v2/search/organizations. The reference pages linked above keep their existing company-search addresses.

How it works

Set RC_API_KEY to your API key. Install the TypeScript SDK, Python SDK or CLI for your chosen example. Shell examples use jq. Prompt search is an alternative to filtered search, with its own charges.

Count the companies that match

Count software companies headquartered in France, in the 51 to 200 employee bracket, founded in 2015 or later. Read data.count and reuse the same filters for the paid search. Leave cursor and perPage out of the count request.

Code Examples

curl --fail-with-body -sS -X POST https://api.reversecontact.com/v2/search/organizations/count \
  -H "Authorization: Bearer $RC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"industry": "Software Development", "employeeCountRange": {"min": 51, "max": 200}, "foundedYear": {"min": 2015}, "location": {"countryCode": "FR"}}'

Retrieve the company profiles within budget

Retrieve at most 100 companies for at most 100 credits. Request pages of up to 25 companies, with a smaller final request when needed. The raw API returns companies in data.data and the cursor in data.metadata.nextCursor. The SDKs handle pagination, and the CLI counts for free before searching.

Code Examples

remaining=100
cursor=""
filters='{"industry": "Software Development", "employeeCountRange": {"min": 51, "max": 200}, "foundedYear": {"min": 2015}, "location": {"countryCode": "FR"}}'
while [ "$remaining" -gt 0 ]; do
  size=$((remaining < 25 ? remaining : 25))
  body=$(printf '%s' "$filters" | jq --arg cursor "$cursor" --argjson size "$size" \
    '. + {perPage: $size} + (if $cursor == "" then {} else {cursor: $cursor} end)')
  result=$(curl --fail-with-body -sS -X POST https://api.reversecontact.com/v2/search/organizations \
    -H "Authorization: Bearer $RC_API_KEY" \
    -H "Content-Type: application/json" -d "$body") || break
  printf '%s' "$result" | jq -c '.data.data[]'
  delivered=$(printf '%s' "$result" | jq -er '.data.data | length')
  remaining=$((remaining - delivered))
  next_cursor=$(printf '%s' "$result" | jq -r '.data.metadata.nextCursor // empty')
  [ -z "$next_cursor" ] && break
  [ "$next_cursor" = "$cursor" ] && { echo "Repeated cursor" >&2; break; }
  cursor=$next_cursor
done

Search from a description

You can use Agentic Company Search with a prompt. Inspect data.interpretation.filters and warnings before continuing. This example requests one page of up to 25 companies for at most 26 credits. Describe every criterion in the prompt instead of adding explicit filter fields.

Code Examples

curl --fail-with-body -sS -X POST https://api.reversecontact.com/v2/search/organizations/prompt \
  -H "Authorization: Bearer $RC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Software companies headquartered in France with 51 to 200 employees, founded since 2015", "perPage": 25}'

What it costs

Company search costs 1 credit per company delivered. An empty page costs nothing, and Company search count is free. The full company profile is included, so you do not need a second fetch to retrieve its fields.

Agentic Company Search costs 1 credit per page for the search, plus 1 credit per company delivered. The 1-credit page fee also applies to empty pages. Before a request runs, your available balance must cover perPage credits for filtered search, or perPage + 1 for a prompt search. Otherwise, the API returns 402 INSUFFICIENT_CREDITS without charging.

SDK iterators use maxResults / max_results to cap profiles, but this limit does not cover the extra page fees of Agentic Company Search. Limit prompt requests page by page, or configure an API key credit limit to cap total spending.

Good to know

Company search and Company search count require at least one filter. The maxDataAgeDate filter cannot be used alone. Filters combine with AND.

Use industry values such as Software Development from Industry values, and full location.area ids such as MC:DACH from Area values. Put country codes in location.countryCode (FR) and country names in location.country (France).

The employeeCountRange filter matches whole size brackets. For example, { "min": 51, "max": 200 } matches the 51 to 200 bracket. A range that contains no complete bracket returns no companies. Unknown fields and invalid closed-list values return 422 and cost 0 credits. The Company search request reference lists the filters and their accepted values.

Request 1 to 100 companies per page, 25 by default. Keep filters unchanged and pass data.metadata.nextCursor back as cursor. Stop only when the cursor is null or your budget is spent. A short or empty page can still have a next cursor, and there is no page parameter.

For prompt search, resend the same prompt. After the first paid prompt page, send data.interpretation.filters to Company search count to get a free total.

Search uses cached profiles. See Keep profiles fresh when you need current company data, and check the rate limits when paging at scale. Search count calls still count toward those request limits.

The examples print profiles for your application to store. To save companies in a persistent Reverse Contact List, use Lists: orchestrate enrichment.

FAQ

How do I build a company list by industry and employee count?

Send industry and employeeCountRange to Company search count to count matches for free. Use the same filters with POST /v2/search/organizations to retrieve full company profiles at 1 credit per company delivered.

Why does company search return no results for my employee range?

The employeeCountRange filter must contain whole size brackets. A range such as 51 to 200 matches that bracket. A range that contains no complete bracket returns no companies.

How do I cap company search credits?

For filtered Company search, use an SDK iterator with maxResults / max_results or request no more companies than the remaining budget. Agentic Company Search adds 1 credit per page, so budget those fees separately or use an API key credit limit.

Can I search for companies with a plain-language prompt?

Yes. Agentic Company Search accepts a prompt and returns the interpreted filters and warnings. Each page costs 1 credit plus 1 per company delivered. You cannot add explicit filter fields alongside the prompt.

How do I get the next page of company search results?

Send data.metadata.nextCursor as cursor. Keep the same filters for Company search, or the same prompt for Agentic Company Search. Continue until the cursor is null or your budget is spent. An empty page alone does not mean the search has ended.