B2B Contact Database API - Company and Contact Search avatar

B2B Contact Database API - Company and Contact Search

Under maintenance

Pricing

$12.00 / 1,000 company or contact results

Go to Apify Store
B2B Contact Database API - Company and Contact Search

B2B Contact Database API - Company and Contact Search

Under maintenance

Search a B2B database of companies and their employees by industry, employee band, revenue band, location, job title, department, seniority and installed technology, then reveal verified work emails and phone numbers. Pay per result. Bring your own API key.

Pricing

$12.00 / 1,000 company or contact results

Rating

0.0

(0)

Developer

Nabeel Hassan

Nabeel Hassan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Search a B2B database of companies and the people who work at them, and export the matches as clean rows. Filter companies by industry, sub-industry, employee band, revenue band and location, filter contacts by job title, department, seniority, employer and the technology their company runs, and reveal verified work emails and phone numbers for the people you decide to keep. You pay only for the records you actually receive.

This actor is built for outbound prospecting, account and contact list building, technographic targeting, and enriching a CRM with firmographics and verified contact details.

What you can do with it

  • Build a company list by industry, size band, revenue band and location.
  • Find the right people inside those companies by title, department and seniority.
  • Strip juniors and assistants out of a senior list with an exclude-title filter, rather than cleaning it afterwards.
  • Cap how many people come back from any one company, so a single large employer cannot swallow the list.
  • Target companies by the technology they run.
  • Reveal verified emails and phone numbers only for the contacts you kept, instead of paying for the whole search.
  • Export everything as JSON, CSV or Excel, or push it into a CRM or warehouse.

Features

  • Three modes in one actor: company search, contact search, and revealing contact ids you already hold.
  • Employee and revenue bands are dropdowns, not free text. The provider accepts a fixed set of labels spelled exactly, spaces and currency symbols included, so 25 - 100 works and 25-100 does not. Picking from a list removes the whole class of silently-ignored filter.
  • Revealing contact details is off by default and has to be asked for explicitly, because it is a separate and more expensive action on your provider plan than searching. The log says so plainly when it is turned on.
  • Reveal calls are batched at the provider's documented maximum of 50 ids per call, and a batch that fails is reported and skipped rather than losing the run.
  • Revealed detail is merged over the search preview rather than replacing it, so fields that only appear in the preview survive.
  • Cursor pagination is walked the provider's way, following the cursor it returns, and a cursor that comes back unchanged is treated as the end of the result set rather than looping forever.
  • The remaining credit balance is read off the response headers on every call and reported at the end of the run.
  • Every contact row carries revealed, so a preview is never mistaken for a contactable record.
  • Contact rows are shaped defensively across several candidate field names, and the untouched provider payload is always kept under raw, so nothing is lost.
  • Duplicate companies and contacts are removed across pages, keyed on contact id or domain then name, before anything is charged.
  • Request pacing is built for the provider's published limit of 250 requests per minute, with retry-after aware backoff on top.
  • Pay-per-result pricing with a hard result cap so a run can never surprise you.

Input

FieldTypeDescription
modestringSearch companies, search contacts, or reveal known contact ids.
companyNames / companyDomainsarrayCompany identity filters, used by both searches.
headCountsarrayEmployee bands, picked from the provider's fixed labels.
revenuesarrayRevenue bands, picked from the provider's fixed labels.
industries / subIndustriesarrayIndustry classification filters.
cities / states / countriesarrayCompany location filters.
titles / excludeTitles / titleExactMatcharray, array, booleanJob title targeting, including exclusions and exact matching.
departments / levelsarrayDepartment and seniority filters.
contactNames / firstNames / lastNamesarrayPerson name filters.
technologiesarrayOnly contacts at companies running these technologies.
locationPreferencestringWhere the contacts should be based.
requiredFieldsarrayOnly contacts carrying these fields, for example an email.
minimumEmailDeliverabilityScoreintegerDrop contacts whose email scores below this.
maxContactPerCompanyintegerCap the contacts returned per company.
dontDisplayOwnedContactbooleanHide contacts already saved in your provider account.
revealContactsbooleanRequest verified emails and phones after searching.
contactIdsarrayContact ids to reveal, for the reveal mode.
rawFiltersobjectAny extra search field, merged last.
maxResultsintegerStop after this many records (1 to 25,000).
pageSizeintegerRecords per API call (1 to 100).
apiKey / accountEmailstringYour API key and the account's registered email. Both required.

A search mode needs at least one filter. The reveal mode needs at least one contact id.

Example output

Each dataset item is one company or one contact, marked by recordType. Fields are populated where the provider has data, and the untouched payload is kept under raw:

