Revenue · AOV · churn · MRR are read from our database (recorded orders + subscriptions); Purchase CVR · checkout completion come from PostHog. Database figures reflect what's been recorded — they can read low (even $0) in local / non-production environments where the dev DB is sparse, and may differ from the live-Stripe Sales card by webhook lag. Cross-check drift in Reconciliation.
Revenue · last 7 days Stripe · daily gross
Revenue drivers & friction Stripe revenue × PostHog funnel
Global visitor & purchase locations PostHog visitors × Stripe purchases
Conversion Funnel PostHog · events · proj 313971 · ◆ Vidalytics VSL
Sales Stripe · live /v1/charges
Rebills Stripe · renewals · /v1/invoices
First-renewal rate Stripe · cycle 2 · first renewal
Rebills calendar Stripe · daily renewals · this month
Recovery Database · subscription_events
Churn Database · subscription_events
Retention & LTV Database · subscription_events
Reconciliation Stripe canonical ↔ DB · GHL · PostHog · Meta
Data sources & timezones UTC canonical
All windows are computed in Pacific (America/Los_Angeles). Current window: —
| Source | Native timezone | Window translation | Alignment |
|---|---|---|---|
| PostHog · funnel | project: America/Chicago | toDateTime('…Z') → UTC (verified) | ✓ UTC |
| Stripe · sales / payments | UTC (unix epoch) | created[gte/lt] = unix seconds | ✓ UTC |
| MySQL · orders / subscriptions | UTC (app writes UTC Dates) | window instants vs occurred_at | ✓ UTC |
| GoHighLevel · reconciliation | location timezone | opps by createdAt (ISO / UTC) | ✓ UTC |
| Vidalytics · VSL retention | account tz · day granularity | dateFrom/dateTo = UTC date | ~ ±1 day |
| Meta · reconciliation | ad-account tz (reporting) | unix start/end_time | ~ acct-tz |
Every source receives the same UTC instant range; each translates it to its own format. The two ~ rows are day- or account-tz-attributed and can differ by up to a day at window edges — treat them as approximate, not instant-precise. (The standalone /sales chat command uses America/Chicago day boundaries and is intentionally separate from this dashboard.)