Automate a sales-to-CS handoff when a HubSpot deal closes won using Make
Prerequisites
- Make account (any plan — webhook triggers work on the Free plan)
- HubSpot connection configured in Make via OAuth
- Slack connection configured in Make (Bot Token with
chat:writescope)
Why Make?
Make (formerly Integromat) provides a visual scenario builder with native HubSpot and Slack modules. If your team already uses Make for other automations, adding a CS handoff scenario takes under 30 minutes. The drag-and-drop interface makes it easy for non-technical users to modify routing rules or add steps.
The main trade-off is polling speed. Make's Free plan polls every 15 minutes; the Core plan ($29/mo) supports 1-minute intervals. If near-instant handoff notifications are critical, consider the n8n (webhook-based) or code approaches instead.
How it works
- Watch Deals module polls HubSpot for recently updated deals on a schedule
- Filter passes only deals that moved to Closed Won
- HTTP modules fetch full deal details, associated contacts, and the deal owner's name
- Slack module posts a formatted handoff message to the CS channel
- HTTP module creates an onboarding task in HubSpot assigned to the CS rep
Step 1: Set up the HubSpot deal trigger
Create a new scenario. Add a HubSpot CRM module -> Watch Deals:
- Connection: Your HubSpot OAuth connection
- Watch: Updated Deals
- Pipeline: Select your pipeline (or leave blank for all pipelines)
This polls HubSpot for recently updated deals. The module emits one bundle per updated deal.
On the Free plan, Make polls every 15 minutes. On the Core plan, you can set it to 1 minute. For near-instant delivery, use a webhook-based approach with Custom Webhook + HubSpot workflow.
Step 2: Filter for Closed Won
Add a Filter between the trigger and the next module:
- Condition:
dealstageequalsclosedwon
Only deals that moved to Closed Won pass through. All other deal updates are discarded without consuming additional credits.
Step 3: Fetch full deal details
The Watch Deals module may not return all properties you need. Add an HTTP module:
- URL:
https://api.hubapi.com/crm/v3/objects/deals/{{deal_id}}?properties=dealname,amount,closedate,hubspot_owner_id,contract_length,description&associations=contacts - Method: GET
This returns the full deal record with associated contact IDs.
Step 4: Fetch the primary contact
Add another HTTP module to get the primary contact's details:
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/{{contact_id}}?properties=firstname,lastname,email,phone,jobtitle,company - Method: GET
Map contact_id from the associations array in the previous step's output.
Step 5: Fetch the sales rep name
Add an HTTP module to resolve the deal owner:
- URL:
https://api.hubapi.com/crm/v3/owners/{{hubspot_owner_id}} - Method: GET
Step 6: Send Slack notification
Add a Slack module -> Create a Message:
- Channel:
#cs-handoffs - Text:
:tada: *New Closed-Won Deal — CS Handoff*
*Deal:* {{dealname}}
*Value:* ${{amount}}
*Sales Rep:* {{owner_firstName}} {{owner_lastName}}
*Close Date:* {{closedate}}
*Contract Length:* {{contract_length}}
*Primary Contact:*
{{contact_firstName}} {{contact_lastName}} ({{contact_jobtitle}})
📧 {{contact_email}}
📞 {{contact_phone}}
<https://app.hubspot.com/contacts/YOUR_PORTAL_ID/deal/{{deal_id}}|View Deal in HubSpot>For Block Kit formatting, use Slack -> Make an API Call:
- URL:
/chat.postMessage - Method: POST
- Body: JSON with
channel,text, andblocksarray
Step 7: Create a HubSpot task
Add an HTTP module to create an onboarding task:
- URL:
https://api.hubapi.com/crm/v3/objects/tasks - Method: POST
- Body type: Raw JSON
{
"properties": {
"hs_task_subject": "Onboarding: {{dealname}}",
"hs_task_body": "New closed-won deal ready for CS onboarding.\n\nDeal: {{dealname}}\nValue: ${{amount}}\nSales Rep: {{owner_firstName}} {{owner_lastName}}\nContact: {{contact_email}}",
"hs_task_status": "NOT_STARTED",
"hs_task_priority": "HIGH",
"hubspot_owner_id": "CS_REP_OWNER_ID",
"hs_timestamp": "{{formatDate(now; 'YYYY-MM-DDTHH:mm:ss.SSSZ')}}"
},
"associations": [
{
"to": { "id": "{{deal_id}}" },
"types": [{ "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 204 }]
}
]
}Replace CS_REP_OWNER_ID with your CS rep's owner ID.
The association type ID 204 links a task to a deal. Use 1 for contact associations. These are HubSpot-defined — check the associations API docs for the full list.
Step 8: Add error handling and activate
- On each HTTP module: add a Resume error handler with 10-second delay
- On the Slack module: add a Break error handler for later retry
- Enable email notifications for failed executions
- Click Run once to test (move a test deal to Closed Won)
- Toggle the scenario to Active
Troubleshooting
Common questions
Can I use a webhook trigger instead of polling for faster notifications?
Yes. Replace the Watch Deals module with a Custom Webhook module. In HubSpot, create a Workflow that sends a webhook POST to your Make webhook URL when a deal enters Closed Won. This gives near-instant delivery instead of the 1-15 minute polling delay.
How do I handle multiple pipelines?
Leave the Pipeline field blank in the Watch Deals module to monitor all pipelines. The Filter checks for closedwon regardless of pipeline. If different pipelines use different CS teams, add a Router module after the deal fetch to branch by pipeline ID.
What happens if Make is down when a deal closes?
Missed polling intervals are caught on the next run — Make tracks the last processed timestamp. However, if Make is down for longer than your polling interval, you may see a batch of deals processed at once. Add rate limiting on the Slack module to avoid flooding the channel.
Cost and credits
- Free plan: 1,000 credits/month. This scenario uses approximately 6 credits per closed-won deal (1 trigger + 1 deal fetch + 1 contact fetch + 1 owner fetch + 1 Slack + 1 task). If you close 10 deals/month, that's ~60 credits.
- Core plan: $29/month. Required if you need faster polling or the Code module for CS rep routing logic.
Next steps
- Dynamic CS routing — add a Code module that maps deal size, industry, or region to the correct CS rep owner ID
- Onboarding checklist — use a Router to create multiple tasks in parallel (kickoff call, intro email, account setup)
- Welcome email — add a step to send a welcome email to the primary contact via the HubSpot transactional email API
- Slack thread — post the initial notification, then reply in-thread with the full contact list and sales notes
Looking to scale your AI operations?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.