B2B Contact Enrichment API - Email, Company, Job Title
Pricing
$12.00 / 1,000 results
B2B Contact Enrichment API - Email, Company, Job Title
Enrich people and companies, or find new contacts at a company by seniority and department. Returns work email, phone, job title, seniority, department, profile URL, previous employer, plus company size, revenue, industry and address. Pay per result.
Pricing
$12.00 / 1,000 results
Rating
0.0
(0)
Developer
Nabeel Hassan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Fill in the people and companies you already have, or find the ones you do not. One flat row per record, or per contact found.
What this actor does
- Does the asynchronous part properly. Enrichment at this provider is a job, not a lookup: submitting a record answers with an id and a status of scheduled, and nothing else. Reading only that response is the easiest mistake to make against this API and it writes every record up as empty. This actor submits, waits, and fetches the finished record, so what lands in the dataset is the data rather than the receipt.
- Submits in a wave rather than one at a time. A job takes far longer than a request does. Everything goes out first and is then polled together, so the run is not sitting idle waiting for record one before it sends record two.
- Finds people you did not have. Contact discovery takes a company and returns up to ten people at it, filtered by seniority band and department, using the provider's own vocabularies. The inclusive bands are handled properly: VP and above means C-level and VP, director and above adds directors, and so on.
- Stops the records that cannot resolve before they cost anything. Each enrichment type has its own minimum: a person needs a profile URL, or a first and last name together with something identifying the company. A record short of that spends a request and returns nothing, so it is reported here with the reason instead of being sent.
- Keeps the provider's own field names. The columns are
contact_email,org_annual_revenue,contact_seniorityand the rest, exactly as the provider's documentation, dashboard and webhook write them. Reconciling a run against an invoice is a great deal easier when nothing has been renamed for tidiness. - Never loses a job to a short wait. If the wait runs out, the requests are still running on the provider's side. The run prints their ids and marks the rows, and the list mode fetches them later.
- Reads your own account back. List mode returns the enrichment requests already run, filtered by id, status, type or creation date, so a run that timed out yesterday can be collected today at no extra cost at the provider. Usage mode returns the call counts per endpoint.
- Paces itself under the documented ceiling. The limit is fifty requests a minute and polling counts against it, so the default pace sits below the limit rather than at it.
- Charges nothing for a miss. Only rows carrying data are billed. Usage rows are never billed.
Input
| Field | What it does |
|---|---|
mode | Enrich contacts, enrich companies, find contacts, list requests, usage. |
records | One object per record, using the provider's own field names. |
contactLinkedinUrls | Shortcut: one profile URL per line. |
companyDomains | Shortcut: one company website per line. |
apiKey | Your own API key. |
contactsPerCompany | How many people to find per company, one to ten. |
seniority | Which seniority band to find. |
department | Which function to find. |
filterRequestId | List mode: one request by id. |
filterStatus | List mode: scheduled, in progress, erred, cancelled, ok. |
filterEnrichmentType | List mode: contact, account, get_contacts. |
filterCreatedFrom / filterCreatedTo | List mode: creation date range. |
requireEmail / requirePhone / requireLinkedin | Keep only rows carrying that field. |
pollTimeoutSeconds | How long to wait for the jobs to finish. |
skipNotFound | Leave misses out of the dataset. |
baseUrl | API host override. |
maxResults | Row ceiling, and therefore the cost ceiling. |
requestsPerMinute | Pacing, under the documented fifty a minute. |
Example output
{"mode": "getContacts","enrichmentType": "get_contacts","requestId": 4,"requestCreated": "2026-04-07T18:36:34Z","requestStatus": "OK","requestProgress": 100,"inputSummary": "org_website=example.com","found": true,"notFoundReason": null,"contactIndex": 1,"contact_first_name": "John","contact_last_name": "Doe","contact_job_title": "VP Engineering","contact_seniority": "VP","contact_department": "Engineering","contact_email": "doe@example.com","contact_phone_number": null,"contact_linkedin_url": "linkedin.com/in/johndoe","contact_previous_company": "Example Systems","org_company_name": "Example Inc","org_website": "example.com","org_industry": "Software","org_num_employees": "201-500","org_annual_revenue": "$50M-$100M","org_city": "Oakland","org_state": "CA","org_country": "United States"}
FAQ
Why does this actor wait instead of returning immediately?
Because the API is asynchronous. A submission is accepted and queued, and the response says so: an id, a creation time and a status of scheduled. The enriched values are attached to that request later and have to be fetched by id. An integration that reads the submission response gets a row of nulls for every record, every time, and nothing about the response makes that obvious. The waiting is the work.
What happens if the wait runs out before my records finish?
Nothing is lost. The requests carry on running at the provider, the run prints the ids that were still going, and those rows are marked as unfinished rather than as empty. Run the list mode afterwards, filtered by status or by creation date, and the finished records come back without being submitted again.
What is the minimum I have to supply for a record to work?
For a person: either a professional profile URL on its own, or a first name and a last name together with one of the company website, the company profile URL or the company name. For a company: at least one of the website, the profile URL or the company name. Records short of that are reported with the reason and not sent, because sending them spends a request and returns nothing.
How do the seniority bands work?
Three of the values are inclusive bands rather than single levels. VP and above covers C-level and VP. Director and above covers C-level, VP and Director. Manager and above adds Manager to those. The remaining values, C-level, VP, Director, Manager, Senior and Entry level, mean exactly the level named and nothing else.
Why are the column names not tidied up?
Because they are the provider's own names, and they are what its documentation, its dashboard sample code and its webhook payloads all use. Keeping them means a row here can be matched against a row there without a translation table, which matters most at exactly the moment you care about it: reconciling what you were charged for against what you received.
How many rows does finding contacts produce?
One per contact, not one per company. A run over fifty companies asking for five contacts each can produce up to two hundred and fifty rows, and each one is a unit of work at the provider as well as a row here. The contacts-per-company setting is the multiplier to watch.
Does the list mode cost anything?
It reads requests your account has already run, so it does not create new enrichment work at the provider. Rows carrying data are still charged for on this side, because they are results delivered. Usage rows are never charged for at all.
Can I run this without an API key?
No, and the actor will tell you so rather than failing. Every call is made with your own account's key, which you paste into the API key field or set as a secret. This provider issues keys on an API subscription, so a key that authenticates for the dashboard is not automatically one that authenticates here.
Keyword map
B2B contact enrichment API, company enrichment API, work email finder API, contact data append, find contacts at a company, seniority and department filter, job title enrichment, firmographic enrichment API, lead enrichment automation, CRM data append, account enrichment, prospect list building API, revenue and headcount data, professional profile enrichment, asynchronous enrichment API.