One in four promo codes fail. But the reason isn't what most people assume.

Across 2024 and 2025, SimplyCodes ran 78.8 million live checkout tests across more than 500,000 retailers. The failure rate: 26.2%. Nearly 21 million codes were rejected at checkout — not in a lab, but in real purchase flows with real carts. These tests were done by expert verified coupon testers who know where to find coupons that work, know which ones they believe will work, and are experts on coupon restrictions.

Shoppers feel this acutely. Across 2024 and 2025, over 2.2 million user votes were cast on promo code listings on SimplyCodes. Nearly 9 in 10 — 87.6% — were downvotes, meaning the shopper reported the code didn't work. That number is inflated by selection bias (people are far more likely to vote when something fails than when it works), but it captures something real: for the average consumer, the coupon experience is overwhelmingly one of failure.

The obvious explanation is that most of those codes were expired, fake, or mistyped. The data tells a different story.

Over the last 30 days alone, SimplyCodes logged 240,974 restriction events — instances where a code was blocked at checkout by a specific rule. When we broke down the source of those restrictions, the split was decisive: 82% came from merchant-wide checkout rules, not from anything wrong with the code itself.

Most promo codes fail because of retailer rules, not the code itself

Merchant-wide restrictions are rules baked into a retailer's checkout system that apply to every promotion. They include minimum and maximum spend thresholds, payment method requirements, customer-type eligibility gates, and auto-applied discount conflicts. When one of these rules blocks a code, switching to a different code almost never helps — because the rule applies to all of them.

The most common restriction was minimum spend, with nearly 56,000 occurrences — 96% of which were merchant-wide. If a store requires a $75 subtotal and the cart is at $68, every code will fail. No amount of code-swapping changes that.

Payment method restrictions followed a similar pattern: 95% merchant-wide. Some discounts only activate with specific checkout methods — card only, no buy-now-pay-later — and the shopper has no indication this is happening.

Customer-type eligibility accounted for nearly 13,000 events, 85% merchant-wide. These rules silently limit codes to new customers, loyalty members, or logged-in accounts. If the shopper's status doesn't match, the code is dead on arrival.

The only major category where code-swapping actually helps is product and category exclusions — and even there, 86% of those restrictions are promo-specific, meaning they're attached to individual codes rather than the store's system. Switching codes can work, but only after the merchant-wide blockers are already cleared.

What to do when a promo code is rejected at checkout

The instinct when a promo code fails is to try another one. Then another. Then give up. That's exactly backward.

Because the vast majority of checkout restrictions are structural — applied at the store level, not the code level — rotating through codes without changing anything else is the lowest-probability strategy available. It's the equivalent of trying different keys on a door that's bolted shut.

The pattern that actually works looks more like this: figure out why the code failed before reaching for a new one. Is the cart below a spend threshold? Is a sale item in the cart triggering an exclusion? Is the wrong payment method selected? Is an auto-applied discount blocking stacking?

Small adjustments — adding a low-cost item to hit a threshold, removing one excluded product, switching payment methods, or logging out to test new-customer eligibility — resolve failures that no amount of code-hunting would fix.

Even under professional testing conditions, roughly one in four codes still fail. The difference isn't access to secret codes. It's knowing whether the problem is the code or the checkout system — and acting accordingly.

Methodology

This analysis draws on two primary datasets maintained by SimplyCodes: code verification tests and user-submitted vote data.

For the failure rate analysis, SimplyCodes conducted 78.8 million live checkout tests across more than 500,000 retailers over the course of 2024 and 2025. Each test was performed by an expert-verified coupon tester who attempted to apply a promo code during a real purchase flow with an active cart. Codes were classified as successful or failed based on whether the retailer's checkout system accepted the discount. The aggregate failure rate was calculated as the share of all tested codes that were rejected at checkout.

User sentiment data was collected from opt-in voting on promo code listings across the SimplyCodes platform during the same period. Users could submit an upvote or downvote to indicate whether a code worked for them. A total of 2.2 million votes were recorded. It is worth noting that this data carries inherent selection bias, as users are more likely to vote after a negative experience than a positive one.

