A matched betting spreadsheet has one job: to tell you, weeks later, where the money actually went. A one-row-per-bet template fails at it for a structural reason rather than a careless one. A matched bet is not one bet. It is two bets at two different companies, settled under two different rulebooks, and a single row carrying a single price and a single result cannot describe that.
The second failure is smaller and costs more. A template typically records the lay price you meant to take, because that is the number the calculator was given before you clicked. The price that decides your money is the one the exchange matched. If the record holds only the first, a shortfall arrives with no cause attached to it, and the usual response is to blame the method rather than the fill.
Why one bet needs two sides in your record
The bookmaker leg has a stake, a price, a settled result and a return, and that return is governed by the bookmaker's terms, including whether the stake comes back. The exchange leg has a different stake, a different price, the opposite result, a liability while it runs, and a commission charge when it wins. Nothing except the net is shared.
So a row with one price column has to choose which company it is describing, and whichever it chooses, the other side gets reconstructed from memory at the end of the month. That is where records quietly stop matching the accounts. Two rows per bet, linked by an id, is the version that reconciles; one wide row with a bookmaker block and an exchange block works as well and is easier to read. What does not work is one narrow row, because there is no honest place to put the second settled result.
The minimum columns
Everything below earns its place by answering a question you will actually ask later. The fields any single-sided record needs, closing price and closing line value among them, are set out in how to track betting results. What follows is the two-sided version, so what earns a column here is a field that appears twice, or only on the exchange side.
| Column | Example | What it answers |
|---|---|---|
| Date and time placed | 12 October, 1:18 pm | When the price was taken, which is what makes a fill explainable |
| Event and selection | Race 4, Runner 7 | What the two legs are both about |
| Bookmaker | Bookmaker A | Which statement this leg reconciles against |
| Back price | $4.00 | The price that pays, not the one you first saw |
| Back stake | $50 | Face value of the stake |
| Stake type | Bonus, stake not returned | Cash, bonus bet or promotion, because a bonus stake is not money out of pocket |
| Bet type | Win | Win, place, each way half, line or total: an each way bet is two bets, so four rows |
| Exchange | Exchange account | Which exchange record the lay leg reconciles against |
| Lay price planned | $3.70 | The price the lay stake was first sized from |
| Lay price matched | $4.00 | The price the exchange actually took, and the column that explains a shortfall |
| Lay stake | $37.97 | The stake at the price that matched, not at the price planned |
| Liability | $113.92 | Money that must already sit in the exchange account |
| Commission rate | 5% | A cost on the exchange side, held as a rate so it can be checked |
| Bookmaker result and return | Lost, $0 | The first of the two settled results |
| Exchange result and return | Won, $36.08 after commission | The second, under the exchange's own rules |
| Net | $36.08 | Both sides together, which is the only figure worth totalling |
Two more are worth the width. A promotion reference ties the row to the offer that justified it, and a note field holds the reason a fill went the way it did.
The column most templates leave out
Planned against matched is the whole difference between a record and a plan. A lay order is matched at the price you asked or at a better one, in full or in part, or it sits there unmatched, and each of those outcomes changes a different number in the row. The expensive one is the last: an exchange will not match you at a worse price than you asked for, so when the price you planned does not come back you either leave the bet unhedged or lay at what the market is offering, and every figure sized from the planned price is then wrong.
The reason it gets omitted is understandable. You type the planned lay into a calculator, the calculator hands you a lay stake, and that lay stake is what you send. Three of the four figures on the exchange side come from the planned price, so it feels like the price of record. It is not: the stake was sized from a price that did not happen, and the kept figure follows the stake.
When both columns are there and they differ, the row still reconciles, because the matched price and the actual stake produce the actual return. When only the planned column exists, the row reports a number the accounts never paid.
A worked example: planned at $3.70, matched at $4.00
Example: Illustrative prices, chosen to show the arithmetic rather than to describe a real offer or a real race.
A $50 stake-not-returned bonus bet, backed at $4.00 with the bookmaker, hedged at an exchange charging 5% commission. The plan was to lay at $3.70. The runner drifted between the calculation and the click, so a lay at $3.70 would have sat there unmatched, and the hedge went on at $4.00, the best lay the market was offering.
The arithmetic for a stake-not-returned bonus bet is four lines:
- lay stake = bonus bet x (back price - 1) / (lay price - commission rate)
- liability = lay stake x (lay price - 1)
- kept either way = lay stake x (1 - commission rate)
- conversion = kept / bonus bet
Planned, at a lay of $3.70: lay stake = 50 x 3.00 / 3.65 = $41.0959, shown as $41.10. Liability = 41.0959 x 2.70 = $110.96. Kept = 41.0959 x 0.95 = $39.04, a conversion of 39.04 / 50 = 78.1%.
Matched, at a lay of $4.00: lay stake = 50 x 3.00 / 3.95 = $37.9747, shown as $37.97. Liability = 37.9747 x 3.00 = $113.92. Kept = 37.9747 x 0.95 = $36.08, a conversion of 36.08 / 50 = 72.2%.
| Line | Planned at $3.70 | Matched at $4.00 |
|---|---|---|
| Lay stake | $41.10 | $37.97 |
| Liability | $110.96 | $113.92 |
| Commission at 5% if the lay wins | $2.05 | $1.90 |
| Kept, either result | $39.04 | $36.08 |
| Conversion of the $50 | 78.1% | 72.2% |
Both settled results confirm the matched figure. If the runner wins, the bookmaker pays winnings only on a stake-not-returned bonus bet, 50 x 3.00 = $150, and the lay loses its liability of $113.92, so the net is 150 - 113.92 = $36.08. If the runner loses, the bookmaker pays nothing and the lay wins the stake laid against it less commission, 37.9747 x 0.95 = $36.08. The two paths agree, which is the check a two-sided row makes possible and a one-sided row does not.
The planned-only version of this row reports $39.04. The accounts paid $36.08. That is $2.96 a bet, or 2.96 / 39.04 = 7.6% of the figure the record claims, and over 40 such bets it is 40 x 2.96 = $118.40 of value the spreadsheet believes it holds and the bank does not. Nothing in a planned-only record points at the cause, because the cause is a column that was never there.
Note: A lay matched in part is the same problem twice over. Record the matched portion as the lay stake and show the rest of the bet as unhedged, rather than writing down the order you sent. A stake already sent and then matched at a better price is the mirror image: the stake stands, the liability falls, and the two results stop paying the same figure, so the net now depends on which one lands and has to be recorded from the settlement rather than from the plan.
Commission is a cost on the exchange side
Commission is charged on winnings in an exchange market, so it falls only on the leg that wins. On the example above that is $1.90 when the runner loses and nothing when it wins. Both facts belong in the record, because netting commission silently into a profit figure destroys two things at once.
The first is auditability. A rate held as a number in a column can be checked against the exchange's own record; a rate folded into a net figure cannot, and nobody notices when a rate changes. The second is attribution. Commission is the price of using the exchange, which makes it a cost of the hedge rather than a cost of the bet, and a record that cannot separate the two cannot tell you whether a run of thin results came from the offers or from the hedging.
Tip: Keep the rate as a column rather than a constant inside a formula. A rate that lives in one cell and is referenced everywhere survives a change; a rate typed into forty formulas does not.
Reconcile per selection, not per day
A daily total is the most reassuring wrong answer a spreadsheet can give, because errors in opposite directions cancel.
Take two $50 bonus bets on the same day, both backed at $4.00, both planned at a lay of $3.70, so the record expects 2 x $39.04 = $78.08. The first matched at $4.00 and kept $36.08, as above. The second got a better price and was sized at it, $3.45: lay stake = 50 x 3.00 / 3.40 = $44.1176, liability = 44.1176 x 2.45 = $108.09, kept = 44.1176 x 0.95 = $41.91, a conversion of 41.91 / 50 = 83.8%.
The day's actual total is 36.08 + 41.91 = $77.99 against a planned $78.08, a gap of 9 cents that reads as rounding. Underneath it, one row is $2.96 short and the other is $2.87 long, each about 7% of what that row claims. A daily check passes. A per-selection check against both accounts fails twice, which is what you want it to do.
The practical form is a reconciliation that matches each selection to the bookmaker's settled-bet list and to the exchange's own market record, one row at a time. How to track betting results covers the monthly totals those rows roll up into, and betting activity statements explains the bookmaker statement you are checking against.
Track the offer as well as the bet
Here is the loss no bet table can show you: an offer that expired unused. There is no row for it, because no bet happened, so the spreadsheet reports perfect accuracy on something that cost real value.
Keep a second, small table of offers, one row each, with four fields. What the promotion is, in its generic shape (a stake-not-returned bonus bet, a money-back saver, a stake-back offer on a multi). Its value. Its cap, which is the most-ignored field, because staking above a capped refund buys nothing extra on the part above the cap. And its expiry date, as the bookmaker states it.
On the conversion above, a $50 bonus bet is about $39.04 of value at the planned price. Three of those lapsing in a month is 3 x 39.04 = $117.12 that never appears anywhere in a bet record. Each bookmaker sets its own terms on an offer, including whether a particular bet qualifies at all, so the register is also where you note a bet the bookmaker did not count.
Mistakes a template makes quietly
| Mistake | What it hides |
|---|---|
| One narrow row per bet | The second settled result has nowhere to go, so it gets reconstructed from memory |
| Lay price planned only | A shortfall has no recorded cause: $2.96 a bet above, $118.40 over 40 bets |
| Commission netted into profit | The rate cannot be checked, and a changed rate passes unnoticed |
| Bonus and cash in one stake column | Turnover and conversion are both wrong, because a bonus stake is not cash out of pocket |
| Reconciling by day | Two offsetting errors read as the 9-cent rounding difference above |
| No offer register | An expired offer leaves no row at all, so the loss is invisible |
| Totals typed in by hand | The summary stops being derived from the rows, and nothing says when they parted company |
Where B337 fits
B337 records every placement, price and settlement in your dashboard as it happens, so the bookmaker side of a record is built from what was actually sent rather than from what was planned. Bets settle from the bookmaker's own settled-bet list and from official racing results. Stake, return and bonus conversion are tracked per session and per bookmaker, results, summary and profit and loss views export to CSV, and you can filter by bet type, strategy, bookmaker and date.
The honest limit, and part of the reason this page exists: the exchange side of the record is mostly yours. On racing, an optional auto-lay can hedge a bet a session places, in your own exchange account, and it is off until you turn it on. It never lays a tote bet, and its lay can go unmatched or part-matched, which is exactly the row that needs both lay-price columns. Outside that auto-lay the bot places nothing on the exchange, so a sports hedge, an arbitrage leg or a green-up is yours to place, and the matched lay price, the lay stake, the liability and the commission are columns you fill in or import. Bets placed elsewhere are added by hand, and the bot runs on your own computer and places nothing while that machine is off, asleep or offline, so your own two-sided table is also where a bet B337 never placed has to appear. Export the dashboard's rows into that table rather than keeping two records that drift apart. Many bookmakers restrict automated betting in their terms, and no software prevents a bookmaker restricting or closing an account. Automation also makes it possible to bet far more, far faster, than by hand, so set your limits with each bookmaker as well as in the software.
Risk: Betting involves risk. Bookmakers can restrict or close accounts and void bets, automation can fail, prices move, and a positive expected value bet can still lose. There is no guarantee of profit. See responsible gambling for limits and support.
For the method itself rather than the record of it, see matched betting in Australia, and for the conversion arithmetic in a tool, the bonus bet converter works the lay stake, liability and kept figure from the prices you enter.