{
"recordType": "contact",
"contactId": "88213470",
"name": "Alex Example",
"firstName": "Alex",
"lastName": "Example",
"title": "Head of Marketing",
"department": "marketing",
"level": "Director",
"email": "alex@example.com",
"emailDeliverabilityScore": 92,
"phone": "+1 617 555 0142",
"linkedin": "https://www.linkedin.com/in/example",
"companyName": "Example Corp",
"companyDomain": "example.com",
"companyIndustry": "Computer Software",
"companyHeadCount": "100 - 250",
"companyRevenue": "$10 - 50M",
"city": "Boston",
"state": "MA",
"country": "United States",
"revealed": true,
"raw": { "contactId": 88213470, "title": "Head of Marketing" }
}

A company row looks like this instead:

{
"recordType": "company",
"name": "Example Corp",
"website": "https://www.example.com",
"domain": "example.com",
"phoneNumber": "+1 617 555 0100",
"street": "88 Example Avenue",
"city": "Boston",
"state": "MA",
"zipcode": "02110",
"country": "United States",
"industry": "Computer Software",
"subIndustry": "Marketing Automation",
"headCount": "100 - 250",
"revenue": "$10 - 50M",
"numberOfContacts": 143,
"linkedin": "https://www.linkedin.com/company/example-corp",
"raw": { "name": "Example Corp" }
}

Pricing and the credit model

This actor uses pay-per-result pricing. You are charged a fixed price for each company or contact delivered to the dataset, after duplicates are removed. A search that matches nothing costs nothing. Set maxResults to cap how many rows a run can collect, and set a run spending limit as a second safety net.

Your own provider plan meters separately, and it distinguishes searching from revealing: a search spends search credits, while revealing a verified email or phone number spends the more expensive purchase credits. The response header reporting your remaining balance is read on every call and logged at the end of a run. Search first, narrow with requiredFields, minimumEmailDeliverabilityScore and maxContactPerCompany, then reveal only the rows you decided to keep.

Bring your own API key

This actor connects to a third-party B2B company and contact data provider (Adapt.io) on your behalf and requires your own provider credentials. This provider authenticates with two values rather than one: the API key from your account settings, and the email address the account is registered under. Paste both into the apiKey and accountEmail inputs. They are stored securely and never logged, and the actor never ships with or shares credentials.

Frequently asked questions

What data does this actor return?

For a company: name, website with a normalised domain, phone number, the full address split into street, city, state, postal code and country, industry and sub-industry, employee band, revenue band, how many contacts the provider holds for that company, and links to LinkedIn, Twitter and Facebook. For a contact: contact id, name split into first and last, job title, department, seniority level, email with its deliverability score, phone, LinkedIn URL, the employer's name, domain, industry, employee band and revenue band, and location. Every record also carries the untouched provider payload.

Why are employee count and revenue dropdowns rather than numbers?

Because the provider accepts a fixed set of band labels rather than free numeric ranges, and the labels have to be spelled exactly, spaces and currency symbols included. 25 - 100 is valid and 25-100 is not. A mistyped band is not an error, it is silently ignored, which is the worst kind of failure. Offering them as a dropdown makes that impossible.

What is the difference between searching and revealing?

Searching returns contact previews: who the person is, what they do and where they work, but not their email address or phone number. Revealing is the separate call that returns those, and it spends the more expensive purchase credits on your provider plan. That is why revealContacts is off by default. Every contact row carries revealed so you can always tell which kind you are looking at.

How do I keep the reveal bill down?

Search first and narrow hard before revealing. Use requiredFields so only contacts that actually carry an email come back, set minimumEmailDeliverabilityScore so you are not paying to reveal an address that will bounce, set maxContactPerCompany so one large employer cannot fill the list, and turn on dontDisplayOwnedContact so you do not pay twice for people already in your account. Then run the reveal mode over the ids you kept.

How many contacts can be revealed at once?

The provider accepts 50 ids per reveal call, so the actor batches automatically at that size. A batch that fails is logged and skipped rather than ending the run, so one bad id does not cost you the rest.

How does pagination work here?

By cursor, not by page number or offset. Each response carries a cursor which is sent back on the next request. When the cursor comes back unchanged, the result set is finished, and that is how the walk ends. This is why there is no page number input.

Can I see how many credits I have left?

Yes. The provider reports the remaining balance and the credit type on every response header, and the actor reads it on every call and logs the final figure at the end of the run.

How does the actor handle rate limits?

The provider allows 250 requests per minute. The actor paces its own requests to stay under that by design, honours the retry-after signal on a rate-limited response, and backs off exponentially. A response saying the account is out of credits stops the run early and keeps everything already collected.

How am I charged?

You pay a fixed price per record returned to the dataset. Duplicates are removed before charging and empty runs cost nothing. Use maxResults and the run spending limit to control cost.

What output formats are available?

The dataset can be exported as JSON, CSV, Excel, HTML or RSS, or read through the API for pushing into a CRM or warehouse.

Keyword map

b2b contact database api, company and contact search api, b2b prospecting api, work email api, contact enrichment api, firmographic company search, job title search api, department seniority filter api, technographic contact targeting, sales prospecting data api, lead list building api, account based marketing data, crm data enrichment api, verified business email data, direct dial phone data api, company revenue band search, employee count company search, b2b lead generation database, bulk contact export api, sales intelligence data api.