
Most people who show up to your giveaway will not get a code. How you handle them decides whether a giveaway builds goodwill or quietly burns it — and there is a right way to answer the complaints.
Here is the uncomfortable arithmetic of a giveaway: if 400 people show up for 100 codes, then 75% of the interest your post generated belongs to people who got nothing.
That group is not a rounding error. It is the majority of everyone who cared. Whether they walk away thinking "cool app, bad luck" or "that was a mess" is entirely down to how you ran it.
It looks fair. It is not. It rewards whoever happened to be awake in your timezone, refreshing at the right second, on a fast connection.
The predictable results:
The frustration is rarely about the free app. It is about not being able to tell whether the process was straight.
Fairness is not everyone getting a code. That is impossible. Fairness is that the rules are knowable and the same for everyone:
The rule is stated up front. One code per person, while they last. Nobody has to guess.
The queue is real. Position is determined by when you arrived, not by who you know or how fast you type.
The state is visible. "23 of 100 left" or "all gone" beats silence. People accept losing a race far better than they accept not knowing whether the race was still running.
Nobody gets two. One code per person, enforced — not requested. The moment somebody spots a duplicate, the whole thing looks rigged.
Some will. Answer it directly, because how you respond is read by everyone who did not complain.
"There were none left in five minutes." Say the real number and mean it: "100 codes, all claimed in about six minutes — I was not expecting that either." Specificity reads as honesty. Vagueness reads as excuse.
"This was rigged / bots got them all." Say what you did about it: a bot challenge, one per person, rate limiting. If bots did get some, say so — that is a more credible answer than insisting they did not.
"Why not just make it free?" Because you would like to eat. You are allowed to say that.
The response that consistently works best is not an apology. It is an offer: "I've put a waitlist up — anyone on it gets first shot at the next batch." It converts a dead end into something, and it is the reason to keep a page live after the codes are gone.
If you take one thing from this: the people who missed out are the most valuable audience the giveaway produced.
They demonstrated intent and received nothing, which means — unlike the people who got a free copy — they are still plausible customers. Left on a dead link they are nothing. Given somewhere to leave an address, they are a list of pre-qualified people to tell about your next release.
Run the giveaway so that missing out has a next step. That is what makes it worth running at all.
Promo Code Queue enforces one code per person, shows how many are left, and turns the page into a waitlist the moment the last code goes — so the people who miss out end up somewhere useful.
Marketing expert and growth strategist

Shipping has never been easier and validation has never been harder. If nobody has used your app, everything you believe about it is a guess — and the fastest way to stop guessing is to put it in real hands.

Your soft launch window is your best chance to build reviews and momentum before going global. Here's how to use promo codes to engineer a successful launch.

A Product Hunt launch can drive hundreds of downloads in a single day — but only if you convert that traffic. Here's how to use promo codes to turn upvotes into loyal, reviewing users.