Skip to main content
The Contact API lets you search contacts and companies with one reusable filter. Describe the people or accounts you want — by role, company size, what the business does, or resemblance to an account you already know — then count, inspect, and retrieve the records you need. Use /v2/contact/* for people with their company data attached. Use /v2/contact/company/* for the company part of that data, deduplicated to one row per company in search and export results. It’s the same data as the data feeds, queried live instead of delivered monthly.

What one record is

A record from a contact endpoint is a pre-joined contact: one person, at one company, with that company’s firmographics and insights already attached. There is no join to write and no second call to fetch its available company fields.
Person
Name, email, and phone
_PER
+
Their job
Title, seniority, and tenure
_PAO
+
Their company
Size, industry, and location
_ORG
↓
One row from a contact endpoint
Filter on any of the three at once — no join required
That is why a single filter can say “VPs of Marketing at software companies with 200–500 employees in the US” without touching more than one endpoint.

Read a column name

The suffix on every column tells you which part of the record it describes. Learn this one thing and the whole API opens up.
Developer rule of thumbCOUNTRY_NAME_PER is where the person is. For where the company is, use the HEADQUARTERS_* fields. These are frequently different. For “people in the United States”, you almost always want _PER.
These map directly onto the identifiers used across the data feeds — RBID_PER for the person, RBID_ORG for the company, RBID_PAO for this person at this company. See Data Overview for the full model, and the Person + Organization + Insights data dictionary for every field.

Company location vs headquarters

Companies operate from more than one place, and the field you pick decides which one you get.
Filtering on COUNTRY_NAME_ORG when you meant the head office quietly returns companies whose HQ is somewhere else. For “companies headquartered in the United States”, use HEADQUARTERS_COUNTRY_NAME_ORG.
The non-HQ location fields hold a single value today and will become arrays of multiple locations in a future release. Filter on HEADQUARTERS_* wherever you need a stable, single answer. Both read the same graph. What changes is the grain of a row. Contact Search is the main surface. It returns the whole record — person fields and company fields together — so most work starts and ends here. Company Search returns the company part of the same data. In contact results, a company’s fields repeat for each matching person at that company. Company search and export results deduplicate those companies by RBID_ORG. Reach for this surface when you want an account list or a company count. For example, two contacts at Northwind Analytics and one at Globex are three contact rows or two company rows:

Use company search fields on contact endpoints

You can filter contact searches directly on company fields: employee size, industry, headquarters, revenue, funding, technologies, and more. Company description SmartSearch and look-alike filters also work on contact searches. Add person or job conditions to find the people you want at those companies. For example, combine HEADQUARTERS_COUNTRY_NAME_ORG = United States, EMPLOYEE_COUNT_RANGE_ORG = 201-500, and JOB_LEVEL_PER = VP in one filter. Reuse that filter with contact Count, View, Preview, Insights, or Export. You do not need to search companies first and pass their IDs to a second query.
The company surface adds three company-only totals: CONTACT_COUNT, CONTACTS_WITH_EMAIL, and CONTACTS_WITH_CELLPHONE. Discover supported fields with /v2/contact/columns for contacts or /v2/contact/company/columns for companies. Available company fields returned on a contact row have no separate company-row charge.
Company Preview and Company Insights take company filters. Company Count and Company Export can also apply person or job conditions to the contact audience and return its distinct companies. See company filter scope.

Start in three minutes

1

Set your key

Every request takes an API key in the x-key header. Grab yours from Developers in the dashboard.
2

Prove it works

Response captured from the local test API on October 13, 2026. Totals change as the dataset changes.
3

Size an audience

This counts VPs located in the United States, using the same audience as the Count and View examples.
Response captured from the local test API on October 13, 2026. Your counts can change.
4

Look at who you got

Reuse the filter with View for a free masked sample. If the people look right, estimate an export with an explicit maxRows and reveal choice, then start the export.

What makes it different

Most contact APIs match characters. A title list of twenty entries misses the forty spellings you didn’t think of, and contains "marketing" returns Marketing Interns. SmartSearch matches meaning. Describe a role, describe what a company does, or point at a company you already like — and combine all three in one query, with ordinary filters alongside. Nothing else in this market lets you put five look-alike companies, two job-title searches, and an exclusion in the same request.

The workflow

Use Count, View, Preview, Insights, and Start Export to choose the output you need from the same audience: totals, a masked sample, aggregate analysis, immediate records, or a downloadable file. Start with Count, View, Estimate, then Start Export. The first three steps cost 0 credits. On PAYG, the export charges for returned rows and the contact details you choose, plus any paid SmartSearch filter-node charges. Preview returns up to 50,000 full contact rows inline and is charged on PAYG. Enrich retrieves chosen known records. Export creates a file of up to 1,000,000 rows; use maxRows to request a smaller list. See credits and plans for the additive chart, reveal choices, and the difference between estimates and holds.

Limits

Everything the API caps, in one place. Both surfaces share these unless a row says otherwise.

What you send

Both enrich caps count distinct accepted identifiers after normalization and deduplication, across all supplied lists. For example, 6,000 distinct domains plus 5,000 distinct LinkedIn URLs exceeds the company cap. Deduplicate inputs before sending them: both Enrich endpoints reserve PAYG credits using submitted entries before deduplication. See Contact Enrich and Company Enrich for their hold calculations. The two in list caps are separate and both apply. A single clause may carry 50,000 values, and every in and notIn clause in the filter adds up to at most 50,000 — so four OR-ed clauses of 20,000 each is rejected even though no single clause exceeds the cap.
Over a cap? Split the input and merge the responses. Both enrich endpoints key their results by the value you sent, so merging is a dictionary update — no re-matching required.

What you get back

Rate limits

Contact and company endpoints share a default limit of 10 requests per second per authenticated user, across that user’s API keys. Requests over the limit return 429. When rate limiting is active, responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. See Rate limits and error codes for retry guidance and how to request a higher limit, and Credits & Plans for usage charges.

Where to go next