Post a Slack alert when a new HubSpot deal is created

Every time a deal is created in HubSpot, drop a formatted card into your sales Slack channel so the whole team sees the win without anyone announcing it.

Deterministic Code
HubSpotSlack BotSalesNotifications & Alerts
PromptCreate

Build a code workflow that posts a formatted Slack card to our sales channel every time a new deal is created in HubSpot, so the team gets shared visibility on wins without anyone manually announcing them.

Trigger: incoming webhook from HubSpot on the deal.creation event. The webhook payload includes the deal's objectId, which is what the workflow uses to load the full record.

Steps:

1. Parse the webhook payload and pull out the new deal's objectId.

2. Call HubSpot Get Deal for that objectId. Request the properties dealname, amount, dealstage, pipeline, hubspot_owner_id, and closedate. Include associations to contacts and companies so the primary contact and company come back in the same response.

3. If the deal has an associated company, resolve its name and domain. If it has an associated contact, resolve the contact's first name, last name, and email. If hubspot_owner_id is set, resolve the owner's name and email so the message can credit them.

4. Pick a leading emoji based on the amount band. Default thresholds: under 5,000 is a small deal (use a small emoji like a seedling), 5,000 to 49,999 is mid (use a chart-rising emoji), 50,000 and above is big (use a rocket or money-bag emoji). Make these thresholds easy to edit at the top of the workflow.

5. Format a deterministic Slack message using Block Kit. The card should include: a header line with the band emoji and deal name, the amount formatted with currency and thousands separators, the pipeline stage label, the deal owner's name, the primary contact's name and email, the company name and domain, and a button or link that deep-links to the deal in HubSpot at https://app.hubspot.com/contacts/{portalId}/deal/{dealId}. Fall back gracefully if any of these fields are missing rather than printing 'undefined'.

6. Use Slack Bot Send a Message to post the formatted card to a configurable channel (default to the sales channel ID stored as a workflow variable). Set unfurl_links and unfurl_media to false so the HubSpot link does not balloon the message.

Keep the flow strictly deterministic. No LLM calls. No retries beyond standard transient-error handling. If the HubSpot fetch fails, log and exit cleanly so we do not double-post on retry.

Expose the following as configurable variables: Slack channel ID, currency code (default USD), small/mid/big amount thresholds, and the HubSpot portal ID used to build the deep link.

Additional information

What does this prompt do?
  • Listens for HubSpot's deal.creation webhook and fires the moment a new deal is created.
  • Loads the full deal from HubSpot with its associated primary contact and company.
  • Posts a formatted card to a configurable Slack channel with deal name, amount, stage, owner, contact, company domain, and a deep link back to HubSpot.
  • Adds an emoji band by deal size (small, mid, big) so the channel stays skimmable at a glance.
What do I need to use this?
  • A HubSpot account with a private app or OAuth connection that includes crm.objects.deals.read, crm.objects.contacts.read, and crm.objects.companies.read.
  • A Slack workspace with the Slack Bot integration connected and chat:write (plus chat:write.public if posting to channels the bot has not joined).
  • The Slack channel ID where new deal alerts should land (for example, your #sales or #wins channel).
  • A HubSpot webhook subscription on the deal.creation event pointed at the workflow's webhook URL.
How can I customize it?
  • Change the destination channel, or fan out to multiple channels based on deal owner or pipeline.
  • Tune the emoji bands by editing the amount thresholds for small, mid, and big deals.
  • Add a filter so only deals above a minimum amount or in a specific pipeline trigger a post.
  • Extend the card with extra HubSpot properties like close date, deal type, or source.

FAQs

Does this work with HubSpot's free tier?
Yes. HubSpot's deal.creation webhook is available on Free and paid tiers through a private app or developer app with the crm.objects.deals.read scope.
Will the bot post in private channels?
Yes, as long as the Slack bot has been invited to the private channel. For public channels, the chat:write.public scope lets the bot post even without joining.
What if the deal has no contact or company associated yet?
The workflow renders the card with whatever associations exist and skips fields that are missing, so a bare deal still posts cleanly.
Can I prevent test or low-value deals from triggering the alert?
Yes. Add a guard at the top of the workflow that checks the deal's amount, pipeline, or a custom property and exits early if the deal does not qualify.
Is this a code workflow or an agent?
Code. Every step is deterministic: receive the webhook, fetch the deal, format the message, post it. There is no reasoning or judgement involved, so a code workflow is faster and cheaper than an agent.

Related templates

Chase past-due JobNimbus invoices with escalating emails

Every weekday, find every unpaid JobNimbus invoice, email each customer one reminder that gets firmer as it ages, and post a receivables summary to Slack.

JobNimbus
Gmail
Slack Bot
Agentic Task
Flag at-risk students in Canvas before they fall behind

Every weekday at 7am, your active courses are checked for missing work, silent logins, and slipping grades, with a ranked list sent to your advising channel.

Canvas
Google Sheets
Slack Bot
Agentic Task
Catch Jira service desk tickets before their SLA runs out

Every hour, find the tickets closest to breaching, leave a nudge on each one, and post a ranked at-risk list to your support channel.

Jira Service Management
Slack Bot
Agentic Task
Send Canvas students a kind nudge about missing work

Every weekday afternoon, each student who is behind gets a warm, personal message in their Canvas inbox listing exactly what they owe.

Canvas
Slack Bot
Agentic Task
Weekly Canvas grading backlog report in Slack and Sheets

Every Monday at 8am, see exactly which assignments have work waiting, sorted worst first, posted to Slack and logged to a spreadsheet.

Canvas
Slack Bot
Google Sheets
Deterministic Code
Revoke Bitwarden access when someone leaves in BambooHR

Every weekday morning we compare your password vault against your HR records and suspend access for anyone who has already left.

Bitwarden
BambooHR
Slack Bot
Agentic Task

Make every new deal a team moment.

Connect HubSpot and Slack once, and Geni posts a clean win card the instant a deal is created.