Route new HubSpot contacts into the right MailForge nurture list

The moment a new contact lands in HubSpot, we sort them into the right MailForge list, tag them, and ping sales in Slack if they look hot.

Agentic Task
HubSpotMailForgeSlack BotSalesMarketingLead EnrichmentNotifications & AlertsData Sync
PromptCreate

Build me an agent workflow that routes brand-new HubSpot contacts into the right MailForge nurture list, and pings sales in Slack when the contact looks like an enterprise fit.

Trigger: a HubSpot webhook subscribed to the contact.creation event. When the webhook fires, take the contact id from the event and call HubSpot Get Contact to load these properties: email, firstname, lastname, company, lifecyclestage, industry, numemployees, hs_lead_status, hubspotscore, and hs_analytics_source.

Then run these steps in order:

1. Skip if suppressed. Call MailForge List Suppressions and check whether the contact's email appears in the results. If it does, stop immediately with a "skipped: suppressed" outcome. Do not upsert, do not add to a list, do not post to Slack. This step is critical so we never re-nurture someone who has opted out.

2. Upsert into MailForge. Call MailForge Create or Update Contact keyed on the contact's email address. Carry over firstname and lastname, and set two tags on the contact: an industry tag of the form industry:<value> (lower-cased, or industry:unknown if the HubSpot property is blank) and a source tag of the form source:<value> based on hs_analytics_source (lower-cased, or source:unknown if blank). This gives marketing a way to segment inside MailForge later without a second sync.

3. Pick a nurture list. Reason about which MailForge nurture list the contact belongs on using these default rules, and treat the list names as workflow inputs so they can be renamed later:

- If numemployees is 1000 or more, OR lifecyclestage is salesqualifiedlead, OR hubspotscore is 80 or higher, choose the Enterprise list.

- Else if lifecyclestage is lead or marketingqualifiedlead and the contact has a company set, choose the SMB Trial list.

- Else if lifecyclestage is subscriber or customer, choose the Newsletter Only list.

- Otherwise, fall back to Newsletter Only.

Then call MailForge Add Contact to List passing the contact email and the chosen list name.

4. Alert sales if hot. If the contact matched the Enterprise rule, post a message to Slack using the Slack Bot Send a Message operation (prefer the bot integration over the user integration for automated alerts). The target channel is a workflow input, defaulting to #sales-alerts. The message body should be about four short lines: the contact's full name, their company and industry on one line, their HubSpot score if present, and a permalink to the HubSpot contact of the form https://app.hubspot.com/contacts/<portalId>/contact/<contactId>. The HubSpot portal id is a workflow input.

At the end of every run, log a short summary: the contact email, whether they were suppressed, which MailForge list they landed on, and whether a Slack alert fired.

Workflow inputs the user should be able to edit without touching the prompt text: the Slack alert channel (default #sales-alerts), the HubSpot portal id used for permalinks, the four MailForge list names (Enterprise, SMB Trial, Newsletter Only, fallback), and the HubSpot score threshold that counts as hot (default 80).

Additional information

What does this prompt do?
  • The moment a new contact is created in HubSpot, we look them up and sort them into the right MailForge nurture list.
  • We check MailForge's suppression list first, so opted-out people never get re-added to a nurture flow.
  • Every contact is upserted into MailForge with tags that carry over their HubSpot industry and lead source.
  • When a contact looks like an enterprise fit, we post a short alert into your sales Slack channel with their name, company, and a link back to HubSpot.
What do I need to use this?
  • A HubSpot account you can install a webhook on for new contact events (Sales or Operations Hub tiers that support workflow webhooks).
  • A MailForge account with your nurture lists already set up (for example Enterprise, SMB Trial, and Newsletter Only).
  • A Slack workspace and a channel where sales should get hot-lead alerts.
How can I customize it?
  • Change the rules that decide who counts as a hot enterprise lead, for example the employee count, HubSpot score, or which lifecycle stages qualify.
  • Swap which nurture list each rule sends people to, or add new segments like a trial or partner list.
  • Pick a different Slack channel for the sales alert, or turn the alert off entirely if you only want the list routing.

Frequently asked questions

Does this work on HubSpot Free?
Webhook triggers on new contacts need a paid HubSpot tier that supports workflow webhooks. If you are on Free, we can switch the trigger to a scheduled check that catches new contacts every few minutes instead.
What happens if someone has already unsubscribed?
Before doing anything else, we check MailForge's suppression list. Anyone who has opted out is skipped, they are not re-added to a list, and no Slack alert fires.
Can I change the rules for which contact is enterprise versus SMB?
Yes. The rules live in plain English in the prompt, so you can rewrite them based on industry, company domain, custom HubSpot properties, or any other signal without touching code.
Will Slack get pinged for every single new contact?
No. The Slack alert only fires when a contact meets the hot rule. By default that means 1,000 or more employees, a sales qualified lifecycle stage, or a HubSpot score of 80 or higher.
What tags end up on the contact in MailForge?
We copy the HubSpot industry and original lead source onto each contact as tags, so your marketing team can filter and segment inside MailForge without a second sync.

Stop hand-sorting new HubSpot contacts into email lists.

Connect HubSpot, MailForge, and Slack once, and Geni routes every new contact the moment they are created.