Itch Pay-What-You-Want vs Steam Demo SKU Economics Worksheet - 2026
You ship two public SKUs: an itch.io page with a pay-what-you-want (PWYW) browser build and a Steam listing with a fest demo (no purchase yet, or a separate demo app ID). Marketing blogs tell you to “be everywhere.” They rarely show which SKU eats cash and which SKU might return dollars before October 2026 Next Fest burns your runway.
This Money & Business worksheet is that math. It pairs with fest marketing spend cap—caps spend; this file compares SKU economics so you do not fund two storefronts while pretending one is free.
It is not a Steam metadata parity checklist, not a Butler upload tutorial (see itch ninety-minute QA pass), and not an opinion piece on unscoped HTML5—though you should read itch browser demo discipline before checking “free marketing” on the cost column.
Who this is for and what you get
| Audience | Outcome |
|---|---|
| Solo dev with itch + Steam demo | One-page SKU economics with honest zeros |
| Producer | Defend why PWYW minimum is $0 or $2 |
| Finance-minded lead | Stop rules when dual-SKU ops exceed cap |
Time: ~60–90 minutes first fill; 15 minutes when a build or price changes.
Prerequisites: Monthly burn estimate, fest spend cap draft, both URLs live or dated.
Why this matters now (May 2026)
- Dual-SKU normalization — Two-storefront fragmentation is default for 2026 micro-studios; economics lagged behind ops guides.
- Fest spend signing season — Trailer and ad quotes land in May–June; teams forget itch hosting, WASM fixes, and duplicate QA hours when capping fest ads.
- PWYW psychology — $0 minimum drives plays but rarely rent; worksheet forces explicit subsidy line for browser SKU.
- Steam demo ≠ revenue — Wishlists are not cash; worksheet separates discovery SKU from tip jar SKU.
- Refund signal literacy — Refund dashboard tutorial tracks Steam; itch chargebacks and “false expectation” comments belong in separate rows here.
Direct answer: Fill dual-sku-economics-2026.md with cost lanes per SKU, realistic revenue lanes, and runway stop rules before increasing fest marketing spend.
Definitions — two SKUs, four money lanes
| Term | Meaning in this worksheet |
|---|---|
| itch PWYW SKU | Browser (or download) page with named price floor + tips |
| Steam demo SKU | Demo app or demo depot on Steam store (wishlist funnel) |
| Cash out | Invoices, contractors, paid ads, platform fees |
| Labor out | Your hours × optional internal rate (documented, not in cap %) |
| Revenue in | itch tips + named price sales + Steam demo DLC (usually $0 pre-launch) |
| Discovery value | Wishlists, follows, mailing list—track counts, do not book as cash |
Step 1 — SKU decision gate (should you run both?)
Answer before the spreadsheet—honest Y/N:
| Question | If No → action |
|---|---|
| Can you maintain two build_ids with evidence? | Drop one SKU until BUILD_RECEIPT discipline exists |
| Browser build passes WASM/smoke or Construct itch path? | Do not ship itch HTML5 as “free” |
| Steam demo passes wednesday smoke? | Fix before PWYW marketing |
| Runway ≥ 3 months after dual-SKU ops cost? | See Step 5 stop rules |
| You can label storefront in every playtest form? | Required per playtest tools listicle |
Running both SKUs is valid; running both without costing them is how studios sign trailer quotes they cannot afford.
Step 2 — Cost lanes (monthly or fest-window)
Create dual-sku-economics-2026.md:
itch PWYW SKU — typical cash costs
| Line item | Low | Mid | Notes |
|---|---|---|---|
| itch platform fee % | 10% | 10% | On paid amounts |
| Extra hosting/CDN | $0 | $20 | If using external embed |
| WASM/debug labor | 0 h | 8 h | Browser demo opinion |
| Duplicate store page copy | 0 h | 2 h | Not metadata sprint—page truth |
| PWYW key giveaways | $0 | $50 | Press keys as tips abuse |
| Payment processor edge cases | — | — | Track chargebacks manually |
Steam demo SKU — typical cash costs
| Line item | Low | Mid | Notes |
|---|---|---|---|
| Steam direct fee | 0 pre-release | — | Applies on revenue later |
| Depot/build bandwidth | $0 | $0 | Usually included |
| NW.js/Steam wrap labor | 0 h | 12 h | Construct NW.js challenge |
| Store art (shared) | — | — | Allocate % in Step 3 |
| Fest trailer allocation | $0 | $2,000+ | From fest cap |
| Refund/support labor | 0 h | 4 h | Refund dashboard |
Shared costs (split explicitly)
| Shared item | Split method |
|---|---|
| Trailer | 70% Steam / 30% itch unless trailer says browser-first |
| Screenshot capture | Same build_id afternoon → 50/50 |
| Community management | Hours per channel logged |
| Localization | Primary storefront gets 80% unless itch-first |
Beginner mistake: Putting 100% of trailer cost under Steam while driving PWYW influencers to itch—worksheet should reflect actual traffic plan.
Step 3 — Revenue lanes (honest, not wishful)
itch PWYW — revenue rows
itch_gross_tips_usd = # sum last 90 days or projection
itch_named_price_sales_usd =
itch_platform_fees_usd = itch_gross * 0.10 # adjust if policy changes
itch_net_usd = itch_gross - fees
| PWYW floor | Typical pattern | Worksheet treatment |
|---|---|---|
| $0 minimum | High plays, low $ | Subsidized discovery SKU |
| $2+ minimum | Fewer plays, higher $ | Partial cost recovery |
| Free download only | No tips | Pure cost center |
Do not multiply plays × imaginary conversion rate × full game price. Pre-launch PWYW is signal + tips, not ARR.
Steam demo — revenue rows (pre-1.0)
steam_demo_direct_revenue_usd = 0 # usually
wishlist_adds_count =
demo_installs_count =
Discovery value converts later—document wishlists per hundred installs for sanity, not for bank deposits.
Optional: if demo sells $0 DLC cosmetic for fest, book separately with DLC price anchor worksheet.
Step 4 — Compare SKUs side-by-side
| Metric | itch PWYW SKU | Steam demo SKU |
|---|---|---|
| Primary goal | Plays + tips + jam audience | Wishlists + fest ranking |
| Cash revenue (90d realistic) | $ | ~$0 pre-launch |
| Cash cost (90d) | $ | $ |
| Net cash (90d) | usually negative | negative |
| Labor hours (90d) | h | h |
| Support burden | comments/page | refunds/reviews |
| Evidence folders | release-evidence/itch/ |
release-evidence/steam/ |
Interpretation: Negative net on both is normal pre-launch. The worksheet prevents surprise negativity—not guilt about negativity.
Subsidy ratio (optional, honest)
itch_subsidy_usd = max(0, itch_costs - itch_net)
steam_subsidy_usd = max(0, steam_costs - steam_net)
total_subsidy = itch_subsidy + steam_subsidy
subsidy_per_wishlist = total_subsidy / max(1, wishlist_adds)
subsidy_per_wishlist is not CAC for investors—it is an internal discipline number. If it exceeds your fest marketing cap per wishlist stop rule, pause paid ads.
Step 5 — Runway stop rules (pair with fest cap)
| Trigger | Action |
|---|---|
| Runway < 3 months | itch PWYW → $0 min only if already built; no new browser scope |
| itch_subsidy > 15% cash on hand | Freeze itch features; Steam-only fixes |
| fest cap spent > 80% | No new dual-SKU art |
| wishlist growth flat 4 weeks | Do not blame itch; fix store-demo mismatch |
| PWYW tips < hosting labor cost | Raise floor to $2 or remove browser SKU |
Document triggers in dual-sku-economics-2026.md with dates—same culture as BUILD_RECEIPT.
dual_sku_economics_receipt_v1.json
{
"receipt_type": "dual_sku_economics",
"version": "1.0.0",
"window_days": 90,
"itch": {
"pwyw_minimum_usd": 0,
"gross_tips_usd": 0,
"net_usd": 0,
"cash_cost_usd": 0,
"labor_hours": 0
},
"steam_demo": {
"wishlist_adds": 0,
"installs": 0,
"cash_cost_usd": 0,
"labor_hours": 0
},
"shared_costs_usd": 0,
"runway_months": 0,
"stop_rule_triggered": false,
"notes": ""
}
Store under release-evidence/business/ next to release evidence taxonomy.
Beginner path — fill worksheet tonight
- Open both store pages; note exact PWYW minimum and demo scope sentences.
- List last 90 days itch payout (not page views).
- Export Steam wishlist and demo install counts (partner stats).
- Estimate hours you spent on itch WASM vs Steam NW.js honestly.
- Sum costs using Step 2 tables (use Mid column if unsure).
- Apply Step 5—write one stop rule you will actually obey.
- Only then open fest marketing cap.
Time budget: One evening; do not merge with metadata sprint night.
Developer path — build_id and ops
| Ops task | itch SKU | Steam demo SKU |
|---|---|---|
| build_id in pause menu | Required | Required |
| Separate crash folders | crash/itch/ |
crash/steam/ |
Playtest form storefront= field |
itch |
steam |
| Patch notes | Demo patch template | Same file, different channel section |
| RNG/replay | Replay case study | Test both |
Dual-SKU economics fail when engineering treats one build as two storefronts without labeling evidence.
PWYW pricing scenarios (worksheet rows)
| Scenario | itch floor | Expected itch net | When to choose |
|---|---|---|---|
| A Jam discovery | $0 | $0–$50 | Community goal; runway ≥ 6 mo |
| B Tip jar | $0 | $50–$300 | Streamers; budget WASM maintenance |
| C Partial cover | $2 | $100–$500 | Browser costly; still want itch |
| D Steam-first | N/A itch | — | Runway < 4 mo; drop browser SKU |
Scenario D is valid—worksheet is not “always dual SKU.”
Copy-paste spreadsheet skeleton
Use any sheet tool; keep one row per month:
| month | itch_gross | itch_fees | itch_labor_h | steam_wishlists | steam_installs | steam_labor_h | shared_trailer_usd | runway_months | stop_triggered |
|---|---|---|---|---|---|---|---|---|---|
| 2026-05 | N |
Add a notes column for build_id changes. When stop_triggered flips to Y, freeze PWYW page edits and fest ads until postmortem—same seriousness as metadata freeze challenge but for cash.
UTM and source tagging (discovery without fake revenue)
21-day UTM experiment belongs on Steam URLs, not itch tip jars. Worksheet discipline:
| Channel | Track in economics sheet | Track in UTM sheet |
|---|---|---|
| itch PWYW page | tips + labor | referral path only |
| Steam demo | wishlists | utm_source per campaign |
| Cross-post “play free” | split hours | never merge into Steam CAC |
If itch drives Steam wishlists, note assisted_wishlists in comments—still do not book itch plays as dollars.
Publisher and grant questions (use worksheet answers)
| Question | Point to worksheet row |
|---|---|
| Why two storefronts? | Step 1 gate answers |
| CAC? | subsidy_per_wishlist labeled internal only |
| Marketing budget? | Fest cap + this file |
| Browser costs? | itch labor + WASM rows |
| Runway risk? | Step 5 stop rules with dates |
Bring dual_sku_economics_receipt_v1.json to Q3 diligence conversations—shows ops maturity without inventing ARR.
Fest October 2026 pairing calendar
| Month | Economics task | Fest cap task |
|---|---|---|
| May | First dual-sku-economics-2026.md |
Set runway % cap |
| Jun | Refresh after trailer quote | Sign or reject quote |
| Jul | Reconcile itch payout vs labor | Pause ads if stop rule |
| Aug | Wishlist / install ratio | UTM review |
| Sep | Freeze PWYW minimum changes | Art spend lock |
| Oct | Post-fest actuals row | Retrospective |
Proof table — worksheet quality gate
| # | Check | Pass |
|---|---|---|
| 1 | Both SKUs named with URLs | ☐ |
| 2 | itch 90d gross entered (not guessed) | ☐ |
| 3 | Steam wishlists separate from itch plays | ☐ |
| 4 | Shared trailer cost split documented | ☐ |
| 5 | Stop rule written with date | ☐ |
| 6 | No imaginary full-game revenue | ☐ |
| 7 | Receipt JSON saved | ☐ |
| 8 | Fest cap file cross-linked | ☐ |
What this worksheet does not do
- Replace tax or legal advice
- Tell you to abandon Steam for itch or reverse
- Fix store FAQ parity—different labor
- Optimize regional pricing—run after SKU economics if you sell in multiple currencies at launch
Labor costing without lying to yourself
Optional internal rate R (USD/hour) for solo devs—pick one number and hold it all quarter:
itch_labor_cost = itch_labor_hours * R
steam_labor_cost = steam_labor_hours * R
true_itch_subsidy = itch_labor_cost + itch_cash_costs - itch_net
If you refuse to assign R, track hours only and sort SKUs by hours descending—the biggest hour sink gets cut first when stop rules fire. Hours truth beats fake dollars.
When to drop the itch SKU (decision tree)
- Runway < 4 months and itch_net < $100/quarter → consider Steam-only fest prep.
- WASM labor > steam labor and wishlist growth mostly from Steam → browser is hobby unless community is strategic.
- PWYW toxicity or chargebacks rising → raise floor or remove payments until scope honest.
- Publisher funds fest only on Steam metrics → itch becomes devlog mirror with $0 minimum—still cost hours; worksheet makes that visible.
Dropping itch is not failure; hidden subsidy is failure.
Common dual-SKU money mistakes
- Booking wishlists as revenue — breaks runway math.
- $0 PWYW with expensive browser port — subsidy hidden in “free marketing.”
- One trailer, two truths — demo scope differs per store.
- Merging refund CSVs — Steam refunds ≠ itch comment tone.
- Fest ad spend before worksheet — cap without SKU baseline.
- Raising PWYW minimum during fest week — confuses returning players.
- Ignoring 10% itch fee on tip projections.
- Shared build_id without channel tags — cannot attribute support cost.
Worked example — composite micro-studio (no invented public metrics)
Inputs (illustrative structure only):
- Runway: 5 months, $12k cash, $2.4k burn
- itch 90d: $180 gross tips, $18 fees, 24 h WASM labor
- Steam 90d: 0 revenue, 420 wishlists, 38 h demo/NW.js labor
- Shared trailer: $1,500 (70% Steam allocated)
Subsidy: itch ≈ (24h × internal_rate) + hosting - $162 → document labor explicitly.
Decision: Keep dual SKU but freeze browser scope; fest cap stays at 8% cash per fest worksheet tiers.
Stop rule: If wishlists < 15/week for 4 weeks, cut paid ads—not itch tips.
Numbers are structure, not claims about your game.
Cross-links — ops and art still matter
Money does not fix unreadable HUD—pixel font pass.
Money does not fix floor hitches—Godot vs Construct transitions.
Money does decide whether you can afford to maintain both.
Key takeaways
- itch PWYW and Steam demo are different economic animals—worksheet compares them honestly.
- Pair with fest marketing spend cap—spend cap after SKU costs.
- Track cash cost, cash revenue, and labor per SKU—do not merge.
- PWYW at $0 is a subsidized discovery choice, not free.
- Pre-launch Steam demo revenue is usually $0—wishlists are not banked.
dual_sku_economics_receipt_v1.jsondocuments the window for partners.- Stop rules protect runway when dual-SKU ops exceed value.
- Read itch browser demo opinion before defending browser SKU cost.
- Not a metadata checklist—business lane for October 2026 fest prep.
FAQ
Should PWYW minimum be $0?
Only if you budget subsidy and runway allow—worksheet Step 5.
Can Steam demo sell the full game later?
Yes at launch—this worksheet is pre-1.0 demo economics.
Does itch replace Steam for fest?
No for most PC fest goals—itch complements; worksheet shows tradeoffs.
How often to refresh?
Monthly until October; after every price or build change.
What about Epic/GOG third SKU?
Add a column—same lanes; do not hide costs.
Is subsidy_per_wishlist a VC metric?
No—internal discipline only.
We only sell on itch today—skip Steam demo rows?
Use Steam columns as $0 placeholders or hide section—worksheet still helps PWYW honesty.
itch “free download” with no PWYW?
Treat as $0 revenue lane; cost center identical to PWYW $0 minimum.
Conclusion
Dual-SKU indies fail festivals quietly by funding two storefronts on one runway while tracking only Steam wishlists. The itch PWYW vs Steam demo economics worksheet makes subsidy visible: what each SKU costs, what each might pay before launch, and when to stop.
Fill dual-sku-economics-2026.md before you raise fest ad spend. Pair it with the fest marketing cap. Obey a written stop rule. PWYW tips and Steam wishlists can coexist—but only if the math says you can afford the maintenance.
Next reads: Two-storefront rule analysis, Regional pricing second pass, UTM wishlist tagging experiment.