Auto-enrich new HubSpot contacts with Findymail and ping RevOps

When a contact lands in HubSpot, fill the missing email or phone with Findymail, verify what's already there, and post a tight one-liner to RevOps in Slack.

Agentic Task
HubSpotFindymailSlackSalesOperationsLead EnrichmentData SyncNotifications & Alerts

Build an agent that auto-enriches every new HubSpot contact using Findymail and posts a tight one-line update to my RevOps channel in Slack.

Trigger: a HubSpot webhook subscription on the contact.creation event. When it fires, the agent should read the new contact's properties: first name, last name, email, phone, mobile phone, LinkedIn URL, and the associated company's website or domain (fall back to the company name if no domain is on the record).

Decide which lookups to run based on what's actually missing. Do not run any lookup whose inputs aren't present, and do not run lookups whose output field is already filled in.

Rule 1 - find the email. If the contact has a first name, a last name, and a company domain or website, AND the email field is empty, call Findymail Find Email by Name with the name and domain. If Findymail returns a verified address, use that as the new email value to write back.

Rule 2 - verify the existing email. If the contact already has an email AND HubSpot has no prior verification result on the record (for example, an email_verification_status property that is empty or set to 'unverified'), call Findymail Verify Email on that address. Capture the deliverability result (deliverable, risky, catch-all, role-based, undeliverable, or unknown). Do NOT verify an email that was just found in Rule 1, since Find Email by Name only returns already-verified addresses.

Rule 3 - find the phone. If the contact has a LinkedIn URL on the record AND both the phone and mobile phone fields are empty, call Findymail Find Phone Number with the LinkedIn URL. If a number comes back, use it as the new phone value.

Credit guardrails to honor: Findymail Find Email by Name only burns a finder credit on success, so it's safe to attempt whenever the inputs are present. Find Phone Number also only charges on success. Verify Email charges every attempt, so only call it when there's an email present that has never been verified before; never call it as a sanity check after a successful Find Email by Name.

Write-back step: if any of the three rules produced new data, call HubSpot Update Contact on the contact's id to write back, in one update, any of these that changed: email (from Rule 1), email_verification_status and a last_verified_at timestamp (from Rule 2), phone (from Rule 3). Do not touch fields that did not change. Never overwrite a value that was already present, with the single exception of writing the new verification status onto an existing email.

Slack heads-up: if at least one field was filled in or a verification result was captured, call Slack Send a Message to the RevOps channel I configure at setup (default #revops). Keep the message to ONE tight line per contact so a noisy day stays readable. Format:

<contact full name> at <company name> · <what was filled in, comma separated> · <risk flag if any>

Examples: 'Sarah Chen at Acme · added email, added phone' or 'Marcus Lee at Globex · verified email: RISKY (catch-all)' or 'Priya Shah at Initech · added email, verified prior email: UNDELIVERABLE'. Always include a link to the HubSpot contact record at the end of the line.

If nothing was filled in (no email found, no phone found, no verification run because the email was already verified or no email existed), skip the Slack post entirely. Silence is the right behavior.

Risk flagging in the Slack line: explicitly flag anything that came back as risky, catch-all, role-based, or undeliverable so RevOps can pull those contacts out of send lists before they ship. Deliverable results do not need a flag, just the word 'verified'.

Constraints: dedupe so the agent does not re-process the same contact id within 24 hours. Treat free-mail domains (gmail, outlook, yahoo, icloud, hotmail, proton) as 'no company domain' for Rule 1 and skip the email lookup. If Findymail returns nothing on any rule, that's fine - just don't include that field in the Slack line.

Additional information

What does this prompt do?
  • Watches HubSpot for newly created contacts so missing data gets filled in the moment a record is born, not at the end of the week.
  • Looks at what's actually missing on each contact and only runs the right lookup: find the work email when the name and company are known, verify an email that's never been checked, or grab a direct phone number when there's a LinkedIn profile.
  • Writes the new email, deliverability status, and phone number back onto the HubSpot contact so the record is always the source of truth.
  • Posts a single tight line to your RevOps Slack channel naming the contact and exactly what was filled in, and flags any emails that came back as risky or undeliverable.
  • Stays quiet when nothing changed so a busy inbound day does not turn into a noisy channel.
What do I need to use this?
  • A HubSpot account on a plan that supports new contact webhooks, with permission to read and update contacts.
  • A Findymail account with finder and verifier credits available.
  • A Slack workspace and the RevOps channel you want the updates posted in.
How can I customize it?
  • Change which Slack channel the updates go to, or split RevOps from a separate sales operations channel.
  • Adjust which fields count as missing (for example, also fill mobile phone, not just direct phone) and which HubSpot properties the agent writes back to.
  • Tighten or loosen what counts as risky: by default the message flags anything that comes back as catch-all, role-based, or undeliverable.

Frequently asked questions

Will this overwrite an email address my rep already typed in?
No. The agent only fills the email field when it is empty. If an address is already there, the agent verifies it instead of replacing it.
Does the Slack channel get spammed every time a contact is created?
No. The agent stays silent when nothing was filled in. A Slack message only goes out when an email, phone number, or verification result was actually added to the record.
How does it decide when to verify versus when to look up a new email?
If the contact has no email but has a name and a company website, the agent looks one up. If the contact already has an email that has never been verified, the agent verifies it. It does not do both.
Will I burn credits on every single new contact?
Finder credits only get charged when Findymail actually finds an email or phone, and the verifier only runs on contacts whose email has never been checked, so high-volume forms do not run up the bill for nothing.
Do I need a paid HubSpot plan?
You need a plan that supports webhooks for new contact events. HubSpot Free does not support these triggers, so a Starter plan or above is typically required.

Stop letting half-built contacts sit in your CRM.

Connect HubSpot, Findymail, and Slack once, and Geni finishes every new contact the second it lands.