Moved to:
Woody Hayday

Fresh Ideas

Hi there! This is my old blog, I don't hang around here much.
You can now find me trying to mix things up here:
Visit Subscribe To My Email List

Arbitrage Betting – Programmatically finding arbitrage bets

Betting arbitrage, miraclebets, surebets, sports arbitraging is a particular case of arbitrage arising on betting markets due to either bookmakers’ different opinions on event outcomes or plain errors. By placing one bet per each outcome with different betting companies, the bettor can make a profit. As long as different Bookmakers are used for arbitrage betting the Bookmakers do not have a problem with this. Each Bookmaker will still make profit due to their calculations.

So I happened across this post on foreign exchange arbitrage and got distracted for 4 hours into working out if there were any opportunities for using arbitrage betting from here in the uk, what with online gambling being so big and tennis being a simple outcome game I thought I would start with the tennis and see where it took me. More an excuse to practice my rapid application dev than anything else.

If you skip to the end of this post you can see the outcome, or read on, I will be brief.

So I started in excel, found a nice summarising scraper site which gives you all the odds from different bookies in one place (how convenient – I bet they make good affiliate revenue) and did the maths. Within 4 games that evening I found one which worked. If I had placed bet’s across 2 bookmakers totalling £1000 at that moment I would have made a profit of £10.74 (1.74%), guaranteed (unless some natural disaster killed both tennis players?!?)

Great. Well its not, but 1.74% was a start that could be turned into a healthy profit, provided easy money in, easy money out, repetition and scalability (not that I expected that but I thought I would go with it.)  The math I was using was as follows:

1/x + 1/y = c

Where x was odds on outcome1, y the odds on outcome2
if c was less than one then it would be an arbitrage bet which held profit (this is a simplified version of the math, which I am fairly sure is correct)

This gave me a percentage of return based on a formula, next I wrote a quick scraper which pulled match’s from the odds aggregater, it pulls all tennis games across different championships and arena’s. I wrote the scraper in csharp, a variant on a rules based spider-scraper system I wrote in php a few years ago for ripping various things off the net into db’s. So 1 hour or so later at the flick of a switch I now had all tennis match’s popularly available to gamble online on in the uk with odds, bookie details etc etc.  I love RAD in c#. Apply the math to this and you get the following:

Yeah, its ugly, but it works.

So yeah perhaps that early game I found that made nearly 2% was a fluke or a miscalculation, perhaps arbitrage betting is as fluidly fixed by the free market as forex is, either way in the few days I have checked I haven’t found any arbitrage bets that are viable at all, let alone any healthy returns. There probably is scope in the practice, perhaps with 24 hour rate watching you might catch the book-keeper fluctuations and make the odd 1-4%, but really, for all the hassle of multiple accounts and bet-shop money holding its probably not worth it. Good excuse to re-write my scrapers in csharp though, and do a little maths.

*Gambling is bad, mmmmmkay? Its also worth noting that while if you couple finding this low % profit with the £10 free bet crap that all of these online bookies offer it would seem like a great idea, or at least a good one. Its probably not. These business’s run a filter model for your cash, good marketing, low number page hops and quick card transactions makes it easy to filter in cash, but isn’t so easy to get out returns, also quite often the free initial bet or bonus comes with proviso’s which wreck the rate of returns. Its no surprise, its probably easier to earn your money elsewhere, perhaps by starting up as a bookie? :p

This entry was posted in Business, C#, Uncategorized. Bookmark the permalink. Both comments and trackbacks are currently closed.


  1. Martin
    Posted August 7, 2010 at 9:21 am

    In fact, there is a problem especially with tennis. In tennis, it is quite common that one of the opponents retires due to an injury. Many bookmakers have different rules: some of them make both stakes void in this case, in some of them the player who had withdrawn is considered as the loser if at least one ball was played; some of them evaluate the stake non-void only if some number of sets have been already played.
    So in short, you can lose all your money if you bet on both sides and the match is retired. Moreover, the odds between bookmakers with different rules usually differ a little, so when you find an arbitrage, it’s quite probable that the bookmakers you found have different rules.
    Sports like football and ice-hockey are less prone to this problem, I think.

  2. Posted August 7, 2010 at 12:27 pm

    Yeah in essence the differences between bookies both make the % of difference and risk it, by offering different odds with different provisos. In the end I guess its better to spend your time on real, big, positive projects, rather than trying to find holes in well established systems.

One Trackback

  1. By Forget Inertia – A new era. | Woody Hayday | Blog on December 2, 2010 at 4:02 pm

    […] would only use it over php for few of my future web projects.) RAD in C# let me experiment with an arbitrage betting program and write a quick Reddit wallpaper grabber (yes I know it needs fixing); as well as a bunch of […]

Woody Hayday

Comments Archive

Hi there. This is my old blog and it's archived, so you can no longer post new comments on this post (Arbitrage Betting – Programmatically finding arbitrage bets).

Read my new blog about writing software and stories at

The New Blog
A Quote..
"A designer knows that he has achieved perfection not when there is nothing to add but when there is nothing to take away"
Antoine de Saint Exuprey
Old Random Projects
    © Woody Hayday 2008-2024