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.
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.
FAQs
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?
Related templates
Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.
Every couple of hours we find the chats your team never answered, email those visitors a real reply, and hand the sensitive ones to a support lead.
Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
Score last week's finished live chats against one rubric, let an AI grader draft the notes with quotes, and send coaching straight to the agent.
Every proposal you have ever submitted in one searchable archive, with the closest past answers lined up against each question in a new RFP.
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.