Reference · UX pattern catalogueDark patterns

16 patterns in this category — each with its illustration, what it is, and the fields that matter when you build or review one. Part of the UX pattern catalogue; the raw, agent-readable version is ux-pattern-catalogue/dark-patterns.json.

Pressure

Only 2 left in stock! 47 in stock (real data) Use real inventory data from your database

Fake Scarcity dark-001

"Only 2 left in stock!" or "3 people viewing this" when inventory is not actually limited or numbers are fabricated.

How to detect

Static strings like "Only X left", hardcoded low numbers, random number generators near stock/availability text, countdown displays without real inventory API backing.

Ethical alternative

Show real inventory counts from a database. If stock is genuinely low, display it. Never fabricate or exaggerate scarcity.

Legal risk

FTC enforcement (misleading advertising). EU Unfair Commercial Practices Directive Art. 6.

Source

deceptive.design

00:14:32 resets on refresh Server-backed deadline expires: 2026-03-10T23:59Z

Fake Urgency dark-002

Countdown timers that reset on refresh, "Deal expires in 00:14:32" with no real deadline, pulsing "Act now!" banners.

How to detect

setInterval/setTimeout countdown timers without server-side deadline validation, client-side-only expiry timestamps, timers that reset on page load.

Ethical alternative

If a deadline is real (flash sale, limited offer), show it with a server-backed timestamp. When the timer expires, the offer genuinely ends.

Legal risk

FTC enforcement. EU Omnibus Directive (2022) explicitly bans fake urgency.

Source

deceptive.design

Subscribe to our newsletter? No, I hate saving money Subscribe No thanks

Confirmshaming dark-003

Decline options written to guilt the user — "No thanks, I don't want to save money" instead of a neutral "No thanks."

How to detect

Modal/dialog decline buttons with negative self-referential language ("I don't want", "I'll miss out"). Asymmetric tone between accept and decline options.

Ethical alternative

Use neutral, respectful language for both options: "Accept" / "No thanks" or "Subscribe" / "Skip". The user's choice should never be framed as a mistake.

Source

NNGroup / deceptive.design

Enable notifs? Session 1 Enable notifs? Session 2 Enable notifs? Session 3 Ask once, store the decline

Nagging dark-004

Repeated permission requests, recurring modals after dismissal, "Rate this app" every session, push notification prompts that reappear after decline.

How to detect

Missing persistence of dismissal state (no localStorage/cookie flag after decline), modals triggered on every page load without checking prior dismissal.

Ethical alternative

Ask once. Store the decline. Offer the option again only in settings or after a natural trigger. Respect "Don't ask again."

Legal risk

GDPR recital 32 (freely given consent). App Store/Play Store guidelines.

Source

deceptive.design

Deception

Uncheck to not unsubscribe confusing! Send me marketing emails clear!

Trick Wording dark-005

Double negatives in opt-out checkboxes ("Uncheck to not unsubscribe"), confusing toggle labels where "on" means "disabled."

How to detect

Checkbox labels containing "not", "un-", double negatives. Toggle components where checked=true maps to an opt-out action.

Ethical alternative

Use positive, direct language. "Send me marketing emails" (checked = yes). Single negation only.

Legal risk

GDPR Art. 7 (clear and plain language for consent). CCPA requires clear opt-out.

Source

deceptive.design

Looks like content but is an ad Sponsored Clearly labeled promotion

Disguised Ads dark-006

Advertisements styled to look like content, navigation, or system UI. "Download" buttons that are ads. Sponsored content without disclosure.

How to detect

Ad components without "Sponsored" or "Ad" labels, affiliate links without disclosure, promotional content without visual differentiation.

Ethical alternative

Clearly label all advertising and sponsored content. Use visual differentiation (background, border, "Sponsored" badge).

Legal risk

FTC Endorsement Guidelines (16 CFR Part 255). EU Unfair Commercial Practices Directive. Up to $50K/violation.

Source

FTC / deceptive.design

12,847 people signed up today Math.random() * 15000 2,341 teams use this product SELECT COUNT(*) FROM users

Fake Social Proof dark-007

Fabricated testimonials, fake review counts, manufactured "12,847 people signed up today" counters, stock photos for "real users."

How to detect

Hardcoded testimonial objects without real data source, static review counts not from a database, random number generators for user/signup counts.

Ethical alternative

Use real testimonials with attribution. Show genuine metrics from your database. If you don't have social proof yet, omit it.

Legal risk

FTC enforcement (Amazon $30M fine, 2023). EU Omnibus Directive bans fake reviews.

Source

FTC / deceptive.design

Accept All manage Accept All Reject All

Visual Interference dark-008

Making the business-preferred option visually dominant while hiding alternatives — large "Accept All" button with tiny "Manage preferences" link.

How to detect

