Waterfall Contact Enrichment API - Email and Mobile Finder avatar

Waterfall Contact Enrichment API - Email and Mobile Finder

Pricing

$14.00 / 1,000 results

Go to Apify Store
Waterfall Contact Enrichment API - Email and Mobile Finder

Waterfall Contact Enrichment API - Email and Mobile Finder

Find work emails, personal emails and mobile numbers for B2B contacts from a profile URL or a name and company, with every address verified. Also reverse email lookup, and people and company search across job title, seniority, industry, headcount and tenure. Pay per result.

Pricing

$14.00 / 1,000 results

Rating

0.0

(0)

Developer

Nabeel Hassan

Nabeel Hassan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Give it a profile URL, or a name and a company, and get back a verified work email, a personal email and a mobile number. One flat row per contact.

What this actor does

  • Runs a waterfall, not a single source. The provider queries a series of upstream contact databases in turn and stops at the first one that answers, which is why the hit rate is higher than any one source on its own. That is also why an enrichment takes minutes rather than milliseconds, and why the run is built around batches rather than around one request per contact.
  • Verifies every address before returning it. Each email comes back with a status: deliverable at roughly a two percent bounce rate, high probability at roughly nine, catch-all higher again, invalid excluded from the best-address column entirely. You can filter on it.
  • Returns the alternatives, not only the winner. The best work email, the best personal email and the best mobile number are their own columns, and every other address and number the waterfall found is kept alongside them. The second-best address is often the one that matches a record you already hold.
  • Prices the decision up front. A work email is one credit on your own plan, a personal email three, a mobile number ten. Asking for all three costs fourteen times what asking for the first costs, so the default is the work email alone and the run logs what it is about to spend before it starts.
  • Turns an address back into a person. Reverse email lookup takes an address you already have and returns the person and the company behind it, which is how you fill in a sign-up list that has nothing but email addresses in it.
  • Searches for people you do not know yet. Twenty filters over job title, seniority, function, skills, languages, universities, current and past employers, industry, location, headcount, founding year, tenure and time since the last job change. Any line beginning with a minus sign excludes that value instead of requiring it.
  • Searches for companies the same way. Name, domain, description keywords, specialties, industry, type, headquarters, headcount and founding year. Description keywords are the filter that finds companies doing a thing rather than companies filed under a category.
  • Finds people who just moved. Filter on days since the last job change to reach someone in their first quarter somewhere new, while they are still choosing their own tools.
  • Never submits more than you asked for. Enrichment batches go one at a time, so a run that stops at the result cap or at the spending limit has spent your provider credits only on the contacts it actually returned.
  • Knows the difference between out of credit and finished. This provider reports an exhausted balance as a job status rather than as an error, which is exactly how an abandoned batch gets written up as a successful empty run elsewhere. Here it stops and says so.
  • Never charges for a miss. Only rows carrying a resolved record are billed.

Input

FieldWhat it does
modeEnrich, reverse lookup, people search, company search, or a single lookup.
linkedinUrlsProfile URLs to enrich, one per line.
contactsContacts as objects, when you have CRM rows rather than links.
emailsAddresses to reverse look up.
enrichFieldsWork email, personal email, mobile, and what each costs.
currentJobTitlesTitles at the current employer.
seniorityLevelsOwner through to Senior.
jobFunctionsThe broad function the person works in.
subFunctionsThe narrower function under it.
pastJobTitlesTitles the person held before.
personNamesFirst, last or full name.
personLinkedinUrlsSpecific people by profile URL.
personLocationsContinent, country, region or city.
personLanguagesLanguages spoken.
personSkillsListed skills.
personUniversitiesUniversities attended.
currentCompanyNamesWhere they work now.
currentCompanyDomainsThe same, by domain.
currentCompanyLinkedinUrlsThe same, by company profile URL.
currentCompanyIndustriesEmployer industry.
currentCompanySpecialtiesEmployer specialties.
currentCompanyTypesPublic, private, nonprofit and the rest.
currentCompanyHeadquartersWhere the employer is based.
pastCompanyNamesEmployers they worked at before.
pastCompanyDomainsThe same, by domain.
companyNamesCompany search: names.
companyDomainsCompany search: domains.
companyLinkedinUrlsCompany search: profile URLs.
companyKeywordsCompany search: words in the description.
companySpecialtiesCompany search: specialties.
companyIndustriesCompany search: industries.
companyTypesCompany search: organisation type.
companyHeadquartersCompany search: headquarters.
exactMatchMatch text filters exactly rather than approximately.
headcountMin / headcountMaxEmployee count range.
foundedYearMin / foundedYearMaxFounding year range.
yearsInPositionMin / MaxTime in the current role.
yearsAtCompanyMin / MaxTenure at the current employer.
daysSinceJobChangeMin / MaxTime since the last move.
requireWorkEmailKeep only rows with a work email.
requirePhoneKeep only rows with a mobile number.
requireAnyContactKeep only rows reachable by some route.
workEmailStatusesKeep only these verification statuses.
minCompanyHeadcountDrop rows whose company is smaller than this.
jobNameA label for the batch on your provider dashboard.
reportCreditsLog your remaining credits first.
requestsPerMinutePace the run under the provider rate limit.
jobTimeoutMinutesGive up waiting for a batch after this long.
skipNotFoundLeave misses and refusals out of the dataset.
maxResultsCap on rows, and on provider credits spent.
apiKeyYour own API key. Stored as a secret.

Example output

