Gumroad Bulk Discount Codes: One Code, Every Product
If you sell on Gumroad and you want to run a sale across your whole catalog, there's good news that a lot of older tutorials get wrong: Gumroad can apply one discount code to all of your products at once.
Those tutorials will tell you to walk through fifty product editors typing BLACKFRIDAY30 fifty times. That used to be the only way. It isn't anymore — discount codes moved out of the individual product editor and into a dedicated Discounts page, and that page has an All products option.
So if you landed here looking for "how do I make one coupon that works on everything," the answer is short and you'll have it in about ninety seconds.
What Gumroad still doesn't do in bulk is the second half of this guide: creating many different codes in one pass, and changing prices across products. That's where the manual grind still lives, and it's what genuinely needs a tool.
This guide covers all of it — single code, catalog-wide code, and the real remaining gaps around Gumroad bulk discount codes.
Discount code, offer code, coupon, promo code: all the same thing
Quick terminology cleanup, because Gumroad has used two names over the years and sellers use four:
- The dashboard now calls them discount codes.
- Gumroad's API still calls them offer codes (
offer_codes), which is why older docs, blog posts, and third-party tools say "offer code." - "Coupon," "promo code," and "voucher" aren't official Gumroad terms, but they mean the same thing.
They are one feature. If a tutorial tells you to look for "Offer codes" in the product editor, that tutorial is out of date — not describing a different feature.
One more distinction worth making early: a discount code is something the buyer enters (or gets pre-applied by a link). That's different from Gumroad's purchasing power parity setting, which is an automatic, region-based discount applied without a code. They can both be running at the same time, and they behave differently.
How to create a Gumroad discount code
Here's the current flow. This is the foundation for everything else, so it's worth knowing even if you later automate around it.
Step 1: Open the Discounts page
From your Gumroad dashboard, go to Checkout, then the Discounts tab. Note that this is a single, account-level page — not something inside an individual product. That's the change that makes catalog-wide codes possible.
Step 2: Click "New discount"
Gumroad auto-generates a random code for you. You can keep it or replace it with your own.
Stick to letters and numbers. Gumroad restricts what a code can contain — the help center says letters and numbers, while the API reference also permits dashes and underscores — so spaces and punctuation are the usual source of "why won't it save." LAUNCH30 works everywhere. LAUNCH 30! won't.
Step 3: Choose which products it applies to
This is the important field. You can either:
- Select specific products — the code validates only on those, or
- Check "All products" — the code works across your entire catalog, including products you add later.
That second option is the one most people arrive here looking for.
Step 4: Set the discount type and amount
Pick percentage (e.g. 30 for 30% off) or a fixed amount (e.g. $5 off).
A rule of thumb: percentages are safer across a mixed catalog. A flat "$5 off" applied to everything behaves very differently on a $50 product than on a $6 one, and on cheap products a large fixed discount can push the price under Gumroad's currency minimum and break checkout outright.
Step 5: Add limits (all optional)
Gumroad gives you four constraints, and each solves a specific problem:
| Setting | What it does | When you'd use it |
|---|---|---|
| Validity period | Start and end dates for the code | Schedule a sale in advance; auto-expire it without deleting it |
| Quantity / usage limit | Caps total redemptions | "First 50 buyers" launches |
| Minimum amount | Requires a minimum total spend on the code's products | Encourage bigger carts |
| Minimum quantity | Requires buying N or more units | Volume deals |
Two things worth knowing about these:
Validity periods are better than deleting codes. Setting an end date expires the code while keeping its revenue and usage stats intact. Delete a code and you lose the reporting on how it performed.
Minimum quantity has a prerequisite. The products it targets must have "Allow customers to choose a quantity" turned on. Without that toggle, the buyer can't select a quantity at all, so a minimum-quantity code can never be satisfied. This one silently does nothing if you miss it.
Step 6: Save, then actually test it
Save the code, then open your product page in a private/incognito window and run through checkout to confirm the price drops by the amount you expect.
Test at least one code per sale, every time. A percentage typo that goes live is a genuinely expensive mistake, and nothing in the dashboard will warn you that 90 was supposed to be 9.
Applying one code to every product
To restate it plainly, because this is the query that brings most people here:
Yes — Gumroad has a native way to apply one discount code to all products. Create the discount from Checkout → Discounts, and check All products instead of picking items individually.
Under the hood this is a single code flagged as universal, not many copies of the same code. That has real consequences worth understanding:
- New products are covered automatically. Launch something mid-sale and the universal code already works on it. If you'd instead added the code to 40 products individually, product 41 would be a silent gap.
- Turning the sale off is one action. You edit or expire one code, not forty.
- Reporting is unified. You see redemptions for one code rather than trying to add up forty separate ones.
If you only need one code across your catalog, you're done — you don't need a tool, and you shouldn't buy one. Anyone telling you Gumroad can't do this is describing a dashboard that no longer exists.
Sharing a link with the discount already applied
Buyers mistype codes constantly, and some checkout flows don't show the code field prominently. You can skip the problem by baking the code into the URL:
https://yourname.gumroad.com/l/yourproduct?offer_code=LAUNCH30
The path form also works:
https://yourname.gumroad.com/l/yourproduct/LAUNCH30
The buyer sees the discounted price already applied, with the original crossed out. For email campaigns, affiliate partners, and social posts, share the pre-coded link rather than asking people to type anything. It removes typos, capitalization mistakes, and "where do I enter this?" in one move.
Note that Gumroad codes are case-sensitive — Launch30 and LAUNCH30 are different codes. Pre-applied links sidestep that entirely.
What Gumroad still can't do in bulk
Here's the honest boundary. Native discounts handle one code, many products very well. What they don't handle is many codes — because "New discount" creates exactly one code per pass.
Three jobs still cost real time:
Many different codes at different rates. Regional pricing is the clearest case. If you want explicit codes for India, Brazil, Indonesia, the Philippines, Mexico, Nigeria and a dozen more markets — each at a different percentage — that's not one code applied broadly. That's twenty separate codes, which means twenty trips through the New discount form. The "All products" checkbox does nothing to help, because the whole point is that each region gets a different number.
Price changes. Discounts and prices are separate systems. If you want to permanently drop every product 20%, or round your catalog to cleaner numbers, no discount code does that. You're editing products one at a time, and there is no native bulk price editor. That's covered in more depth in the bulk price change guide.
Cleanup at scale. Codes you created individually have to be reviewed individually. This is mostly avoidable with discipline — use validity periods so codes expire themselves — but a pile of legacy codes with no end dates is a manual audit.
| Task | Native Gumroad | Needs a tool? |
|---|---|---|
| One code on one product | Yes, built in | No |
| One code on all products | Yes — "All products" | No |
| One code on a specific subset | Yes, select products | No |
| Schedule / auto-expire a code | Yes, validity period | No |
| Pre-apply a code via link | Yes, URL parameter | No |
| 20 region codes at 20 different rates | One at a time | Yes |
| Bulk price changes | One at a time | Yes |
The first five rows are why this guide spent so long on the native flow. Most people genuinely don't need anything else.
Under the hood: how this works in the API
Worth a short detour, because it explains what any third-party tool is actually doing and helps you evaluate one.
Gumroad's public API v2 lives at https://api.gumroad.com, with endpoints under /v2/, authenticated with a bearer token. Offer codes are created against a product:
POST /v2/products/:product_id/offer_codes
The parameters mirror the dashboard: name (the code text), offer_type, amount_off, an optional max_purchase_count, and — the interesting one — universal, which controls whether the code applies to all of your products.
One detail that trips people up: the values are percent or cents. A flat discount is expressed in cents, so $5 off is offer_type=cents with amount_off=500; percentages are offer_type=percent with amount_off=30. And the failure mode here is silent rather than loud — the controller branches on offer_type == "percent" and treats everything else as cents, so a typo like fixed does not return an error. It quietly creates a 500-cent discount instead of the 500% one you thought you were rejecting.
That universal parameter is the API-side equivalent of the "All products" checkbox. Antiwork, Gumroad's parent company, also publishes a gumroad command-line client in its GitHub org, which exposes the same universal option when creating a code.
So a legitimate bulk tool isn't doing anything exotic or against the rules. It's calling the same documented endpoints you could call yourself with a script — just with a UI and a queue in front of them.
To use the API at all you need an access token, which you generate under Settings → Advanced by creating an application and clicking "Generate access token." The full walkthrough, including what the redirect URI is for, is in the access token guide. Treat that token like a password — it has write access to your account.
One caveat: Gumroad doesn't publish a specific rate-limit ceiling. The API returns 429 Too Many Requests when you push writes too fast, and since there's no documented number to design against, the only workable approach is the ordinary one — pace your writes and back off and retry on a 429 rather than hammering. Any tool that fires hundreds of writes as fast as it can is going to hit that wall. Pacing isn't optional.
Where a tool actually helps
Given all of the above, the case for a bulk tool is narrower and more specific than most posts on this topic pretend. It's about generating sets of codes and changing prices — not about doing something Gumroad already does natively.
GumKit is an independent Chrome extension for Gumroad sellers. It is not affiliated with, endorsed by, or sponsored by Gumroad — it's a third-party tool that talks to Gumroad's own official API on your behalf.
How it works, plainly:
- It calls Gumroad's official API v2 directly from your browser. No scraping, no clicking through the UI on your behalf, no rate-limit tricks.
- You connect it with your own Gumroad access token, generated in your own account settings. The token is stored only in your browser (
chrome.storage.local) — there is no GumKit server holding your credentials. - Because it's your token on your account, you stay in control and can revoke access from Gumroad's settings at any time, which cuts off the tool instantly.
- Bulk jobs run as a paced queue with a progress bar, deliberately throttled well below where the API starts refusing writes. The job survives closing the popup and can be cancelled mid-run, so a long job is a few minutes of unattended work rather than a wall of
429s.
What it's actually for:
- Regional price presets. An editable region-to-percentage table that generates the whole set of regional codes in one pass, instead of twenty separate trips through the New discount form. The tradeoffs versus Gumroad's automatic PPP toggle are covered in the PPP pricing guide.
- Bulk price changes. Set a fixed price, or apply a ± percentage, across selected products at once.
- One code across a selected set of products, when you want a specific subset rather than everything.
- Customer CSV export. Pull sales history — buyer email, name, product, amount, date — into a spreadsheet.
GumKit is free to use — bulk jobs included.
Two things it deliberately doesn't do, so there are no surprises. It can't upload or create products in bulk — Gumroad's API has no endpoint for adding products, so no tool can, regardless of what it claims. And it can't override Gumroad's currency minimums or fee floors; those are Gumroad's rules and no third-party tool should pretend otherwise.
When not to use bulk discount codes
Reaching for bulk isn't always right:
- You have fewer than ten products. The native flow is faster than setting up any tool. Just use it.
- You only need one code everywhere. "All products" solves this completely. Adding a tool adds risk for no gain.
- You're discounting deeply on cheap products. A large discount on a low-priced item can push the total below Gumroad's currency minimum and fail checkout. Verify one purchase manually before applying anything broadly.
- You haven't decided your pricing strategy. Bulk tools make it fast to apply a decision — including a bad one — across everything at once. Bulk applies mistakes at scale too. Decide first, then apply.
- You want permanent price changes. Use price changes, not stacked discount codes. Codes are for temporary promotions; a permanent "sale" that never ends just trains buyers to never pay full price.
Troubleshooting the common failures
The failures cluster into a handful of causes:
- The code works on one product but not another. It's product-specific and that product isn't on the list. Either add it, or switch the code to "All products."
- The code is rejected outright. Check capitalization (codes are case-sensitive) and look for a trailing space copied from an email.
- The code stopped working mid-sale. Either the validity period ended or the usage limit was reached.
- Two codes won't combine. Only one discount applies per checkout. They don't stack — create a single code at the combined rate instead.
- Checkout errors instead of discounting. The discounted price is likely under Gumroad's currency minimum.
- A minimum-quantity code never applies. The product doesn't have "Allow customers to choose a quantity" enabled.
Each of these, with the specific fix, is covered in the discount code not working guide.
FAQ
Can I apply one discount code to all products on Gumroad?
Yes. Go to Checkout → Discounts → New discount and check All products. The code applies across your entire catalog as a single universal code, and it automatically covers products you add later. Older guides claiming this is impossible are describing a previous version of the dashboard.
Where are offer codes now? They're not in the product editor.
They moved. Discount codes are managed from the account-level Checkout → Discounts page rather than inside each product. The API still uses the name offer_codes, which is why the two terms coexist.
How do I make a 100% off Gumroad code?
Create a percentage discount and set the amount to 100. The product becomes free for anyone using that code, and buyers still go through checkout, so they're recorded as customers and appear in your sales export. This is the standard way to give away paid products to reviewers, affiliates, or newsletter subscribers. Set a usage limit and an expiration date — a 100%-off code with neither is one a stranger will eventually find and share.
Are Gumroad discount codes case-sensitive?
Yes. SALE20 and sale20 are different codes and only the exact string validates. Share codes as pre-applied links (?offer_code=SALE20) to remove the problem entirely.
Can buyers stack two discount codes?
No. Gumroad applies only one code per checkout. If you want a deeper combined discount, create one code at that combined rate.
Should I delete codes after a sale or let them expire?
Set a validity period and let them expire. Expiring keeps the code's revenue and usage statistics intact for reporting, while deleting removes that history. It also means you can't forget to turn the sale off.
Will bulk-creating codes get my account rate-limited?
It can, if the tool is careless. Gumroad doesn't publish an exact ceiling and returns 429 Too Many Requests when you cross it, so a tool has to assume a conservative limit of its own and back off when it sees a 429. A well-built one paces its writes and runs jobs as a resumable queue rather than firing everything at once. Ask how any tool handles pacing before you point it at your catalog.
Is it safe to connect a Chrome extension to my Gumroad account?
It depends entirely on how it connects. The safe pattern is an access token you generate in your own Gumroad settings, stored locally in your browser, used against Gumroad's official documented API — no password sharing and no scraping. You can revoke that token from Gumroad at any time. Be much more cautious with anything asking for your Gumroad password directly, or that stores your token on someone else's server.
What's the difference between a discount code and PPP?
A discount code requires the buyer to enter it (or arrive via a pre-coded link) and applies the exact discount you set. Purchasing power parity is an automatic, region-detected discount applied without any code. Codes give you explicit control over which markets get which rate; PPP is coarser but requires no setup.
The takeaway
The most common question behind "Gumroad bulk discount codes" now has a boring answer: Gumroad does it natively. Create the discount once under Checkout → Discounts, check All products, set a validity period, and test it in an incognito window. For one code across your catalog, that's the whole job — no tool required, and don't let anyone sell you one for it.
The work that's still genuinely manual is many codes: a set of regional prices at different rates, or price changes across a catalog. That's one code per pass in the dashboard, and it's the part that scales badly.
If that's where you are, GumKit generates those sets in one paced run using your own Gumroad token and Gumroad's official API — free to use — bulk jobs included, no server holding your credentials, and no scraping. And if all you needed was the "All products" checkbox, you got that for free at the top of this page.
Get GumKit for Chrome
Bulk discount codes, PPP regional pricing, bulk price changes and customer CSV export for Gumroad — all using your own API token. Free, runs in your browser, no server.
More Gumroad guides
- Best Gumroad Chrome Extensions (2026): Every One I Could Actually Verify
- Export Gumroad Customers to CSV: Every Column, Field, and Gotcha (2026)
- Gumroad API Access Token: How to Create, Use, and Revoke It (2026)
- Gumroad API Rate Limit: What Actually Triggers a 429
- How to Change Prices on All Gumroad Products at Once (2026)
- Gumroad ConvertKit Integration: What Exists, and How to Move Buyers to Kit
- Gumroad Sales CSV Export Wrong Data? A Symptom-by-Symptom Diagnosis
- Gumroad Discount Code Not Working? Every Error String, Decoded
- Gumroad Fees Explained (2026): What You Actually Keep
- Gumroad PPP Pricing: How the Native Toggle Works vs Region Codes
- Gumroad Sales Tax & VAT: What Sellers Actually Owe (2026)
- Gumroad SEO: What Your Product Page Actually Sends to Google
- Gumroad vs Lemon Squeezy (2026): Which Should Digital Sellers Use?
- ParityDeals Alternative for Gumroad: 4 Options Compared