GumRoad.md — Operator Playbook (template)
This is a reusable playbook template. Fork it for your own digital-product launches. Replace
[YOUR COMPANY],your-domain.com,yourstore.gumroad.com, etc. with your real values. Keep the section headers — the bundled QA runner reads this file and validates every section is present.Original by Meerkat LLC · Anna, Texas. Sold via Gumroad as the Gumroad QA Kit.
A reusable reference for launching any [YOUR COMPANY] digital product on Gumroad. Walks through the same "set up to the legal-review gate, then pause for attorney sign-off" pattern that meerkat-llc-studio and your-product-permalink both use.
Last updated: 2026-05-06. Operator-only. Not deployed publicly.
When to use Gumroad vs. Stripe Payment Links
| Gumroad | Stripe Payment Link | |
|---|---|---|
| Per-sale fee | 10% + $0.30 (free plan) → 3.5%+$0.30 (paid plan once consistent) | 2.9% + $0.30 |
| File delivery | Built-in, instant | DIY (n8n + S3 signed URL + Postmark) |
| License keys | Built-in (optional) | DIY |
| EU VAT MOSS | Handled automatically | DIY (Stripe Tax adds 0.5%) |
| Buyer trust signal | "Gumroad" name carries indie-creator weight | Stripe is more "store" feel |
| Setup time | ~30 minutes | ~2 hours (n8n flow + Postmark + S3) |
| Best for | First launches, low volume, simple SKUs | High volume, brandable checkout, custom flows |
Rule of thumb: every new [your brand] product launches on Gumroad first. Move to Stripe per-product once monthly volume × Gumroad fee delta > $100/mo.
The reusable launch sequence
This is the order [your brand] products go through. It's the same for every release.
Phase 1 — Pre-listing prep (no Gumroad action yet)
- Build the .zip. Whatever the product is, package it deliverable-ready. See
your-product-permalink/andmeerkat-llc-studio/for two reference packages. - Build the marketing pages. Mirror the studio pattern —
index.html,getting-started.html,support.html,faq.html,thank-you.html, plus SEO files (robots.txt,sitemap.xml,_headers,_redirects,netlify.toml,vercel.json,wrangler.toml). - Stage the legal pages (
terms.html,privacy.html,refunds.html,license.html,acceptable-use.html) as drafts based ongumroad-docs/01–05. STOP HERE. Hand to attorney for review. - Build the Gumroad listing pack in
<product>/gumroad-listing/: -01-product-description.md(paste into Gumroad listing) -02-feature-bullets.md(top fold) -03-faq.md(append below description) -04-delivery-email.md(receipt customization) -05-refund-policy.md(snippet for the listing) -06-launch-checklist.md(your checklist) -07-promo-pack.md(launch-week social copy)
Phase 2 — Attorney review (the gate)
Send the attorney:
- The drafted legal pages from Phase 1.3
- The matching central source docs in
gumroad-docs/ - A one-paragraph description of what's new about this product (e.g., "voice data, prosody scoring, GDPR implications for emotion classification")
Common asks they'll come back with:
- Tighten the data processing language if the product handles voice/biometric/PII
- Confirm right-to-record / two-party consent disclosures (esp. for Twilio products)
- Check EU AI Act language if any "emotion classification" or "inference" is happening
- Confirm the EULA's AI training carve-out matches your stance
Phase 3 — Gumroad product setup (after legal sign-off)
Use the per-product gumroad-listing/06-launch-checklist.md for the full step-by-step. The high-level steps are below.
One-time account prep (skip if done once)
- Sign up at gumroad.com as [YOUR COMPANY]
- Settings → Profile: username
meerkatllc(so URLs areyourstore.gumroad.com/l/<permalink>) - Settings → Payments: connect bank or PayPal
- Settings → Tax info: submit W-9
- Settings → Taxes: enter business address (Anna, TX 75409)
Per-product setup
- Products → New product → Digital
- Title, permalink (matching the website folder name), price (USD, fixed)
- Upload the .zip
- Cover image: 1200×630 OG image
- Description: paste from
gumroad-listing/01-product-description.md - Append FAQ + refund snippet
- Custom Receipt URL → set to
https://your-domain.com/<product>/thank-you.html⚠ silent failure mode — without this set, buyers stay on Gumroad's default download page and never see your post-purchase page. Every first-time Gumroad seller misses this. - Settings → Receipts: customize the receipt email using
gumroad-listing/04-delivery-email.md - License keys: enable if desired (Settings → License key) — Gumroad will then append
?license_key=...to the redirect URL
After-purchase URL parameters (what Gumroad sends to the redirect)
Gumroad appends these query-string params to the Custom Receipt URL on a successful purchase:
| Param | Format | Notes |
|---|---|---|
sale_id |
string | Gumroad's order ID — render as the order number |
purchaser_id |
string | buyer's Gumroad account id |
product_id |
string | matches the Gumroad product GUID |
product_permalink |
string | e.g. your-product-permalink |
product_name |
string | display name |
email |
string | buyer's email — render and use for support follow-ups |
price |
integer string | in cents (e.g. "2500" for $25.00) — divide by 100 to display |
currency |
string | usd etc. |
quantity |
integer string | usually 1 |
license_key |
string | only present if license keys are enabled on the product |
subscription_id |
string | only on subscription products |
discover_fee_charged |
boolean | whether Gumroad charged the Discover fee |
The thank-you.html template in every product reads these params via inline JS (see the <script> block at the bottom of your-product-permalink/thank-you.html for the canonical pattern). It populates Order, Email, Amount, and License Key on the page so the buyer sees their actual purchase details — no server work required.
The same template also handles Stripe's ?session_id=cs_xxx flavor for Path B.
To test the page in isolation (any browser):
thank-you.html?sale_id=demo123&email=buyer@example.com&price=2500&license_key=ABCD-1234
If you change the per-product price, you do NOT need to edit the HTML — the JS reads price from the URL and renders it. The static $25.00 in the markup is just a fallback for direct visitors with no params.
Wire the website Buy buttons
Two places to update for every product:
meerkat-llc-site/index.html— homepage product cardmeerkat-llc-site/<product>/index.html— product landing page
Both should point at https://yourstore.gumroad.com/l/<permalink> (or your real Gumroad URL once it's confirmed live).
Then deploy:
cd ~/Desktop/meerkat-llc-site
./deploy.sh
Test the full flow
- Open the homepage product card in a private window → click Buy
- Complete a real test purchase with your own card
- Confirm receipt email body, .zip downloads + extracts cleanly, success redirect lands on
thank-you.html - Refund yourself in Gumroad → Sales → Refund (so you don't keep the $25 from yourself)
Phase 4 — Launch + monitor (use gumroad-listing/07-promo-pack.md)
- Day 0: LinkedIn post ([Operator] + [your brand] company page), X / Twitter thread, email to existing list
- Day 1: community posts where allowed (n8n / Notion forums, Indiehackers — read forum rules first)
- Day 3: follow-up post with first sale screenshot or first happy buyer quote
- Week 2: ProductHunt launch only if there's a meaningful upgrade or real testimonial
- Week 4: retrospective post — what shipped, what broke, what's in v1.1
Phase 5 — Ongoing
- Reply to support emails within 4 hours during launch week, 24 hours steady-state
- Note recurring questions → fold into the FAQ for v1.1
- After 10 sales, replace placeholder testimonials in the description with real ones
- After 50 sales, consider raising the price (founder-pricing window closes)
- Monthly: review the Gumroad payouts vs. Stripe fee delta; switch to Stripe Payment Link once it pencils out
Worked example — Your Product Name ($25)
Where it currently sits in the sequence (May 2026):
- ✅ Phase 1.1 —
your-product-permalink.zippackaged (1 MB, 56 files) - ✅ Phase 1.2 — Marketing pages staged in
your-product-permalink/(mirroring studio's pattern) - ✅ Phase 1.3 — SEO files (
robots.txt,sitemap.xml,_headers,_redirects,netlify.toml,vercel.json,wrangler.toml) - ✅ Phase 1.4 — Gumroad listing pack written in
your-product-permalink/gumroad-listing/ - ⏸️ Phase 2 — PAUSED — legal pages need attorney update
- ⏳ Phase 3 — Gumroad listing creation (after Phase 2 sign-off)
- ⏳ Phase 4 — Launch
- ⏳ Phase 5 — Ongoing
Buy-button placeholders are wired in:
- meerkat-llc-site/index.html (homepage card)
- meerkat-llc-site/your-product-permalink/index.html (package landing)
Both currently point at https://yourstore.gumroad.com/l/your-product-permalink, which becomes live once Phase 3 publishes the listing.
Reference docs
| File | What it is |
|---|---|
gumroad-docs/00-README.md |
Overview of the central Gumroad doc pack |
gumroad-docs/01-terms-of-service.md |
Source ToS — feeds product terms.html drafts |
gumroad-docs/02-privacy-policy.md |
Source privacy policy |
gumroad-docs/03-refund-policy.md |
Source refund policy |
gumroad-docs/04-eula-license.md |
Source EULA — feeds product LICENSE.md |
gumroad-docs/05-acceptable-use.md |
Source acceptable use policy |
gumroad-docs/06–08b |
Generic Gumroad listing assets |
gumroad-docs/09-delivery-email.md |
Receipt email source |
gumroad-docs/10-support-policy.md |
Support SLA |
gumroad-docs/11-troubleshooting.md |
Customer troubleshooting (forks per product) |
gumroad-docs/12-onboarding-checklist.md |
First-time installer checklist (forks per product) |
gumroad-docs/13-invoice-template.md |
B2B invoice template |
gumroad-docs/14-sales-tax-notice.md |
US sales tax disclosure |
gumroad-docs/15-w9-cover-note.md |
W-9 reply for B2B AP teams |
meerkat-llc-studio/DELIVERY-SETUP.md |
Worked example of the dual-path (Gumroad + Stripe) flow |
your-product-permalink/DELIVERY-SETUP.md |
Voice Suite's specific delivery doc |
Common gotchas (from prior launches)
- Custom Receipt URL not set → buyers never see your thank-you page. Easy to miss because Gumroad's default download page works fine. The redirect is opt-in per product, in Settings → Custom Receipt URL. Without it, your
thank-you.htmlis unreachable except by direct link. file://directory listing leaks the buyer's local path. When buyers unzip the package and drag the folder into Chrome, Chrome shows its own auto-generated directory listing —Index of /Users/<their-name>/Downloads/your-product-permalink/— instead of openingindex.html. Browsers do not auto-serveindex.htmlforfile://URLs. Don't let this happen on your watch — see "Buyer entry-point checklist" below.- Gumroad URL drift. The username in the URL must match what's in your Settings → Profile. If you change usernames after wiring buy buttons, every product page needs an update.
- Cover image cropping. Gumroad crops to its aspect ratio (~16:9). The [your brand] 1200×630 OG images survive this fine, but eyeballed-up text near the edges can clip.
- EU VAT receipts. Some buyers' AP teams want a VAT-compliant invoice. Gumroad provides one but it's emailed separately ~24 hours after purchase. Document this in
gumroad-listing/03-faq.mdfor any new product. - Receipt email Markdown. Gumroad's editor drops some Markdown features (notably backticks on a fresh line). Test before going live.
- Refund button. Buyers sometimes ask for a refund through email rather than Gumroad's dashboard refund flow. Process it via Sales → Refund anyway so the books match.
Brand assets — canonical (use these for every product)
| Asset | File | Used as |
|---|---|---|
| Professor [your brand] photo | assets/your-logo.png (site root) → copy into each product as assets/your-logo.png |
the icon on every [your brand] product. Header logo-mark, OG card, Gumroad cover. Always the same image. Use a border-radius: 50% round crop on small placements (header logo-marks ≤ 80px), un-cropped on large hero cards. |
| Wordmark | text "[YOUR COMPANY]" set in the page's display font | next to the icon in headers + in footers |
| Color accents | #d4a574 sand · #ff6d5a accent · #c97a4a deep · #22d3ee cyan-info · #4ade80 success |
brand gradient and accents — see studio CSS for the canonical use |
For every new product, in the package's assets/ folder copy this single file as meerkat-llc-logo.jpg and reference it from every HTML page's header and OG meta. Don't generate a new mascot, don't use a CSS-gradient placeholder, don't crop the face out. Same Professor [your brand] across every [your brand]-LLC product.
If a square-cropped version is needed for app icons / favicons / social squares, derive it from the same source file.
Buyer entry-point checklist (handle the file:// gotcha)
When a buyer unzips a [your brand] product, they have to navigate into the folder to get anywhere. Most browsers will show Chrome's Index of /Users/.../<product>/ directory listing instead of the proper landing page. Every [your brand] product zip should ship with all of these to handle that:
| File | Purpose |
|---|---|
index.html (at root) |
The proper landing page. Browsers serve this when a real web server points at the folder, but not for file:// URLs. |
START-HERE.html (at root) |
One-page redirect to index.html with a giant "Open the suite" button. Visible to buyers in the directory listing because of the obvious filename. Includes a <meta http-equiv="refresh"> so it auto-bounces. |
Open-Suite.command (or Open-<Product>.command) |
macOS double-click launcher. One-line bash that opens index.html in the default browser. Set executable (chmod +x) before zipping. |
Open-Suite.bat |
Windows double-click launcher. One-line batch file that start ""s index.html. |
Open-Suite.sh |
Linux launcher. xdg-open with sensible-browser fallback. |
index.html in every subfolder |
Each subfolder (docs/, workflows/, voice-fixtures/, etc.) needs its own styled index.html so buyers don't fall through to a Chrome directory listing of that subfolder either. Each one should list the folder's contents with friendly descriptions and a "← Back to suite" link. |
Acceptance test before launch:
# In Terminal, cd to your unzipped product folder, then run:
open "." # macOS — opens in Finder
# Then drag the folder window into Chrome and confirm the URL bar
# shows file:///… and the page is one of:
# ✅ START-HERE.html (auto-redirecting)
# ✅ index.html (the styled landing)
# NOT:
# ❌ "Index of /Users/…/<product>/" (Chrome's raw directory listing)
If you see the raw directory listing, the package is missing one of the entry-point files above. Add it and re-zip before listing.
Automated check — REQUIRED before publishing:
The gumroad-qa/ folder ships an automated runner that validates every item on this checklist against the live Gumroad product and the deployed website folder. Two equivalent runners:
gumroad-qa/run-qa.py <permalink>— offline Python, exit code 0/1, ~10 sec per productgumroad-qa/n8n-gumroad-qa-workflow.json— n8n workflow that posts results to Slack + logs to Notion
Both read this GumRoad.md as the spec source of truth, validate every required section is present, and cross-check that the runner's required-file list still matches what's documented here. If GumRoad.md drifts from the runner config, the spec-validation step fails loudly — you'll know to update either the spec or the runner before the real product checks run.
export GUMROAD_TOKEN=...
cd ~/Desktop/meerkat-llc-site/gumroad-qa
python3 run-qa.py your-product-permalink # must show PASS before you click "Publish" on Gumroad
See gumroad-qa/README.md for the full check list mapped to GumRoad.md sections.
The receipt email should explicitly tell buyers what to double-click, since "open the folder" doesn't take them anywhere useful. Use this line in gumroad-listing/04-delivery-email.md:
After unzipping, double-click
index.html(orOpen-Suite.commandon Mac /Open-Suite.baton Windows) to open the landing page. Don't just open the folder — your browser will show a raw file listing.
Per-product fee math
To know whether to stay on Gumroad or move to Stripe Payment Links:
gumroad_fee_per_sale = price × 0.10 + 0.30 (free plan)
stripe_fee_per_sale = price × 0.029 + 0.30
delta_per_sale = gumroad_fee_per_sale − stripe_fee_per_sale
monthly_loss_on_gumroad = sales_per_month × delta_per_sale
| Price | Sales/mo | Gumroad fee | Stripe fee | Monthly delta |
|---|---|---|---|---|
| $25 | 5 | $14.00 | $5.13 | $8.87 |
| $25 | 50 | $140.00 | $51.25 | $88.75 |
| $25 | 100 | $280.00 | $102.50 | $177.50 |
| $195 | 5 | $99.00 | $29.78 | $69.22 |
| $195 | 50 | $990.00 | $297.75 | $692.25 |
Move to Stripe per-product when monthly_loss_on_gumroad > $100.
Glossary
- Permalink — the slug at the end of the Gumroad URL (
yourstore.gumroad.com/l/<permalink>). Set per-product, immutable once you have buyers. - License key — Gumroad's optional per-buyer activation token. Useful for software you want to gate, optional for static .zip downloads.
- MOSS — Mini One-Stop Shop, the EU VAT scheme Gumroad handles for you.
- Founder pricing — a deliberately low launch price to gather testimonials/reviews. Raise after 10–50 sales.
"[YOUR COMPANY]" and the Professor [your brand] mascot are marks of [YOUR COMPANY].
© 2026 [YOUR COMPANY] · your-domain.com · support@your-domain.com · built with care in [your city]