Start with one job and grow from there.
Free to start · No credit card required
singulacomp_onboarding_last_nudge_milestone property marks the last milestone
nudged), not in a local ledger file. A sweep can find several accounts at
once; handle each as an independent unit — a failure checking one account's
milestones is logged and skipped, never blocking any other account in the
same sweep.
{{customer_since_property}}) where that date falls within the last
{{onboarding_window_days}} days:GET /crm/v3/objects/companies/search
filterGroups: [
{ propertyName: "{{customer_since_property}}", operator: "GTE", value: <today - {{onboarding_window_days}}d> }
]
properties: ["name", "hubspot_owner_id", "{{customer_since_property}}",
"singulacomp_onboarding_last_nudge_milestone", "singulacomp_onboarding_last_nudge_at"]
hubspot_owner_id to the owning CSM's name and note
how many days into onboarding the account currently is.SELECT milestone, completed_at
FROM activation_milestones
WHERE account_id = :account_id
ORDER BY completed_at;
SELECT event_name, occurred_at
FROM product_events
WHERE account_id = :account_id
AND occurred_at >= now() - interval '{{onboarding_window_days}} days'
ORDER BY occurred_at;
| Milestone | What it means | Expected by |
|---|---|---|
| Workspace live | First login after signup | Day 1 |
| Core setup | Key integration or configuration completed | Day 3 |
| First activation event | The core "aha" action completed — the first time the account got real value | Day 7 |
| Team expansion | A second teammate invited and active | Day 14 |
| Full activation | Recurring usage across most of the last 14 days | Day 30 (or {{onboarding_window_days}}) |
<milestone> — the account is past that milestone's
expected day without completing it, but still inside the onboarding window.{{onboarding_window_days}} days total without full
activation, regardless of which earlier milestones did complete.singulacomp_onboarding_last_nudge_milestone already equals the
milestone this account is currently stalled at — it was nudged for this exact
stall on a prior run. Draft again only when the stalled milestone has changed
(the account moved past the previously-nudged one and is now stuck further
along, or regressed to an earlier open item) or the marker is missing.{{draft_channel}} for the owning CSM to review, edit, and
send.{{alert_channel}}, addressed to the owning CSM, with:singulacomp_onboarding_last_nudge_milestone to that milestone's name and
singulacomp_onboarding_last_nudge_at to now. This is the only HubSpot write —
never the deal stage, the owner, a plan, or a seat count.