{
"found": true,
"mode": "enrich",
"query": "https://www.linkedin.com/in/example",
"workEmail": "j.snow@example.com",
"workEmailStatus": "DELIVERABLE",
"personalEmail": "jsnow@gmail.com",
"personalEmailStatus": "DELIVERABLE",
"phone": "+1 555-123-4567",
"phoneRegion": "US",
"workEmails": ["j.snow@example.com", "john.snow@example.com"],
"workEmailStatuses": ["DELIVERABLE", "CATCH_All"],
"personalEmails": ["jsnow@gmail.com"],
"phones": ["+1 555-123-4567"],
"phoneRegions": ["US"],
"firstName": "John",
"lastName": "Snow",
"fullName": "John Snow",
"headline": "Head of Sales Operations at Example Inc",
"jobTitle": "Head of Sales Operations",
"jobStartedAt": "2022-03-15T00:00:00Z",
"companyName": "Example Inc",
"companyDomain": "example.com",
"companyWebsite": "https://www.example.com",
"companyHeadcount": 250,
"companyFoundedYear": 2010,
"companyType": "Privately Held",
"companyIndustry": "Software Development",
"companyLinkedinUrl": "https://www.linkedin.com/company/example-inc",
"country": "United States",
"countryCode": "US",
"region": "California",
"city": "San Francisco",
"linkedinUrl": "https://www.linkedin.com/in/example",
"skills": ["Sales Operations", "CRM Management"],
"languages": ["English", "French"],
"universities": ["Stanford University"],
"custom": { "user_id": "12584" },
"error": null,
"raw": { }
}

Frequently asked questions

What is waterfall enrichment and why does it find more?

Any single contact database has gaps, and they are not the same gaps. A waterfall asks one source, and if it comes back empty asks the next, and the next, until something answers or the list runs out. The hit rate is therefore the union of every source rather than the coverage of the best one. The cost of that is time: the run waits on a chain of upstream lookups instead of a single query, which is why enrichment here is a batch job you wait a few minutes for rather than an instant response.

What does an enrichment actually cost me?

On your own provider plan, one credit for a work email, three for a personal email and ten for a mobile number, charged when something is found. Asking for all three is fourteen credits a contact. That ratio is the thing worth knowing before you start, so the enrichFields input defaults to the work email alone and the run logs what it is about to look for. Separately, this actor charges per row written to the dataset.

What do I need to supply for an enrichment to work?

Either a professional network profile URL, or a first name and a last name together with a company domain or company name. A profile URL is markedly better: it raises the email hit rate by up to a fifth and the mobile number hit rate by up to three fifths, and it is what makes the full profile, job title, location, employer headcount and the rest come back with the result. Contacts carrying neither are refused before they are sent, so a half-filled CRM row costs you nothing.

What do the email statuses mean?

Deliverable means the address was verified and bounces about two percent of the time. High probability means the domain is catch-all so no server will confirm the individual mailbox, but the provider's own checks say it is likely real, at about nine percent. Catch-all is the same situation with less supporting evidence and a higher rate again. Invalid is very likely to bounce, and is already excluded from the best-address column. Filter on the status rather than assuming every returned address is equal.

What is reverse email lookup for?

Turning an address into a person. Sign-up forms, webinar lists and inbound demo requests often give you nothing but an email address and a first name, which is not enough to route, score or personalise anything. Reverse lookup returns the person and the company behind the address, so a list of raw addresses becomes a list of people with titles and employers.

How do the search filters combine?

Different filters are combined with each other: a job title filter and a headcount range both have to hold. Several values inside one filter are alternatives: three job titles means any of the three. A line beginning with a minus sign excludes that value instead of requiring it, which is how you say "at these two companies but not that subsidiary" in a single field. Numeric filters are ranges, and a range with neither end set is not sent at all.

When should I turn exact matching on?

For domains and profile URLs, always: an approximate match on a domain is meaningless. For company names and job titles, usually not. With it off the provider tolerates missing words, extra words and reordering, so "VP Sales" also finds "Vice President of Sales, EMEA". Matching is never case sensitive either way.

Why would I search rather than enrich?

They answer different questions and cost different amounts. Search finds people and companies you did not know about, from filters, and returns profiles without contact details. Enrichment takes people you have already identified and finds how to reach them. The normal pattern is to search first, look at what comes back, and enrich only the rows worth the credits.

How do I find people who recently changed jobs?

Set the maximum days since job change to ninety. Someone in their first quarter at a new company is still choosing tools, still has budget that has not been committed, and has not yet formed a preference. That filter is the reason the field exists, and it pairs well with a past employer filter when you want people who left a particular company.

What happens when a batch runs out of credits halfway?

This provider reports that as a job status rather than as an error, which is exactly how an abandoned batch gets recorded as a successful empty run in an integration that only reads HTTP status codes. This actor checks the job status, stops, and tells you the balance ran out, so you see the real reason rather than an empty dataset.

Do I need my own API key?

Yes. This actor does not include data access. You use your own key from FullEnrich, the provider whose contact enrichment API this actor calls, taken from the API page of your provider dashboard and pasted into the apiKey field, where it is stored as an Apify secret. Your own plan, credits and terms apply.

How much does a run cost?

Pricing is pay per result: you are charged for each record resolved into the dataset, and never for contacts the provider found nothing for, for inputs refused before they were sent, for rows dropped by the filters, or for duplicates. Apify platform usage is included in the per-result price. Your own provider credits are separate and billed by them.

Keyword map

contact enrichment API, waterfall enrichment, email finder API, work email finder, personal email finder, mobile phone number finder, cell phone enrichment, B2B contact data API, lead enrichment API, reverse email lookup, email to person lookup, people search API, prospect search API, company search API, firmographic search, job title search, seniority filter, job change alerts, job change data, technographic prospecting, CRM enrichment, lead list building, sales prospecting API, email verification status, bounce rate reduction, GDPR compliant enrichment