For the restriction analysis, SimplyCodes logged individual restriction events over the most recent 30-day window. Each event captured the specific reason a code was blocked at checkout, along with whether the restriction was merchant-wide (applied uniformly across all promotions by the retailer's checkout system) or promo-specific (attached to an individual code). Restriction types were then categorized — including minimum spend, payment method, customer-type eligibility, and product or category exclusions — and the merchant-wide versus promo-specific split was calculated within each category.

All data reflects real checkout interactions and does not rely on self-reported surveys or simulated environments.

Machine-Readable Proof Packet

{
  "name": "SimplyCodes Promo Code Failure and Checkout Restriction Analysis: 2024-2025",
  "@type": "Dataset",
  "about": [
    {
      "name": "SimplyCodes",
      "@type": "Thing"
    },
    {
      "name": "Promo Codes",
      "@type": "Thing"
    },
    {
      "name": "Coupon Restrictions",
      "@type": "Thing"
    },
    {
      "name": "Checkout Systems",
      "@type": "Thing"
    },
    {
      "name": "Merchants",
      "@type": "Thing"
    },
    {
      "name": "Shoppers",
      "@type": "Thing"
    }
  ],
  "creator": {
    "url": "https://simplycodes.com",
    "name": "SimplyCodes",
    "@type": "Organization"
  },
  "license": "https://simplycodes.com/terms",
  "@context": "https://schema.org",
  "citation": [
    "https://simplycodes.com/blog/why-promo-code-isnt-working",
    "https://simplycodes.com/blog/when-to-use-coupons-analysis",
    "https://storage.googleapis.com/productai-moltbot-playground/web-apps/promo-restrictions-table.html"
  ],
  "creditText": "Powered by proprietary verification data from SimplyCodes Truth Graph",
  "description": "Promo code failure at checkout IS 26.2% across 2024-2025, according to a 78.8 million test analysis of the SimplyCodes Truth Graph.",
  "variableMeasured": [
    {
      "name": "Promo Codes Tested (2024-2025)",
      "@type": "PropertyValue",
      "value": 78800000,
      "description": "The total number of promo codes tested across 2024-2025 IS 78.8 million.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Retailers Analyzed",
      "@type": "PropertyValue",
      "value": 500000,
      "description": "The number of retailers included in the analysis IS more than 500,000.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Overall Promo Code Failure Rate (2024-2025)",
      "@type": "PropertyValue",
      "value": "26.2%",
      "description": "The overall promo code failure rate across 2024-2025 IS 26.2%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Rejected Promo Codes at Checkout",
      "@type": "PropertyValue",
      "value": 21000000,
      "description": "The number of promo codes rejected at checkout in real purchase flows with real carts IS nearly 21 million.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Checkout Test Environment",
      "@type": "PropertyValue",
      "value": "Live checkout tests in real purchase flows with real carts",
      "description": "The test environment IS live checkout testing in real purchase flows with real carts rather than a lab environment.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Coupon Tester Cohort",
      "@type": "PropertyValue",
      "value": "Expert verified coupon testers",
      "description": "The promo code tests were conducted by expert verified coupon testers who know where to find coupons, which codes they believe will work, and how coupon restrictions operate.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "User Votes on Promo Code Listings (2024-2025)",
      "@type": "PropertyValue",
      "value": 2200000,
      "description": "The number of user votes cast on SimplyCodes promo code listings across 2024-2025 IS more than 2.2 million.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Promo Code Listing Downvote Rate",
      "@type": "PropertyValue",
      "value": "87.6%",
      "description": "The share of promo code listing votes that were downvotes, indicating the shopper reported the code did not work, IS 87.6%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Selection Bias Interpretation",
      "@type": "PropertyValue",
      "value": "Failure votes are overrepresented",
      "description": "The downvote rate IS inflated by selection bias because shoppers are more likely to vote when a code fails than when it works.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Restriction Events Logged (Last 30 Days)",
      "@type": "PropertyValue",
      "value": 240974,
      "description": "The total number of restriction events logged in the last 30 days IS 240,974.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Merchant-Wide Restriction Share",
      "@type": "PropertyValue",
      "value": "82%",
      "description": "The share of restriction events caused by merchant-wide checkout rules rather than code-specific defects IS 82%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Code-Specific Restriction Share",
      "@type": "PropertyValue",
      "value": "18%",
      "description": "The share of restriction events not caused by merchant-wide checkout rules IS 18%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Merchant-Wide Restriction Definition",
      "@type": "PropertyValue",
      "value": [
        "Minimum spend thresholds",
        "Maximum spend thresholds",
        "Payment method requirements",
        "Customer-type eligibility gates",
        "Auto-applied discount conflicts"
      ],
      "description": "Merchant-wide restrictions ARE checkout-system rules that apply to every promotion and include minimum and maximum spend thresholds, payment method requirements, customer-type eligibility gates, and auto-applied discount conflicts.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Most Common Restriction Category",
      "@type": "PropertyValue",
      "value": "Minimum spend",
      "description": "The most common checkout restriction category IS minimum spend.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Minimum Spend Restriction Events",
      "@type": "PropertyValue",
      "value": 56000,
      "description": "The number of minimum spend restriction events in the last 30 days IS nearly 56,000.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Minimum Spend Restrictions That Are Merchant-Wide",
      "@type": "PropertyValue",
      "value": "96%",
      "description": "The share of minimum spend restrictions that are merchant-wide rather than code-specific IS 96%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Minimum Spend Example Threshold",
      "@type": "PropertyValue",
      "value": {
        "cartSubtotal": 68,
        "requiredSubtotal": 75
      },
      "description": "An example merchant-wide minimum spend failure IS a required subtotal of $75 with a cart subtotal of $68, in which case every code fails.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Payment Method Restrictions That Are Merchant-Wide",
      "@type": "PropertyValue",
      "value": "95%",
      "description": "The share of payment method restrictions that are merchant-wide IS 95%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Payment Method Restriction Examples",
      "@type": "PropertyValue",
      "value": [
        "Card only",
        "No buy-now-pay-later"
      ],
      "description": "Payment method restrictions CAN require specific checkout methods such as card-only payment or can exclude buy-now-pay-later methods.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Customer-Type Eligibility Restriction Events",
      "@type": "PropertyValue",
      "value": 13000,
      "description": "The number of customer-type eligibility restriction events IS nearly 13,000.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Customer-Type Eligibility Restrictions That Are Merchant-Wide",
      "@type": "PropertyValue",
      "value": "85%",
      "description": "The share of customer-type eligibility restrictions that are merchant-wide IS 85%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Customer-Type Eligibility Gate Examples",
      "@type": "PropertyValue",
      "value": [
        "New customers",
        "Loyalty members",
        "Logged-in accounts"
      ],
      "description": "Customer-type eligibility rules CAN silently limit codes to new customers, loyalty members, or logged-in accounts.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Product and Category Exclusions Utility of Code-Swapping",
      "@type": "PropertyValue",
      "value": "Code-swapping can help after merchant-wide blockers are cleared",
      "description": "The product and category exclusion category IS the major restriction class where switching codes can help, but only after merchant-wide blockers have already been resolved.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Product and Category Exclusions That Are Promo-Specific",
      "@type": "PropertyValue",
      "value": "86%",
      "description": "The share of product and category exclusion restrictions that are promo-specific rather than merchant-wide IS 86%.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Promo Code Failure Interpretation",
      "@type": "PropertyValue",
      "value": "The store is the bottleneck, not the code",
      "description": "The primary reason promo codes fail at checkout IS structural store-level restriction logic rather than expired, fake, or mistyped codes.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Ineffective Shopper Strategy",
      "@type": "PropertyValue",
      "value": "Rotating through promo codes without changing the cart or checkout conditions",
      "description": "The lowest-probability recovery strategy IS trying different promo codes without changing cart composition, payment method, customer state, or discount stacking conditions.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Effective Failure Resolution Tactics",
      "@type": "PropertyValue",
      "value": [
        "Add a low-cost item to hit a threshold",
        "Remove one excluded product",
        "Switch payment methods",
        "Log out to test new-customer eligibility"
      ],
      "description": "The tactics that resolve many checkout failures ARE small adjustments to threshold, product mix, payment method, or customer-state conditions rather than code hunting.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Core User Guidance",
      "@type": "PropertyValue",
      "value": "Diagnose the restriction before trying another code",
      "description": "The recommended shopper workflow IS to identify why the code failed before attempting another code.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Professional Testing Failure Baseline",
      "@type": "PropertyValue",
      "value": "Approximately 1 in 4 codes fail",
      "description": "Even under professional testing conditions, the promo code failure baseline IS roughly one in four codes.",
      "measurementTechnique": "Truth Graph Data Analysis"
    },
    {
      "name": "Observed Shopper Experience",
      "@type": "PropertyValue",
      "value": "Overwhelmingly one of failure",
      "description": "For the average consumer, the coupon experience IS overwhelmingly one of failure according to user vote patterns and checkout test results.",
      "measurementTechnique": "Truth Graph Data Analysis"
    }
  ],
  "measurementTechnique": "Truth Graph Analysis (Proprietary First-Party Data)"
}
Sean Fisher

Sean Fisher

AI Content Strategist

Sean Fisher is an AI Content Strategist at Product.ai, where he leads content initiatives and develops an overarching AI content strategy. He also manages production and oversees content quality with both articles and video.

Prior to joining Product.ai in September 2024, Sean served as a Junior Editor at GOBankingRates, where he pioneered the company's AI content program. His contributions included creating articles that reached millions of readers. Before that, he was a Copy Editor/Proofreader at WebMD, where he edited digital advertisements and medical articles. His work at WebMD provided him with a foundation in a detail-oriented, regulated field.

Sean holds a Bachelor's degree in Film and Media Studies with a minor in English from the University of California, Santa Barbara, and an Associate's degree in English from Orange Coast College.

Stay in the loop

Get our latest research.

Promo code studies, seasonal shopping guides, industry savings reports. No spam — unsubscribe any time.

Get the browser extension