Finds a work email for each new lead in your Airtable table, trying Prospeo then Hunter, and writes it onto the row.

UsesAirtableHunterProspeo

Find work emails for new Airtable leads with Prospeo and Hunter

Every 15 minutes, the rows in your Airtable leads table that have not been processed yet are picked up and each lead's work email is looked for: first through Prospeo, matching on name and company, and only if that finds nothing through Hunter. Both offer free plans with a small monthly allowance.

Each row gets the email, its status and source written back, plus the job title and LinkedIn profile when Prospeo finds them, and is marked done. Anything the search did not find leaves the row's own value alone, so a LinkedIn link or email you typed in is never wiped. Only confident results are kept: a Prospeo email must come back verified, and a Hunter email must score highly and not sit on a catch-all domain. A lead with no confident email, or a row missing a first name, last name or domain, is marked for review rather than guessed at. Rows already enriched or marked for review are left alone afterwards, so nothing is looked up or paid for twice.

You need Prospeo, Hunter and Airtable connected, a leads table with name, company and domain columns plus columns for the email, its status and source, title, LinkedIn and enrichment status, and your Airtable base ID and table name filled in.

ScheduleRun every 15 minutes.Run every 15 minutes.
ValuesSet baseId to blank.Set baseId to blank.
ValuesSet tableName to Leads.Set tableName to Leads.
ValuesSet minScore to 90.Set minScore to 90.
AirtableAirtableList records in tableName. Save it as leadsResult.List records in tableName. Save it as leadsResult.
ValuesSet records to leadsResult.records.Set records to leadsResult.records.
Decisions & LoopsFor each record in records:For each record in records:
ValuesSet recStatus to record.fields["Enrichment Status"].Set recStatus to record.fields["Enrichment Status"].
Decisions & LoopsIf recStatus is not enriched and recStatus is not needs_reviewIf recStatus is not enriched and recStatus is not needs_review
Yes
ValuesSet recId to record.id.Set recId to record.id.
ValuesSet firstName to record.fields["First Name"].Set firstName to record.fields["First Name"].
ValuesSet lastName to record.fields["Last Name"].Set lastName to record.fields["Last Name"].
ValuesSet companyName to record.fields.Company.Set companyName to record.fields.Company.
ValuesSet companyDomain to record.fields.Domain.Set companyDomain to record.fields.Domain.
ValuesSet resolvedEmail to blank.Set resolvedEmail to blank.
ValuesSet emailStatus to not_found.Set emailStatus to not_found.
ValuesSet emailSource to none.Set emailSource to none.
ValuesSet title to record.fields.Title.Set title to record.fields.Title.
ValuesSet linkedin to record.fields.LinkedIn.Set linkedin to record.fields.LinkedIn.
Decisions & LoopsIf firstName is yes and lastName is yes and companyDomain is yesIf firstName is yes and lastName is yes and companyDomain is yes
Yes
ProspeoProspeoEnrich a person. Save it as prospeo.Enrich a person. Save it as prospeo.
ValuesSet prospeoFound to prospeo.found.Set prospeoFound to prospeo.found.
ValuesSet prospeoEmail to prospeo.email.Set prospeoEmail to prospeo.email.
ValuesSet prospeoStatus to prospeo.email_status.Set prospeoStatus to prospeo.email_status.
Decisions & LoopsIf prospeoFound is yes and prospeoEmail isn't blank and prospeoStatus is…If prospeoFound is yes and prospeoEmail isn't blank and prospeoStatus is…
Yes
ValuesChange resolvedEmail to prospeoEmail.Change resolvedEmail to prospeoEmail.
ValuesChange emailStatus to prospeoStatus.Change emailStatus to prospeoStatus.
ValuesChange emailSource to prospeo.Change emailSource to prospeo.
TextUse prospeo.job_title, or title if it is empty and save it as title.Use prospeo.job_title, or title if it is empty and save it as title.
TextUse prospeo.linkedin_url, or linkedin if it is empty and save it as linkedin.Use prospeo.linkedin_url, or linkedin if it is empty and save it as linkedin.
No
No steps
Decisions & LoopsIf resolvedEmail is blankIf resolvedEmail is blank
Yes
HunterHunterFind companyDomain lastNames email at firstName. Save it as hunter.Find companyDomain lastNames email at firstName. Save it as hunter.
ValuesSet hunterEmail to hunter.email.Set hunterEmail to hunter.email.
ValuesSet hunterScore to hunter.score.Set hunterScore to hunter.score.
ValuesSet hunterAcceptAll to hunter.accept_all.Set hunterAcceptAll to hunter.accept_all.
Decisions & LoopsIf hunterEmail isn't blank and hunterScore is greater than or equal to minScore…If hunterEmail isn't blank and hunterScore is greater than or equal to minScore…
Yes
ValuesChange resolvedEmail to hunterEmail.Change resolvedEmail to hunterEmail.
ValuesChange emailStatus to valid.Change emailStatus to valid.
ValuesChange emailSource to hunter.Change emailSource to hunter.
No
No steps
No
No steps
No
ValuesChange emailStatus to missing_input.Change emailStatus to missing_input.
ValuesSet finalStatus to needs_review.Set finalStatus to needs_review.
Decisions & LoopsIf resolvedEmail isn't blankIf resolvedEmail isn't blank
Yes
ValuesChange finalStatus to enriched.Change finalStatus to enriched.
No
No steps
TextUse resolvedEmail, or record.fields.Email if it is empty and save it as email.Use resolvedEmail, or record.fields.Email if it is empty and save it as email.
AirtableAirtableUpdate recId in tableName.Update recId in tableName.
Decisions & LoopsWait for 2 seconds.Wait for 2 seconds.
No
No steps