Gumroad Bulk Discount Codes: One Code, Every Product

Updated 2026-07-27 · GumKit guides

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:

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:

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:

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-sensitiveLaunch30 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:

What it's actually for:

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:

Troubleshooting the common failures

The failures cluster into a handful of causes:

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.

Add to Chrome — it's free