Turn Gmail sales inquiries into HubSpot contacts with Slack alerts

When a sales inquiry hits your Gmail, Geni creates the HubSpot contact, files a note with the email, and pings the sales team in Slack.

Agentic Task
GmailHubSpotSlackSalesOperationsLead EnrichmentNotifications & AlertsData Sync

Build me an agent workflow that turns inbound sales inquiries in my Gmail into HubSpot contacts and Slack alerts so nothing slips through.

Trigger: poll Gmail for new emails (gmail / new_email) on the connected mailbox. Skip any message that already has the Inbound Lead label so reruns do not double-process.

For each new message, call Gmail Get a Message to read the full body and headers. Then classify the email. It counts as an inbound sales inquiry if the sender is asking about pricing, requesting a demo, asking how the product works, or proposing a partnership. Internal threads, replies in existing conversations I started, automated notifications, newsletters, and cold outbound pitches sent to me do not count. If the email is not an inquiry, stop and do nothing.

If it is an inquiry, extract the sender's full name (split into first and last), email address, company name (use the email domain if no company is stated), and a one-sentence summary of what they want.

Then call HubSpot Create Contact with email, firstname, lastname, company, and lifecyclestage set to lead. Capture the new contact id from the response.

Next, call HubSpot Create Note associated with that contact id. The note body should contain: the one-sentence summary, the original email subject, and the first 500 characters of the email body as a snippet.

Then call Slack Send a Message to the #inbound-leads channel. The message should include the contact's name, company, the one-line summary, a link to the Gmail thread, and a link to the new HubSpot contact record. Format it as a clean card so the sales team can grab it on the go.

Finally, call Gmail Modify Message Labels to add the Inbound Lead label to the original message so it does not get processed again and the inbox stays tidy.

If any step fails (HubSpot rejects the contact, Slack post fails, etc.), log a clear error and do not apply the Inbound Lead label, so the message will be retried on the next run.

Additional information

What does this prompt do?
  • Watches your Gmail inbox for new emails and reads each one to decide if it is a real inbound sales inquiry (pricing, demo, partnership, etc.) versus normal correspondence.
  • For inquiries, extracts the sender's name, email, company, and a one-line summary, then creates a HubSpot contact with lifecycle stage set to lead.
  • Files a HubSpot note on that contact with the email summary and the original snippet so reps have the full context.
  • Posts a card to your #inbound-leads Slack channel with the contact name, company, summary, Gmail thread link, and HubSpot contact link.
  • Applies a Gmail Inbound Lead label to the message so the inbox stays tidy and the same email never gets processed twice.
What do I need to use this?
  • A Gmail account connected to General Input with permission to read messages and modify labels.
  • A HubSpot account with permission to create contacts and notes.
  • A Slack workspace and a channel like #inbound-leads where the sales team can be pinged.
  • A Gmail label called Inbound Lead (or any label name you prefer to use as the marker).
How can I customize it?
  • Tighten or loosen the inquiry classifier (for example, only flag emails that explicitly ask for pricing or a demo, or include partnership and recruiter outreach as separate buckets).
  • Change the Slack destination from a channel ping to a DM to the on-call AE, or route by territory using the sender's company domain.
  • Adjust the HubSpot fields you populate (lifecycle stage, lead source, owner) and add a follow-up task assigned to the rotating rep.

Frequently asked questions

How does the agent know an email is actually a sales inquiry and not regular correspondence?
The agent reads the full message body and classifies intent. It looks for buyer signals like asking about pricing, requesting a demo, asking how the product works, or proposing a partnership. Newsletters, cold pitches to you, internal threads, and replies to existing conversations are skipped.
What stops the same email from being processed twice?
Once an email is handled, the agent applies a Gmail Inbound Lead label to it. The trigger filters out anything that already has the label, so reruns and overlapping polls do not create duplicate HubSpot contacts.
What if the sender already exists as a HubSpot contact?
You can tell the agent to look up the contact by email first and, if found, just add the note and Slack alert instead of creating a duplicate. The default prompt creates the contact, but the workflow author will let you switch to upsert behavior.
Can I send the Slack alert to a private channel or a DM instead?
Yes. Swap the channel name in the prompt for any channel the connected Slack user can post to, or use a user ID to DM a specific AE. The Send a Message operation handles all three.
Does this work with Google Workspace shared inboxes like sales@?
Yes, as long as the connected Gmail account has access to that mailbox. Point the trigger at the inbox you actually want monitored. Most teams connect the dedicated sales address.

Stop letting inbound leads sit in someone's inbox.

Connect Gmail, HubSpot, and Slack once, and Geni captures every real sales inquiry within minutes of it landing.