Spin the Wheel of Names - Free Random Name Picker & Wheel Spinner
Enter a list of names, spin the wheel, and get a provably fair random pick.
Run workplace raffles and prize draws, audience giveaways, classroom picks, and everyday decisions with a wheel spinner built for fair, verifiable results.
How the Wheel Spin Works
1. Add your names. Type or paste a list, or upload a CSV with thousands of entries. The wheel shows up to 250 segments; every entry stays in the draw no matter how large your list is.
2. Spin the wheel. Click the wheel or press Space. For large lists the winner is selected on our servers with a cryptographically secure random number generator over the complete list, never just the visible segments.
3. Announce the winner. Auto-remove past winners so nobody wins twice, pick multiple winners in one run, and download a certificate that records exactly how each draw was made.

A Free Online Wheel Spinner for Any Occasion
Workplace raffles and prize draws
Upload your entry list as a CSV, spin the wheel of names in front of the team, and hand out prizes with a downloadable record of every draw. Auto-remove winners keeps repeat wins out, and Teams mode splits groups fairly.
Giveaways, contests, and streams
Use the wheel as a giveaway winner picker your audience can watch live: import entries, spin, and publish results your community can trust. Run contest draws straight from Discord with our bot, or pick winners from social media comments with the built-in comment picker.
Classrooms and groups
Use the name wheel to call on students fairly, assign presentation order, or split a class into teams. Save your class list once and spin the wheel all term.
Everyday decisions
Where to eat, who goes first, which movie tonight: put the options on the spinner wheel and let the spin decide. Try the yes no wheel for the simplest calls of all.
A Random Winner Generator for Giveaways, Contests, and Raffles
Running a giveaway or sweepstakes? The wheel doubles as a random winner picker: load your entries (typed, pasted, or a CSV of thousands), spin once per prize, and let auto-remove keep past winners out of later draws. The raffle generator workflow handles multi-entry lists too, so participants with more tickets get proportionally better odds.
Every draw can be backed up with a downloadable certificate showing the pool size, the selection method, and each winner's exact odds, which is what separates a trustworthy contest from a "trust me" one. For community giveaways, the Discord bot and comment picker bring the draw to where your entrants already are.
Provably Fair: How Our Random Selection Works
Server-side cryptographic selection
Winners on large wheels are chosen on our servers using a cryptographically secure random number generator over your complete list, with removed winners excluded from the eligible pool. The wheel animation is the show; the math is the draw.
Every entry counts
Whether your list has 10 names or 1,000,000, every entry has exactly its fair share of the odds. Weighted entries are honored precisely, and each spin records the pool size and the winner's exact probability at the moment of selection.
Auditable results
Download a result certificate for any draw: it records each winner, the selection method actually used, the pool size, and the odds. Spin histories are saved to your account so results can be checked later.
Every Feature You Need for Fair Draws
🎯 Smart Name Selection
- Animated spinning name wheel with three speed presets (Rapid, Standard, Long), roughly 2 to 30 seconds
- Multi-winner selection (pick multiple winners at once)
- Weighted entries: assign different weights to adjust win probability (Pro plan)
- Teams Mode: organize names into teams and spin to pick a winning team
- Countdown Timer: auto-spin after 3-60 second countdown (perfect for live events)
- Auto-Remove Winners: on CSV lists every entry of the winning name is removed (all duplicate tickets); on typed lists only the single landed entry is removed
- Winner export (download as CSV/PDF, copy to clipboard)
- Keyboard shortcuts (Spacebar to spin, Shift+C for countdown timer, Enter to confirm, Esc to close)
- CSV file upload for bulk imports (free account required; up to 1 million names per wheel on Pro)
- Manual entry with quick editing and removal
- Sort names alphabetically with one click
- Data import for automated entry management
🎨 Complete Customization
- 1,018 Google Fonts for wheel text (Pro plan)
- 40 pre-designed color themes (Vibrant, Pastels, Rainbow, Neon, Ocean, Sunset, and more)
- Custom color picker for individual segments
- Custom text & background colors (Pro plan)
- Background images & color overlays for branded experiences (Pro plan)
- Center button customization: text, background color & text color (Pro plan)
- Needle customization: 4 styles (Classic, Modern, Arrow, Pointer) with custom colors (Pro plan)
- Wheel title & description fields for context
- Adjustable spin speed and easing animations
- 6 selectable sound effects plus applause, with volume control
🏆 Winner Management
- Automatic winner tracking and history
- Dedicated winners page with shareable links
- Winner Certificate: downloadable PDF proof of fair selection (Pro plan)
- Export winners to CSV for record keeping
- Remove winners from the pool after selection
- Bulk winner actions (clear all, reset, export)
💼 Professional Features
- Save wheels to your account dashboard (3 on Free, unlimited on Pro)
- Full-screen presentation mode (Live Mode) to spin the wheel for audience engagement
- Embed wheels on your website with a simple code snippet
- Customizable winner display fields for detailed winner information
- Real-time sync across devices for seamless management
- Share wheels publicly with a simple link
🎉 Visual Effects
- Confetti celebration animation for winners
- Customizable applause and cheering sounds
- Professional display options for presentations
- Volume control for all audio effects
📊 Advanced Capabilities
- Real-time sync across devices
- Automatic save with browser storage backup
- Public sharing for winners page
- Mobile-responsive design for all devices
- Offline capability with local storage (for wheels of 250 names or fewer)
🔌 API Integration
- RESTful API for programmatic access (all plans, free account required)
- Create, update, and delete wheels via API
- Trigger spins and retrieve winner data programmatically
- Comprehensive API documentation with code examples
- Support for JavaScript, Python, PHP, Ruby, Go, and cURL
- No published hard rate limits: API usage is subject to fair use
- API key management with security controls
- Simple Bearer token authentication
- Ideal for automation, custom integrations, and third-party apps
🤖 Wheel Picker Discord Bot
- Spin wheels directly in your Discord server
- /spin members - Pick from server members (filter by role)
- /spin custom - Spin with your own comma-separated entries
- /spin reactions - Pick from users who reacted to a message
- /spin voice - Pick from members in a voice channel
- Animated GIF wheel spins displayed in Discord
- 5 color themes: Uplup, Vibrant, Pastel, Sunset, Ocean
- Self-hosted and open source on GitHub
- Optional Uplup API integration for saved wheels
- Perfect for community raffles and game nights
Total Usage
(past 24h)
(past 24h)
(past 24h)
Join hundreds of thousands making random selections fair and fun! 🎡
🎉 Free to use, no ads, generous limits - upgrade as you grow!
Scale as You Grow
From 100 names (Free) to 1 million names (Pro $29/mo)
CSV Upload
Import names from CSV files instantly
Custom Backgrounds
Upload your own background images (Pro)
Save Your Wheels
3 saved wheels free, unlimited on Pro
Share Results
Share winner pages with anyone
Full History
Access complete spin history forever
API Access
Programmatic control with REST API
API Keys
Secure authentication for your integrations
Wheel Picker Discord Bot
Spin wheels directly in your Discord server
Simple Pricing
Free
- 100 names per wheel
- 10 spins per wheel
- 3 saved wheels
- Multi-winner selection (up to 10)
- 2 teams (team mode)
- Countdown Timer (auto-spin)
- Prevent duplicate winners
- CSV import
- Winner export (CSV/PDF)
- Embed wheel on your website
- Wheel Picker Discord bot integration
- No ads, no credit card
Pro
- 1 million names per wheel
- Unlimited saved wheels
- Unlimited spins
- Multi-winner selection
- Weighted entries (adjust win probability)
- Result certificates (proof of fair selection)
- Unlimited teams (team mode)
- Countdown Timer (auto-spin)
- CSV upload for up to 1 million names
- Custom backgrounds & fonts
- Priority support
- Embed wheel on your website
- Full REST API access
Need forms or quizzes? View all plans
Trusted by 10,000+ Leading Companies
Join industry leaders who use Uplup to engage millions of users worldwide
Perfect for Every Occasion
Education
Business
Events
Gaming & Streaming
Social Media Drawings
Holiday & Family
Charity Raffles
Sports & Teams
Restaurants & Retail
Decision Making
Real Estate & Auctions
Virtually Anything!
Frequently Asked Questions
Everything you need to know about our Random Name Picker tool
The Random Name Picker wheel uses a fully client-side, transparent, and auditable winner selection process. This documentation details exactly how winners are selected to ensure complete fairness and transparency.
Table of Contents
1. Core Principles
All Names Included
Every single name in your list has an equal chance of being selected, regardless of how many names are displayed on the wheel.
Client-Side Selection
Winner selection happens entirely in your browser using cryptographically secure random number generation.
Verifiable Process
The selection algorithm is open, auditable, and can be independently verified.
2. Technical Implementation
The winner selection uses the Web Crypto API's crypto.getRandomValues()function, which provides cryptographically strong random values suitable for cryptographic operations.
Random Number Generation
// Cryptographically secure random selection
function selectWinner(allNames) {
// Generate random value using Web Crypto API
const array = new Uint32Array(1);
crypto.getRandomValues(array);
// Convert to index in the full list
const randomValue = array[0] / (0xffffffff + 1);
const winnerIndex = Math.floor(randomValue * allNames.length);
return allNames[winnerIndex];
}3. The 250 Name Display Limit
For performance reasons, the wheel displays a maximum of 250 segments. However, this is purely visual and does not affect the selection process.
How Large Lists Work
// Example with 10,000 names
const allNames = [...]; // Full list of 10,000 names
const displayNames = allNames.slice(0, 250); // Only 250 shown on wheel
// Winner selection uses ALL names
const winner = selectFromFullList(allNames); // Selects from all 10,000
// After selection, update display
const winnerSegment = displayNames.includes(winner)
? displayNames.indexOf(winner)
: addWinnerToDisplay(winner);Visual Representation
- • If the winner is in the first 250 names: The wheel spins to that segment
- • If the winner is beyond 250: The winner is temporarily added to the wheel for visual display
- • The segment shows the actual winner's name, maintaining complete transparency
4. Step-by-Step Selection Process
Load Complete List
All names are loaded into memory, regardless of quantity.
// Load all names from database or input
const allNames = await loadAllNames(); // Could be 10, 100, or 100,000+ names
console.log(`Total names loaded: ${allNames.length}`);Determine Spin Duration
Duration is intelligently scaled based on user preference and list size.
// Duration scales with both preference and list size
const durationSettings = {
short: { baseMin: 2, baseMax: 4, scaleMin: 0.5, scaleMax: 0.75, cap: 7 },
normal: { baseMin: 3, baseMax: 8, scaleMin: 0.5, scaleMax: 1, cap: 12 },
long: { baseMin: 15, baseMax: 20, scaleMin: 1, scaleMax: 2.5, cap: 30 }
};
// Scale based on number of names (capped at 4000+)
const scaleFactor = Math.min(names.length / 1000, 4);
const minDuration = (setting.baseMin + scaleFactor * setting.scaleMin) * 1000;
const maxDuration = Math.min(setting.baseMax + scaleFactor * setting.scaleMax, setting.cap) * 1000;
// Examples for 5000 names:
// Short: 3.5-7 seconds | Normal: 5-12 seconds | Long: 20-30 secondsGenerate Random Values
Multiple cryptographically secure random values are generated for duration and winner selection.
// Use Web Crypto API for all randomness
const array = new Uint32Array(2);
crypto.getRandomValues(array);
// First value: Determine exact spin duration within range
const randomDurationMs = minDuration + ((array[0] / 0xFFFFFFFF) * (maxDuration - minDuration));
// Second value: Will be used for winner selection
const randomValue = array[1] / (0xffffffff + 1); // Value between 0 and 1Select Winner
The random number determines which name from the full list wins.
// Select winner from complete list
const winnerIndex = Math.floor(randomValue * allNames.length);
const winner = allNames[winnerIndex];
console.log(`Winner selected: ${winner} (index ${winnerIndex} of ${allNames.length})`);Display Result
The wheel spins for the determined duration and lands on the selected winner.
// Spin wheel for calculated duration
spinWheel(randomDurationMs);
// Update wheel display to show winner
if (displayedNames.includes(winner)) {
// Winner is visible on wheel - spin to it
spinToSegment(displayedNames.indexOf(winner));
} else {
// Winner not visible - add temporarily for display
const tempWheel = [...displayedNames.slice(0, 249), winner];
spinToSegment(249); // Spin to the winner's position
}5. CSV Mode Selection
For large CSV uploads, the system uses an optimized client-side index-based selection that can handle unlimited names efficiently.
How CSV Selection Works
// Large lists are stored server-side with row indices.
// The winner is picked ON THE SERVER from the FULL dataset with a
// cryptographically secure RNG. The wheel graphic only displays a
// sample; it never influences who wins.
// POST /api/v2/wheels/{wheelId}/spin-pick
// body: { excluded_indices: [...], excluded_names: [...] }
// Server (C#):
// 1. Load the complete names array (every row, not the display sample)
// 2. Build the eligible pool: skip excluded indices AND every entry
// whose name matches a removed winner (duplicate-safe)
// 3. winner = eligible[RandomNumberGenerator.GetInt32(eligible.Count)]
// 4. Respond with the winner, its row index, pool sizes, and an
// audit block (algorithm, timestamp, exact probability)
// If the server cannot verify a fair pick and the browser holds only
// a partial list, the spin is cancelled. No winner is ever drawn
// from an incomplete pool.CSV Mode Features
- • Unlimited Scale: Works with 10, 100K, or 1M+ names
- • Memory Efficient: Only loads one name at a time
- • Fair Selection: Every CSV row has equal probability
- • Client-Side: No server involvement in winner selection
- • Exclusion Tracking: Removed names are tracked locally and skipped
Handling Removed Names
When you remove a winner in CSV mode, the system tracks it client-side to ensure fair subsequent selections:
// Exclusion tracking for removed names
class ExclusionTracker {
constructor() {
this.excludedIndices = new Set(); // Removed row indices
this.excludedNames = new Set(); // Removed name strings
}
removeWinner(name, csvIndex) {
this.excludedIndices.add(csvIndex); // Skip this index
this.excludedNames.add(name); // Skip this name value
this.saveToLocalStorage(); // Persist for session
}
isExcluded(index, name) {
return this.excludedIndices.has(index) ||
this.excludedNames.has(name);
}
}6. Verification & Auditing
Console Logging
When developer tools are open, the selection process logs detailed information:
// Sample console output for verification
"🎰 Spin Mode: NORMAL | Names: 10,000"
"⏱️ Duration range: 5.0s - 12.0s"
"=== WINNER SELECTION STARTING ==="
"Total names in full list: 10000"
"Names displayed on wheel: 250"
"Spin duration: 8.743s (randomly selected)"
"Random value generated: 0.7234567"
"Winner index: 7234 of 10000"
"Winner selected: John Smith"
"Winner in displayed names: false"
"=== SELECTION COMPLETE ==="Verification Steps
- Open browser Developer Tools (F12)
- Go to Console tab
- Spin the wheel
- Review the detailed selection logs
- Verify the winner was selected from the complete list
7. Security Considerations
Cryptographic Security
- • Uses
crypto.getRandomValues()- the same randomness used for encryption - • Provides 32 bits of entropy per selection (4.2 billion possible values)
- • Uniform distribution ensures equal probability for all names
- • Cannot be predicted or manipulated
Why Not Math.random()?
Math.random() is not cryptographically secure and could theoretically be predicted. We use the Web Crypto API to ensure true randomness suitable for raffles, drawings, and any scenario requiring verifiable fairness.
8. Fairness Guarantees
Equal Probability
Every name has exactly equal probability of being selected:
// For a list of N names:
Probability per name = 1/N
// Examples:
100 names: Each has 1% chance
1,000 names: Each has 0.1% chance
10,000 names: Each has 0.01% chanceNo Bias Factors
- • Position in list doesn't matter
- • Length of name doesn't matter
- • Whether name is displayed on wheel doesn't matter
- • Previous selections don't influence future ones (unless name is removed)
Transparency Features
- • Complete algorithm is documented here
- • Console logs provide full visibility
- • Winner history is preserved and exportable
- • Results can be independently verified
Summary
The Random Name Picker ensures complete fairness by selecting from ALL names in your list using cryptographically secure randomness. The 250-segment wheel limit is purely visual and does not affect the selection process. Every name has an exactly equal chance of being selected, regardless of list size or display limitations.
This transparent, auditable process ensures your raffles, drawings, and selections are provably fair and can withstand any scrutiny.
// Create and spin a wheel
const response = await fetch(`${API_BASE_URL}/api/v1/wheels`, {
method: 'POST',
headers: {
'Authorization': 'Bearer uplup_live_YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
wheel_name: 'Raffle',
names: ['Alice', 'Bob', 'Charlie']
})
});
const { data } = await response.json();
const wheel_id = data.wheel_id;
// Spin the wheel
const spinResponse = await fetch(`${API_BASE_URL}/api/v1/wheels/${wheel_id}/spin`, {
method: 'POST',
headers: {
'Authorization': 'Bearer uplup_live_YOUR_API_KEY',
'Content-Type': 'application/json'
}
});
const spinData = await spinResponse.json();
console.log('Winner:', spinData.data.winner);We provide examples in JavaScript, Python, PHP, Ruby, Go, and cURL. Visit our API documentation for complete code samples and endpoint details.
npm install and npm start. The README has step-by-step instructions./spin reactions message_id:YOUR_MESSAGE_ID, 4) The bot generates an animated wheel with all reactors and picks a winner! You can filter by specific emoji using the emoji option.color option with 5 themes: Uplup (purple/pink - default), Vibrant (bold, bright colors), Pastel (soft, light colors), Sunset (warm oranges and pinks), Ocean (cool blues and teals). The animated GIF wheel spin uses your chosen theme.Still have questions?
Our support team is here to help you get the most out of your Random Name Picker
API for Developers
A full set of REST API endpoints to create wheels, manage entries, record spins, track winners, customize appearance, and embed wheels programmatically. API usage is subject to fair use.
Quick Start
Code examples in JavaScript, Python, PHP, cURL, Ruby, and Go. Bearer token auth.
Full Control
Create, spin, clone, archive, embed. Manage entries, settings, and appearance.
Analytics & Security
Spin stats, winner history, audit logs. Encrypted keys with scoped permissions.
Discord Bot Integration
Spin wheels directly in your Discord server with animated GIFs
Animated Spins
Watch the wheel spin in real-time with animated GIFs right in Discord.
Server Members
Spin with server members, roles, voice channel users, or reactions.
Quick Drawings
Run reaction-based drawings with transparent winner selection.
Self-hosted bot with optional Uplup API integration for saved wheels