USA LOTTERY POOL TOOL

Lottery Pool Payment Tracker

Never miss a contribution again. Build a custom lottery pool payment tracker with your own player names, shares, statuses, and notes — then download a real Excel file or print a clean summary for your records.

Custom XLSX Download Print-Friendly Summary Multi-Draw History Auto-Saves Progress
Tracker Preview
3 Players
Track the current draw, then save multiple weekly draw summaries before exporting
Track Every Contribution

See who has paid, who is late, who still owes money, and who is actually included in the draw.

Keep Multi-Draw History

Save each weekly draw summary before downloading your finished workbook.

Auto-Saved in Browser

If the page refreshes or closes, the tool can restore your current entries and weekly history on the same device.

Build Your Payment Tracker

Enter your pool details, add player names, choose statuses, then save the draw summary into your on-page history before exporting the workbook.
Autosave is ready.
Best practice: mark a player as included only when they are fully paid, or when your written pool rules clearly allow late payment.

Live Pool Summary

This updates instantly as you change shares, amounts paid, statuses, and inclusion in the draw.
Total Expected
$0
Based on total shares in this draw
Collected So Far
$0
Amount currently recorded as paid
Included Players
0
Players currently marked in
Shortfall
$0
Expected minus collected
Player Status Summary

From numbers to payments to prize shares

Generate the pool’s numbers, confirm who has paid before the drawing, then use the split calculator to show exactly how a prize would be divided.

Weekly Draw History

Save each draw summary here before exporting. This gives you a running in-page history as well as a better Excel workbook.
Saved Draw Summaries

Example: Weekly Pool Records Matter

A good pool leader does not just track one draw. They keep a running record of each week or each ticket purchase so there is less room for confusion later.

Why this matters Many lottery pool disputes do not begin with dishonesty. They begin with poor records across several weeks, forgotten payments, and assumptions.
Best practical habit Save each draw once the tickets are purchased so there is a simple timeline of what happened and who was included.

Keep the Pool Clear Before Every Drawing

Confirm who has paid, save the draw history and keep ticket copies with the same records. Clear evidence is much easier to create before a win than after a disagreement.

Lottery Pool Payment Tracker FAQ

