Metric · Marketing

What is unsubscribe rate, and how do you measure it in Metabase?

Unsubscribe rate is the share of delivered emails whose recipients opted out — unsubscribes over delivered, per campaign. It's the feedback channel your audience actually uses: the number that tells you when frequency, targeting, or content crossed a line. Measure it in Metabase from campaign stats synced from Klaviyo, Mailchimp, ActiveCampaign, or SendGrid.

TL;DRunsubscribes ÷ delivered per campaign. Under 0.5% is typical, under 0.2% is good — but read it next to spam-complaint rate, because a complaint costs you deliverability and an unsubscribe doesn't. Spikes localize problems; spikes after a re-engagement send can be the plan working.

What unsubscribe rate measures

It measures audience tolerance, campaign by campaign. A stable baseline means your frequency and targeting match what people signed up for; a spike localizes a problem to a specific segment, send, or cadence change. The denominator is delivered, not sent — mail that bounced never gave anyone the chance to opt out, and bounce rate is its own metric. And it's half of a pair: the same send also produces spam complaints, and mailbox providers only punish one of the two. Gmail's sender guidelines expect bulk senders below a 0.1% complaint rate, with 0.3% as the threshold where deliverability visibly suffers. An easy unsubscribe is your pressure valve — it keeps annoyed recipients out of the complaint column.

Since 2024, one-click unsubscribe (RFC 8058) is mandatory for bulk senders to Gmail and Yahoo, so opt-outs increasingly happen in the mail client rather than on your landing page. Your tracking has to capture both paths.

What data does it need?

  • Campaign-level stats with delivered, unsubscribes, and spam_complaints per send — synced to your warehouse via Airbyte, Fivetran, or dlt from your email platform.
  • campaign_name, sent_at, and segment_idso spikes can be localized to a send, a cohort, or a cadence.
  • Campaign type or tag (newsletter, promo, re-engagement) — hygiene sends are supposed to spike, and you want to read them separately.
  • Opt-outs from both paths: landing-page unsubscribes and header-based one-click unsubscribes.

SQL patterns

Unsubscribe rate by campaign by monthPostgreSQL
SELECT
  date_trunc('month', c.sent_at) AS month,
  c.campaign_name,
  SUM(c.delivered)     AS delivered,
  SUM(c.unsubscribes)  AS unsubscribes,
  ROUND(
    100.0 * SUM(c.unsubscribes) / NULLIF(SUM(c.delivered), 0), 3
  ) AS unsubscribe_rate_pct
FROM campaign_stats c
WHERE c.sent_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1, 2
ORDER BY 1, unsubscribe_rate_pct DESC;
Unsubscribe vs. spam-complaint rate by segmentPostgreSQL
SELECT
  s.segment_name,
  SUM(c.delivered) AS delivered,
  ROUND(
    100.0 * SUM(c.unsubscribes) / NULLIF(SUM(c.delivered), 0), 3
  ) AS unsubscribe_rate_pct,
  ROUND(
    100.0 * SUM(c.spam_complaints) / NULLIF(SUM(c.delivered), 0), 3
  ) AS spam_complaint_rate_pct
FROM campaign_stats c
JOIN segments s ON s.id = c.segment_id
WHERE c.sent_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY 1
ORDER BY spam_complaint_rate_pct DESC;

Pitfalls

Dividing by sent instead of delivered.→ Bounced mail never reached an inbox, so it can't produce an opt-out. Using sent as the denominator deflates the rate exactly when your list quality is worst — the moment you most need the true number.
Watching unsubscribes while ignoring spam complaints.→ The unsubscribe rate can look pristine while complaints climb past Gmail's 0.1% line — often because the opt-out link is buried and annoyed readers hit "report spam" instead. Chart the two together, always.
Treating every spike as a failure.→ A re-engagement campaign that flushes out dormant subscribers is supposed to spike unsubscribes — that's list hygiene, and deliverability improves for the subscribers who stay. Tag hygiene sends and judge them by a different baseline.
Reading only the list-wide average.→ A 0.3% overall rate can hide one segment at 2% — a frequency or relevance problem with a specific audience. Segment by campaign type, cohort, and signup source before concluding anything.

Where this metric applies

Metrics

Dashboards

FAQ

What's a good unsubscribe rate?
Under 0.5% per campaign is typical for a healthy list; under 0.2% is good. But the level matters less than the spikes — a campaign that triples your baseline points at a specific segment, frequency change, or content decision. Track the trend per campaign alongside click-through rate and bounce rate on an email engagement dashboard so one number never stands alone.
What's the difference between an unsubscribe and a spam complaint?
An unsubscribe is a polite exit: the recipient opts out and your sender reputation is untouched. A spam complaint is the recipient reporting you to their mailbox provider, and it hurts far more — Gmail expects bulk senders to stay under a 0.1% complaint rate and treats 0.3% as a serious problem. A visible, working unsubscribe link converts would-be complainers into unsubscribers, which is why the two rates belong side by side on the same chart.
Is a rising unsubscribe rate always bad?
No. After a re-engagement campaign aimed at dormant subscribers, a spike in unsubscribes is the campaign working — people who were never going to buy are removing themselves, which improves deliverability for everyone left. Judge the spike by who is leaving: cross-reference with new-cohort engagement and list growth rate to tell hygiene from churn.
What is one-click unsubscribe, and does it affect the metric?
One-click unsubscribe (RFC 8058) adds a List-Unsubscribe header so recipients can opt out directly from their mail client without visiting a landing page. Gmail and Yahoo made it mandatory for bulk senders in 2024. It usually nudges unsubscribe rates up slightly — the exit is easier — while pushing spam complaints down, which is the trade you want. Make sure your sync captures header-based opt-outs, not just landing-page ones, or the metric undercounts.
How do you track unsubscribe rate in Metabase?
Sync campaign-level stats — delivered, unsubscribes, spam complaints — from Klaviyo, Mailchimp, or ActiveCampaign into a SQL database via Airbyte, Fivetran, or dlt (Metabase reads databases, not the tools' APIs directly). Chart unsubscribes ÷ delivered per campaign per month, add the segment-level complaint comparison, and pin both to your email engagement dashboard next to engagement rate.