DEV Community

Pratap
Pratap

Posted on

I Scored 62 SaaS Tools on Billing Dark Patterns: Here's What the Complaint Data Reveals

A few months ago I started building a Chrome extension to detect SaaS billing emails. As part of that, I needed to map the cancellation flows and billing practices of every tool I planned to support.

I want to be upfront about methodology: I didn't personally click through 62 cancellation flows and count screens. What I did was systematic complaint data analysis: Trustpilot reviews, Reddit threads, regulatory filings, and direct mapping of cancellation endpoints. Where I found regulatory action (DOJ settlements, FTC filings), I used those as primary sources. Where I found complaint patterns, I treated them as signal, not proof.

Here's what that data actually shows.

The Scoring Methodology

Each tool is scored from 1 to 10 based on six factors:

Factor Weight
Post-cancellation charges (verified complaints) +3
Early termination fee not disclosed at sign-up +3
No cancel button (requires phone, chat, or human contact) +2
Hidden cancellation flow (3+ friction screens) +2
Silent auto-renewal with no advance notice +1
Seat or feature additions billed without consent +1

Tools can score points on multiple factors simultaneously. A tool that charges you after cancellation AND has a hidden ETF AND requires a phone call scores 8 before you even count the secondary factors.

The cancel URL for every tool was mapped directly. That matters because the URL tells you a lot: a cancellation path that routes through a help article rather than a direct account settings page is itself a friction signal.

What the Score Distribution Actually Looks Like

Out of 61 tools scored:

  • 9/10 (Very High Risk): 3 tools: Mailchimp, DocuSign, Adobe Creative Cloud
  • 8/10 (High Risk): 9 tools: Zapier, Notion, Semrush, Loom, Sprout Social, Hootsuite, Teachable, Thinkific, Salesforce
  • 7/10 (Medium-High): 11 tools
  • 6/10 (Medium): 11 tools
  • 5/10 and below: 27 tools

The top three are not close calls. Each has independently verifiable data backing the score.

The Three 9/10 Tools: What the Evidence Actually Shows

Adobe Creative Cloud

Adobe's case is the most documented because it became a federal lawsuit.

In June 2024, the DOJ and FTC filed suit under the Restore Online Shoppers' Confidence Act, alleging Adobe hid a 50% early termination fee on "annual paid monthly" plans and made cancellation deliberately difficult. Adobe settled in March 2026 for $150 million ($75M civil penalty plus $75M in consumer remedies).

The fee structure: cancel an annual Creative Cloud plan after the 14-day window and you owe 50% of all remaining monthly payments as a lump sum. Cancel in month 3 of a $59.99/month plan and you owe $269.96 before you've left.

Trustpilot: 1.2/5 across 7,298 reviews. 91% one-star. "Cancellation" appears as a top mention tag.

The DOJ lawsuit is public record. The fee structure is published in Adobe's own terms. The Trustpilot data is live. This is the most verifiable 9/10 on the list.

Mailchimp

Mailchimp's primary dark pattern is an account lockout loop. Users report being unable to log in right as a renewal hits, while billing continues regardless of the lockout. The account cannot be fully deleted while any balance is outstanding, which creates a situation where you can't access the account to cancel but the account keeps charging you.

Trustpilot: 2.6/5 across 1,473 reviews. 66% one-star. Multiple Reddit threads on r/MailChimp confirm the pattern independently.

Most reported resolution: credit card dispute. Direct billing team contact after manually downgrading to free has also worked.

DocuSign

DocuSign's pattern is silent auto-renewal with no advance notice, followed by charges that continue after a documented cancellation. One Reddit user documented $3,000 in disputed charges across multiple billing cycles after a confirmed cancellation. The in-app cancellation flow has also been reported to throw system errors consistently across browsers and devices.

Trustpilot: 1.3/5 across 1,211 reviews. 76% one-star. "Cancellation" appears as the 5th of 10 top mention tags.

Category Patterns Worth Noting

One thing the data reveals that a single-tool focus misses: dark patterns cluster by product category.

Email marketing tools (Mailchimp, ActiveCampaign, Klaviyo, Hootsuite, Sprout Social) tend toward post-cancellation charges and account lockout patterns. The billing model is contact-based, which auto-scales upward as lists grow and doesn't always scale back down when you try to leave.

Creative and design tools (Adobe, Loom, Webflow) tend toward annual contract lock-in with early termination fees. The "annual plan billed monthly" structure is the primary mechanism. It looks flexible. It cancels like a contract.

CRM and sales tools (Salesforce, HubSpot, Zendesk) tend toward contractual lock-in and human-gated cancellation. Salesforce's Master Subscription Agreement explicitly states payment obligations are "non-cancelable" and fees are "non-refundable." Cancellation requires contacting the Customer Service Billing Department directly.

Developer infrastructure tools (GitHub, GitLab, Linear, DigitalOcean, Cloudflare, Twilio) score the lowest. Usage-based billing with no term lock-in, self-serve cancellation, transparent pricing. Claude (Anthropic) scores 3/10. This matters: the tools developers build with tend to have better billing practices than the business tools developers use to run their operations.

The Regulatory Picture

Two data points that didn't exist 18 months ago:

Adobe settled for $150M (March 2026) under ROSCA for hiding the ETF and making cancellation deliberately difficult.

Shutterstock settled for $35M (May 2026) under the same statute for the same practice: "annual paid monthly" plans with hidden early termination fees.

Two companies. Same tactic. Same regulator. Same year. The FTC's Click-to-Cancel rule was vacated by the Eighth Circuit in July 2025 on procedural grounds, but enforcement is continuing under existing ROSCA authority on a case-by-case basis.