It is a record of who is in the pool, what each person owes, what they have paid, what their status is, and whether they are included in the draw.
Yes. Yes. Save multiple draw summaries before downloading the workbook.
Yes, on the same browser and device. The page auto-saves your current data and saved draw history locally in your browser until you clear it.
Your current tracker and saved draw history are stored locally in your browser on the device you are using. Clearing browser storage, changing device or using another browser may remove or hide that saved information, so download the Excel file when you need a lasting copy.
Usually only if your pool rules say so. The safest approach is to treat paid-before-purchase as the default rule unless your agreement clearly says otherwise.
This tool is for practical recordkeeping only and does not create a legal agreement or prove ticket ownership. Keep payment records, participant lists and ticket copies for every drawing. Saved browser data can be lost, so download the Excel workbook when you need a permanent copy.
`; } function printTracker(){ const html = buildPrintableHtml(); const printWindow = window.open('', '_blank', 'width=1000,height=800'); if(!printWindow){ alert('Please allow popups for printing this summary.'); return; } printWindow.document.open(); printWindow.document.write(html); printWindow.document.close(); printWindow.onload = function(){ printWindow.focus(); printWindow.print(); }; } function copySummary(){ const data = calculateData(); let text = `Lottery Pool Payment Tracker Pool Name: ${data.poolName} Game: ${data.gameName} Draw Date: ${data.drawDate} Contribution Per Share: ${formatMoney(data.contributionPerShare)} Expected Total: ${formatMoney(data.totalExpected)} Collected Total: ${formatMoney(data.totalCollected)} Included Players: ${data.includedPlayers} Shortfall: ${formatMoney(data.shortfall)} Player Summary: `; data.players.forEach((p, i)=>{ text += `${i + 1}. ${p.name} - ${p.shares} ${p.shares === 1 ? 'share' : 'shares'} - Due ${formatMoney(p.shares * data.contributionPerShare)} - Paid ${formatMoney(p.amountPaid)} - ${p.status} - Included: ${p.included}${p.notes ? ' - Notes: ' + p.notes : ''}\n`; }); if(drawHistory.length){ text += `\nSaved Draw History:\n`; drawHistory.forEach((item, i)=>{ text += `${i + 1}. ${item.drawDate || 'No date'} - ${item.gameName} - Collected ${formatMoney(item.totalCollected)} - Shortfall ${formatMoney(item.shortfall)}${item.note ? ' - ' + item.note : ''}\n`; }); } navigator.clipboard.writeText(text).then(()=>{ copyTrackerBtn.textContent = 'Summary Copied'; setTimeout(()=> copyTrackerBtn.textContent = 'Copy Summary', 1800); }).catch(()=>{ copyTrackerBtn.textContent = 'Copy Failed'; setTimeout(()=> copyTrackerBtn.textContent = 'Copy Summary', 1800); }); } function loadExample(){ suppressAutosave = true; poolName.value = 'Friday Office Pool'; gameName.value = 'Mega Millions'; contributionAmount.value = 20; drawDate.value = todayForInput(); playersCount.value = 3; historyNote.value = 'Weekly office draw'; historyGeneralNote.value = 'Track each Friday pool before ticket purchase.'; playerList.innerHTML = ''; const sample = [ {name:'Alicia', shares:1, amountPaid:20, status:'Paid', included:'Yes', notes:''}, {name:'Ben', shares:2, amountPaid:40, status:'Paid', included:'Yes', notes:'Extra lines'}, {name:'Carlos', shares:1, amountPaid:0, status:'Late', included:'No', notes:'Said will pay later'} ]; sample.forEach((p, i)=> playerList.appendChild(makePlayerRow(i, p))); drawHistory = [ { poolName:'Friday Office Pool', gameName:'Mega Millions', drawDate:'2026-03-20', contributionPerShare:20, totalExpected:80, totalCollected:80, includedPlayers:2, shortfall:0, playerCount:3, note:'Previous draw fully covered', generalNote:'Track each Friday pool before ticket purchase.' } ]; suppressAutosave = false; renderHistory(); updateResults(); setSaveStatus('Example loaded and auto-saved.'); } function clearAndReset(){ if(!confirm('Clear saved browser data and reset this tracker?')) return; suppressAutosave = true; localStorage.removeItem(STORAGE_KEY); drawHistory = []; poolName.value = 'Office Pool'; gameName.value = 'Powerball'; drawDate.value = todayForInput(); contributionAmount.value = '20'; playersCount.value = '3'; historyNote.value = ''; historyGeneralNote.value = ''; playerList.innerHTML = ''; for(let i=0;i<3;i++){ playerList.appendChild(makePlayerRow(i)); } suppressAutosave = false; renderHistory(); updateResults(); setSaveStatus('Saved data cleared and tracker reset.'); } buildPlayersBtn.addEventListener('click', function(){ suppressAutosave = true; buildPlayers(playersCount.value); suppressAutosave = false; updateResults(); }); addPlayerBtn.addEventListener('click', function(){ const index = playerList.querySelectorAll('.lp-player-row').length; playerList.appendChild(makePlayerRow(index)); relabelPlayers(); updateResults(); }); loadExampleBtn.addEventListener('click', loadExample); clearSavedDataBtn.addEventListener('click', clearAndReset); saveCurrentDrawBtn.addEventListener('click', saveCurrentDrawToHistory); clearHistoryBtn.addEventListener('click', clearHistory); [poolName, gameName, drawDate, contributionAmount, playersCount, historyNote, historyGeneralNote].forEach(el=>{ el.addEventListener('input', updateResults); el.addEventListener('change', updateResults); }); downloadXlsxBtn.addEventListener('click', downloadXlsx); printTrackerBtn.addEventListener('click', printTracker); copyTrackerBtn.addEventListener('click', copySummary); document.querySelectorAll('.lp-faq-q').forEach(btn=>{ btn.addEventListener('click', function(){ this.parentElement.classList.toggle('open'); }); }); const restored = loadState(); if(!restored){ buildPlayers(3); renderHistory(); setSaveStatus('Autosave is ready.'); } })();