When to use it, when not to
Use it
- Use it when sales and customer success are different people or teams and a clear handoff moment is missing today.
- Use it when the deal pipeline has one Closed Won stage that reliably means a signed, active contract.
Skip it
- Do not use it if the same rep runs both sales and onboarding for a deal. Skip straight to a checklist, see customer-onboarding-003.
- Do not use it if you need a structured onboarding project record per deal. See customer-onboarding-005 (ticket-based) or customer-onboarding-038 (Enterprise custom object).
Prerequisites
Needs Sales Hub Professional and Marketing Hub Professional.
On per-hub plans, one of its steps belongs to another subscription: add to static list needs Marketing Hub Professional. Both are required to build it as written. On seat pricing the edition covers both.
- Property:
Onboarding Owner(internal nameonboarding_owner), object deal, field type HubSpot user. Why: stores who on CS is responsible, independent from the deal owner (sales rep) field. - Property:
CS Handoff Notes(internal namecs_handoff_notes), object deal, field type multi-line text. Why: gives the rep a place to leave context (special terms, technical requirements, promised dates) that the notification pulls in. - Property:
Onboarding Start Date(internal nameonboarding_start_date), object deal, field type date. Why: reporting anchor used by several other onboarding workflows. - A Customer Success team configured under Settings > Users &
Teams, or a fixed static list of CS reps, if you plan to use
Rotate record to ownerrather than a manually set owner. Why: the rotate action needs an explicit pool to draw from. - A static list "New Customers - Handoff Queue" for reporting.
Enrollment
| Trigger type | filter-based (deal property change). |
|---|---|
| Criteria | Deal stage is any of
Closed Won. |
| Re-enrollment | yes, on Deal stage becoming Closed Won
again (covers a deal that reopens and re-closes). Off for the same
closed-won value without a reopen in between, HubSpot workflows only
re-enroll on a genuine value change by default HubSpot re-enrolls a
record each time it goes from not matching to matching the re-enrollment
trigger, so a reopen followed by a new Closed Won qualifies and no
separate reopen event is needed
(https:// |
| Suppression / exclusions | skip deals where Deal Type is
Renewal or Amount is 0. Renewal-driven
handoffs belong in the renewal-expansion category, not here. |
Steps
- Trigger:
Deal stageis any ofClosed Won. - Set property value:
Onboarding Start Date= current date. - If/then branch:
Onboarding Owneris known- Yes: continue to step 4.
- No:
Rotate record to owner(pool = Customer Success team) to setOnboarding Owner.
- Create task: type "To-do", title "Onboarding handoff review -
{{deal.dealname}}", assigned to
Onboarding Owner, due in 1 business day, notes includeCS Handoff Notes. - Send internal notification email: to
Onboarding Owner, subject "New customer to onboard: {{deal.dealname}}", body includesCS Handoff Notesand a link to the deal record. - Add to static list: "New Customers - Handoff Queue".
Known pitfalls
- Re-enrollment on a deal that bounces between Closed Won and an earlier stage repeatedly can create duplicate handoff tasks. If that pattern happens in your pipeline, add a suppression check on an "Already handed off" boolean property instead of relying on re-enrollment alone.
Rotate record to ownerrequires the team to be configured in Settings first and distributes based on the pool's active members at run time Distribution is by per-action assignment count: every owner starts at zero, ties are broken randomly, then that order is kept, and the counts reset whenever owners are added to or removed from the action (https://knowledge.hubspot.com/ ).workflows/ assign-and-rotate-record-owners-using-workflows - Internal notification emails only reach HubSpot users with a seat. They will not reach an external onboarding partner's inbox, use a regular workflow "Send email" to an associated contact for that case instead.
- The static list used for reporting must match the workflow's enrollment criteria exactly, or the count in reporting will drift from actual handoffs.
- If
CS Handoff Notesis left blank by the rep, the notification email will look empty in that section. Consider making the field required at the Closed Won stage via a required-property gate on the pipeline stage (Sales Hub Professional stage requirements).
Test plan
- In a test portal, create a test deal in the relevant pipeline and move it to Closed Won.
- Open Automation > Workflows > this workflow > History, confirm the test deal enrolled within a minute.
- Check the deal record's Tasks panel for the handoff task, due the next business day.
- Confirm the internal notification email arrived in the test CS owner's inbox with the handoff notes populated.
- Confirm the deal appears in the "New Customers - Handoff Queue" static list.
The UAT script of this spec holds 4 cases: a negative case, one case per branch, the expected result of each and a sign-off sheet. It comes as Markdown and as a CSV for your spreadsheet.
Variants
- Create a ticket instead of a task for a structured onboarding project, see customer-onboarding-005.
- Branch by deal amount to route large deals to a dedicated onboarding specialist, see customer-onboarding-039 (Enterprise, hierarchical teams).
- Replace the internal notification email with a Slack message via the native Slack integration or a webhook (Data Hub Professional).
Build spec
trigger:
type: filter-based
property: dealstage
criteria:
- dealstage: is_any_of [closedwon]
- deal_type: not_equal renewal
- amount: greater_than 0
reenrollment: true
reenrollment_property: dealstage
build_actions:
- type: set_property_value
object: deal
property: onboarding_start_date
value: current_date
- type: if_then_branch
condition: onboarding_owner is_known
yes:
- goto: create_task
no:
- type: rotate_record_to_owner
pool: "Customer Success team"
sets_property: onboarding_owner
- id: create_task
type: create_task
task_type: to_do
title: "Onboarding handoff review - {{deal.dealname}}"
assigned_to: onboarding_owner
due: +1_business_day
notes_from_property: cs_handoff_notes
- type: send_internal_notification_email
to: onboarding_owner
subject: "New customer to onboard: {{deal.dealname}}"
body_includes: [cs_handoff_notes, deal_record_link]
- type: add_to_static_list
list: "New Customers - Handoff Queue"Files and install
| File | What it holds |
|---|---|
| PDF and Markdown | The spec as you read it here, with the YAML build spec at the end. |
| Properties JSON | Creates the fields in one API call. |
| Workflow JSON | Documents the build: the workflow in Automation API v4 format, switched off. |
| UAT script | The test cases, the expected results and a sign-off sheet, as Markdown and CSV. |
Take the PDF and build it by hand. One-click install comes with a category pack or the full library.
Install customer-onboarding-001
One email, and we tell you where this stands. When free installs open, that address is how you hear it first.
No card, no password, unsubscribe in one click.
Nothing deleted, enabled or enrolled.
customer-onboarding-001Spec version 2026-09