{"slug":"analytics-infrastructure-roadmap","title":"Agency Analytics Stack: GHL + Instantly + N8N → Supabase → Metabase Dashboard","tags":["analytics","supabase","metabase","kpi","tracking"],"agent_summary":"Roadmap for building a unified analytics system that aggregates data from GHL, Instantly, and N8N cold SMS engine into Supabase, visualized through self-hosted Metabase for tracking CPL, CPA, CAC, and full-funnel KPIs.","trigger_phrases":["agency analytics setup","track cac across channels","ghl instantly analytics combined","metabase for agency kpis","supabase analytics dashboard","unified agency reporting","cost per acquisition tracking"],"runnable":false,"markdown":"## Agency Analytics Infrastructure Plan\n\n### Problem\n- Data is scattered across GHL, Instantly, Signal House, N8N, and Supabase\n- No single source of truth for funnel KPIs\n- Current analytics are unreliable (\"I don't even trust the analytics showing right now\")\n- Flying blind on actual CAC, CPL, booking rate, show rate\n\n### Key Metrics to Track\n| Metric | Definition |\n|--------|------------|\n| **CPL** | Cost Per Lead |\n| **CPA** | Cost Per Appointment |\n| **CAC** | Customer Acquisition Cost |\n| **LTV** | Lifetime Value |\n| **LTV:CAC Ratio** | Payback efficiency |\n| **Payback Period** | Months to recoup CAC |\n| **Booking Rate** | Interested → Booked |\n| **Show Rate** | Booked → Showed |\n| **Close Rate** | Showed → Closed |\n\n### Architecture\n\n```\nData Sources:\n├── GHL (pipeline stages, appointments, conversions)\n├── Instantly (email campaigns, reply rates)\n├── N8N SMS Engine (sends, deliveries, replies via Signal House)\n└── Iron Funnels (funnel submissions, page views)\n        ↓\n    Supabase (central database)\n        ↓\n    Metabase (self-hosted at analytics.ironops.xyz)\n        ↓\n    Dashboards & KPI tracking\n```\n\n### Implementation Approach\n1. **GHL → Supabase**: Server-side sync every 30 minutes (like a Conversions API for internal use)\n2. **Instantly → Supabase**: API pull for campaign stats\n3. **N8N SMS Engine → Supabase**: Already logging to Supabase (needs cleanup)\n4. **Metabase**: Self-hosted, connects directly to Supabase, visualizes everything\n\n### Priority Order\n1. Conversation AI (boost booking rate)\n2. No-show workflow (boost show rate)\n3. Onboarding flow (streamline delivery)\n4. **Analytics system** (track everything, make data-driven decisions)\n5. Scale volume\n\n### Key Insight\n> \"Before we crank volume even more, I want to make sure we're in KPI for reply rate, cost per lead, cost per customer. Mainly just cost per customer — that's the only thing that really matters. Everything else is vanity.\"\n","html":"<h2>Agency Analytics Infrastructure Plan</h2>\n<h3>Problem</h3>\n<ul>\n<li>Data is scattered across GHL, Instantly, Signal House, N8N, and Supabase</li>\n<li>No single source of truth for funnel KPIs</li>\n<li>Current analytics are unreliable (\"I don't even trust the analytics showing right now\")</li>\n<li>Flying blind on actual CAC, CPL, booking rate, show rate</li>\n</ul>\n<h3>Key Metrics to Track</h3>\n<p>| Metric | Definition |\n|--------|------------|\n| <strong>CPL</strong> | Cost Per Lead |\n| <strong>CPA</strong> | Cost Per Appointment |\n| <strong>CAC</strong> | Customer Acquisition Cost |\n| <strong>LTV</strong> | Lifetime Value |\n| <strong>LTV:CAC Ratio</strong> | Payback efficiency |\n| <strong>Payback Period</strong> | Months to recoup CAC |\n| <strong>Booking Rate</strong> | Interested → Booked |\n| <strong>Show Rate</strong> | Booked → Showed |\n| <strong>Close Rate</strong> | Showed → Closed |</p>\n<h3>Architecture</h3>\n<pre><code>Data Sources:\n├── GHL (pipeline stages, appointments, conversions)\n├── Instantly (email campaigns, reply rates)\n├── N8N SMS Engine (sends, deliveries, replies via Signal House)\n└── Iron Funnels (funnel submissions, page views)\n        ↓\n    Supabase (central database)\n        ↓\n    Metabase (self-hosted at analytics.ironops.xyz)\n        ↓\n    Dashboards &#x26; KPI tracking\n</code></pre>\n<h3>Implementation Approach</h3>\n<ol>\n<li><strong>GHL → Supabase</strong>: Server-side sync every 30 minutes (like a Conversions API for internal use)</li>\n<li><strong>Instantly → Supabase</strong>: API pull for campaign stats</li>\n<li><strong>N8N SMS Engine → Supabase</strong>: Already logging to Supabase (needs cleanup)</li>\n<li><strong>Metabase</strong>: Self-hosted, connects directly to Supabase, visualizes everything</li>\n</ol>\n<h3>Priority Order</h3>\n<ol>\n<li>Conversation AI (boost booking rate)</li>\n<li>No-show workflow (boost show rate)</li>\n<li>Onboarding flow (streamline delivery)</li>\n<li><strong>Analytics system</strong> (track everything, make data-driven decisions)</li>\n<li>Scale volume</li>\n</ol>\n<h3>Key Insight</h3>\n<blockquote>\n<p>\"Before we crank volume even more, I want to make sure we're in KPI for reply rate, cost per lead, cost per customer. Mainly just cost per customer — that's the only thing that really matters. Everything else is vanity.\"</p>\n</blockquote>\n"}