Main, P1, and P2 are rows. The book total is a formula you recheck. VigStamp is one free desktop screen instead: each sub stays under its book, the number on the book is the sum, and the month and today’s games sit on the same page. Social casino sessions and sportsbook tax records live next door. The core tracker stays free.
Open tracker and you are on that home, with sample slips already in it. No account required. Clear them from the banner when you import your own sheet.
Open tracker keeps bets on this browser without an account. Sign in when you want the phone and the desktop on the same record. Stay signed in is on by default. The password is never stored here.
21+ where required. Gambling involves risk. If you need help, call 1-800-GAMBLER.
Example with sample data. The month beside today’s scoreboard.
Loads once, no jumping
Smooth tab switches
Free core tracker
Desktop and phone
What the sheet and the other free trackers get wrong
The spreadsheet
Date, book, sub, stake, result, and a balance that slips when a row is pasted wrong. Bring the file in from Settings → Backup → Import CSV, or log the next slip here and stop maintaining the sheet.
The sub-accounts
One sportsbook is not one balance. Main, P1, and P2 each keep their own. Pending stake sits on that label. Home lists them under the book. The number on the book is the sum.
Example book$355
Main$250
P1$70
P2$35
The cluttered free home
Other free trackers spend the first screen on lines to bet. This one spends it on the month, today’s scoreboard, and the books. Same desktop. Fewer jobs for that page to do.
New · Casinos tab
A social casino tracker that replaces the sheet
Every session is a row you would have typed anyway: casino, game, buy-in, withdrawal. VigStamp keeps the totals.
New Session and New Withdrawal from the top of Sessions.
Export to CSV, or Import from paste straight out of your old sheet.
A range bar: 7d, 30d, 90d, YTD, Custom.
Four stat cards: Buy-ins, Received, Pending, and Net P/L.
Pending withdrawals in one list. One tap marks one received.
Adjustable cashback %: per session, per casino, or a default.
Example with sample data and sample casinos.
New · Sportsbook tab
Tax-time records from the slips you already logged
Taxable winnings and deductible losses are kept apart, the way the forms ask for them.
Gross winnings vs deductible losses and fees for the year.
By Book, Monthly, and a full Ledger with CSV export.
A combined gambling summary with your Casinos sessions.
An estimated tax figure, with a state estimate.
Records to help you or your preparer. Not tax advice.
Example with sample data.
Expected Today
One number at the top of Home and Live: where today should end up. It adds what already settled today, the profit your arb pairs locked in (worst case), and the expected value of other open slips that have a fair price saved. A slip with no fair price adds nothing and shows as at risk. Tap it for the slip-by-slip list. It is the math you would do by hand, done for you. It does not suggest bets.
Expected today · example+$84.10Projected today
ARB locked
+$43.70
3 groups
EV on open
+$11.80
4 priced
Settled
+$28.60
At risk
$25.00
1 unpriced
Live and History
The bar across the top shows today’s games and live scores. Live lists your open slips on games in progress, with a cue when the score says the bet is ahead or behind. History is Open and Settled. Full-game moneylines, spreads, totals, and common player props settle on their own once the game is final; parlays and exotic props are slips that stay manual. On Settled, select the slips you grade by hand and grade a batch of them at once.
A settled slip keeps the score
When a slip on a live game settles, it keeps a receipt: both teams, the final score, the period lines, and a bar for how far it covered. The stamp says Official. Save the receipt as an image. A slip you grade by hand says it was graded manually.
WinOfficial
Canucks +2.5
Vegas Golden Knights @ Vancouver Canucks · Hockey
Result
VGKVegas Golden Knights3
VANVancouver Canucks2
P1
P2
P3
VGK
1
2
0
VAN
0
1
1
Final · Sun Oct 4, 2026 · 9:41 PM CT
Covered by 1.5
Save as image
Sample slip
Capture
Stop retyping slips. The free browser extension reads the slip on the sportsbook tab you already have open and fills Add Bet. A clear read is ready to save; a shaky one stays open so you can fix it, and the fix is remembered on this device. No sportsbook login, ever. Alt+Shift+V captures the tab without the bubble. Chrome uses the zip; Firefox and Zen use the xpi.
Flip the moon in the corner. Every tab goes near-black with high-contrast text: blue for up, red for down. It remembers your choice on this device.
Example with sample data, in night mode.
The straight version
The catches
VigStamp does not sign into a sportsbook or a casino and pull your history. You type a slip, import a CSV, paste rows, upload a screenshot, or use the extension. It never asks for a sportsbook password.
The extension loads unpacked in Chrome, or temporarily in Firefox and Zen. It is not a store install. Book-live and VigStamp Verified seals appear only when it captures a live sportsbook tab.
One browser keeps the record until you sign in. The phone and the desktop share it after that.
Parlays, total rounds, and exotic props stay manual.
It is a tracker. It will not search the market and hand you bets.
Why you still open it
One desktop home: the month, today’s games, profit, and every book.
Each sub-account keeps its own balance. The number on the book is the sum of those labels.
Casino sessions and sportsbook tax records in the same place, with one combined summary.
Tag both sides Arb and they link as one arb, across books and three-way markets, with the locked profit shown. Sides on different lines are labeled Middle. When one side grades from the final, the exact opposite side grades with it, and the pair moves to Settled.
The core tracker stays free. Open it on this browser with no account.
VigStamp
Sign in
Add a free Supabase project URL and anon key in config.js. The README has the steps, including the site URLs to allow. Until those keys are saved, this screen does not pretend to be a login.
VigStamp
Your results
Download VigStamp Capture 0.4.51
Capture reads the slip on the sportsbook tab so you can stop retyping it. A clear read saves. A shaky one opens the form. Chrome: unzip the zip, then Load unpacked. Firefox and Zen: load the xpi from about:debugging until you quit the browser.
VigStamp auto-settles full-game moneylines, spreads, and game totals when the game is final and that market has settled. A slip already on a live game settles as soon as that result is locked: the game ends, that half or quarter is over, or the player has already cleared the line, and it moves to History as Settled. A Pending you set on a full-game market stays pending until both agree. Common player props settle from that game's box score when the slip is attached to the game. 1st and 2nd half moneylines, spreads, and points, and 1st through 4th quarter moneylines and spreads, grade from that period's score when the scoreboard has it. The full-game score is not used. Total rounds and exotic props stay manual. History can mark those hand grades together. No sportsbook login.
This month
September 2026
$0.00
ROI —
Day totals use the settlement date. Pending slips stay off until they settle. A settled slip with no settle time stays on the day it was placed.
MonTueWedThuFriSatSun
Day
No bets this day
Nothing settled on this date.
Latest
No bets yet
Log a slip and the calendar takes the place of the sheet. Sub accounts live on each book.
Results
Summary
Profit & loss · All time
$0.00
ROI
—
You're even
Open bets
0
Settled
0
ROI
0%
Win rate
—
Units (P&L)
0.0u
Avg CVL
—
+EV bets
0
EV total ($)
—
Vig paid (est.)
$0
Your accounts
All books
$0
Starting (legacy): $0
What these mean
CVL — Did you beat the closing line? Positive = better price than close.
+EV — Bets where your true win % beats the book's implied odds.
Vig — Estimated juice vs a fair 50% (or your true %). Not exact for parlays.
Calendar / periods — Grouped by the day the slip settles. Pending stays off that day. Logged time and event time stay on the slip. A settled slip with no settle time stays on the placed day.
New slip
Build a bet
History
All slips
0 selected
Check the slips you grade by hand, then mark them together.
Mark as
0 selected
Check the slips you want, then add one tag to all of them. Tags stay optional.
Add an existing tag
Or a new tag
No open bets
Pending slips stay here until they grade.
In progress
Live
Open slips land here when team names and start time match one game the official scoreboard has in progress. Player props, arbs, moneylines, spreads, totals, and quarters all use that check. Click the matchup to open that game on the scoreboard. A cue shows when the live score is enough to read that bet. Pick a game only when that match does not lock.
No live slips
Open slips show up on their own while the official scoreboard says that game is in progress.
Social casino tracker
Casinos
Tax records from your slips
Sportsbook
Sportsbooks and casinos
Combined
Today, Central Time.
New session
New withdrawal
Import from paste
Deeper dive
Analytics
Records below the chart card are all-time, except From these slips, which uses the same window and tags as the chart. Profit is settled slips only. A tag with no settled slips in that window is left out. Closing line value uses that same window, counts settled and open slips, and stays off when none of them have a close. The chart adds Expected (EV) from the same closes and the running average CLV on the right-hand axis. List, grid, or bars under the chart does not change the profit lines.
Profit
—
Record
—
Actual profitExpected (EV)CVL (avg)
Last 7 days
Overall record
Straights vs parlays
Profitability by sport
List, grid, or bars. The same choice applies to Latest, History, and the style, book, odds, and tag sections.
Profitability by betting style
Straights only. Parlays stay in the section above.
Profitability by odds
Game
Bet slip
Settle
Settings
Account
Appearance
Dark mode keeps VigStamp blue on a navy surface. Saved on this device.
Monthly recap
Off. Turn it on for a card on Home each new month with last month’s P&L, ROI, record and biggest movers. In the app only, nothing is emailed. Preview it any time below.
Odds-movement alerts
Watch a line in New slip. If its fair price moves by the threshold or more before you log it, you get an alert here. Default 2.0 pts of implied probability, about 10 American-odds points near even money.
Also show a browser notification. Needs your permission.
Unit size
1u is calculated from your stake sizes.
Sportsbook accounts
Each book stays one branch. Main and every sub have their own balance: starting + deposits − withdrawals + that label’s settled P&L. Pending stake is at risk on that label. The number on the book is the sum.
Player prop arbs
A player prop with a stake over this amount also shows on the Arb chart and the Arb style row. The bet type stays Player prop, so fair, EV, CVL, and prop grading stay with the player. Default is 65: on this log, most player props over $65 are arbs. A stake of $65 or less stays a player prop only, unless Also an arb is checked, the slip is tagged Arb, or the type is Arb. Type off to use only those. Saving this does not change any slip’s type.
Promo pairs
If the promo bet or the hedge pushes, the money result is always the real one. This only sets the conversion bookkeeping. Void treats the bonus as returned, unspent, and not converted. Used counts it as spent on the push.
Settling results
VigStamp auto-settles full-game moneylines, spreads, and game totals from the official public scoreboards when those games finish. Common player props (points, rebounds, yards, hits, and similar) settle from that game's box score when the slip is attached to the game. A prop that is not attached stays ungraded. If you mark a final game and the scoreboard disagrees, the slip gets a small mismatch flag. 1st and 2nd half moneylines, spreads, and points, and 1st through 4th quarter moneylines and spreads, grade from that period's score when the scoreboard has it. The full-game score is not used. Exotic props, team totals, total rounds, and parlays stay manual. No sportsbook login. Closing line value compares the odds on the slip with the saved close. A live price is not that close. A slip with no close is left out of the average. Serve the app over http (GitHub Pages or python3 -m http.server) — file:// blocks the scoreboard request.
The Odds API (optional)
The official scoreboard is the default and does not use this key. A free key from the-odds-api.com is 500 credits a month, stored only in this browser. VigStamp spends those credits on scores for open full-game moneylines, spreads, and totals, paced so 500 lasts the rest of the month. This key is not spent on half or quarter markets. Those grade from the scoreboard when that period's score is in. Historical closes are paid and are not filled in.
Quota: unknown until you fetch.
Prediction markets (optional)
Plug-in sync for Kalshi and Polymarket only. Sync open + history imports open positions and past bets when the exchange API provides them. Sportsbook slips still come from screenshots or the Chrome extension. Nothing here is a sportsbook login, and VigStamp has no server in the middle. Sync runs only when you press the button.
Keys stay on this device only. VigStamp never sees them.
Polymarket.com
Paste the wallet or proxy address from your Polymarket profile (the 0x address). Positions load in this browser from Polymarket’s public Data API over HTTPS. No API key. The address stays on this device.
Polymarket US
US accounts are a different exchange. Create a key at polymarket.us/developer and paste the Key ID plus the secret shown once. This page signs each read in the browser (Ed25519) and calls Polymarket over HTTPS. The secret is not uploaded anywhere.
Kalshi (US)
In Kalshi, open Account & security → API Keys, create a key, and paste the Key ID plus the private-key file (shown once). This page signs the request in the browser. Kalshi does not allow those auth headers from a website, so Sync asks the VigStamp Chrome extension on this computer to deliver the already-signed HTTPS read. The private key stays in this browser and is not sent to the extension or to VigStamp.
Capture
Capture learns from the slips you save so the next one on that book fills in faster. A clear screenshot remembers where stake, odds, teams, bet type, and line sit on that slip screen. A shaky or mismatched read does not replace it, and the screenshot stays on this device.
Chrome extension
Book-live and VigStamp Verified show up only when the Chrome extension captures a live sportsbook tab (Select area or Full tab). A file upload, including a phone photo, does not get those seals.
Capture on a sportsbook opens VigStamp. A high-confidence slip fills Add Bet and stays open so you can mark Arb or EV, then save. If teams, sport, odds, stake, or book look uncertain, confirm those fields before saving. JSON download is only a backup if that handoff fails.
Download vigstamp-slip-capture.zip over HTTPS from https://vigstamp.com/vigstamp-slip-capture.zip. A second copy is often saved as vigstamp-slip-capture (1).zip.
Unzip it once. On Mac, double-click the zip. On Windows, right-click and choose Extract All.
Open the folder unzipping created. manifest.json should be directly inside it, beside background.js and README.md. That folder is usually vigstamp-slip-capture, or vigstamp-slip-capture (1) when a folder with the first name already exists.
When manifest.json is one level down, open that inner folder. Load unpacked uses the folder that contains manifest.json.
In Chrome, open Extensions (chrome://extensions), turn on Developer mode, click Load unpacked, and select that folder.
The zip contains JavaScript, CSS, PNG icons, and a README — no executables. The button uses https://vigstamp.com/vigstamp-slip-capture.zip?v=0.4.51, which responds HTTP 200 over HTTPS with Content-Type: application/x-zip-compressed and no redirect. Load unpacked is enough. A Web Store listing is optional.
Firefox and Zen
Zen is Firefox, so it uses this package. The Chrome zip does not load there. The xpi is unsigned, so Add-ons → Install Add-on From File will refuse it. Load it as a temporary add-on. It unloads when you quit the browser.
Download vigstamp-slip-capture-firefox.xpi over HTTPS from https://vigstamp.com/vigstamp-slip-capture-firefox.xpi.
In Firefox or Zen, open about:debugging#/runtime/this-firefox.
Choose This Firefox, then Load Temporary Add-on, and select the xpi. You can unzip it and select manifest.json instead.
Accept the site-access prompt. The camera bubble still appears on its own only on known sportsbooks. On any other site, use Capture slip in the toolbar.
Select area or Full tab on a live sportsbook tab is the same Book-live path as Chrome. A signed addons.mozilla.org listing would install permanently. This download is the temporary package.
To try it: load the extension, open any sportsbook site where you can see a bet slip, click the camera bubble, confirm the sportsbook, then use Select area or Full tab. That live-tab capture is what can add Book-live and VigStamp Verified. Upload on the panel does not, and neither does a phone photo. A clear slip fills Add Bet and stays open so you can mark Arb or EV, then save. If the read is shaky, confirm the fields before saving. Minimize returns to the bubble. The bubble appears on its own only on known sportsbooks. On any other site, use Capture slip in the toolbar. You stay logged into your own sportsbook in Chrome. VigStamp never gets sportsbook passwords.
Backup
Import JSON is only a backup if the extension handoff fails.
Bring in a spreadsheet
In Google Sheets, use File → Download → Comma Separated Values (.csv). In Excel, use Save As → CSV. Download the file — VigStamp does not sign in to Google or Microsoft.
Here, choose Import CSV and pick that file.
OK merges the rows with bets you already have. Cancel on the confirm replaces your bets with the file.
Easiest path: Export CSV once, keep that header row as the template, fill rows in Sheets or Excel, then import the file back. Starting a blank sheet? Copy this header:
The first row has to use these names exactly, same spelling as Export CSV (capitals matter on subAccount, closeOdds, snapshotOdds, and trueProb). VigStamp matches each column by that header text. Extra columns are skipped.
date — date placed, as YYYY-MM-DD, like 2026-09-24. In Sheets or Excel, format this column as plain text so it stays in that shape.
odds — American odds, like -110 or +150. Decimal odds such as 1.91 are entered on the slip and stored here as American. A blank cell, or odds that are not American, is saved as -110.
stake — dollars risked, like 25 or 10.50. On a slip this is the wager, risk, or bet amount, not to-win or cash out. Blank or 0 is saved as 1.
book — sportsbook name, like DraftKings. A name that is new here is added as a book, starting at $0. Blank becomes Other.
subAccount — optional label under that book, like P1 or P2. A new label is created at $0; the same label, ignoring capitals, is matched. Bonus or promo wording is listed as the next P label. Settled results on that label move its balance. Leave it blank to keep the bet on Main. Up to 24 labels per book, 24 characters each.
result — pending, win, loss, or push. Anything else is saved as pending.
type — one of moneyline, moneyline_1h, moneyline_2h, moneyline_1q, moneyline_2q, moneyline_3q, moneyline_4q, spread, spread_1h, spread_2h, spread_1q, spread_2q, spread_3q, spread_4q, total, total_1h, total_2h, team_total, total_rounds, prop, player_prop, parlay, arb, middle, ev_plus. Arb and arbitrage are saved as arb. Middle and middling are saved as middle. EV+, +EV, plus ev, and ev plus are saved as ev_plus. 1st Half Moneyline, 2nd Half Moneyline, 1st Half Spread, 2nd Half Spread, 1st Half Points, and 2nd Half Points are saved as the half types. 1st Quarter Moneyline, Q1 ML, 1Q Spread, and the same forms for the 2nd, 3rd, and 4th quarter are saved as the quarter types. Total rounds, O/U rounds, OU rounds, rounds total, and over/under rounds are saved as total_rounds. Anything else is saved as moneyline.
alsoArb — optional. 1, true, or yes marks the slip as an arb while type stays the market (a player prop keeps the player, line, fair, and prop grading). Blank leaves it as that type only. A player prop whose stake is over the Player prop arb stake in Settings (default $65) still counts on the Arb chart without this column and without changing type. A row whose type is already arb does not need this column.
alsoEv — optional. 1, true, or yes marks the slip as EV while type stays the market. Any bet type can use it. Blank leaves the row as that type only. A row whose type is already ev_plus does not need this column. Grading stays on type.
pairKind — optional. promo marks the slip as one side of a promo pair: a free bet, bonus bet, site credit, or bet reset on one book, hedged with a cash bet on another book. Blank leaves it unmarked (matching can still find the pair). A slip marked as a promo pair is not counted as an arb.
pairRole — optional, with pairKind. promo for the free-bet side or hedge for the cash side. Blank follows the promo column.
pairId — optional, with pairKind. Two slips with the same text here are linked as one pair. Blank means no manual link.
promoAmount — optional. The bonus amount in dollars. Blank uses the stake.
promoReturnsStake — optional. yes if the bonus stake comes back on a win, no if it does not. Blank follows the promo type (site credit returns it; a free bet does not).
promoMinOdds — optional. The lowest American odds the promo allows, like -200. It only warns; it does not change a result.
period — optional. A 1st or 2nd half moneyline, spread, or points bet stores 1st Half or 2nd Half. A quarter moneyline or quarter spread stores 1st Quarter, 2nd Quarter, 3rd Quarter, or 4th Quarter. Other rows can leave it blank.
legs — optional, parlays only. A JSON list of legs, each with type (moneyline, spread, total, or player_prop), selection, and line. A player prop can also include side (over or under). Example: [{"type":"spread","selection":"Chiefs -3.5","line":-3.5},{"type":"player_prop","selection":"Mahomes over 274.5 pass yds","line":274.5,"side":"over"}]
line — a number, or leave blank. Examples: -3.5, 45.5.
trueProb — your win chance. 52 means 52%. 0.52 means the same. Blank is fine.
tags — optional. Separate tags with semicolons. Write Name or Name#color, like Live#teal;Steam#amber. Colors: indigo, coral, teal, amber, violet, sky, rose, slate. Skip the color and the tag uses indigo. Up to 8 tags.
promo — cash, free_bet, site_credit, or bet_reset. Blank is cash. A free bet or site credit or bet reset loses $0. A free-bet win pays profit only. A site-credit win pays profit plus the stake. A bet reset still wins normal profit.
boostPct — optional profit-boost percent, like 25. Blank means no boost. The percent applies to profit, not the stake.
feeMode — off, published, or custom. An exchange name (kalshi, polymarket, polymarket-us, prophetx, novig) is read as that exchange’s published fee. Blank is off.
feeProfile — which published schedule was used: kalshi, polymarket, polymarket-us, prophetx, or novig. Blank with published follows the book name.
feeAmount — dollars, like 1.75. A published fee with this cell blank is calculated for the exchange in feeProfile, or from the book name. Any other book stays $0.
feeKind — entry comes off every settled result. profit comes off a win only (ProphetX). none means no fee.
feeSchedule — Novig: pregame, live, or futures. Polymarket: sports, crypto, finance, general, or geopolitics. Blank is pregame for Novig and sports for Polymarket.
pnl — included on export so the sheet shows profit. Import skips this column and figures profit again from odds, stake, result, promo, boost, and fee.
id — optional. Leave it blank and VigStamp assigns one. On a merge, an id you already have gets a new id, so the bet already here stays put.
sport — required on a new slip, like Football, Basketball, or Baseball. NFL, CFL, and NCAAF in this column import as Football with that league. NBA, NCAAB, and WNBA import as Basketball with that league. MLB, KBO, NPB, LMB, and NCAA Baseball import as Baseball. NHL and College Hockey import as Hockey. ATP and WTA import as Tennis. UFC, Bellator, PFL, ONE, and Cage Warriors import as MMA with that league. Boxing and Pro Boxing import as Boxing. PGA imports as Golf. AFL imports as Aussie Rules. NRL and rugby union leagues (Premiership, URC, Top 14, Super Rugby, Six Nations, MLR, Rugby World Cup, and more) import as Rugby. IPL, Big Bash, and other cricket competitions import as Cricket. F1 and NASCAR import as Motorsport. PDC imports as Darts. ITF imports as Tennis. Blank becomes Other.
league — optional. Football is NFL, CFL, or NCAAF. Basketball is NBA, NCAAB, or WNBA. Baseball is MLB, KBO, NPB, LMB, or NCAA Baseball. Hockey is NHL or College Hockey. Soccer can be MLS, EPL, UCL, Liga MX, Nations League, U21 Qualifying, U21 Championship, Europa League, Conference League, World Cup, World Cup Qualifying, Friendlies, Women's UCL, or another league such as Serie A. Tennis is ATP or WTA. MMA is UFC, Bellator, PFL, ONE, Cage Warriors, or another promotion. Boxing is Pro Boxing. Golf can be PGA. Aussie Rules is AFL. Rugby is NRL, Premiership, URC, Top 14, Champions Cup, Challenge Cup, Super Rugby, Six Nations, Rugby Championship, Test Matches, MLR, or Rugby World Cup. Cricket can be IPL, Big Bash, PSL, CPL, SA20, The Hundred, T20 Blast, Sheffield Shield, County Championship, T20 World Cup, Cricket World Cup, or Internationals. Motorsport is F1 or NASCAR. Tennis can also be ITF. Leave a conference out of this column.
teams — the matchup, who plays whom, like Bills @ Chiefs or Chiefs vs Bills. Not the player.
selection — the bet, the market line, like Chiefs -3.5 or Over 45.5.
player — optional. The player on a player prop, like Patrick Mahomes. Leave it blank for other bets. Older files without this column still import.
notes — optional text.
closeOdds, snapshotOdds — optional American odds, or leave blank.
Contact / Support
Need help with VigStamp? Email support@vigstamp.com. This is for the tracker only, not your sportsbook.