Skip to main content
← Back to blog
•by Engineering

Twitter Giveaway Picker: Pick a Random Retweet Winner You Can Prove

Running a giveaway on X is easy. Picking the winners in a way your community believes is the hard part. Someone always asks whether the winner was a friend of the team, whether the host drew five times and kept the result they liked, or why a bot account with no profile photo walked away with the prize.

This guide covers how to pick a random winner from a post on X, how to filter out low-effort entries without bending the rules, and how to publish a result that anyone can check for themselves. We built Winner Picker for exactly this, so the steps below use it, but the ideas apply to any draw you run.

Why giveaway draws lose trust

Most giveaway complaints fall into three groups.

1. Bots and farm accounts. A popular post attracts accounts created the same week, with a default avatar and no followers, that repost everything with a prize attached. If they are in the pool, they win their share.
2. Unverifiable picks. A screen recording of a spinning wheel proves nothing. The list could have been edited before the recording started, and nobody outside can repeat the spin.
3. Silent re-rolls. Even an honest tool can be run ten times. If only the tenth result is shown, the draw was not random in any useful sense.

A fair draw needs an answer to all three: rules that remove obvious junk and are announced in advance, a list that is frozen before any randomness exists, and randomness that nobody (the host included) can choose.

What you can and cannot collect from X

Winner Picker lists everyone who reposted, quoted or replied to your post and merges them into one row per person, with the actions each one took.

Likes are not on that list. X stopped showing who liked a post in 2024, so no tool can list likers reliably. If your giveaway says "like and repost to enter," only the repost part can be checked. For future giveaways, ask for a repost, a quote or a reply.

Replies come up short more often than reposts. X's reply counter includes replies it hides from readers as low quality, replies deeper inside threads and deleted ones, and none of those can be read. In one of our tests X showed 114 replies and 35 repliers could be collected.

Very large posts can come back partial, because X does not always return every page of a long list. You get a warning when that happens, and you pay only for the people actually collected.

How to pick a random retweet winner, step by step

1. Paste the post and check the cost

Sign in at xcrop.io/winner-picker and paste the link to your post. You get a free estimate before anything is collected. The estimate is the worst case: the sum of the repost, quote and reply counters on the post. The real charge is usually lower, because someone who reposted and replied is one entrant, and deleted or protected accounts drop out of the lists.

The estimate covers the whole list. There is no option to collect only part of it, so the price you are quoted is the price of reading the post to its end. Leave it empty and everyone is collected (big posts take a few minutes and keep running if you close the tab).

2. Collect the entrants

Collection costs 10 credits per collected entrant, with a minimum of 10 credits per collection. Some examples at that rate:

Entrants collectedCredits
110 (the minimum)
3003,000
2,50025,000

The free Starter plan includes 5,000 credits a month, which covers a giveaway of about 500 entrants. If a collection fails, nothing is charged. Drawing, re-rolling winners, checking follows and publishing the result are all free. If you come back to the same post within 24 hours, you can reopen the list you already paid for at no cost.

Want to see the whole flow first? The "Sample data" button runs it on 350 made-up entrants, without an account and without charging anything.

3. Set the rules you announced

All rules are optional and off by default, except that the post author is excluded unless you untick it. The useful ones for keeping bots out:

• Minimum account age, measured at the time your post went up. Accounts created after the post never qualify, which blocks the "made an account to enter" pattern.
• Has a profile photo, which drops accounts still on the default avatar.
• Minimum followers and verified only, if your giveaway is meant for established accounts.

And for giveaways with tasks:

• Require a repost, a quote, a reply, or any combination of the three.
• Ask for a minimum number of tags, counted as friends @mentioned in one reply or quote. Your own handle and the entrant's handle do not count.
• Require keywords, including exact hashtags and cashtags.
• Require a wallet address (EVM, Solana, TON, SUI / Aptos, Tron or Bitcoin, one chain per draw) in the reply or quote. Addresses show up in full in your CSV and XLSX exports, ready for an airdrop or a whitelist.
• Make winners follow up to five accounts in total, which can include you. Only the picked winners are checked, in draw order. A pick who does not follow is skipped and the next one is checked.
• Keep team members, partners or known farmers out with an exclude list.

Only switch on what you announced in the original post. A rule added after the fact is a quiet way of choosing who can win, even when the intention is good.

4. Draw

When you press Draw, three things happen in order:

1. The eligible list is sorted by X user id and fingerprinted with SHA-256.
2. The fingerprint, your rules, the number of winners and a drand round two rounds ahead, a 3 to 6 second wait, are saved on our server as a commitment. Its hash is shown on screen right away.
3. When that drand round is published, its random value picks the winners.

5. Reveal, publish and share

