Auto-enrich new HubSpot contacts with Tavily company news
When a new contact lands in HubSpot, an agent pulls funding, hiring, and product news from the past 90 days, writes a summary to the record, and pings the owning rep in Slack.
Build me an agent workflow that enriches every new HubSpot contact with fresh company news from the web and pings the owning sales rep in Slack.
Trigger: when a new contact is created in HubSpot. Use HubSpot's outgoing contact-creation webhook so the workflow runs the moment the contact lands.
Step 1, gate on the email domain. If the contact's email is on a personal-email blocklist (gmail.com, yahoo.com, outlook.com, hotmail.com, icloud.com, aol.com, proton.me, protonmail.com, gmx.com, live.com, msn.com), exit immediately. Do not call Tavily, do not update HubSpot, do not Slack. Log a one-line reason and stop. Expose the blocklist as a workflow config so the user can edit it.
Step 2, identify the company. Read the contact's associated company record from HubSpot for the company name and domain. If no company is associated, fall back to the email domain (everything after the @) as the company identifier.
Step 3, research with Tavily Search. Run several targeted searches against the past 90 days, one per signal type, instead of one giant query. Use Tavily's Search action with search_depth=advanced, time_range or start_date set to 90 days ago, topic=news where appropriate, and max_results around 5 per search. Cover these signals: recent company news and press, funding rounds and investments, hiring sprees and notable role openings, and product launches or major announcements.
Step 4, clean and summarize. Dedupe results by URL and by near-identical headlines. Drop anything dated older than 90 days. Compose: a 2 to 3 sentence company_summary, a recent_news list of 3 to 5 bullet headlines (each with date and source link), and a signal_score from 0 to 100 weighted as funding > hiring > product launches > general press. Set last_enriched_at to the current timestamp.
Step 5, update the contact. Call HubSpot's Update Contact action and write to four custom contact properties: company_summary, recent_news, signal_score, last_enriched_at. If those properties don't exist, surface a clear setup error telling the user to create them as custom contact properties (text, long text, number, datetime) before running again.
Step 6, notify Slack. Call Slack Send a Message and post into the channel mapped to the contact's HubSpot owner. Let the user configure the owner-to-channel map during setup with a default fallback channel for unmapped owners. Message body: one headline line (New contact at <Company>, score <signal_score>/100), 2 to 3 top headlines as bullets with source links, and a direct link back to the HubSpot contact record.
Quiet defaults: if Tavily returns nothing meaningful in the last 90 days, still write last_enriched_at and a short 'no recent signals' summary back to HubSpot, but skip the Slack ping so the channel doesn't get noised with empty briefings. Make the whole workflow idempotent so re-running on the same contact is safe.
Additional information
What does this prompt do?
- Watches HubSpot for new contacts and runs the moment one is created.
- Searches the web for fresh signals about their company: funding rounds, hiring sprees, product launches, and press mentions from the last 90 days.
- Writes a clean summary, top headlines, and a simple signal score back to the contact record so reps see context the second they open it.
- Pings the owning rep's Slack channel with the top headlines and a direct link back to the contact.
What do I need to use this?
- A HubSpot account where you can create a few custom contact properties.
- A Tavily account for live web research. The free tier (1,000 monthly credits) is plenty to start.
- A Slack workspace and the channel where you want briefings to land.
- An email blocklist of personal domains (gmail.com, yahoo.com, etc.) so we skip non-business contacts. We ship a sensible default you can edit.
How can I customize it?
- Change the 90-day lookback to a tighter or wider window depending on how recent signals need to be.
- Edit the personal-email blocklist so only true B2B contacts get enriched.
- Map HubSpot owners to specific Slack channels, or DM the owner directly instead of posting to a shared channel.
- Reweight the signal score so funding, hiring, or launches count for more or less depending on your motion.
Frequently asked questions
What happens when a contact uses a personal email like gmail.com?
How fresh does the news stay?
Will this overwrite contact fields I already use?
What if the same article shows up on five different sites?
Can I run this on contacts that are already in HubSpot, not just new ones?
Stop opening Google before every new contact.
Connect HubSpot, Tavily, and Slack once and Geni hands your reps fresh company news the moment a new contact lands.