Skip to content

By · Published: 2026-10-12 · Updated: 2026-10-13

A charity raffle from ticket stubs to the prize table

A school fair raffle looks like one job, and it’s really three. First you decide what a ticket is: a numbered stub, a name with a count next to it, or both. Then you draw winners. Then you decide which winner gets which of the eighteen donated prizes, from the restaurant voucher at the top to the box of fudge at the bottom. Each step has its own tool and its own way of going quietly wrong, and the wrong turns are mostly decided before anyone touches a button. This guide follows one raffle all the way through, with the numbers.

The raffle we’ll run

The setup is a typical fall fair. Tickets are $2 each or six for $10, sold in books over three weeks. When sales close, 437 tickets have gone to 159 households, and the spread looks like most raffles do: lots of people with one or two tickets and a small group of keen supporters with a lot.

Tickets heldHouseholdsTickets
18181
24080
626156
1012120
Total159437

There are 18 prizes. Local businesses donated them, so they are not equal: a $150 dinner voucher, a kayak rental, a haircut, some gift baskets, down to that box of fudge.

Before anything is drawn, the committee has one rule to settle, and the rest of the evening follows from it.

Step one: settle the rule, “one prize per ticket” or “one prize per household”

This is the decision people skip, and it decides which tool you open.

One prize per ticket means every ticket is a separate chance at every prize, and a household holding ten tickets can win twice. That’s the traditional reading of a ticket raffle, and it’s what you get if you draw stub numbers.

One prize per household means once a family wins, they are out of the remaining draws. That spreads prizes further, which matters at a school event where the same twelve families buying ten tickets each also run the bake sale.

The size of the difference surprised the committee the first time we ran these numbers. With 437 tickets and 18 prizes, drawn by ticket, the chance that at least one household wins two or more prizes is about 80%. Not a fluke you might see once in a while; it’s the normal outcome. So if your committee would wince at announcing the Hendersons for the second time, you want the per-household rule, and you want everyone to know it before the first stub is pulled.

Either rule is fair. What causes the arguments is picking the rule after seeing who won.

Step two (per ticket): draw stub numbers

If you go per ticket, you don’t need anyone’s name in a computer at all. The stubs are numbered 1 to 437, so the draw is a number.

Open the random number generator and set:

  • Min to 1 and Max to 437 (the last stub actually sold, not the last one printed; unsold books should not be in the range, or you’ll draw a number nobody holds)
  • How many to 18
  • No repeats ticked

Then press Generate a number. You get 18 distinct stub numbers in one batch. The generator uses the browser’s crypto source with rejection sampling, so 1 is no likelier than 437.

Two things to know about the tool before you rely on it:

  • No repeats only applies within one batch. The generator does not remember earlier draws. A batch can hold at most 50 numbers, so a raffle with more than 50 prizes needs two batches, and the second batch can hit numbers from the first. If you drew 50 and then 20 more from our 437 stubs, the chance of at least one collision between batches is about 92%. Draw everything in a single batch if you can, and if you can’t, decide in advance that a repeated stub is skipped and the next number on the list is used.
  • There is no seed on the number generator. A batch can’t be re-run to prove it. If you need a draw that anyone can reproduce later, use the raffle drawer below, which has one.

Read the numbers out in the order they appear and match each to its stub. Under the per-ticket rule, a household with ten tickets has a 34.6% chance of winning at least one prize, a single-ticket household 4.1%, which is exactly 18 in 437.

Step two (per household): draw names with ticket counts

For the per-household rule, the raffle drawer is the tool, because it does two things the number generator can’t: it weights each entry by ticket count, and it can take a winner out of the pool along with all of their tickets.

Enter one line per household, with the count after an “x”:

Okafor family x10
Brennan x6
Liu x2
Patel

A line with no count holds one ticket. Only an “x” followed by a whole number at the end of the line is read as a count, so a volunteer who types Maria Lopez, 412 meaning “Maria holds stub 412” gets one ticket, listed under exactly that text. Even so, keep stubs out of this list: under the per-household rule, a household’s tickets belong on one line with one count.

That matters because of how winners are removed. The drawer matches the text of the line and takes out every line with exactly that text. Two lines that both say Sam are treated as one entrant holding both tickets, which is wrong if they are two different households: tell them apart as Sam K and Sam P. The opposite trap is one household on two lines that differ, such as Lopez, 412 and Lopez, 413. To the drawer those are two entrants, and the Lopezes can win twice. Merge them into Lopez x2.

Now set How many winners? to 18, leave Remove winner after drawing ticked, and press Draw. All 18 winners come out in one click, in the order they were drawn, and each winner leaves the pool with every ticket they held before the next draw.

Draw them all in one go. Each click of Draw starts again from the full list, so drawing one winner per click and crossing names off by hand means the removal never happens inside the tool, and a winner from click three can come up again on click seven.