The winners are revealed one by one. If a winner never claims the prize, you can re-roll that spot: the replacement is the next unused pick of the same sequence, no new random number is drawn, and the re-roll is recorded with its reason.

Publishing creates a public page at /winner-picker/r/<id> with the winners, the counts, your rules and the proof. "Share on X" opens a prefilled post with the winners and the link.

What is drand, and why use it?

drand is a public randomness network run by independent organizations, known as the League of Entropy. Every 3 seconds it publishes a new random value, signed jointly by the members. No single member can predict or bias the value, and anyone can check the signature against the network's public key.

That gives a giveaway two properties a private random number generator cannot:

• Nobody knows the value in advance. The draw is committed for a round that has not been published yet, so the host cannot try lists or rules against a value they already know.
• Anyone can look it up afterwards. The round number is in the proof, and the same value is served by drand to everyone.

The winners come from the drand value and the list fingerprint, hashed into a key. The key produces a stream of numbers that picks entrants one at a time. Numbers that would favor some positions are discarded and drawn again, so every eligible entrant has the same chance.

How to verify giveaway winners

Every published result can be checked in two ways.

On the result page. Press Verify now. Your browser downloads the entry list, fetches the drand round, checks its signature and recomputes the fingerprint, the commitment hash, the picks, the winners and any re-rolls. You get a pass or fail for each step.

Without our site. The docs include a short script with no dependencies. Save it as verify.mjs, then run it on the proof and the entry list:

BASH
node verify.mjs proof.json eligible.csv

It prints "ok": true when everything matches, plus a link to the same round on the drand network so you can compare the randomness yourself. The fairness section of the docs has the script and the full spec, detailed enough to write your own verifier.

What about re-rolling until the result looks good?

Every draw is saved on our server before its drand round exists, and the public page shows how many draws the same host committed for the same post, before and after the one that was published, plus draws other accounts committed on that post. "This was the only draw the host committed for this post" and "the host committed 7 draws" read very differently, and entrants can see which one applies.

The host cannot quietly trim the list either. Our server rebuilds the eligible list from its own copy of the collection and refuses to publish one that differs, and a re-roll can only add a replacement to the record, never rewrite earlier winners.

To be clear about the limits: a host could collect the post again to get a fresh list, and the page counts draws, not collections. Follow checks are done by our servers at draw time and recorded in the proof, but they cannot be proven with cryptography the way the draw itself can.

What the public page shows, and what it does not

The result page shows the post, the winners' handles, names and avatars, the counts (collected, reposters, quoters, repliers, eligible), the rules and the proof. It also offers the entry list as a CSV of user ids and handles, because verification needs it.

It never shows wallet addresses, reply or quote text, or entrants' follower counts. Those stay in the files you download as the host.

Finding a draw later

Every real draw is saved to your account. Open your draw history or the Winner Picker tab in the dashboard to see each one with its status. From a draw's private page you can publish it, share it, re-roll a winner, finish a draw you closed before the reveal, and download the winners file again. Wallet addresses stay in that file, so you can download it again later.

A checklist for your next giveaway

• Ask for reposts, quotes or replies. Likes cannot be checked.
• Write the rules into the post: account age, tags, wallet, who to follow.
• Set the same rules in the picker, and nothing extra.
• Draw once, publish the result page and post the link.
• If a winner does not claim, re-roll that spot. The history stays on the page.

Open Winner Picker to run your next draw, or try the sample data first to see how the reveal and the verification work.

Frequently Asked Questions

How do I pick a random retweet winner on X?

Paste the post link into Winner Picker, collect the reposts, quotes and replies, set your rules and draw. The winners come from a public drand round, and the result page lets anyone re-run the draw.

Can a giveaway picker use likes?

No. X stopped showing who liked a post in 2024, so no tool can list likers reliably. Use reposts, quotes and replies as entry actions instead.

What makes a giveaway provably fair?

The entry list and the rules are locked before the random number exists, the random number comes from a public source nobody controls, and anyone can recompute the winners from the published data.

How much does it cost?

10 credits per collected entrant, with a minimum of 10 credits per collection. 300 entrants cost 3,000 credits. The estimate, the draw, re-rolls and publishing are free.

Why does the reply list have fewer people than the reply count on X?

X counts replies it hides from readers as low quality, replies deeper inside threads and deleted ones. Those cannot be collected by any tool, so the list is often well below the counter. You pay only for the people actually collected.

Where can I find a giveaway I drew earlier?

Signed in, open xcrop.io/winner-picker/history or the Winner Picker tab in your dashboard. Each draw has a private page where you can publish, re-roll and download the winners with their wallets again at any time.

Build this with the XCROP API

One API for X (formerly Twitter) data: profiles, tweets, followers, search and real-time streams. Start free with 5,000 credits/month, no card required.