Marketing Dashboard
Unified CLI for marketing metrics. Built for quick status checks and deeper dives.
Quick Start
./dashboard.py status ./dashboard.py seo --period 30d ./dashboard.py ads --period 7d ./dashboard.py revenue --period 90d ./dashboard.py funnel
Commands
-
mktg status
-
Traffic (7d), revenue (30d), top errors
-
mktg seo --period [7d|30d|90d]
-
GSC clicks, impressions, avg position, top queries
-
mktg ads --period [7d|30d]
-
Spend, impressions, clicks, CPA by platform
-
mktg revenue --period [30d|90d]
-
MRR, churn, new subs, revenue by product
-
mktg funnel
-
Funnel: visit → signup → trial → paid
Environment
Variable Purpose
POSTHOG_API_KEY
PostHog API key
POSTHOG_PROJECT_ID
PostHog project id
GSC_SITE_URL
Search Console property URL
GOOGLE_APPLICATION_CREDENTIALS
Service account JSON path
STRIPE_SECRET_KEY
Stripe API key
ADS_METRICS_PATH
JSON file for ad platform metrics
ADS_METRICS_JSON
Inline JSON for ad metrics
FUNNEL_STEPS
Comma list of PostHog events (default: $pageview,signup,trial,paid )
Ads JSON Shape
{ "google": {"spend": 123.45, "impressions": 10000, "clicks": 321, "cpa": 12.34}, "meta": {"spend": 98.76, "impressions": 9000, "clicks": 210, "cpa": 15.67} }
Files
-
dashboard.py
-
Click CLI entrypoint (mktg )
-
src/posthog_client.py
-
PostHog API wrapper via httpx
-
src/gsc_client.py
-
Search Console wrapper via google-auth
- googleapiclient
-
src/stripe_client.py
-
Stripe metrics wrapper
-
src/display.py
-
Rich tables and formatting
Notes
-
Prefer PostHog for traffic and funnel. Uses insights/trend and insights/funnel .
-
GSC reads only. Requires Search Console access for the service account.
-
Stripe metrics are computed from subscriptions and invoices; keep product naming consistent.