How a revenue stack fits together
Company names, people, internal property names and data volumes are left out. Stripe, Lusha and product-usage connections show the usual setup and are marked as assumed.
Five layers
A B2B SaaS go-to-market stack in five layers: prospecting and enrichment, engagement, systems of record, an automation layer that connects them, and a central data lake for reporting.
Clay, Lusha and website forms bring new companies and contacts into the CRM.
Aircall, Gong and Google Workspace capture calls, meetings and emails and log them against records.
HubSpot owns pre-sale, Planhat owns post-sale, the product holds usage and Stripe holds billing.
n8n sits in the middle, connecting systems through their APIs and filling gaps in native tooling.
Airbyte loads everything into an S3/Iceberg lake, dbt builds gold marts for Metabase and AI access.
Customer lifecycle through the stack
- 01Prospect sourced (Clay, Lusha, inbound form)
- 02Lands in the CRM and is routed to a rep (n8n)
- 03Outreach (Aircall, Gmail, sequences)
- 04Meeting booked (CRM scheduler and Calendar)
- 05Meeting recorded (Gong)
- 06Deal progressed in the CRM
- 07Closed-won customer handed to the CS platform
- 08Customer onboarded in the product
- 09Billed through Stripe
- 10CS team monitors health, usage and success plans
- 11Renewal, expansion or churn
- 12Every stage lands in the data lake for reporting
Identity & matching keys
- The CRM company ID is the main cross-system key; the CS platform stores it on each customer company.
- The product platform stores the CS platform's company ID. Product-to-CRM mapping is being built.
- Aircall contacts carry the CS platform contact ID.
- Gong and Aircall match calls and meetings to CRM records by email or phone number.
- The data lake joins everything on these IDs, plus email and phone, with crosswalk tables where direct links are missing.
All data flows
- Clay → HubSpotEnriched prospectsnative
- Lusha → HubSpotEmails & dialsnative
- Website forms → HubSpotLeadsnative
- Ad platforms → HubSpotDirect connection from Meta, Google, Reddit and LinkedIn advertising platforms to HubSpot.inbound
- HubSpot → n8nQualify & routeautomation
- Google Workspace ↔ HubSpotMeetings & emailsnative
- Aircall → HubSpotCall logsnative
- Aircall → n8nTranscripts → CS tasksautomation
- Planhat ↔ AircallContacts + CS IDnative
- Gong → HubSpotRecordings as notesnative
- Gong → n8nMeeting outcomesautomation
- n8n → PlanhatWon customers, tasksautomation
- HubSpot ↔ PlanhatCompany ID linknative
- Product platform → PlanhatUsage (assumed)native
- Stripe → PlanhatRevenue (assumed)native
- Planhat → AirbyteHubSpot, Planhat, Gong, Aircall, product and Stripe all sync into the lake via Airbyte.batch ELT
- Airbyte → Data lakeLoadbatch ELT
- Data lake → dbtRaw → goldbatch ELT
- dbt → MetabaseDashboardsoutbound
- dbt → AI access (MCP)Gold tablesoutbound
- Data lake → n8nThin return path: extracts exported via Drive, then n8n, for one-off migrations and backfills.automation