The odds under this rule, from a simulation of 100,000 draws of our exact list:

Tickets heldChance of winning a prize, per ticket rule (at least one)Chance of winning a prize, per household rule
14.1%4.5%
28.1%8.8%
622.4%24.3%
1034.6%37.3%

The per-household column is higher for everyone, which looks impossible until you remember that under the per-ticket rule some of those 18 prizes go to people who already won one. Removing winners redistributes those repeat prizes across the rest of the room. A ten-ticket family still has roughly eight times the chance of a one-ticket family, so buying more tickets still buys better odds. It just can’t buy a second prize.

Make the draw checkable before you make it

The raffle drawer has a Seed field. Leave it blank and the draw comes from the crypto source, fresh and unrepeatable. Type a phrase and the draw becomes reproducible: the same list, in the same order, with the same seed, always produces the same winners in the same order, on any device.

For a fundraiser that is worth doing, with one discipline. Announce the seed at the start of the evening (“tonight’s seed is fallfair-oak-street”), but lock the entry list before the seed is public, so nobody can tune the list against a known seed. The list order matters as well as its content, because the draw walks the list in order, so keep the exact pasted text.

After the draw, the Share link button copies a URL that reopens the drawer with the list, the options and the seed filled in. Anyone with it can press Draw and get your 18 names. Bear in mind that the link carries the whole entry list, every household name and ticket count. That is fine for the committee’s records; think twice before posting it in a public group.

Step three: the prize table

You now have 18 winners and 18 prizes. There are two honest ways to put them together.

Tiered. First name drawn takes the top prize, second takes the next, down the list. This is what most raffles do, it’s what the audience expects, and it needs no extra tool: the drawer’s results are already in draw order, and its CSV export has a rank column.

Matched at random. Every winner is equal and the prizes are shuffled across them. This suits a fair where the prizes are deliberately similar in value, or where nobody wants to be the person who “only” won fudge because their name came out eighteenth.

For the second, use the prize assigner. Click Copy on the raffle result; the copied text is one winner per line. Paste it into the People box, put the prizes one per line in Prizes / tasks, and press Assign. The prize list is shuffled and matched down the people list, so every one of the 18! possible matchings is equally likely.

Check that both boxes hold exactly 18 lines before you press Assign, because the tool’s behaviour on uneven lists is easy to misread on the night:

  • More winners than prizes: the shuffled prize list wraps around and starts again, so some prizes are handed out twice. With 18 winners and 17 prizes, one prize is assigned to two people, and you only have one kayak rental.
  • More prizes than winners: the extras are left unassigned. Fine if they’re spares, awkward if the sponsor’s voucher silently didn’t make the list.
  • Allow repeats should stay off for a physical prize table. With it on, each person draws independently from the whole prize list, so the same prize can go to several people and some won’t be given out at all. It exists for unlimited prizes such as discount codes.

The prize assigner has its own Seed field and its own Share link, so you can use the same seed phrase for both steps and the whole evening can be replayed end to end.

The running order on the night

Here is the sequence that worked for us, start to finish:

  1. Close sales and count. Write the final stub number or the household list, with counts, and freeze it.
  2. Announce the rule (per ticket or per household) and the seed, if you’re using one.
  3. Draw all winners in one batch, in the number generator or the raffle drawer.
  4. Read the winners out. Export the CSV straight away, before anyone presses anything else.
  5. Hand out prizes tiered by draw order, or run the prize assigner and read its matchings.
  6. Export that CSV too. The two files are the committee’s record of who won what.

Both tools also keep a Recent results list in the browser, but it holds only the last ten runs on that one device, and the prize assigner’s list shows just the first pairing of each run. Treat the CSV, not the history panel, as the record. The history exporter can gather those saved runs from every tool into one spreadsheet, which is handy as a backup; this post on recording draws covers how.

When the lists don’t match reality

Two problems come up at almost every raffle.

A winner isn’t there. Decide beforehand whether absent winners keep their prize (most charity raffles say yes, with a collection deadline) or forfeit it. If they forfeit, don’t rerun the whole draw, which would produce a completely different set of winners and look like a do-over. Draw a single replacement from the people who haven’t won: delete the winners from the list and draw one name.

A late book of tickets turns up. If it arrives before the draw, add it and recount; the range or the list changes, and that’s fine because nothing has been drawn. If it turns up after, it’s too late for this draw, and the honest fix is a refund or a ticket in the next one. Adding entries after the seed and list were announced is exactly the thing the seed was there to rule out.

A raffle that runs this way takes about ten minutes of actual drawing. Nearly all the work is in the rule and the list, done before anyone looks at a screen. For the single-tool details, running a raffle people trust goes deeper on tickets and seeds, and who gets which prize covers the prize assigner on its own.

← Back to all posts

Send feedback

Found a bug, want a feature, or just say hi? Send it our way.