How a piece of software on my desk watches three bookmakers and the Betfair exchange at once, does the maths nobody can do in six seconds, and quietly finds bets that can't lose much — but sometimes win a lot.
Over the last fortnight the system you're about to meet logged 346 betting opportunities and then checked every single one against the actual race results. It predicted the key event would happen 10.9% of the time; reality delivered 11.6%. The small real-money bets I placed through it came back at a profit, with exactly the win-and-loss pattern the maths said they would.
No tips. No hunches. No watching the racing. This is the full story of how it works — the idea, the maths, the machinery, and the honest results.
Imagine your friend Alice bets you £10 that it rains tomorrow, and your friend Bob bets you £10 that it doesn't. Take both bets and you can't lose — whatever the weather, one friend pays you and you pay the other. Pointless, unless something extra is attached to one of the bets. That something extra is what this whole project hunts.
In horse racing there are two places to bet. A bookmaker (William Hill, Paddy Power, Ladbrokes…) where you back a horse to do well. And a betting exchange (Betfair) — a marketplace of ordinary people betting against each other — where you can also play bookie yourself and bet that a horse won't do well. That's called laying a horse. Back a horse at the bookie, lay the same horse on Betfair, and like Alice and Bob, the bets cancel out.
The bet at the centre of all this is the each-way bet — really two bets stapled together. Half your money says the horse will win. The other half says it will place — finish near the front, usually in the top 3.
To attract punters, bookmakers run extra place promotions on selected races: today, they'll pay the place part on the top 4 instead of the top 3. Betfair doesn't join in — its place market still pays the top 3. That one-position gap is the entire goldmine:
| Horse finishes… | Bookie each-way bet | Betfair lays | Net result |
|---|---|---|---|
| 1st, 2nd or 3rd | wins | loses | ≈ break even |
| 5th or worse | loses | wins | ≈ break even |
| 4th — the extra place | wins | also wins | both pay 💰 |
In every ordinary outcome the bets cancel for a few pence in fees — the qualifying loss. But if the horse lands exactly in the extra place, the bookmaker pays out (it placed, by their promoted terms) and the Betfair lay pays out (it didn't place, by Betfair's standard terms). Both sides of the coin land face-up at once.
Each bet is a lottery ticket that costs pennies and pays pounds — and across our settled results the magic position came up roughly one race in eight.
Here's a part I find genuinely satisfying: I never tell the system which races have extra places. It discovers them on its own, every morning and all day long, in a different way for each bookmaker:
WH's own website quietly asks an internal data service for the day's race list — and inside that data, every race carries a flag the public page doesn't show: extraPlaces: true. The system reads the same service and instantly knows which of the day's races are promoted. The precise terms ("3 > 4 Places, 1/5 Odds") are then read off the race page itself, which also covers the case where WH changes the offer during the day.
PP helpfully publishes a dedicated Extra Place Races tab. Its data feed states everything outright: the number of places, the place fraction, and — a lovely bonus — the matching Betfair market ID, since Paddy Power and Betfair are the same company behind the scenes.
The official race data barely mentions the promotion — but Ladbrokes' marketing team writes the day's extra-place list into a promotions box by hand, in plain English: "1/5 the odds 1-2-3 (enhanced from 1/4 the odds 1-2)". The system reads that sentence like a human would and extracts: 3 places at 1/5 odds, up from the standard 2 — so one extra place.
Right now the system actively monitors exactly three bookmakers — William Hill, Paddy Power and Ladbrokes. Two more are part-built. Sky Bet should be easy in theory (it publishes a page that only lists extra-place races, so discovery is free) and a scraper exists, but its app-style data feed keeps changing shape and we're still working out the most reliable way to read its prices — it stays out of the rotation until it's trustworthy. BetVictor's adapter is fully written and waiting its turn; one for the future. The architecture means switching either on is a one-line change when the day comes.
And then there's bet365 — probably the hardest scrape in the industry, which stings, because they're exactly who you'd want: frequently the best odds on the board, generous extra-place promotions, and Best Odds Guaranteed on top. Three things make them brutal. First, there's no readable data feed to borrow — where other bookies' pages quietly fetch tidy price data the scraper can intercept, bet365 streams prices over a proprietary, scrambled connection deliberately built to be meaningless to outsiders. Second, their bot detection is the best in the business: they fingerprint the browser, the device, even the rhythm of your mouse, and anything that smells automated is banned in minutes — taking the betting account with it. Third, what does work breaks constantly, because the protocol shifts under your feet. The biggest prize, behind the strongest lock; the realistic route in is probably a commercial odds feed rather than a scraper, and that's exactly the kind of source the central store was designed to accept.
Standard each-way terms follow a fixed convention based on field size: 5–7 runners pays 2 places, 8–15 pays 3, big-field handicaps of 16+ pay 4. So when a page says simply "5 Places" on a 14-runner race, the system knows the standard is 3 — meaning two extra places. When William Hill renders it explicitly as "3 > 4 Places", the arithmetic is even easier. On big festival races you'll see 6, even 7 places offered — two or three extra slots, each one a separate winning position for this strategy. Every change is logged the moment a bookie adds, enhances or quietly withdraws an offer.
The three live scrapers couldn't work more differently — William Hill needs a real Chrome browser reading prices straight off the page as the site's own live feed updates it; Paddy Power is watched by intercepting the data its page requests; Ladbrokes is plain old polling of a public feed. None of that matters one step downstream. Every scraper translates what it found into one identical message — race, venue, start time, runners, odds, terms — and posts it to a central store. The store matches races across bookies by venue and start time (±2 minutes), and matches horses by name even when one bookie writes Richie's Rocket and another writes Richies Rocket (IRE). Once data is in, nobody remembers or cares how it was obtained. Adding a sixth bookmaker means writing one new translator — nothing else in the system changes.
Time to open the bonnet. Don't worry — it's four short formulas, and we'll run real horses through them in a moment.
The place half of an each-way bet doesn't pay the full odds — it pays a fraction of them, stated in the terms (usually ¼ or ⅕). A horse at decimal odds 9.50 (that's 17/2 in old money) with "1/5 odds" places at:
So a £2 place bet returns £5.40 if the horse places. Both halves of the each-way bet now have a price, and each half gets its own opposite bet on Betfair.
The clever bit is choosing lay stakes so that the small losses are identical in every ordinary outcome — win, normal place, or nowhere. Betfair takes a small commission on winnings (mine is 2%), and the formulas account for it:
base_profit is usually slightly negative — say −£0.60 on a £2 each-way bet. That's the cost of the ticket. ep_profit is the prize: the place half of the bookie bet paying out on top of an already-balanced book.
So far, so mechanical. The hard question is: which of these tickets are worth buying? A typical promoted race offers a dozen runners, each with a different ticket price and prize. This is where most hobbyists use a shortcut — and where this system earns its keep.
Every extra-place ticket is itself a little bet: risk the qualifying loss, win the EP bonus. Like any bet, it has odds. If the ticket costs £0.65 and pays £5.60, you're being offered:
Read it exactly like racing odds: 9.6 means "put in 1, get back 9.6 if it comes off". The bet is worth making if the true chance of the horse finishing in the extra place is better than 1-in-9.6.
Spend any time in matched-betting Facebook groups and forums and you'll meet the classic rule of thumb: "if the implied odds are bigger than the number of runners, bet." The logic: there are, say, 10 runners and one extra-place slot, so a horse picked at random fills it about 1 time in 10 — and odds of better than 10 beat a 1-in-10 chance. Crude, but genuinely valid: it's a real edge, simply expressed, and plenty of people profit with nothing more.
But it has a blind spot you could drive a horsebox through: horses are not picked at random. A 5/2 favourite finishes 4th far more often than 1-in-10; a 100/1 outsider almost never does. The crude rule prices every horse in the race identically — so it bets on outsiders it shouldn't, and walks past favourites and mid-priced horses it should take.
Rather than assuming, it asks the sharpest judge available: the betting market itself. Betfair's prices are probabilities in disguise — a horse laying at 12.5 to win has roughly a 1-in-12.5 (8%) chance of winning; laying at 3.1 to place means roughly 32% to finish top-3. The chance of finishing top-3 without winning is the gap between those two. Spread that gap across the place positions, and you get this horse's personal chance of the extra place:
Then every horse gets a proper expected-value calculation — the average profit per bet if you made this exact bet a thousand times:
Only positive-EV horses that also clear a set of practical gates — enough real money waiting on Betfair to take the lays, liability within limits, profit worth the effort — become alerts. The forum rule asks "are the odds long enough for a random horse?" This asks "is this particular horse, at these particular prices, on this particular second, a good buy?" — and as you'll see in the worked example below, the two methods can disagree, and when they did, ours cashed.
One more evolution is worth telling honestly, because the reasoning matters more than the feature. The first version of the alert gate asked a simple question: is the EV at least £1? A fixed pound-amount bar. It worked — right up until the system started staking different amounts on different horses.
And it does, deliberately. Stakes vary by odds band: short-priced horses get bigger stakes (Betfair's markets are deepest there), outsiders get smaller ones, and a liquidity-aware calculation caps every bet at what the exchange can actually absorb. The moment stakes vary, a fixed pound bar quietly stops meaning anything consistent:
Read that again — it's backwards. The weaker bet (5% edge) sails through because it happens to carry a big stake, while a bet four times stronger gets binned for carrying a small one. The bar was measuring the size of the bet, not the quality of it.
The fix: make the primary measure EV as a percentage of the stake — in other words, the return on investment of each bet. A 10% bar now means the same thing whether the stake is £5, £20 or whatever the dynamic calculation lands on. It's the same reason you compare savings accounts by interest rate, not by the pound amount of interest — rates are comparable across different deposit sizes; pound amounts aren't. As a bonus it's future-proof: scale every stake up five-fold next month and the threshold still selects exactly the same quality of bet, no retuning.
The pound floor didn't disappear, though — the effective gate is whichever is higher: the percentage of the stake, or a small absolute minimum. That's deliberate too. Some of a bet's costs are per-bet, not per-pound: your attention, the seconds of reaction time, the wear on a bookmaker account that will eventually get stake-limited. A technically beautiful 12% edge worth 20 pence isn't worth spending those things on, and the floor stops the system crying wolf over it.
As the primary gate, yes: ROI per bet is the natural, scale-free measure of bet quality, and pairing it with an absolute floor covers the per-bet costs a percentage can't see. But it's worth being clear-eyed about what even %EV doesn't capture. It ignores variance — a 10% edge from a steady favourite (high hit-rate, modest prize) and a 10% edge from a 25/1 outsider (rare hit, big prize) are equally good on average but feel very different on the way; a stricter system would rate edge per unit of bumpiness, which is the road to Kelly staking. It ignores capital efficiency — that outsider parks several times more Betfair liability for the same stake, so on a busy day "EV per pound of liability tied up" would rank bets by how hard they work the bankroll. And it's only as honest as p_ep itself — the calibration data showing 10/1–20/1 horses are under-rated would change which horses clear the bar more than any threshold redesign. Those are the next refinements, in that order — and the percentage bar is the right foundation to build them on.
Every alert is logged with its predicted p_ep — and after the race, the actual result is fetched and written next to it. Across 346 settled picks: predicted 10.9%, actual 11.6%. The data even shows where the simple market model is too cautious (it under-rates 10/1–20/1 horses, which turned out to be the most profitable band of all) — a built-in feedback loop the crude rule can never have.
Theory is cheap. Here are two actual bets from the system's records — every number below is straight out of the database, and you can check each line with a calculator.
The morning of the race, the system flags Curious Rover: William Hill offering 9.5, Betfair laying at 11.0 (win) and 3.1 (place). Watch the formulas do their thing:
| Step | Calculation | Result |
|---|---|---|
| Place odds | 1 + (9.5 − 1) × 1/5 | 2.70 |
| Win lay stake | 2 × 9.5 ÷ (11.0 − 0.02) | £1.73 |
| Place lay stake | 2 × 2.7 ÷ (3.1 − 0.02) | £1.75 |
| Base profit (the ticket price) | −4 + 0.98 × (1.73 + 1.75) | −£0.59 |
| EP profit (the prize) | 2 × 2.70 | +£5.40 |
Now, should we buy this ticket? The implied odds are (5.40 + 0.59) ÷ 0.59 ≈ 10.2, in a 10-runner race — the forum rule calls that a coin-flip at best, and at the prices logged a few minutes later (WH drifted to 10.0, Betfair win lay to 12.5) the implied odds were 9.6 against 10 runners: the crude rule says walk away. The market model disagreed:
| Verdict | Calculation | Result |
|---|---|---|
| Chance of EP (this horse) | (1/3.1 − 1/11.0) ÷ (3 − 1) | 11.6% |
| Break-even chance needed | 0.59 ÷ 5.40 → 1 in 10.2 | 10.9% |
| Expected value | −0.59 + 0.116 × 5.40 | +EV ✓ |
A horse at these prices places (top 3) about 32% of the time and wins about 9% — so it lands around the frame constantly, which is exactly the profile that snags 4th. The bet went on. Here's the actual recorded timeline, to the millisecond:
Occasionally the prices line up so generously that even the boring outcomes profit. William Hill offered 15.0 while Betfair would lay the win at just 10.5 and the place at 3.85:
| Step | Calculation | Result |
|---|---|---|
| Place odds | 1 + 14 × 1/5 | 3.80 |
| Win lay stake | 2 × 15 ÷ (10.5 − 0.02) | £2.86 |
| Place lay stake | 2 × 3.8 ÷ (3.85 − 0.02) | £1.98 |
| Base profit | −4 + 0.98 × (2.86 + 1.98) | +£0.74 |
| EP profit | 2 × 3.80 (on top of base) | +£7.60 |
| Expected value | 0.74 + 0.082 × 7.60 | +£1.37 |
Win, place, last — minimum +74p. The lottery ticket was free, with change. Rodeo Blues then went and finished 4th of 12 anyway: +£8.34. Five days later the same pattern at bigger odds — Difficult Decision, a 25/1 shot at Punchestown with a positive base of +£1.57 — also landed its extra place for +£13.57 on a £2 stake.
Half of all profitable windows close within seconds. That constraint shaped every pixel of the dashboard: nothing on it asks to be read — everything is designed to be noticed. Let's take it from the top.
The identity card first: venue, time, going ("Good"), distance, class and field size, then the part that took real plumbing — every bookie's extra-place terms side by side as coloured chips (here Ladbrokes, Paddy Power and William Hill all offering +1 extra place for 4 total) next to a chip confirming which Betfair markets are matched ("lay win + lay place (3 pl)" — and that 4-vs-3 mismatch is, of course, the entire opportunity). Far right: the stake in force and the countdown to post.
Then the row itself. Ten columns, one story per horse — here's White Ladder's, number by number:
| Column | What it means | White Ladder |
|---|---|---|
| Runner | Name, age, recent form, jockey and trainer where known — plus a Manual Lay button that lets you lay any horse by hand, alert or no alert. | White Ladder |
| Win odds | The bookie's decimal back price, with the familiar fractional version beneath. This is the price your each-way bet strikes at. | 3.75 (11/4) |
| E/W terms | The place fraction and total places paid. The ★ means an extra-place promo is live on this race at this bookie. | 1/5 · 4 pl ★ |
| Stake | The each-way stake the settings have chosen, and beneath it Max — the largest stake today's Betfair liquidity could actually absorb. | £2 · Max £3 |
| BF lay win | Best price to lay the horse on Betfair's win market — the cost of insuring the win half. | 4.60 |
| BF lay place | Best lay price on the place market. The sub-header shows how many places Betfair pays (3) — one fewer than the bookie's 4. Mind the gap; profit lives in it. | 2.02 |
| Lay on Betfair | The exact lay stakes the formulas demand for the two legs, and the total Betfair liability they'd tie up. | £1.64 + £1.55 → £7.48 |
| Liquidity | Whether that much real money is actually waiting at those prices — ticks when each market clears its percentage gate (more on that below). | ✓ ✓ |
| Exp. value | The verdict. EV as a % of stake in big type, the £ figure beneath, and a bar filling towards the break-even tick. | −22% (−£0.44) |
| EP / QL / Rating | Total profit if the horse lands the extra place; the qualifying loss otherwise; and a 0–100 quality score, EP ÷ (EP + QL). | +£2.23 / −£0.87 / 78% |
Read the row as a sentence: this ticket costs 87p, pays £2.23 net if White Ladder finishes exactly 4th, and the market prices that at about a 14% chance. Fourteen percent of the £3.10 gross bonus is 43p — less than the 87p ticket, so the EV is −22% and the row stays dark. If William Hill drifts that 3.75 out while Betfair holds steady, the same arithmetic flips positive and the row goes green. Which brings us to watching that happen.
Prices drift continuously, which means a horse that's 80% of the way to profitable at 2:31pm might cross the line at 2:33pm. Rather than alerts appearing out of nowhere, the dashboard shows the approach: every row is continuously scored on how close its expected value is to the alert threshold, and shades up through three stages as it closes in:
Illustration in this site's grayscale; on the live dashboard the warming rows glow amber and the sizzling tier pulses gently.
At 70% of the threshold a row turns warm; at 85%, hot; at 95%, sizzling — pulsing softly so your eye lands on it before the alert even fires. In practice this changes how the tool feels: you're not waiting to be startled by a popup, you're watching two or three kettles come to the boil and you already have the bookie's page open for the one that matters. Those few seconds of anticipation are often the whole game.
Along the bottom of the screen runs the answer to the most important question in this game: what just moved? Every price change on every tracked race — any horse, any bookmaker — slides in from the left as a chip: the runner's name, the race, the bookie, and the move itself with a direction arrow. Green arrows are prices drifting out (longer odds at the bookie usually means better extra-place value), red are prices shortening.
The colour fade is the quiet masterstroke. In a world where opportunities live for seconds, the age of a piece of information matters as much as its content — and reading timestamps takes time you don't have. The fade makes staleness visible: a glance at the bar tells you the market's whole last minute — what moved, which way, and how long ago — without reading a single number. New chips physically push the older ones rightward, so the bar reads left-to-right as a timeline. And every chip is a button: tap it and the dashboard jumps straight to that race's table, already scrolled to the action.
An earlier version of the table re-sorted itself on every refresh: profitable horses floated to the top, and everything else reshuffled whenever prices crossed. It sounds helpful. In practice it was maddening — you'd be reading a row, or reaching to click it, at the exact moment it leapt somewhere else. Re-acquiring a moving target costs a second or two of visual search, and seconds are the entire budget. So the table now freezes its running order the moment a race first loads — favourite at the top, outsiders below — and never reorders it again. Your eyes learn where each horse lives and it stays there; late-declared runners simply join the bottom.
That created one new problem to solve honestly: in a fifteen-runner field, a horse near the bottom can turn green below the edge of the screen, where stillness would hide it. The answer is a small green pill that appears, gently bobbing, in the corner whenever a profitable row exists anywhere below your current view:
With this many dials (next section), the question you ask most often is "why didn't that horse alert?" — and the answer should never require opening the settings and reading numbers. The Filters button at the top of the screen opens a live, plain-English audit of every rule currently in force, freshly worded from the actual saved settings — green ticks for the permissive ones, amber flags for anything that's actively suppressing alerts:
Together the layers form a deliberate hierarchy of attention: the ticker murmurs everything that's happening, the heat map points at what's about to matter, the arrow tugs your sleeve about what you can't see, and the alert shouts when it's time. Most betting tools only have the shout.
Everything the dashboard decides, it decides from a settings drawer that has grown one dial at a time, each one a lesson learned. Here's the full tour, with the values currently in force.
The default each-way stake (£2 while testing) is what every calculation runs at, bounded by a minimum and maximum and rounded to a stake step so bets look like a human chose them. Two smarter modes sit on top. Odds-band staking sets bigger stakes on shorter-priced horses (e.g. £20 under 5.0, £10 to 10.0, £7 to 20.0) — not because they're better bets, but because Betfair's markets are deepest there, so big lays actually fill. And dynamic staking computes, per horse per second, the largest stake the visible Betfair liquidity and a per-bet liability budget (£200) could support — that's the "Max £3" under White Ladder's stake. It's the difference between guessing what the market can take and asking it.
Hard caps on win-lay liability (£200) and place-lay liability (£100) per bet — no single horse, however tempting, is allowed to tie up the whole bankroll. The balance check suppresses any alert whose lays the live Betfair balance couldn't cover (configurable to a custom figure if you're reserving funds). And the commission setting (2%) feeds every formula in the chain, so a change at Betfair's end is one edit, everywhere at once.
The EV gate from Part four — £0.10 or 10% of stake, whichever is higher. A minimum EP profit (£2) so the prize is worth the admin even when the maths is technically positive. A maximum base loss as a percentage of the EP prize, filtering out tickets that are all cost and little prize. And a maximum alert odds ceiling (26.0): beyond roughly 25/1, place-market liquidity gets horrible and the probability estimates get shaky — the filters popup flags this one amber because it's actively hiding runners.
Each lay leg has a gate: at least 65% (win) and 70% (place) of the money the lay needs must be visible on Betfair, or no alert. Why not insist on all of it? Because exchange markets fill late — a quiet place market two hours out reliably deepens in the final minutes before the off, as traders and hedgers pile in. Demanding 100% cover at alert time would throw away perfectly good bets whose markets will comfortably refill by post; demanding two-thirds catches the opportunity early, before the bookie price gets taken, and trusts the refill to absorb the rest. The asymmetry of the failure modes is what makes this safe: if the refill never comes and a lay sits partly unmatched, you're left holding an ordinary each-way bet at fair odds — annoying, not dangerous. (And it's precisely why the place gate is set a notch stricter than the win gate: place markets are the thinner of the two.) Get on while the getting's good; let the market catch up.
The Betfair polling window (30 minutes) stops the system pestering the exchange for prices on races hours away — lay prices that far out are noise, and the API calls are better spent inside the window where money actually exists. The alert window (10 minutes to post, with an always-on override) keeps notifications inside the period when you could realistically act. Action delays (3–8 seconds, randomised) pace the automated steps so account activity reads as human. Instant lay arms the one-press hold-to-confirm flow from the next section. And individual horses can be muted — once you've bet a runner, or decided against it, it stops shouting at you.
When an alert fires, the workflow is deliberately half-manual, and the sequence is a hard rule:
1. The bookmaker bet goes on first, by hand. Bookmakers ban robots, so a human (me) taps in the £2 each-way.
2. Then — and only then — the lays. Back in the app, you press and hold the lay button for a second and a half. On release, both Betfair lay bets fire through the API within milliseconds, at the exact stakes from the alert snapshot. The hold-to-confirm is intentional friction: a £40 liability should never ride on a stray tap.
Think about what each half-finished state looks like. If you've backed but not yet laid, you own an ordinary bet at fair odds — not what you wanted, but its worst case is losing a £4 stake. If you've laid but not backed, you are a one-legged bookmaker with no insurance: should that horse win, you owe the winner's payout — the full liability, potentially hundreds of pounds at bigger stakes — with nothing coming back from the other side. One mis-click in the wrong order turns a pennies-risk strategy into an open-ended gamble. So the rule is absolute: back first, lay second. The safe mistake is recoverable; the dangerous one must be impossible.
The app enforces the spirit of this too: lay buttons work from a frozen price snapshot that expires after 60 seconds, a duplicate-guard stops the same horse being laid twice, and it refuses to fire at all if it can't verify the Betfair balance covers the liability. If only one of the two lay legs gets matched, the system flags it loudly — a half-hedged bet is the one state you never want to discover later.
For everything else — sizing a bet by hand, checking a what-if, or sanity-checking the robot itself — there's a standalone EP Lay Calculator. Type any stake, odds, place fraction and lay prices, and it answers instantly: the two lay stakes the formulas demand, the liability each ties up, a live sufficient funds check against the actual Betfair balance, and the bit I like most — a four-row table of every possible outcome and exactly what each pays. Here it is loaded with Curious Rover's numbers from Part five, agreeing with the worked example to the penny:
Most betting tools stop at the recommendation. This one's favourite part comes after the race. A results fetcher asks Betfair for the settled markets — and Betfair's records are wonderfully unambiguous, because real money changed hands on them:
On the win market, exactly one runner is flagged WINNER: that's 1st place. On the standard place market, the top 3 are WINNERs. If a separate market covering the promoted places exists, its winners reveal who took 4th (or 5th). Cross-reference the three lists and every horse gets classified: won, placed, extra place, or unplaced. Horses missing from the settled market were non-runners — void, stakes returned.
One honest quirk: Betfair's place market doesn't say who was 2nd versus 3rd — only that both "placed". So the stored finishing positions within the places are sometimes swapped. It genuinely doesn't matter: for this strategy the profit is identical whether your horse was 2nd or 3rd (bookie place bet wins, place lay loses, same pennies either way). The only boundary that moves money is in the places / in the extra place / out — and that boundary comes straight from which settled market paid out.
For real bets, settlement goes one better: instead of recalculating from formulas, it pulls the actual matched amounts and profit from Betfair's cleared-order records — the pounds and pence that really moved — and books those. Then everything flows into the reports.
Two weeks of data, two ways to answer.
Taking every alert at the tiny logged stakes (averaging £2.10 each-way) would have returned +£95.46 — about 28p per bet on roughly £4.20 briefly outlaid, a ~6–7% edge per bet settled within the hour. For context, the average punter loses 5–15% per bet long-term.
The 23 test bets placed through the full workflow returned +£9.67 from about £110 staked — bookmaker accounts −£37.30, Betfair +£46.97. Five extra-place hits between +80p and +£6.27; eighteen non-hits costing 4p to £1.20 each, precisely as calculated. Two of the horses won (one at 7/1) and cost just 4p and 41p — the hedge doing its job under fire. Beer money at £2 stakes, but the per-bet economics match the theory exactly, and the same bets at £20 stakes ≈ +£97.
One more honesty note: when Betfair never opened a market covering the promoted places, the paper log can't tell 5th from 15th and conservatively records "unplaced". One of my real bets — Gaoithe Glory at Limerick — is logged on paper as a £1.09 loss, but the actual settled bet banked +£6.27 because she did land the extra place. The paper numbers above are, if anything, understated.
An ordinary Tuesday offers a handful of promoted races at quiet tracks with thin Betfair markets. Then there's Cheltenham. Festival weeks are this strategy's Christmas: seven races a day, extra places promoted on nearly all of them, bookies competing so hard you'll see two or three extra places on the big handicaps — and Betfair markets with millions matched, so the lays that cap your stake on a Tuesday swallow proper money without blinking. More races × more extra slots × deeper liquidity, multiplied across every bookmaker running the offer at once.
Your Betfair balance must cover the liability of open lays — the payout you'd owe if the laid horse wins. Rough shape: a £20 each-way bet on an 8/1 shot ties up about £180–£220 of liability across the two lays. The money isn't spent — it's a deposit, released about ten minutes after each race settles, then recycled into the next one. With races every half hour, two or three concurrent bets means roughly £400–£700 working capital at £20 stakes; £1,500–£2,000 lets a festival day run flat out without ever declining a bet. (At my £2 test stakes, the whole fortnight ran on under £60.)
Lay two horses in different races and your liabilities simply add up. Lay two horses in the same race and they don't — because only one horse can win. Say you lay horse A (liability £80, collecting £10 stake) and horse B (liability £70, collecting £9). Worst case isn't £150: if A wins you pay £80 but keep B's £9 — you can never lose both. Betfair's exposure calculation knows this and only reserves the worst single case, around £71. So betting several qualifying horses in one big festival race is cheaper than the same bets spread across the afternoon — and big festival races are exactly where several horses qualify at once. The busiest days are the most capital-efficient. It's a lovely property.
The honest caveats, first: half of all profitable windows close within seconds, so reaction speed — not maths — is the practical ceiling. Betfair's place markets on small races are shallow, which caps stakes (the system computes that cap per bet rather than guessing). Bookmakers eventually stake-limit accounts that only ever bet promoted races. Dead-heats and late non-runners nibble at the edges. And two of my eleven days lost money — variance is the price of admission, paid back with interest by volume.
But the central claim survived contact with reality, and that's the part I'm quietly proud of: the system predicted how often the magic position would come up, across 346 real bets it had selected, and reality agreed to within 0.7 percentage points. The profit isn't clever gambling — it's a promotional gap, measured carefully, harvested politely, and audited by the only judge that counts: the results.
The deeper lesson from building it: the maths fits on a postcard; the engineering is 90% of the work. Reading five hostile websites in real time, matching Richie's Rocket to Richies Rocket (IRE), noticing within seconds when an offer changes, surviving your own scraper silently freezing — that's the machine. The formulas just get to take the bow.
Built in Python (FastAPI, PostgreSQL, Playwright) with a vanilla-JavaScript dashboard, running on a Mac on my desk. All figures are from the system's own database, 28 May – 10 June 2026; screenshots are of the live reporting pages over the same period. Bet responsibly — and only with maths on your side.