California passed an amended Automatic Renewal Law effective July 2025 that limits companies to one retention offer during cancellation and requires the cancel option to be simultaneously visible. Germany's §312k BGB two-button rule already requires a visible cancel button alongside any sign-up flow.

What I Built From This

The scoring data became the core of BillSensor, a Chrome extension that detects billing emails passively as you open them in Gmail (no OAuth, no account connection) and alerts you before renewals. For Outlook and Microsoft 365, a connected scan pulls 12 months of billing history.

Every detected subscription shows its dark pattern score and a direct cancel link. The full scorecard for all 62 tools is at billsensor.com/page/supported-tools.

If you want to dig into the methodology or the scoring data, happy to answer questions in the comments. And if you've run into a specific tool's billing pattern that should update a score, I want to know.


Scores are based on Trustpilot complaint patterns, Reddit threads, regulatory filings, and direct cancel URL mapping as of May to July 2026. This is not a legal assessment of any tool's practices.

Top comments (7)

Collapse
 
mihirkanzariya profile image
Mihir kanzariya

the methodology note at the top is doing more work than it looks, specifically on post-cancellation charges, which is one of your two heaviest factors at +3.

that signal has two root causes that are identical in complaint data. one is the dark pattern you are describing. the other is metered billing: usage line items invoice after the period closes, so a genuinely cancelled subscription can still produce a charge dated after the cancel date. the customer got a post-cancellation charge either way and writes the same review.

there is a cheap discriminator if you ever want one: check whether the charge covers a period already consumed or a fresh one. usage already incurred is mechanics, a new period after a confirmed cancel is the dark pattern. complaint text almost never carries that detail, which is why i would expect it to be most of the noise in your 5-and-below tail rather than in the top three. adobe has a DOJ settlement, that one is not ambiguous.

Collapse
 
pratap_h profile image
Pratap

That's a fair distinction and one I glossed over in the methodology section.

You're right that metered billing creates a structural false positive at the +3 level. A confirmed cancellation followed by a usage-true-up invoice looks identical in complaint text to a tool that simply keeps billing on a new period. The reviewer doesn't know or care which it is, they cancelled, they got charged, they left a one-star review.

Your discriminator is the right one: period already consumed versus new period after confirmed cancel. The problem is that complaint text almost never specifies this, which means the signal is noisy at the tail end of the distribution exactly where you'd expect, tools that have legitimate metered billing models but poor communication around final invoices.

The top three are likely clean on this because the complaint patterns are too consistent and the regulatory record is unambiguous. Adobe's DOJ settlement removes any ambiguity. DocuSign's pattern of charges across multiple fresh billing cycles post-cancellation doesn't fit a usage true-up. Mailchimp's account lockout loop is structurally distinct from metered billing.

Where your point probably does the most damage is in the 5-to-7 range, tools like AWS, Twilio, SendGrid, Heroku where usage-based billing is the core model and a "post-cancellation charge" complaint is more likely to be a metered true-up than deliberate continued billing. I scored those lower partly for this reason but not explicitly enough in the methodology.

Worth adding a discriminator note to the scoring criteria. Will update the post.

Collapse
 
mihirkanzariya profile image
Mihir kanzariya

the AWS/Twilio/SendGrid/Heroku group is where I would go further than down-weighting. for a usage-billed product a post-cancellation invoice is not merely legitimate, it is unavoidable: the usage happened, and the invoice can only be cut after the period closes. so for that class the factor is not weak evidence, it is no evidence, and averaging it in at a reduced weight still imports the noise rather than removing it.

one thing that might make your discriminator partly mechanical: a true-up is almost always SMALLER than the plan price, often far smaller, whereas a fresh-period charge lands at exactly the plan price. complaint text rarely says "usage true-up" but it does quite often carry the amount, and the amount by itself separates most of these without collecting anything new.

Thread Thread
 
pratap_h profile image
Pratap

That's a cleaner framing than what I had. The distinction isn't just that usage true-ups are legitimate, it's that for a genuinely metered product, the post-cancellation invoice is structurally unavoidable and carries no information about intent. Weighting it down still treats noise as signal. The right move is excluding it from the factor entirely for that product class.

The amount discriminator is good and I hadn't thought of it that way. A true-up is almost always a fractional amount, whatever usage accrued in the tail of the billing period, whereas a fresh-period charge lands at exactly the plan price. That pattern is detectable in complaint text without needing anything additional. Someone saying "they charged me $600 after I cancelled" on a Zapier annual plan is a different signal from someone saying "got a $4.12 charge from Twilio after closing my account."

What this means for the scoring model practically: AWS, Twilio, SendGrid, Heroku, and Cloudflare probably shouldn't have the post-cancellation +3 factor applied at all, not just weighted lower. Their scores in the 4-5 range are already low enough that removing the factor doesn't change their tier, but the methodology would be more defensible.

I'll update the criteria to explicitly exclude usage-billed products from the post-cancellation charge factor and note the amount discriminator as the mechanism. Credit to you for the cleaner version of this.

Thread Thread
 
mihirkanzariya profile image
Mihir kanzariya

one edge worth handling before you write it up: excluding at the PRODUCT level is too coarse for hybrid billing. seat price plus usage overage (vercel, datadog) throws both kinds of charge from the same account, so a blanket exclusion drops real signal and a blanket inclusion keeps the noise you are trying to remove.

the amount test you just took on solves that by itself, if you apply it per complaint rather than per product. exactly-plan-price keeps the factor, fractional drops it. metered products then fall out automatically and you never have to maintain a list of which products count as usage-billed.

Collapse
 
julianneagu profile image
Julian Neagu

The category breakdown is the most interesting part. I’ve seen the same thing with SaaS tools I use: usage-based developer tools usually make leaving easy, while growth tools often add friction because the pricing grows with your success.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.