Auto-fill missing emails on new HubSpot contacts
When a new HubSpot contact is missing a real email, find it with Snov.io, verify it is deliverable, write it back, and queue them for outreach.
Build me an agent workflow that auto-enriches new HubSpot contacts with a verified business email from Snov.io, writes it back to HubSpot, and notifies my SDR team in Slack.
Trigger: a HubSpot outgoing webhook for the contact.creation event. The webhook payload includes the new contact's HubSpot ID and the properties that were set at creation time.
When the webhook fires, the agent should:
1. Read the contact's first name, last name, company domain, and email from the webhook payload (re-fetch the HubSpot contact if any of these are missing from the payload).
2. Decide whether the email is missing or looks like a placeholder. Treat the email as missing if it is empty, or if it matches obvious junk patterns such as role-based addresses (info@, sales@, noreply@, admin@, hello@, contact@), addresses that contain the word test/example/placeholder, addresses where the local part equals the company domain, or addresses on disposable domains. Otherwise treat the email as real and stop.
3. If first name, last name, and company domain are all present, call Snov.io Find Emails by Name and Domain to discover the best business email. This is an asynchronous Snov.io operation, so wait for the task to complete before reading the result.
4. Take the top candidate email returned by Snov.io and run it through Snov.io Verify Emails (also asynchronous) to confirm deliverability. Capture the verification status, SMTP result, and any confidence or score field Snov.io returns.
5. Only treat the email as a write-back candidate if Snov.io marks it as deliverable / valid (not catch-all, not risky, not invalid, not unknown). Make this threshold easy to adjust in the workflow instructions.
6. On a confirmed-good email: call HubSpot Update Contact to set the email property on the originating contact ID. Then send a Slack message via Send a Message to a configurable SDR channel that says something like "Enriched {First Last} at {company domain} → {email} (confidence: {score/label})." Then call Snov.io Add Prospect to List to add the prospect (name, email, company domain, HubSpot contact link) to a designated Snov.io list so they get picked up by the matching outbound campaign.
7. If no email is returned, or the verification result is risky/invalid/catch-all/unknown, do NOT update the HubSpot contact. Instead send a Slack message via Send a Message to the same SDR channel (or a separate manual-review channel if configured) that says something like "Could not auto-enrich {First Last} at {company domain} — needs manual review" with a link back to the HubSpot contact.
Configuration the workflow should expose: the Slack channel for enrichment notes, an optional separate Slack channel for manual-review flags, the Snov.io prospect list to add winners to, the verification statuses that count as "good enough" to write back, and the list of placeholder email patterns to treat as missing.
Important behavior: never overwrite an email that already looks real, always leave the contact untouched when the enrichment fails, and post exactly one Slack message per contact (either the enriched note or the manual-review note, never both). Operations to use: snov-io Find Emails by Name and Domain, snov-io Verify Emails, snov-io Add Prospect to List, hubspot Update Contact, slack Send a Message.
Additional information
What does this prompt do?
- Watches for every new HubSpot contact and spots the ones missing a real email or carrying an obvious placeholder.
- Looks up the prospect's business email using their first name, last name, and company domain, then double-checks that the email is actually deliverable.
- Writes the verified email back to the HubSpot contact, drops a short note in your SDR Slack channel with the confidence level, and adds the prospect to a Snov.io list so they get queued for the right outbound campaign.
- Flags any contact where no good email could be found so a human can handle it instead of cluttering your pipeline with bad data.
What do I need to use this?
- A HubSpot account where you can receive contact creation webhooks.
- A Snov.io account on a paid plan (the email finder and verifier are API-only).
- A Slack workspace with a channel for your SDR team.
- The name of the Snov.io prospect list you want new contacts dropped into.
How can I customize it?
- Change which patterns count as a placeholder email (for example info@, noreply@, anything with the word test, or any address whose local part matches the company domain).
- Raise or lower the deliverability bar before writing an email back to the contact, so risky or catch-all addresses get flagged instead of saved.
- Swap the Slack channel, change the message wording, or split alerts between an enrichment channel and a manual-review channel.
- Point the workflow at a different Snov.io prospect list for each segment, region, or campaign you run.
Frequently asked questions
What counts as a placeholder email?
Will this overwrite an email a rep already typed in?
What happens if Snov.io cannot find a verified email?
Does this work with HubSpot Free?
How quickly does this run after a contact is created?
Stop letting half-finished contacts sit in HubSpot.
Connect HubSpot, Snov.io, and Slack once, and every new contact gets a verified email or a clear flag for review.