Button pairs where one is primary/filled and the other is text/link/unstyled. Significant size asymmetry between accept and reject actions.

Ethical alternative

Give all options equal visual weight. Accept and Reject should be the same size and prominence.

Legal risk

GDPR Art. 7 + EDPB Guidelines. CNIL fined Google €150M and Facebook €60M (2022).

Source

EDPB / deceptive.design

Hidden

Order Summary Product $49.99 Service fee $4.99 Processing $2.50 Total $57.48 Show all fees upfront

Hidden Costs dark-009

Service fees, shipping costs, or "processing fees" revealed only at the final checkout step. Base price prominent, total price buried.

How to detect

Price display components that exclude fees/tax, fee calculations only in the final checkout step, cart summaries that add items only at payment.

Ethical alternative

Show the total price from the first moment a price is displayed. Break down all fees early. No surprises at checkout.

Legal risk

FTC Click-to-Cancel Rule (2024). EU Consumer Rights Directive Art. 6. Epic Games $245M FTC fine.

Source

FTC / deceptive.design

Start Free Trial 14 days free, then $9.99/mo Cancel anytime before trial ends Reminder email 3 days before charge

Hidden Subscription dark-010

Free trial auto-converts to paid without clear disclosure. "Start free" requires credit card with no prominent conversion notice.

How to detect

Trial signup flows that collect payment without conversion disclosure, missing "You will be charged $X on [date]" near submit, no pre-charge reminder logic.

Ethical alternative

State conversion terms next to signup: "After 14 days, $X/month. Cancel anytime." Send reminder email 3 days before charge.

Legal risk

FTC Click-to-Cancel Rule (2024). Amazon FTC settlement ($30M). GDPR Art. 7.

Source

FTC / deceptive.design

Compare Plans Free Pro Storage 5 GB 100 GB Users 1 10 Support Email Priority

Comparison Prevention dark-011

Making it intentionally difficult to compare products or plans — different units, missing features in comparison tables.

How to detect

Pricing components without feature comparison tables, plan cards with non-aligned feature sets, missing "Compare plans" functionality.

Ethical alternative

Provide a clear feature comparison table with consistent units and aligned rows.

Legal risk

EU Consumer Rights Directive (transparency obligation).

Source

deceptive.design

Obstruction

Sign Up 1 click = Cancel 2 clicks max Cancel Subscription Are you sure? [Confirm]

Hard to Cancel dark-012

Cancellation requires calling a phone number, navigating multi-step retention flows, or finding a hidden settings page.

How to detect

No cancellation route in the app, cancellation behind "Contact us", multi-step flows with 3+ confirmation steps, retention offers blocking cancel.

Ethical alternative

Maximum 2 steps: click Cancel then Confirm. Optional feedback form that doesn't block cancellation.

Legal risk

FTC Click-to-Cancel Rule (2025). EU Consumer Rights Directive Art. 11. California AB-390.

Source

FTC / deceptive.design

Create account to continue (just to read an article) Content accessible freely Account optional for personalization

Forced Action dark-013

Requiring account creation to view content, forcing app downloads for mobile access, requiring social sharing to unlock features.

How to detect

Auth guards on content pages that don't need personalization, app-download interstitials, feature gates tied to social sharing.

Ethical alternative

Let users access content without accounts where possible. Offer account creation as optional enhancement.

Legal risk

GDPR data minimization (Art. 5) if accounts collect unnecessary data.

Source

deceptive.design

Your Cart Widget Pro $29.99 Extended warranty $9.99 auto-added! Only user-added items in cart

Sneaking dark-014

Items silently added to cart. Pre-selected add-ons or insurance. Automatically opted into marketing during purchase.

How to detect

Cart logic adding items programmatically, pre-checked addon checkboxes, default-selected upsells, marketing consent defaulting to checked.

Ethical alternative

Cart contains only what the user explicitly added. Add-ons are presented but never pre-selected. All optional checkboxes start unchecked.

Legal risk

GDPR Art. 7 (Planet49 ruling). FTC enforcement. EU Consumer Rights Directive.

Source

deceptive.design

Preselection

Bad Newsletter Share data Premium Pre-checked! Good Newsletter Share data Premium User decides

Preselection dark-015

Non-essential options pre-checked during signup or checkout — newsletter, data sharing consent, premium plan pre-selected over free.

How to detect

Checkbox components with defaultChecked={true} for optional/consent items, radio groups defaulting to most expensive option, selects defaulting to paid tiers.

Ethical alternative

All optional checkboxes start unchecked. Plan selection defaults to free/lowest tier or shows no default.

Legal risk

GDPR Art. 7(2) + Planet49 ruling (2019). TTDSG §25 (Germany). EU Consumer Rights Directive Art. 22.

Source

CJEU Planet49 / deceptive.design