Why we collapsed two Agency tiers into one
Field notes from the team
The two-tier mistake
The product had two agency plans: Agency at $249/mo (10 client workspaces, 5 team seats, no white-label, no managed onboarding) and Agency Pro at $499/mo (25 clients, 15 seats, white-label, dedicated support). The split looked sensible on a feature matrix. It was wrong in practice.
The agencies who showed interest all hit the same friction point: the features they actually wanted on day one — white-label dashboard, dedicated support, audiences activation — were locked behind the Pro tier. Agency at $249 felt like a teaser. Agency Pro at $499 felt expensive without justification. The middle was empty.
What we changed
One Agency tier at $399/mo (or $299/mo billed yearly). Includes everything that was previously in Agency Pro: 25 client workspaces, 15 team seats with role-based access, white-label dashboard, per-client widget customization (colors, copy, position, logo), server-side event forwarding to 10 platforms, Audiences (1st-party data activation), managed onboarding, and dedicated support.
Pricing harmonized to "Save up to 25%" yearly across all tiers, including Agency. No more split-tier feature gating. Yearly Agency works out to under $12/client/month for the included 25 — a number that lands cleanly when an agency is comparing it to the alternative of "build the consent + events + audiences stack ourselves."
The Stripe-side surgery
The collapse required real Stripe writes, not just code changes. The legacy Agency $249/$2,388 and Agency Pro $499/$4,788 prices needed to be archived; new $399/mo and $3,588/yr prices needed to be created with the full 13-currency currency_options matrix (none of the legacy Agency prices had any — they only existed in USD).
We scripted the whole thing as scripts/stripe-agency-collapse.js with two modes: --audit for read-only inspection of current state, --apply for the writes. The audit-first pattern paid off immediately: the apply run hit one Stripe constraint we hadn't planned for (you can't archive a price that's still set as a product's default_price), and the audit told us exactly which products needed their default re-pointed first.
Total live blast radius: 4 prices archived, 2 created, 1 product deactivated (the standalone Agency Pro), 0 customers affected (we had no agency_pro subscribers at the time of collapse — confirmed before pulling the trigger).
What we'd do differently
Two regrets:
- We launched with two tiers without evidence of demand for two tiers. The split came from "this is what other CMPs do" plus a hunch that smaller agencies wanted a cheaper entry point. Both turned out to be wrong for our specific buyer (MENA agencies managing Salla/Zid clients). Should have started with one tier and split only when a real customer asked us to.
- We didn't add
currency_optionsto the original Agency prices. Both Agency and Agency Pro shipped USD-only, so a Saudi agency using SAR for everything else paid USD for our subscription. Tiny friction but real friction. The new collapsed price has SAR, AED, KWD, QAR, BHD, OMR, EGP, JOD, MAD, EUR alongside USD, native at checkout.
The principle
A pricing tier should answer a real customer's "I would pay X for Y" sentence. If you can't write that sentence with a specific real customer in mind, the tier shouldn't exist yet. We're applying that test to every other tier before adding splits.
Want to see what we'd find on your site?
Free scan, no signup. Results in about 60 seconds.