Y13 — Sales Pipeline & CRM Config (HubSpot)
Asset: Y13 | Workstream:
[GTM]| Ownership:[SO]| Owner: Sagar Status: drafted | The substrate the A-series acts on (A2 routing, A5 trigger, G5discovery_report_url).Purpose: The HubSpot deal stages + custom properties + pipeline definition that the Y0 funnel and the A-series automation depend on. Field names here are reconciled against the real code in
apps/crm-automations/so A1/A2/A5/G5 references resolve.
1. Pipeline: "SnowOps Sales Pipeline"
Stages map 1:1 to the Y0 §4 funnel. The A5 discovery
trigger fires on the transition into Qualified (apps/crm-automations/src/discovery-trigger/action.ts
header: "Trigger: HubSpot Workflow on Deal stage change → Qualified").
| # | Stage | Funnel (Y0) | Automation fired | Nurture (Y10) |
|---|---|---|---|---|
| 1 | New | Target | A1 enrich (contact) | — |
| 2 | Contacted | Outreach | Y4 sequence; A2 scored/routed | §3 no-response revival |
| 3 | Qualified | Outreach→Audit | A5: dispatch G4 + send offer email | — |
| 4 | Audit Running | Discovery Audit | G4 run; G5 writes discovery_report_url |
§1 post-audit |
| 5 | Findings Reviewed | Findings Review | — (Y5 call) | — |
| 6 | Proposal Sent | Proposal | A3 renders proposal | §2 post-proposal |
| 7 | Negotiation | Close | — | — |
| 8 | Closed Won | Close→Onboard | A4 kickoff webhook → B1 | — (Y11 handoff) |
| 9 | Closed Lost | — | — | §4 lost-deal re-engagement |
Post-onboarding (Customer / Expansion, Y11) is tracked in a separate "Customer" pipeline or via deal-create for expansions — not in the sales pipeline above.
2. Custom deal properties (reconciled with A5 + G5)
These exact names are read/written by
discovery-trigger/action.ts(REQUIRED_DEAL_PROPERTIES+patchDeal). Do not rename without updating the code.
| Property | Type | Written by / read by | Notes |
|---|---|---|---|
dealname |
string | standard | |
company_name |
string | A5 reads | client name (slugified for client_name) |
contact_email |
string | A5 reads | offer-email recipient |
contact_firstname |
string | A5 reads | offer-email personalization |
discovery_tenant_id |
string (GUID) | A5 reads (validates GUID) | G4 dispatch input |
discovery_subscription_id |
string (GUID) | A5 reads (validates GUID) | G4 dispatch input |
discovery_subscription_display_name |
string | A5 reads | G4 dispatch input |
discovery_status |
enum: (empty)/triggered/complete |
A5 reads + writes triggered |
guards re-fire |
discovery_triggered_at |
datetime | A5 writes | timestamp |
discovery_report_url |
string (URL) | G5 writes | the delivered audit PDF link |
package |
enum: Quick-Win/Baseline/Advanced | sales sets | drives Y6/A3 |
target_framework |
enum: SOC2/ISO27001/HIPAA/PCI | sales sets | proposal + Y7 |
audit_deadline |
date | sales sets | timeline driver |
num_subscriptions / num_environments / has_aks / greenfield |
various | sales sets | Y2 price gates |
project_fee / monthly_retainer |
number | sales sets | proposal commercial |
loss_reason |
enum | sales sets on Closed Lost | Y10 §4 |
3. Custom contact / company properties (reconciled with A1 + Y3)
A1 enrichment writes the HubSpot-standard names via
lead-enrichment/property-map.ts:firstname,lastname,jobtitle,hs_linkedin_url,company,industry,country. The Y3 ICP fields are additional custom properties layered on top.
| Property | Source | Used by |
|---|---|---|
firstname / lastname / jobtitle / hs_linkedin_url |
A1 (standard) | Y4 tokens |
company / industry / country |
A1 (standard) | A2 scoring |
vertical |
Y3 seed list | A2 (+30 if in {SaaS,FinTech,HealthTech,Cloud-Native}) |
funding_stage |
Y3 | A2 (+20 if Series A–pre-IPO) |
cloud_primary |
Y3 | A2 (+15 if Azure) |
ci_platform |
Y3 | A2 (+5 if GitHub) |
buying_signal |
Y3 | Y4 {{signal}} |
signal_tier |
Y3 | A2 (A/B/C → +25/+15/+5) |
lead_source |
Y3 | reporting |
icp_score |
A2 writes | routing (≥80 ICP / 50–79 near / <50 out) |
icp_band |
A2 writes | enum: ICP / Near-ICP / Out-of-ICP |
routed_to |
A2 writes | Sagar / Nidhi / nurture |
4. A-series field-reference resolution (the DoD)
| Automation | Reads/writes | Resolves against |
|---|---|---|
| A1 | writes firstname/lastname/jobtitle/hs_linkedin_url/company/industry/country |
§3 ✓ |
| A2 | reads §3 ICP props; writes icp_score/icp_band/routed_to |
§3 ✓ |
| A5 | reads §2 REQUIRED_DEAL_PROPERTIES; writes discovery_status/discovery_triggered_at |
§2 ✓ (verified against action.ts) |
| G5 | writes discovery_report_url |
§2 ✓ |
| A4 | reads deal on Closed Won → B1 |
§1 stage 8 ✓ |
5. Reporting / dashboards
Instrument the Y0 §7 metrics: - Positive-reply rate by Y4 sequence + subject line. - Stage conversion rates (audit-accepted, review-booked, proposal→close). - Retainer renewal rate (Y11).
Definition of Done (Y13)
- Stages + properties documented. (Met — §1–§3.)
- A2/A5/G5 field references resolve against the defined schema. (Met — §4; A5 verified against
discovery-trigger/action.ts, A1 againstlead-enrichment/property-map.ts.) - Built in the HubSpot account (Sagar — the config task).
Sign-off
- Reviewer: _ | Date: _ | Result: PASS / FAIL