I spent 5 grand learning paid ads for my indie game so you don't have to.

Part 1 of 2 (probably). The experimentation and learning part. Written Q3 2026, before the game is out, intentionally - more on that later.

I make games alone. Right now that means Kegs of Eternity, a roguelite deckbuilder about seven dwarf brothers rebuilding a settlement, with cards, steel and an irresponsible amount of beer. It's self-funded, it's launching into Early Access in 2027, and since late April I've been buying ads on X (and Reddit) to find out whether buying wishlists is a stupid idea.

The whole thing started because Reddit gave me $500.

Between then and the end of August I put about $5,100 of my own money into it (plus Reddit's $500), tagged every single click with UTM parameters so Steam could tell me which ones turned into wishlists, and got around 1,770 wishlists out the other end. Roughly $2.88 each on my money, $3.16 if you count Reddit's, including the money I set on fire on purpose to learn things and the money I set on fire by accident.

This is the write-up. It has the formula I use to decide whether a click is worth paying for, the platform quirk that makes one phone click worth five to fourteen desktop clicks for Steam wishlists, the country data, the Reddit-vs-X comparison, a bunch of predictions I made in May that the data proceeded to run over with a truck, and the one thing I think almost nobody is doing: using paid ads to pick your Steam capsule, instead of squinting at Steam's CTR number, which is broken.

(The game in question: Kegs of Eternity - seven dwarf brothers, cards, beer. The wishlist button is right there, is all I'm saying.)

Tuition invoice from Indie Paid Ads University: running the winners $1,667 at $2.23 a wishlist, deliberate tests $1,521 at $4.54, Reddit $919, US plus launch about $990, a $500 Reddit promo credit incinerated on day one; total about $5,100 out of pocket, degree conferred: 1,770 wishlists at $2.88 each, no refunds

Who this is for, and who should close the tab

Some calibration before the numbers, so nobody wastes their time.

Disclosure 1: I'm not a data scientist, I'm not a marketing guy. There are people out there saying they get 50 cents per wishlist, and I'm sure some of them are telling the truth. Those guys and/or the marketing experts are probably gonna scream at the screen that I'm messing this up and have no business writing this. This is just me documenting my way through it, what I learned, and maybe it helps some indies with their own. AAA and big publishers are probably doing this way better than I am, but they're not sharing their data with you, so there ya go.

Disclosure 2: I did use Claude to help me parse all the ads-related data reports I had, and to write or edit parts of this article, tho the source of the data and most of the article is mine. AI just makes it better and faster, but it's still me. Putting all this data and this article together was A LOOOOT of work and time. It's the opposite of what people mean when they say "AI Slop". If you still think using AI to help me parse a shitload of data is bad, there's nothing I can say that will convince you.

I'm also probably standing on Mount Stupid. Marketing pros and PR firms doing this for a living already know most of this. But indie devs don't, and nobody's writing it down with actual numbers attached, so here we are. I'm sure some of the stuff here will look like rookie mistakes to some - because that's exactly what they are: I'm a rookie, and these are my mistakes. Learn from them.

If you're funding-constrained, meaning no runway, no margin for a failed $350 experiment, no time to babysit dashboards, the math in this article might not apply to you. A publisher's advance is variance reduction, and variance reduction is worth 30% when the alternative is not shipping. This piece is for indie devs with some funding runway who want to understand what the marketing slice of a publisher deal would actually buy them, and whether they can buy it themselves for the price of an ad budget and some spreadsheet time.

And DO NOT spend four or five figures on ads if you're a "starving-artist" type of dev - I wish you the best of luck, but this is not yet for you. I'm not your dad. Own your own decisions, don't blame me if you lose money on ads for your game.

One more thing. I'm publishing this in Q3 2026, months before the game is out. Most indie marketing write-ups suffer from survivorship bias: the tactics you read about come from devs whose games succeeded, filtered through hindsight. Devs whose games flopped don't usually write retrospectives, so the data you get to see is curated for winners. I'm publishing pre-launch specifically to dodge that. The ads data is the ads data regardless of how the game does later, and frankly I'm still uncertain enough about the game that I can't pretend to be giving victory-lap advice. Anyone thinking about running ads doesn't know how their game is gonna do either, so we're in the same boat.

TL;DR

If you're running or considering paid ads for Steam wishlists, here's my advice based on what I learned from these tests. Confidence level in brackets. Shorthands I'm gonna use a lot, because I'm lazy: CPWL = cost per wishlist. pSI = share of your visitors that were signed into Steam when they landed (if they aren't, they can't wishlist). V2WR = visits-to-wishlists rate - wishlists per signed-in visit. WLTR = wishlist-through-rate - wishlists per Steamland impression. Steamland = everything inside Steam's own store: discovery queue, tags, more-like-this, search, the front page.

  1. Use paid ads to pick your Steam capsule, and stop staring at Steam's CTR number. [high] Steam's CTR metric is contaminated by every external visit you bring in and by Steam itself showing successful games to everyone, so it can't tell you whether a capsule change worked. Run each capsule variant as its own UTM-tagged ad, take CTR from the ad platform and V2WR from Steam's UTM report, multiply, and pick the capsule with the highest WLTR. Full explanation in its own section below.
  2. Turn web/desktop off. [high] Sounds insane for a Steam game. It isn't. A desktop click opens the Steam page in a browser where the person isn't logged in, so they can't wishlist without a 2FA dance most of them skip. A phone click opens the Steam app, where they're already logged in, and wishlisting is one tap. My desktop clicks converted at 0.8%; Android clicks from the same ad at 11.5%.
  3. Split Android and iOS into separate ad groups and bid them separately. [high] Android clicks wishlist at 1.2-3.8x the rate of iOS clicks, typically 2-3x, in every country with enough data to say. Setting the bids to equalize CPWL (usually more on Android) landed both platforms at $2.91 vs $2.92, which is the point.
  4. Judge everything on CPWL from Steam's UTM dashboard, never on CPC from the ad dashboard. [high] I killed my second-best country because its CPC looked expensive. CPC is the number you see first because X updates in real time and Steam lags a day. Wait for the wishlists.
  5. The first 48 hours of any new ad cell are a lie. [high] My four best cells did $0.64-0.80 CPWL in their first two days and $1.44-4.01 after that. Same ad, same targeting, same bid. Don't scale a number you got on day one, and treat anyone quoting 50 cents per wishlist as quoting their day one.
  6. Sustained spend in one cell decays. [medium, one long-running cell] France/Android went from $1.65 CPWL in its first week to $5.02 across July-August. Pausing for five weeks and restarting got me two cheap days again, then decay resumed. I have a hypothesis about pulsing instead of streaming; that's Part 2.
  7. Localized ads in non-English markets were cheaper per wishlist than English ads in non-US English-speaking countries. [high on direction, medium on ranking] Japan was my best market at $1.22 CPWL, matching the US. Germany, Spain and France beat the UK, Canada and Australia. Korea didn't work. The "US and the Anglosphere are the same market" assumption is wrong.
  8. Use max-CPC bidding. Start around $0.07-0.12 and treat the max bid as a delivery throttle, not just a price cap. [high on the mechanic, no data on autobid for X] I never actually ran the autobid test on X. My "don't use the recommended bid" advice comes from Reddit, where the recommended settings spent $1,000 in one day on clicks that converted at 2.4%.
  9. Reddit Ads isn't 20x worse than X. I was wrong about that. [medium] My first Reddit campaign (recommended settings, half of it paid with a promo credit) was a disaster at $28.57 CPWL. My second (manual bids, actual attention) landed at $2.65, the same ballpark as X. Reddit clicks cost 7-11x more but wishlist at 7x the rate. I still prefer X, for speed and volume, not price.
  10. A JPEG beats a trailer for paid ads. [high] The trailer converted visitors to wishlists at less than half the rate of a boring static image with a one-line pitch, on the same targeting, same week. Clicks are free on Steam and expensive on X; design the ad creative for the second thing.
  11. Budget exploration separately from exploitation. [it's an opinion, but the numbers support it] Of the $3,188 I have full data for, $1,521 was deliberate tests at $4.54 CPWL, and $1,667 was running the winners at $2.23 - tho the best winners ran closer to $1.20, and you could filter only to those depending on your expectations for what the break-even wishlist cost is.

Disclaimer: these tactics are for wishlist-conversion campaigns specifically. Awareness or follower campaigns optimize differently. My conversion percentages are calibration data for my game, not laws of physics; the mechanisms (deep-links, sign-in rates, the first-48-hours effect) should transfer, the percentages won't. And it's all current as of mid-2026 - Steam, X or Reddit can change any of it tomorrow.

The setup

The game: Kegs of Eternity, roguelite deckbuilder, dwarves, beer. Steam page went live late April 2026 alongside the announcement trailer on Deckbuilders Fest (which didn't really do much for a game without a demo).

The ads: X Ads (website clicks objective, max-CPC bidding) and Reddit Ads. Every ad had its own destination URL with utm_source, utm_campaign, utm_content and utm_term set, which means Steam's Marketing & Visibility UTM report can tell me, per ad, how many people arrived, how many of them were signed into Steam, and how many wishlisted.

Three Steam-side numbers matter for everything below:

Cost per wishlist is just ad spend divided by Steam-attributed wishlists. CPWL from here on - I'm gonna type it a couple hundred times. I don't use the ad platform's own conversion numbers for anything, because it can't see wishlists.

A word on methodology, since I know how this reads to anyone with a stats background. Indie devs running paid-ads experiments can't fully isolate variables. There isn't enough budget or audience volume to factorial-design every test. So I'm assuming what chemists call standard temperature and pressure: treating each slice as approximately measuring what it claims to measure, with confounds acknowledged but not eliminated. The decision rules below are calibrated to survive that level of noise. Clear amplitude signals are real. Statistical squeakers aren't, and I try not to act on them (I failed at this at least once, see the Germany story). One more calibration note: X billed me in euros (Reddit, in dollars), and every X figure in this article is converted at €1 = $1.16. If you ever cross-check my screenshots and nothing matches to the cent, that's why.

The headline numbers

Here's the whole thing in one table. The X campaign I have complete ad-platform data for is the second one, May 9 to August 31: 25 ad groups, geo splits, platform splits, a gender split, two ad tones. The launch campaign (April 30 to May 8, plus a US-only phase to May 18) isn't in my export, so its spend is reconstructed from my notes at the time and account-level impression counts.

Spend Clicks CPC Steam visits Wishlists CPWL
X, launch phase (Apr 30 – May 18) ~$990 (est.) ~10,000 (est.) ~$0.10 16,596 493 ~$2.01
X, test-and-run campaign (May 9 – Aug 31) $3,188 45,106 $0.071 45,526 1,084 $2.95
Reddit, campaign 1 (Apr 30, recommended settings) $1,000 ($500 mine, $500 promo) 1,247 $0.80 1,486 35 $28.57 ($14.29 on my money)
Reddit, campaign 2 (May 10-18, manual bids) $419 808 $0.52 907 158 $2.65
Everything ~$5,600 (~$5,100 mine) ~64,500 ~1,770 ~$3.16 (~$2.88 on my money)

Rounding note for every table in here: percentages are rounded, per-100 and CPWL columns come from the raw counts, so the columns won't always multiply back exactly. That's arithmetic, not fraud.

Flow diagram of about $5,100 out of pocket splitting into four bands - running the winners $1,667, deliberate tests $1,521, US plus launch about $990, Reddit $919 - flowing into 1,770 wishlists: 749 at $2.23, 335 at $4.54, 493 at about $2, and 193 from Reddit

Twenty million impressions for the price of a used motorcycle (X's export says 20.9M even with the deleted ad groups missing; Reddit adds 336K). Seven cents a click. X is pretty cheap right now and I have no idea if it stays that way.

A lot of that spend was never meant to be efficient. I wanted to isolate as many variables as I could while still getting sample sizes worth looking at, so I paid for information on purpose, and that makes the blended numbers look worse than the campaign I'd run today. More on that below.

Back in May, with the launch phase data in hand, I had the CPWL at $1.16 on Android, $1.62 on iOS, and I was thinking "about a dollar-something." That number was real. It was also the cream. Everything I've learned since is about why the cream is the cream, and what the milk underneath costs.

One thing to hold onto from that table: the two Reddit campaigns are the same platform, same game, same month, ten days apart, and one cost eleven times more per wishlist than the other. Bidding settings did that.

The first 48 hours are a lie (a well-meaning one)

Stylized cost-per-wishlist curve: 56 cents on day one, $4.18 by day three, averaging $2.91 after - the first 48 hours of any ad are a lie

This is the finding I didn't have in May, and it's the one I'd want someone to have told me.

When you open a new "cell" (my word for one country × one platform × one creative), X serves the ad first to whoever its model thinks is most likely to click. For a gaming-interest audience that's the core gamers, the people who follow game accounts and click game ads. They see your ad, they're signed into the Steam app, they wishlist. Day one looks like this:

France, Android, day one: 440 visits, 33% signed in, 28% of those wishlisted, 40 wishlists for $22. Fifty-six cents each. I was ready to remortgage the house.

France, Android, day three: 463 visits, 18% signed in, 11% of those wishlisted, 9 wishlists for $37. Four dollars and change. Same ad, same targeting, same max bid.

It's not France. Here are the four cells I ran past the test window:

First two days vs day three onward for four ad cells: $0.64-0.80 per wishlist in the first 48 hours, $1.44-4.01 after

Add them up: the first two days of those four cells cost $162 and bought 225 wishlists ($0.72 each). Every day after that cost $1,500 and bought 515 wishlists ($2.91 each). Four times worse, and nothing changed except the calendar.

The mechanism, as far as I can tell: X front-loads delivery to the highest-predicted-engagement users, and those users are also the ones most likely to be signed into Steam and most likely to want a deckbuilder. Once they've seen it, the algorithm has to reach further out to keep spending your daily budget, and every ring outward is a worse audience. pSI drops (fewer gamers), and V2WR drops too (less interested gamers) - both halves of the funnel degrade at once. Raising the daily budget makes it worse faster, because it forces X to dig into the marginal audience sooner. I raised the daily cap on France and Spain from $23 to $58 around day three, and day three is exactly where both of them fell off a cliff. Full send into the barriers at Eau Rouge.

Two consequences for you:

The number you see in your first day or two is the ceiling, not the forecast. If you decide to 10x your budget based on day-one CPWL, you're gonna be sad by Thursday.

The corollary is that a fresh cell is worth something. Every new country/platform combination gave me its two cheapest days up front: pooled across all 21 cells I opened in May, $1.68 CPWL in the first two days against $2.89 after. That's an argument for having many small cells rather than one big one, and it's the setup for the next section.

About those "50 cents per wishlist" people

You'll see that number quoted around. I believe them - my day one in France cost 56 cents. My day three cost $4.18.

A TRUE 50 cents per wishlist for a good premium game would be a money printing machine (more on that math later), and there'd be no reason not to spend 6+ figures on it. But it's not sustainable. At least, to me it doesn't look like it is - maybe you've got a game that looks great and converts at twice (or more) the rate mine does. Or maybe you're doing it on another platform I haven't tried yet and it's cheaper there. If you can actually get 50 cents per wishlist past the first 48 hours, and you're confident you can release a good game at over 10 bucks, then buy as many ads as you can and stop reading this. I mean it. Go.

It keeps decaying after that, too

France/Android is the only cell I ran for months, so it's my only long-baseline data. Here it is by week:

France Android cost per wishlist by week: $1.65 rising to $2.88 in May, five weeks off, restart at $1.07 then decaying to $5+ through August

May: $1.93 CPWL over 132 wishlists. Then I paused everything for five weeks (other tests, dev focus, life). When I switched it back on in early July, the first two days came back cheap: 27 wishlists for $42, $1.55 each. The audience had partly "recharged," presumably a mix of people forgetting, new people joining the interest bucket, and X re-running its front-loading. Then it decayed again, faster than the first time, and from July 7 to August 31 it ran at $5.02 CPWL over 123 wishlists.

The sign-in rate tells the same story from a different angle: 33% on day one in May, 16-25% for the rest of May, 23% on the July restart, and mostly 12-18% through August. Since sign-in happens before anyone reads a word of the page, that's not the page's fault. That's who the ad is being shown to.

So the honest version of "my continuous campaigns cost about a dollar per wishlist" is: my continuous campaigns cost about a dollar-twenty per wishlist for two days, then three to four dollars for a couple of weeks, then five-ish, and I don't know yet where it floors because I haven't been brave enough to keep paying to find out. Which makes the "just leave the good cells running forever" plan kinda fucked, or at least a lot more expensive than the plan I had in May.

Two honest alternatives before I blame the audience. One: the shape of the spend. 79% of this campaign's money went out in May across 15 active days, then there was a 36-day blackout, then a long thin trickle through July and August. Comparing May to August is partly comparing a short expensive burst against a slow drip, and I can't prove that explains none of the decline. Two: it's summer and the French are at the beach. Part 2 will have winter data.

What I can rule out is the store page. It had the same AI-content disclosure box on it in May, when France was converting at 9% on day one, as it did in August. Whatever the banner costs me, it costs me at a constant rate, so it can't be the thing that changed. It might well be the thing that sets the level, which is a Part 2 question.

What I'm gonna test next (this is the plan, not a result): pulse, don't stream. Run a cell for 2-3 days, kill it, rotate to the next country, come back in a month. If the recharge effect holds, that keeps me closer to the cream. If it doesn't, I'll tell you in Part 2.

Use ads to optimize your capsule and Steamland clicks

If you skipped everything above, fine, but read this one. It's the part I'd put on a billboard if billboards took UTM tags.

The job of your capsule in Steamland is to win the competition for eyeballs while sitting next to a bunch of other capsules. But the thing that makes Steamland completely different from paid ads is that Steam capsule impressions are free - and so are the clicks! Nobody's billing you per click, so your incentive is to push CTR as high as it'll go.*

Except optimizing CTR on Steam is nigh impossible, because Steam's CTR metric sucks. Devs love to obsess over that number; the problem is that it doesn't track true CTR. Bring in any external traffic - doesn't matter if it's thru ads, tweets, videos, news articles, whatever - and every one of those visits counts toward that CTR without a matching Steam impression, so it goes up. And if your game starts selling well, Steam starts showing it everywhere to everyone, so it goes down. Highly successful games will actually have a LOWER number. A metric that goes up when you tweet and down when you succeed is too contaminated to tell you anything - total no bueno. Stop obsessing over it, and stop using it to judge your capsule.

*The REAL metric you want to optimize for is wishlist-through-rate: how many wishlists you get per impression.

WLTR = CTR × V2WR

If I put some nice boobs in my capsule, my capsule's CTR (the actual one, not the one Steam shows) might go up. Maybe by a lot. But those visitors are looking for games they can play with only one hand. Erm, yeah sure, you can actually play my game with one hand... but there will be nothing for them to do with the other hand, so my V2WR craters, because I'm attracting the wrong visitors. Free clicks from the wrong people are still worth zero.

So the capsule's job in Steamland is to win the competition for eyeballs - in a world where clicks are free, which is a very different world than ads - AND to bring in the right kind of eyeballs. How do you optimize for both? Most indie devs I see change or upgrade their capsule, then watch their Steam wishlist numbers and that CTR metric to see if things improved. As I said before, I'm not a data scientist, but holy crap, is that method irredeemably flawed. Your wishlist count moves with festivals, with your tweets, with what Steam decided to feature that week, with the weather; the CTR moves for the reasons above. You're reading tea leaves in a wind tunnel.

We can use paid ads and UTM tags to filter out most of that noise:

  1. Make two or more capsule variants.
  2. Make a separate ad for each one, each with its own UTM tags. Same targeting, same bid, same countries, same everything except the image.
  3. Run them at the same time. Not one this week and one next week, or the first one wins because of the first-48-hours thing, not because it's better.
  4. Set your bids slightly higher than you normally would, so you're not starved for volume (a lower cap doesn't just lower your price, it takes you out of auctions - see the max bid section below).
  5. Get each variant's CTR from your ad platform's dashboard. Your capsule's real CTR on Steam will NOT be the same as on a social feed, but the ratio is a decent enough proxy: if the boobs capsule gets twice as many clicks on X as the non-boobs one, that ratio is probably gonna hold on Steam.
  6. Get each variant's V2WR from Steam's UTM page: wishlists divided by tracked visits. Tracked visits, not visits, so you're measuring your capsule and not the platform's sign-in problem.
  7. WLTR = CTR × V2WR. Pick the capsule with the highest WLTR.
  8. If there's no clear winner (a gap of at least ~10%), pick the one with the highest V2WR (specially if there's a clear winner there). That's the more "honest" capsule, and it'll serve you best everywhere the game gets shown outside Steam.

The capsule test in five steps: capsule variants, one UTM-tagged ad each, CTR from the ad dashboard, V2WR from Steam's UTM report, highest WLTR = CTR x V2WR wins

Note: the winner here is probably NOT the best creative for your actual paid ads, and it can have a SIGNIFICANTLY higher CPWL than a good screenshot of your game (my capsule pulled a 3.2% sign-in rate as an ad, see the JPEG section below). You're paying for information - do not look at CPWL while running this test, it'll only upset you. And you want at least a hundred wishlists per capsule you're testing to get a decent sample (more is better), so the information cost is non-trivial: at my numbers, call it a few hundred bucks per variant on mobile targeting, and a lot more if you make the mistake of running it on desktop. It's the only controlled capsule test I know of that produces reliable numbers.

The default assumption every indie makes when running ads to a Steam page: target PC users, because Steam is a PC platform. Right? Wrong. Mobile clicks convert to wishlists at wildly higher rates than desktop clicks, and the reason isn't audience or creative or anything you'd guess. It's how the link opens.

When someone on a desktop clicks a Steam link on X, it opens in their browser. They're almost never logged into Steam in the browser, because the Steam client login doesn't carry over, and the website session is a separate thing they last signed into in 2019. To wishlist they'd have to sign into the website (2FA prompt, Steam Guard code, the whole thing) or search for the game name in the Steam client. Almost nobody does either. They look, they go "neat", they leave. Steam Guard: protecting your account from hackers, and from wishlisting my game.

When someone on a phone clicks the same link, it deep-links straight into the Steam mobile app, where they're already signed in, and the wishlist button is one tap away.

I found this by accident. In the launch phase I split the same static-image ad into three platform-targeted ad groups, and Steam's dashboard did this:

Platform (US, same ad, May 6-9) Visits pSI (signed in) V2WR (wishlisted, of signed-in) Wishlists per 100 visits
Desktop / web 1,999 6.9% 13.1% 0.8
iOS 3,094 27.4% 16.4% 4.5
Android 783 44.6% 26.3% 11.5

Read the pSI column first. Seven percent of desktop visitors could even wishlist. Then read the last column: an Android click was worth fourteen desktop clicks. At roughly the same price per click.

My reaction at the time, preserved for posterity: holy crap, Android clickers really do like them Steam apps good. Holy fucking shit, these are my people.

Flowchart of a phone click (deep-links into the Steam app, signed in, one tap, 11.5 wishlists per 100 visits) vs a desktop click (browser, Steam Guard 2FA, 0.8 per 100)

Two different things are going on in that table:

The sign-in gap (web 7%, iOS 27%, Android 45%) is structural. It's a function of how each platform handles the link and whether the Steam app is installed and logged in. It should apply to any Steam link in any ad on any social platform, for any game. Turn desktop off.

The V2WR gap (iOS 16%, Android 26%) is about who's on the other end. Android-on-X gaming folks skew more technical, more hobbyist, more "has 400 games in their library" than iOS-on-X gaming folks. For a dwarf deckbuilder that's my crowd. For a cozy mobile-aesthetic game it might invert. Test it, don't assume it.

Across the whole second campaign, in every country with enough wishlists to say anything, Android clicks wishlisted at 1.2x to 3.8x the per-visit rate of iOS clicks. The premium is real and it travels. What surprised me is that it travelled at all, because Android in Europe is the mainstream phone, not the techy minority it is in the US. My best guess is that X itself is the filter: "Android user who's active on X for gaming content" is roughly the same person in Lyon and in Ohio.

The operational rule I wrote in May: run Android and iOS as separate ad groups and bid them to the same CPWL, which usually means paying ~50% more per click on Android. It worked - across the whole campaign Android came in at $2.91 CPWL and iOS at $2.92 - but "usually" is doing real work in that sentence: in France and Spain, iOS clicks were so cheap ($0.035) that iOS won on CPWL despite converting worse, and I ended up running Android at the LOWER cap there. So the real rule is that the bid premium is just a tool for equalizing CPWL, and CPWL is the only number you're optimizing. Don't get attached to the platform, get attached to the number.

Caveats: Steam or Apple can change the deep-link handling whenever they want, so this is current as of mid-2026. Desktop users who are logged into Steam in the browser (Workshop browsers, people who buy through the website) exist, but the data says they're a rounding error.

A JPEG beat my trailer (the creative does the filtering, not the targeting)

At launch I ran three creatives on the same web-only targeting, same week: the announcement trailer, the Steam capsule art, and a plain static image with a one-sentence pitch. Here's what Steam saw from each:

Creative (launch week, US/UK) Visits pSI V2WR (wishlisted, of signed-in) Wishlists per 100 visits
Trailer 3,130 26.7% 2.9% 0.8
Capsule art 625 3.2% 30% (6 of 20, so, shrug) 1.0
Static image + pitch 3,100 13.0% 15.2% 1.8

The trailer had the best click-through rate by a mile, brought in a perfectly respectable share of signed-in visitors, and then almost none of them wishlisted. Three percent. It's an exciting 60 seconds, and exciting gets clicks from people who like exciting things, which is everyone, including people who were never gonna buy a deckbuilder and people who enjoyed the trailer and felt that was enough. The static image gates the click on "I already think this kind of game might be for me." Less information in the ad means more intent in the click. That's backwards from everything you optimize for on the Steam store, where clicks are free and you want as many as you can get. And it's the thing that took an afternoon beating the thing that took weeks, which I'm choosing to find funny.

The capsule art had a different problem: a sign-in rate of 3.2%, meaning almost nobody it attracted was a Steam user at all. The few who were converted great, but 20 signed-in visitors is not a sample, it's an anecdote. My theory is that the capsule reads as "a video game thing" to everybody, so casual scrollers click it out of curiosity. Another theory with the exact same fingerprint is that the capsule is designed to be eye-catching on a crowded Steam page, and that same click-bait energy pulls in the wrong people on a general feed. I can't distinguish the two from this data. Both say the same thing: your Steam capsule is the wrong ad creative. It was designed for a place where clicks are free.

That 1.8 per 100 for the static image, by the way, is the web-only version. The moment I re-ran the exact same image split by platform, it did 4.5 per 100 on iOS and 11.5 on Android. Same JPEG. Different door.

Which gets to the thing that took me embarrassingly long to figure out: the Steam capsule and the ads image are different optimization problems and should probably be different art. The capsule wants to stand out in a crowd and pull a click; the page does the conversion work after. The ads image wants to be boring to everyone except the person it's for. Don't reuse the capsule as the ad and then wonder why the CPWL sucks.

Now the part that embarrassed me. I assumed my good launch-phase numbers came from tight targeting: follower lookalikes of MegaCrit, the #SlayTheSpire hashtag, that kind of thing. Then I opened the campaign settings and found those filters had been off the whole time. Active targeting when I was getting $1.16-1.62 CPWL: the built-in "Gaming" interest bucket, US/UK, static image. That's it. The creative was doing the filtering work I'd been crediting to the targeting parameters. Which is a sharper claim than the one I meant to make: your audience can be broader than you think, as long as the ad itself is narrow.

Three ad creatives compared: the trailer (0.8 wishlists per 100 visits), the capsule art (1.0), and a static image with a one-line pitch (1.8, the winner)

The math

The formula

The number on the ad dashboard is CPC, cost per click. The number you care about is CPWL. The bridge between them is two ratios you can only see on the Steam side:

CPWL = CPC ÷ pSI ÷ V2WR

Take the US Android cell: $0.145 CPC, pSI 45%, V2WR 26%. $0.145 / 0.45 / 0.26 = $1.24. Take the desktop cell from the same ad: $0.145 / 0.07 / 0.13 = $15.93. Same ad, same price per click, thirteen-fold difference in what a click is worth.

The pSI term is the one most people never look at, and it's the one that swings 7% to 45% depending on platform, and 14% to 45% depending on country. If you only take one thing from the math section: go look at the "tracked visits" column in your Steam UTM report, divide it by visits, and be horrified.

The spillover correction, and its death

In May I had a second correction I was very proud of: retweets of the ads were adding ~48% free clicks on top of what X billed me for (3,500 paid clicks, 5,176 Steam visits), so the "true" CPWL was $1.86 instead of $2.90. Then it died: across the entire second campaign, 45,106 paid clicks produced 45,526 Steam visits. Ratio 1.01. Spillover is a launch-novelty bonus - new game, new trailer, people share that; nobody quote-tweets a static ad in its eighth week. Enjoy it while it lasts, don't put it in your model. RIP (PC/TC) correction, you were beautiful for a week.

Break-even

A wishlist is a promise, not a sale. The break-even CPWL isn't a universal number; it's your game's economics:

value of a wishlist ≈ price × 0.45 × (wishlist-to-purchase rate)

Napkin math: wishlist value = price x 0.45 x conversion; a $2.95 wishlist is underwater on week-one conversion rates and fine on year-one rates; verdict: patience

Where the 0.45 comes from: knock 20% off the sticker for the launch discount and sale events (that's when most wishlisters buy), then Steam's 30%, then roughly 20% for VAT and sales taxes that come off before Steam's cut. 0.8 × 0.7 × 0.8 = 0.45. Regional pricing (more on that in a sec), refunds and a publisher's cut all push it lower, so treat 0.45 as the optimistic-but-realistic number for most indies.

The conversion rate is where everyone gets sloppy, me included until I went and checked. Almost every number you'll see quoted is FIRST WEEK: week-one sales divided by wishlists at launch. The classic "20%" comes from a 2020 study of games that had already done fine. GameDiscoverCo's more recent cuts put the median at 10-15% for games launching with 5k+ wishlists, and about 10% for games priced over ten bucks. (Their read is that conversion isn't falling, the median game in the sample just got smaller. Same number for you either way.) That ratio also counts everyone who bought in week one, including people who never wishlisted, so it flatters the value of a marginal wishlist. Nobody seems to publish a first-year conversion number directly; what exists is the week-one to year-one revenue multiplier, a median of about 2.6-3.2x in GDCo's recent surveys (older ones said 4x). Chain the two and a launch wishlist is worth roughly 30-45% of a sale over year one, discounts and all, with a spread of an order of magnitude between games.

Here's the table. Left three columns are first-week territory, right two are year one:

Price 10% 15% 20% 30% 40%
$9.99 $0.45 $0.67 $0.90 $1.35 $1.80
$14.99 $0.67 $1.01 $1.35 $2.02 $2.70
$19.99 $0.90 $1.35 $1.80 $2.70 $3.60
$24.99 $1.12 $1.69 $2.25 $3.37 $4.50
$29.99 $1.35 $2.02 $2.70 $4.05 $5.40

Kegs is probably gonna be a $24.99 game (call it 20 bucks after the launch discount, which is what the 0.45 already assumes). On week-one economics alone, break-even is $1.12-2.25, so my $2.95 blended CPWL is underwater and the $2.23 for the parts that weren't tuition just barely clears the optimistic end. On year-one economics, break-even is $3.37-4.50 and the whole campaign is comfortably positive, before the threshold argument below. Japan at $1.22 clears everything except the 10% column (hold that thought, regional pricing is about to take a bite out of it). My Reddit promo disaster at $28.57 needed a 250% conversion rate, which I'm told is difficult (but some mega hits actually do hit that). Nobody knows their own conversion rate until launch tho, and 30% is a data-based average estimate but still a wild guess - plenty of games do worse than 10%, and big hitters that went under the radar do get more than 100%.

Regional pricing, or: why the Japan line above is a lie

That table is in US dollars, and most of your wishlists aren't. Steam's regional pricing varies by A LOT - some markets sit at less than half the US price - and a wishlist from one of those is worth exactly that fraction of a US wishlist at sale time. So once you've figured out which countries your ads actually work in, and BEFORE you set up any forever-ads there, run the table again with the local price. Steam's pricing explorer (Steamworks login required) will tell you: plug in your game's US price and whichever conversion method you're planning to use, and read off what the game actually sells for in that country, in dollars. Then multiply THAT by 0.45 and by your conversion guess.

In my case, a $25 game in Japan using Steam's multi-variable conversion comes out at around 20 bucks. So my real Japanese break-even is 20% lower than the table says: $1.35 at 15% first-week conversion instead of $1.69, $2.70 at 30% instead of $3.37. Japan at $1.22 still clears it, but only just, and "comfortably" turned into "barely" with one lookup. Now imagine you made a football game and Brazil is your best-converting country, or you're targeting India or China for whatever reason. The CPWL on the dashboard will look fantastic, and the price each of those wishlists converts at might be a third of what you're picturing. Check the explorer before you get excited.

The part of the math that's not on the dashboard

If the direct math were the whole story, some of my spend past the cream would be underwater and I'd stop it. I haven't, for two reasons, and one of them got a lot weaker while I was writing this.

The first was the threshold argument. When these tests started, in spring 2026, there WAS a magic number: somewhere around 7k wishlists got you onto Steam's Popular Upcoming list before launch and gave you a real shot at New & Trending on launch day, and those lists are worth orders of magnitude more eyeballs than anything an ad budget buys. So a wishlist on a 6,500-wishlist page was objectively worth a lot more than its direct sale value - the marginal ones that pushed you over the line bought you the list, not just a sale. Paying $2.90 for those made total sense.

Then Valve shipped its store refresh in June 2026. The Popular Upcoming and New & Trending tabs went from a week-scale to a month-scale window, so you're now competing with every notable release in a month instead of a week, and the smaller games got moved to a personalized Calendar that each user sees based on what they play. The old 7k bar is gone. You might need an order of magnitude more wishlists to make the front-page lists now, and the Calendar is decided by relevance to each player (tho your wishlist count still matters - you're competing with similar games to show up on that calendar). Which means "buy your way over the threshold with ads" is still somewhat relevant but nowhere near as relevant or as clear-cut as it was before.

The second reason is the stuff that doesn't show up in any column, which I'll get to at the end.

Things about the X Ads machine that the UI doesn't tell you

Max bid is a delivery throttle, not just a price cap

During the platform-split phase I cloned my working ad into three new ad groups (one per platform), same creative, same targeting, and set the max bid on the new ones at $0.08 instead of the original's $0.12. Overnight the original got about 2,000 impressions. The three clones got about 100 each.

The delivered CPC in that campaign was settling around $0.07, so on paper an $0.08 cap should never have bound. But X's auction doesn't just use the max bid to decide what you pay when you win; it uses it to decide whether you get into the auction at all for each slot. Max bid isn't the cover charge. It's what the bouncer looks at before deciding whether you exist. Drop it by 20% and you're excluded from every slot where the predicted competitive price is above it, which was apparently most of them. New ads also get a cold-start penalty for a day or two, so the 20x gap wasn't all the bid. But it was mostly the bid.

Rule: when you clone a working ad into UTM variants, start the clones at the same max bid. Test bid sensitivity later, as its own experiment. Don't use the split as an excuse to also save money; you'll get starved variants and a broken comparison.

Two more things from the same drawer. Every ad group I ran used max-CPC bidding; I never got around to testing X's autobid, so my "don't take the recommended bid" advice comes from Reddit, where the recommended settings spent $1,000 in a single day on clicks that converted at 2.4%. Start around $0.07-0.12 for English-language gaming audiences on mobile, raise it when you want volume and your CPWL has headroom, and remember that lowering it also cuts delivery, not just price.

And skip what you can't measure. X's one-click "retarget people who engaged with your posts" option has no date window and no separate UTM, so you can never tell whether it helped or hurt - and the people most likely to click your ad a second time are the ones who clicked once, looked, and said no. If the platform won't let you measure whether a feature helps, default to off. Same logic for lookalike audiences.

Speed of Elon - the good and the bad

X Ads has no meaningful approval step and the dashboard updates while you watch. You change a bid, you see impressions move within the hour. Reddit took days to approve a campaign and days more before the reporting caught up. It's not "X is faster." It's gigabit fiber next door versus a 90s landline from the moon. You cannot iterate on a campaign whose data arrives three days after the spend.

The trap is that X's real-time number is CPC, and the number you care about lives on Steam, which updates about once a day. So when you're sitting there at 1am in your underwear watching the dashboard, the thing that moves is CPC, and you start making decisions on it.

Which is how I killed Germany. Three days into the language test, German CPCs looked expensive ($0.12 on Android, against $0.06 for Spain and $0.07 for Japan), so I cut it and kept Spain and France. When the Steam numbers caught up, Germany/Android had the best V2WR of any cell in that campaign, 27%, and came in at $1.64 CPWL. Second-best country I had, killed for looking expensive at the wrong layer of the funnel. Spain/iOS, same story: $1.64 CPWL, cut on day three because I was keeping one platform per country to limit the number of cells and Android "converts better," while Spain/Android ran on for two weeks at $2.58.

Lesson I'm still learning: wait for the wishlists. Three days minimum, thirty wishlists minimum, and the kill decision is made on Steam's numbers, not X's.

Countries

Here's every cell in the second campaign, ranked:

Bar chart of cost per wishlist for all 25 ad cells, best first: Japan around $1.22 down to Ireland Android at $16.29; orange bars have 30+ wishlists

A few things fall out of that chart.

The US is not "English-speaking countries"

In May, with US/UK data, I assumed the rest of the Anglosphere would behave like the US: same language, same page, similar Steam adoption, similar ad prices. So I opened the UK, Canada, Australia, Ireland and New Zealand, both platforms, for four days each.

Pooled: $538 spent, 102 wishlists, $5.28 CPWL. Against about $1.16-1.62 in the US at the time. pSI was half the US's (UK/Android 28%, Canada 26%, Australia 19%, Ireland 14%, versus 43-45% in the US on Android), V2WR was lower, and the clicks cost more ($0.12-0.15 on Android). Every part of the funnel was worse - the full trifecta. I don't have a clean explanation. Steam penetration, phone habits, the deckbuilder audience being more US-concentrated, or the ad price simply being set by more competition for English-language gaming inventory. Whatever it is, "same language" bought me nothing. Ireland came in at $16 CPWL - I could have flown to Dublin and asked people individually. (It's three wishlists from $49, so ignore it as a data point. Keep it as a joke.)

The part where I benched my best market

Writing this article is how I found out. The US ran hot for the first two weeks of May - the platform split and the gender cells were all US-targeted, and Steam's side shows about 430 wishlists from them at the $1.16-1.62 launch-phase rates before I throttled everything down around May 14 to fund the country tests. Then the tests picked the winners, the winners inherited the budget, and the US - the incumbent every test was implicitly compared against - never got re-entered into the tournament. It still ended up as 37% of all my wishlists. Off a two-week window. At close to the best CPWL I have, in the deepest audience pool I have, with full-sticker-price wishlists. (Numbers check, because I know somebody will do the subtraction: the 37% is 651 of my ~1,770, counted by visitor country in Steam's UTM report - 429 from those US-targeted cells, 155 through Reddit, 67 from the launch campaign. The ~$2 launch-phase row in the headline table is a different cut entirely: that's a spend bucket, every country the launch campaign reached, with the trailer-vs-static creative experiments dragging its average down. The clean US mobile cells ran $1.16-1.62.)

There's no dashboard number that flags "you stopped funding your champion" - the spreadsheet only grades the cells you're running. Re-opening the US properly is the first test on the Part 2 list. (Related lesson, learned the expensive way: export your data BEFORE you delete ad groups in the ads manager. Deleted groups vanish from exports, which is why the US cells are missing from the chart above. Ask me how I know.)

Language is a moat

The idea: if hardly anyone bids on Japanese-language gaming ads, then the auction for "Japanese-language ad, gaming interest, Japan" should have a fraction of the bidders that the English equivalent has, and CPCs should be structurally cheap. Localization isn't just a targeting filter, it's a competitive moat.

My page was already localized to a bunch of languages, so I wrote one-sentence ads in Japanese, Korean, German, French and Spanish and opened those countries at the same time as the English ones. CPCs: Japan/iOS $0.039, Spain/iOS $0.035, France/iOS $0.037, against $0.085 for UK/iOS and $0.102 for Australia/iOS. Two to three times cheaper per click, before conversion.

And conversion held up. Japan was the best market I have, $1.21 CPWL on Android and $1.23 on iOS over 330 wishlists, matching the US. Germany $1.94 over both platforms (then murdered, see above). Spain $2.38, France $3.17, both platforms, both dragged down by the decay from running Android for weeks. Korea aside, every localized cell beat every non-US English-speaking cell, with the single exception of UK/Android edging out France/Android.

Cost per wishlist by market: Japan $1.22, US $1.16-1.62, Germany $1.94, Spain $2.38, France $3.17, UK/Canada/Australia about $4.53 pooled, Korea $4.68

Before you go localize your ads into forty languages, the 3 conditions that have to be true for it to work:

  1. The platform actually reaches the market. X is blocked in mainland China, so a Simplified Chinese ad on X reaches the diaspora, not China.
  2. Your Steam page is localized in that language. A Japanese ad that lands on an English page is paying for a bounce.
  3. Steam's regional price for that country supports the economics. A wishlist from a country where your game sells for 40% of the US price is worth 40% of a US wishlist. The right break-even isn't a flat CPWL, it's CPWL as a fraction of the local price (the break-even section has the how-to). Brazil, Turkey, Russia and most of Southeast Asia fail this test for me regardless of how cheap the clicks are (disclaimer: I'm from Brazil).

Korea was the prediction that died. My theory was that moat depth tracks local English literacy, so Korea should've been deep like Japan. Falsified: $4.68 CPWL, 12% pSI on iOS, a V2WR of 6-8% - the worst of any country. The Korean domestic games industry buys its own Korean-language ad inventory and Korean PC gamers have local alternatives to Steam, and none of that was in my model. Meanwhile Germany, my predicted "shallowest moat" (most Germans read English just fine), was my second-best market on CPWL. That's the third first-principles prediction the data overruled in this campaign, after "the Android premium won't transfer to Europe" (it did) and "spillover is durable" (it wasn't). Test small in every language you're already localized to, and let the numbers rank them - don't trust anyone's mechanism, including mine.

A warning about the moat

By publishing this I might be eroding the very arbitrage I'm describing. The Japanese CPC I got is structurally cheap because hardly anyone is bidding on Japanese-language gaming inventory. If even a fraction of you read this and start running Japanese ads, the auction gets more competitive and the price goes up. The arbitrage is temporary by definition. If you want it, move fast; the window might already be closing by the time you read this. (And if it does close, well, I predicted it, which is the least satisfying kind of being right.) If the moat does go away because of this article, at least I can bask in the glory of the knowledge that half a dozen of you actually read it, which is more than I can say about almost anything I put out there.

Reddit, or: the section where I eat my words

IIRC, Chris Zukowski said in one of his marketing masterclass videos (good stuff by the way, go get it if you can: the masterclass) that ads were usually not a good idea for getting wishlists, and that for those who did try, Reddit seemed like a better option. Back in May I was ready to disagree with both halves loudly. Now I disagree with one and a half.

The $500 that started all this

Reddit ran one of those spend-$500-get-$500 promotions. Free money, near enough, so I took it, pointed it at the announcement campaign with the recommended settings, and did approximately no thinking about any of it. Why optimize something half of which somebody else is paying for? (by the way, that's exactly why governments are horrible at spending your money, but I digress)

That thousand dollars of traffic produced 35 wishlists. Reddit spent the whole thing in a day, on clicks that were mostly not signed into Steam and mostly not interested. It was announcement day, I had six things on fire, and by the time I looked the money was gone. Fuck. Lift and coast, they said. Full throttle into the wall, said the campaign.

$28.57 CPWL at what the traffic was worth, $14.29 on the money that actually left my account. Either way, catastrophic, and the moment this article started. Not because it hurt, it barely did, it was mostly free. Because it was the first time I understood I had no idea whether any of my marketing worked, and I'd been making decisions worth real money on vibes. The 25 ad groups, the UTM tags on everything, the geo splits, the arguing with myself about attribution, all of it exists because a free $500 did badly enough to embarrass me into measuring things.

Best money Reddit ever spent on me. Not sure it was the best money Reddit ever spent on Reddit.

And then the second one

Ten days later I ran a Reddit campaign with my own money and a bit more attention (could probably still be better, CPC is still too high - I'll try a 3rd time later).

Spend Clicks CPC Visits pSI V2WR Wishlists CPWL
Campaign 1 (Apr 30, recommended settings) $1,000 1,247 $0.80 1,486 18.8% 12.9% 35 $28.57
Campaign 2 (May 10-18, manual CPC bids) $419 808 $0.52 907 54.4% 32.4% 158 $2.65

54% pSI, a third of those wishlisting, 17 wishlists per 100 visits. That's the highest per-click quality of anything in this article, on either platform, by a distance. Great stuff, higher than US Android on X.

So the honest comparison is: per wishlist, Reddit with manual bidding was about the same as X, and the ceiling is higher, because the people who click on Reddit are extraordinarily well qualified. What X still wins on is everything around the number. Reddit ads are slow: approval takes days, reporting takes days, you change a thing and then you sit there like a dog waiting by the door. On X I could push a variant, watch it move, and kill it the same afternoon, which is how I ended up with 25 ad groups and an actual map instead of a year of refreshing a dashboard. Add cheap enough clicks that a $23 test tells you something by tomorrow, and (during the launch window at least) free spillover from retweets, which Reddit's ad format has no equivalent of.

They're not rivals, they're a sequence: X is where you find out what to say, because it's cheap enough to be wrong on repeatedly and fast enough that being wrong costs you an afternoon. Reddit is where you say it to people who actually care, once you know which creative works and what a click is worth to you. Wandering in the way I did, on autopilot, spending free money without looking, was like strolling into a high-level zone at level 2 because the loot looked good. The loot is good. Just turn up geared.

But "Reddit is 20x worse" was wrong, and I'm the one who was wrong, and I'd like Chris's take on all of it after he reads this (IF he reads this - this is turning out quite long, he might have dozed off by the time he gets here)

One caveat: campaign 2 is 158 wishlists over nine days, one campaign, and I haven't checked whether that 17% survives past the cream.

Two Reddit ad receipts: recommended settings spent $1,000 in one day for 35 wishlists at $28.57 each; manual bids ten days later got 158 wishlists at $2.65

Tests that went nowhere (documented so you don't repeat them)

Gender. Untargeted, X attributed 22% of my impressions and 18% of my clicks to women, at nearly the same CPC as men. Then I tried to buy more of that on purpose: a women-only US/Android ad group, deliberately over-bid at $0.17 when my best groups were winning clicks at seven cents, $58 a day budget. It spent $32.05 in ten days. Just over three bucks a day against a fifty-eight-dollar cap. It wasn't throttled by budget or by price, X just couldn't find enough women to show it to. The women who did click wishlisted at about the same rate as the men who did (4.3% vs 4.2% per visit, on 16 wishlists split across the Android and iOS women cells - the chart above shows the Android half - so read that as "no idea"). "Too small to conclude" is a legitimate result tho. The practical rule is don't gender-split your ad groups.

Age. X will tell you spend by age bucket and Steam won't tell you wishlists by age, so this is click data only (I didn't get to running age-based UTM restricted splits yet). The signal runs opposite to the stereotype: 45-54 year olds clicked my ads at 1.77x the rate of 18-24 year olds, and the two buckets that ate 58% of my budget (25-34 and 18-24) had the two worst click-through rates. But look at the size of it. CPC across the age bands spans 1.14x. Country spans ten-fold on the number that matters. Age is a rounding error. Set a sane floor and put the time into geography instead. I did notice X served 0.6% of my budget to 13-17 year olds despite me never asking for that ¯\_(ツ)_/¯.

Page copy in dwarf voice. I rewrote the Steam page in the dwarves' own voice and, at the end of May, ran it under two ad variants: normal ad copy and ad copy that was also in dwarf tone. Tho I also changed the geo targeting at the same time (from single countries to a batch of eleven: the UK, Ireland, Canada, Australia, New Zealand, the Netherlands, the Nordics and a sliver of US), because I'm apparently incapable of following my own "change one thing" rule. The result was $7.26 CPWL across the board, awful enough that I pulled the plug after three days, and completely uninterpretable, because most of that spend went to the UK, Netherlands, Ireland and Sweden, which I already knew (or could have guessed) converted badly. Ad tone (normal vs dwarf) made no difference: $7.09 vs $7.46. Page tone: no idea, but apparently no significant changes.

Paying for information

Of the $3,188 in the second campaign, $1,521 went to deliberate tests: ten English-speaking country cells for four days, the language cells I didn't keep (Germany and Korea on both platforms, Spain and France on iOS), a women-only cell, the dwarf tone test. Those bought 335 wishlists at $4.54 CPWL. The other $1,667 went to running the cells the tests had found: Japan on both platforms, Spain and France on Android. Those bought 749 wishlists at $2.23.

Call the first half tuition. Nearly half the money, a third of the wishlists. If that $1,521 had gone into the winners instead, the campaign lands near $2.23 CPWL overall instead of $2.95 (before decay, which, see above), and that's roughly the number you should expect if you skip the classes I just paid for, which is the entire point of publishing this. Of course, it will vary significantly depending on how well your game converts visits to wishlists, which could be both significantly better or significantly worse than mine - mine converts at 14.2% of signed in users, which I'm guessing is pretty good (Chris Zukowski came at an average of 8.4% back in 2021)

If you look at the test spend as "$1,521 of bad CPWL," you'll stop testing, converge on one audience, run it until it decays, declare that ads stopped working, and quit. The other failure is chasing every new audience idea forever and never sitting on a winner. The test spend is what found Japan. Japan alone paid for the tests.

Before spending test money, ask whether the result could change a future decision. That's the whole test for whether information is worth paying for. Dropping the "Gaming" interest filter to see what happens fails it: I'd never leave it off, non-gamers don't wishlist, so I'd be paying to confirm something I already know. Testing a new language passes it: either result changes where the next dollar goes.

And budget it separately from the exploitation spend, so the two don't get judged by the same number. Early in a campaign I'd put 20-30% into exploration. Once the winners are stable, more like 10%.

Should you even be doing this?

A slot machine labeled Paid Ads with three reels - 56 cents on day one, $2.91 long-run average, $28.57 on recommended settings - marked 'everyone wins (for the first 48 hours)'; payout: 1,770 wishlists, house kept the odds

Three objections that might come up:

"The math doesn't seem worth it." The CPWL on your dashboard is the floor of what the ads are worth, not the ceiling. During the launch window, several mid-sized creators found the game through the ad-driven visibility on X. One of them has gone from a passive follow to publicly quote-tweeting the trailer to committing to try the build when there's a build to try. None of that pipeline existed before the ads and none of it is in any column of any spreadsheet in this article. Neither are the people who saw it in a friend's retweet three weeks later, or the journalist who'll remember the name in 2027. I can't put a number on that. I can say it's not zero, and that leaving the replies open on the ads helps it along (people see comments, the ad reads as a post, the engagement compounds).

"I can't afford ads." Then don't. Marketing is getting the game in front of eyeballs, and you can pay for eyeballs with time or with money. Most indie marketing advice is guerrilla-shaped (tweet daily, go viral, work the Discords for free for years) because most indie marketing advice comes from people whose only currency was time. If you're early in your career, living cheap, and a five-figure loss would hurt, that advice is right for you. If you're mid-career and walked away from a real salary to do this, you're already six figures down in opportunity cost, and a few thousand in ads is rounding error against the variance you're already carrying. Time is the most precious and limited resource we have, and not even Elon Musk can buy more of it. I prefer to spend money and save time.

"It's gambling." It is. So is spending two years making a game, and nobody makes you fill out a form for that one. Ads are a smaller bet inside the bigger one, and unlike the bigger one, you get the odds back in a spreadsheet within a week. If someone told you to roll a die, and on anything except a 6 you'd win $100, and on a 6 you'd lose $100, the vast majority of people who like to say "I don't gamble" would roll that damn die as many times as possible. If I can pay a dollar or two for a wishlist that I expect to pay for itself in the first year, and that back in May might have pushed me into a Steam zone with orders of magnitude more visibility, you're damn right I'm rolling that die as many times as I can. I just now know to check the die again every couple of days, because the odds change.

What's next (Part 2)

The actual experiment: the AI-generated-content disclosure comes off the Steam page. Some of my 2D placeholder art was AI-generated, I'm replacing all of it with commissioned work right now, and once it's gone the box goes with it. The negative feedback the game gets is overwhelmingly about that box and almost never about the game. Whether that's a loud minority or a real conversion blocker is exactly the kind of question this attribution setup can answer, and I'd rather measure it than argue about it on the internet. Same ads, same targeting, same countries, banner gone. If conversion climbs, the banner was quietly eating a chunk of my funnel and that changes my production priorities, not just my ads. If it doesn't, the loud people were just loud.

Everything else is housekeeping. Running the capsule test from the Steamland section on my own new capsule, properly, with a hundred wishlists per variant, and publishing the numbers. Pulsing versus streaming, to see whether the two-cheap-days effect can be farmed by rotating through countries instead of camping in one. Japan and Germany at real volume, to see whether the efficiency survives being asked for scale. Ireland and New Zealand stay dead; they've told me what they had to say. Autobid on X, and a third Reddit campaign with manual bids, a hard cap around 52 cents, and only creative that has already proven itself somewhere cheap, to see whether that 17% survives contact with scale.

Before you use any of this

One game. One genre. One ad account. One guy who is a gameplay engineer by trade and a performance marketer by accident. X specifically, which is currently a strange and cheap place to buy attention and may not stay either. Wishlist counts are gross adds, not net of deletions, so everything here is still a touch generous to me. And a wishlist is a promise from someone who has not yet given you any money.

Take some of the lessons. Do not count on any of my numbers.


Who I am: making games since 2001 - Iron Man VR and Batman: Arkham Shadow are the ones you might know. These days I'm solo-developing Kegs of Eternity, the roguelite deckbuilder all these wishlists were for. Part 2 lands first on @LonePiggyGames.

If this article saves you even one $1,000 day, the exchange rate is one wishlist: Kegs of Eternity.

← More write-ups on the Lone Piggy blog