What does a paid vs. organic acquisition dashboard show in Metabase?
A paid vs. organic acquisition dashboard shows how the growth mix splits between bought and earned traffic — and which way it's drifting. It combines channel-grouped sessions from Google Analytics 4 or Plausible, organic clicks from Google Search Console, and paid spend from the ad platforms in one governed view.
traffic_rollups, joined to daily spend and Search Console performance.Which cards belong on a paid vs. organic acquisition dashboard?
- Sessions by acquisition type over time (stacked area)
- Conversions, paid vs. organic (combo)
- Organic clicks trend from Search Console (line)
- Paid spend vs. organic clicks (combo)
- Conversion rate by acquisition type (bar)
- Blended CAC vs. organic share (line)
- Top landing pages by acquisition type (table)
- Channel mix shift, trailing 12 months (area)
What data does the dashboard need?
traffic_rollupsfrom GA4 or Plausible — channel group, session date, sessions, and key events.gsc_performance_dailyfrom Search Console — clicks, impressions, and queries by date.ad_performance_dailyfor paid spend, the same unioned model that feeds the paid channel performance dashboard.
How do you build it?
- Sync the three sources into the warehouse: analytics rollups, Search Console daily performance, and unioned ad spend.
- Fix the channel mapping — enforce UTM tagging on paid traffic and decide where Direct and Referral land in the paid/organic split.
- Join on date at the channel-group grain; keep GSC clicks as their own series rather than forcing them to reconcile with analytics sessions.
- Build the mix cards, add a date-range filter, and drill from acquisition type down to landing page.
Example card SQL
WITH traffic AS (
SELECT
date_trunc('month', session_date) AS month,
-- everything bought: Paid Search/Social/Shopping/Video/Other,
-- plus Display and Cross-network
SUM(sessions) FILTER (
WHERE channel_group LIKE 'Paid%'
OR channel_group IN ('Display', 'Cross-network')
) AS paid_sessions,
SUM(key_events) FILTER (
WHERE channel_group LIKE 'Paid%'
OR channel_group IN ('Display', 'Cross-network')
) AS paid_conversions,
SUM(sessions) FILTER (WHERE channel_group = 'Organic Search')
AS organic_sessions,
SUM(key_events) FILTER (WHERE channel_group = 'Organic Search')
AS organic_conversions
FROM traffic_rollups
GROUP BY 1
),
spend AS (
SELECT
date_trunc('month', stat_date) AS month,
SUM(spend) AS paid_spend
FROM ad_performance_daily
GROUP BY 1
)
SELECT
t.month,
t.paid_sessions,
t.organic_sessions,
ROUND(t.paid_conversions::numeric
/ NULLIF(t.paid_sessions, 0) * 100, 2) AS paid_conversion_rate,
ROUND(t.organic_conversions::numeric
/ NULLIF(t.organic_sessions, 0) * 100, 2) AS organic_conversion_rate,
s.paid_spend
FROM traffic t
LEFT JOIN spend s ON s.month = t.month
ORDER BY t.month;Related
Metrics
Integrations
Dashboards
FAQ
What is a paid vs. organic acquisition dashboard?
How is "organic" defined?
traffic_rollups model so every card in GA4-based reporting uses the same definition.Why don't Search Console clicks match GA4 organic sessions?
Does paid search cannibalize branded organic traffic?
Which tools feed a paid vs. organic dashboard?
ad_performance_daily from the ad platforms for spend (see the paid channel performance dashboard for that model). More sources in the marketing and growth integrations catalog.