# Run every Gumroad discount code from one campaign desk

> See every discount code across all your Gumroad products in one table, fix the ones about to run out, and launch new promos an agent plans for you.

- Workflow type: app
- Services: Gumroad, Google Sheets
- Categories: Marketing, Operations
- Published: 2026-08-24

## What it does

- One table with every product you sell and every discount code under it, showing the discount, how many times it has been used, how much of the cap is left, and which codes are nearly exhausted or already dead.
- Create a new code, raise the cap on one that is about to run out, or retire a finished promo without leaving the page.
- A "Plan a promo" button on each product hands the work to a background agent that studies recent sales, picks a discount depth it can justify, sets up the code, and writes launch copy you can paste into an email or a post.
- Every code the desk creates is logged to a campaign ledger spreadsheet, and a refresh fills in the revenue from the seven days after each launch so you can see which discounts actually paid off.

## What you'll need

- A Gumroad account with the products you sell, and permission to manage discount codes on them
- A Google account and a spreadsheet you want to use as the campaign ledger
- A rough idea of how deep a discount you are willing to offer, so the promo planner stays inside your limits

## Prompt

I sell about a dozen products on Gumroad and I run discounts across all of them, but Gumroad only lets me manage offer codes one product at a time from each product's checkout page, so there is no single place to see what is running. Build me a discount campaign desk: one app where I can see every code across every product, act on them inline, and plan new promos.

The home view is one table. Load every product with the Gumroad List Products operation, then for each product load its codes with List Offer Codes, and use Get Offer Code to fill in the per-code detail the list response does not carry. Group the rows by product so I can scan a product and see all of its codes underneath it. Each code row should show the code itself, the discount (percentage off or a fixed amount off), how many times it has been used, the usage cap, how many uses are left, and the validity window when the code has a start or end date. Gumroad returns money amounts in cents, so divide by 100 and format as currency before displaying anything.

Add a status column that calls out the codes I need to act on. Flag a code as nearly exhausted once it has used most of its cap, defaulting to 80 percent or more and letting me change that threshold, and flag it as dead once the cap is fully used or the validity window has ended. Let me sort and filter the table by status so I can pull up just the codes that need attention, and show counts of nearly exhausted and dead codes at the top of the page.

I want three actions available inline from the table. First, mint a new code on any product with Create Offer Code, using a small form where I set the code text, the discount as either a percentage or a fixed amount off, the usage cap, and an optional validity window. Second, raise or lower the cap on an existing code with Update Offer Code. That operation only adjusts the usage cap, so present it as a cap change rather than a general edit, and make it clear in the interface that the discount amount cannot be changed once the code exists. Third, retire a finished promo with Delete Offer Code. Deleting is permanent in Gumroad, so put a confirmation step in front of it that names both the code and the product.

Put a "Plan a promo" button on every product row that kicks off a background agent scoped to that product. The agent pulls recent sales for the product with List Sales, using the ISO8601 before and after filters to bound a recent window, and works out how the product has actually been selling: volume, revenue, the trend over the window, and what any past discounting looks like. From that it decides what discount depth is justified, creates the code with Create Offer Code, and writes launch copy I can paste straight into an email or a social post. It returns a plan into the app containing its read on the product's sales, the discount it chose and the reasoning behind it, the code it created with its cap and window, and the launch copy.

The plan lands in a review panel inside the app rather than going anywhere else. A newly created code does nothing until I actually share it, so nothing is live until I approve the plan and use the copy. From the review panel let me approve a plan, which marks the campaign as launched, or discard it, which deletes the code the agent created using Delete Offer Code so a rejected plan does not leave a stray code sitting on the product. Keep past plans per product with timestamps so I can look back at what was suggested.

Every code the desk creates, whether I minted it inline or the agent created it, should be appended to a campaign ledger spreadsheet in Google Sheets using the Append Values operation. Each row should carry the launch date, the product name, the code, the discount, the usage cap, whether it came from me or from the agent, and empty columns for the revenue figures that get filled in later. Let me choose the spreadsheet and the tab the ledger writes to.

Add a refresh action on the ledger. It reads the existing rows with Get Values, finds campaigns that launched at least seven days ago and do not have revenue filled in yet, and for each one pulls that product's sales with List Sales, setting the ISO8601 after and before filters to the launch date and seven days after it. Total the revenue for that window, remembering amounts come back in cents, and write the figures back into the matching ledger rows with Update Values. Include both the revenue in the seven days after launch and how many of that code's uses landed in the window, so the ledger ends up showing which discounts actually paid off.

Keep the whole thing tight: the product and code table is the home view, the ledger and the saved promo plans are reachable from it, and every action is available from the row I am already looking at.

## How to customize

- Change what counts as nearly exhausted. By default a code gets flagged once it has used most of its allowance, and you can move that line wherever you like.
- Tell the promo planner how deep a discount it may suggest and what tone to write the launch copy in, so it sounds like you.
- Point the ledger at a different spreadsheet or tab, and change the revenue window from seven days to whatever matches how your launches actually run.

## FAQ

### Can I finally see discount codes from all my products in one place?

Yes, that is the whole point. Gumroad handles codes one product at a time from each product's checkout page, so there is no cross product view. This desk pulls every product and every code underneath it into a single table you can sort and filter.

### Can I change the discount amount on a code that already exists?

Gumroad lets you adjust how many times an existing code can be used, but not the discount itself. So the desk frames inline edits as raising or lowering the usage cap. If you want a different discount amount, retire the old code and mint a new one, which takes a couple of clicks in the same table.

### What happens when I retire a code?

Deleting a code in Gumroad is permanent, so the desk always asks you to confirm first and shows you exactly which code on which product you are about to remove.

### Does the promo planner publish anything without asking me?

No. It works out the discount, sets up the code, and writes the launch copy, then hands the whole plan back to the app for you to review. A code does nothing until you actually share it, so nothing reaches your audience until you approve the plan. If you discard it, the desk removes the code it created.

### How does it know whether a discount actually worked?

Every code the desk creates gets a row in your campaign ledger. When you hit refresh, it looks at each campaign that launched at least a week ago and fills in the revenue from the seven days after launch, so you can compare promos side by side instead of guessing.

### Does it touch my products or my prices?

No. The desk only reads your product list and works with discount codes. Your products, prices, and pages stay exactly as they are.

Use this prompt in General Input: https://www.generalinput.com/prompts/run-every-gumroad-discount-code-from-one-campaign-desk