Unibet Odds Scraper - Kambi Betting Odds & Data API avatar

Unibet Odds Scraper - Kambi Betting Odds & Data API

Pricing

from $6.23 / 1,000 events

Go to Apify Store
Unibet Odds Scraper - Kambi Betting Odds & Data API

Unibet Odds Scraper - Kambi Betting Odds & Data API

Scrape Unibet (Kambi) sportsbook odds for 34 sports: 1X2, totals, Asian lines, player props, live scores and outrights, with bookmaker margin and no-vig fair odds computed on every row.

Pricing

from $6.23 / 1,000 events

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

ParseForge

Unibet Odds Scraper - Kambi Betting Odds & Data API

Scrape Unibet sportsbook odds straight from the Kambi offering that prices it: 34 sports, every market on the board, and live betting odds with the score and match clock. Each row carries decimal, fractional and American prices, implied probability, and the bookmaker margin already worked out. No login, no API key, no proxy. Export to CSV, JSON, Excel, or XML.

Kambi is the platform behind Unibet, and its offering endpoint is public: a plain GET returns the same prices the site shows. This reads that feed directly, filters it by league, kick-off, price, or margin, and returns every match in one fixed schema.

Who uses itWhat they scrape Unibet odds for
Odds comparison sitesA European book's full price list, refreshed on a schedule
Traders and modellersNo-vig fair odds and margin per market to benchmark closing lines
Affiliates and tipstersPremier League odds, player props and bet builder prices for content
Data teamsA labelled market corpus across 34 sports for pricing models
Arbitrage and value huntersThe same fixture priced in 16 licensed jurisdictions at once

What it does

This Actor collects Unibet events by league, by whole sport, by event ID, or from the in-play feed, and returns each one as a flat row. Every event carries:

  • 🧾 Core fields: teams, kick-off, sport, country, league, state, market count and the event's Unibet URL. 59 fields on the base row before any add-on.
  • 💰 Prices three ways: every outcome as decimal, fractional and American odds, plus its implied probability.
  • 📊 Margin already computed: the bookmaker margin and payout of every market returned, from the prices themselves.
  • 🏟️ Book flags: in-play, bet builder, streamed, cash out, offered live, competition vs match.
  • 🧩 Optional blocks: the full market board (up to ~430 markets on a big fixture), live score and clock, bet builder pre-packs, no-vig value analysis, and a cross-jurisdiction price comparison.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

What you can do with Unibet odds data

📈 Track a book's line and how tight it prices.

Pull a league on a schedule and read mainMarketMarginPercent next to the prices. Sort by margin to see where the book is sharpest and where it pads.

🔍 Shop the same fixture across jurisdictions.

Kambi prices each licensed market separately. Turn on the comparison and one Premier League fixture came back at 8.00 on the away side in Sweden and the Netherlands against 7.00 in Australia - a 14.3% spread on the same selection at the same book.

🧠 Build a props and Asian-line dataset.

Turn on the full market board and a single football fixture yields hundreds of markets: over/under, Asian handicaps and totals, correct score, HT/FT, corners, cards, and a couple of hundred player occurrence lines.

⚡ Follow live betting odds with the score.

Read the in-play feed and every row arrives with the running score, the match clock and period, and the live statistics the book publishes - corners, yellows, reds, set scores.

Why choose this scraper

What you get
Four inputs, one runLeagues, whole sports, event IDs and the in-play feed. Every source returns the same fields.
34 sports, not just the US fourFootball, tennis, table tennis, ice hockey, cricket, darts, snooker, esports, trotting, politics and more.
The whole board, not the headlineOptional full market board: player props, Asian lines, corners, cards, correct score, HT/FT.
Odds maths on the rowImplied probability, margin, payout and no-vig fair odds, computed from the prices returned.
Cross-jurisdiction comparisonRe-price any event in up to six of 16 Kambi markets and get the best price, the spread and an arbitrage flag.
Filters that cut noiseKick-off window, price band, favourite price, margin ceiling, market count, bet builder, streaming, cash out.
15 languages, English keptLocalise team and market names and still keep the English label on every row, so translated runs stay joinable.
Four export formatsCSV, JSON, Excel and XML, from the dashboard or the API.

How it compares

The sports-odds Actors on Apify aggregate US books - FanDuel, Bovada, Pinnacle, DraftKings - and return moneyline, spread and total. None of them read Kambi, and none return a European book's full board.

FeatureParseForgescrapesagescrapemintseemuapps
Unibet / Kambi offeringYesNoNoNo
Sports covered34US leagues + soccerUS leagues + soccerUS leagues + soccer
Markets per eventUp to ~430Moneyline, spread, totalMoneyline, spread, totalMoneyline, spread, total
Player props & Asian linesYesNoNoNo
Bet builder pre-packsYesNoNoNo
Outright / futures marketsYesNoNoNo
No-vig fair odds & marginYesYesNoNo
Cross-jurisdiction price spreadYes, 16 marketsNoNoNo
Live score & match clockYesNoNoScores only
Multi-book comparisonSingle bookYesNoNo

If you want several books side by side, use one of the aggregators. If you want everything one European book prices, this is the deeper feed.

What a Unibet event looks like

Every event returns as one flat JSON row. Here is a real record, unedited apart from a trimmed markets array:

{
"eventId": 1028072803,
"name": "Manchester United - Ipswich Town",
"homeName": "Manchester United",
"awayName": "Ipswich Town",
"sport": "FOOTBALL",
"sportTermKey": "football",
"country": "England",
"countryTermKey": "england",
"league": "Premier League",
"leagueId": 1000094985,
"termPath": "football/england/premier_league",
"start": "2026-08-30T15:30:00Z",
"startsInHours": 118.78,
"startDay": "Sunday",
"state": "NOT_STARTED",
"isLive": false,
"eventType": "MATCH",
"offeredLive": true,
"hasBetBuilder": true,
"isStreamed": false,
"tags": ["OFFERED_LIVE", "BET_BUILDER", "MATCH"],
"marketCount": 433,
"marketsReturned": 2,
"mainMarket": "Full Time",
"mainMarketType": "Match",
"homeOdds": 1.41,
"drawOdds": 4.8,
"awayOdds": 7.5,
"homeOddsFractional": "2/5",
"drawOddsFractional": "19/5",
"awayOddsFractional": "13/2",
"homeOddsAmerican": "-245",
"drawOddsAmerican": "380",
"awayOddsAmerican": "650",
"homeImpliedProbability": 70.92,
"drawImpliedProbability": 20.83,
"awayImpliedProbability": 13.33,
"mainMarketMarginPercent": 5.08,
"mainMarketPayoutPercent": 95.17,
"cashOutAvailable": true,
"markets": [
{
"betOfferId": 2683313472,
"criterion": "Full Time",
"marketType": "Match",
"isMain": true,
"outcomeCount": 3,
"bookmakerMarginPercent": 5.08,
"payoutPercent": 95.17,
"outcomes": [
{
"outcomeId": 4307642217,
"label": "1",
"type": "OT_ONE",
"participant": "Manchester United",
"line": null,
"oddsDecimal": 1.41,
"oddsFractional": "2/5",
"oddsAmerican": "-245",
"impliedProbability": 70.92,
"status": "OPEN",
"changedAt": "2026-08-24T13:14:45Z"
}
]
}
],
"url": "https://www.unibet.co.uk/betting/odds/football/england/premier-league/manchester-united-ipswich-town/1028072803",
"offering": "ub",
"marketJurisdiction": "GB",
"language": "en_GB",
"scrapedAt": "2026-08-25T16:52:11.204Z"
}

line is filled on handicap and over/under outcomes and null on match markets. drawOdds is null in sports without a draw. liveMarketCount is null until an event goes in play.

What the optional blocks add

BlockFieldWhat lands on the row
Full market boardallMarketsEvery market the book prices on the event, same shape as markets. A Premier League fixture returned 433. Pre-match only in practice - see below.
Live score & clockliveDataScore, scorer side, minute and second, period, whether the clock runs, and the book's live statistics - corners, yellows, reds, set scores.
Bet builderbetBuilderThe book's ready-made same-game multiples: combined price, leg count, leg outcome IDs, shortest and best price on the event.
Value analysisvalueAnalysisMargin, payout, favourite and longshot, no-vig fair probability and fair price per outcome with the vig cost, how competitive the market is, the average and sharpest margin across the row's markets, and how many minutes ago the price last moved.
Market comparisonmarketComparisonThe event re-priced in the jurisdictions you list: price per market per outcome, best and worst, spread %, best-payout market, and an arbitrage flag with the combined best-price book %.
ParticipantsparticipantsEach team, player or runner with its Kambi ID, home flag, type and scratched flag. Free.

Configure the run

Drive the Actor from four source types, alone or together: league paths, whole sports, event IDs, and the in-play feed. Filters run as each event is read, so only matches reach your dataset and only matches are billed. The Input tab lists every parameter.

A league path is sport/country/league, and a Unibet URL works in its place:

{ "leagues": ["football/england/premier_league"], "maxItems": 50 }

Grab the whole board on the few fixtures the book prices deepest:

{ "leagues": ["football/spain/la_liga"], "includeAllMarkets": true, "includeBetBuilder": true, "minMarketCount": 200, "maxItems": 20 }

Follow live betting odds with the score attached:

{ "liveOnly": true, "includeLiveData": true, "includeValueAnalysis": true, "maxItems": 100 }

Shop one league across jurisdictions and flag the spreads:

{ "leagues": ["football/italy/serie_a"], "compareMarkets": true, "comparisonMarkets": ["SE", "NL", "AU", "RO"], "maxItems": 30 }

Sweep a whole sport and keep only the tightly priced fixtures kicking off this week:

{ "sports": ["tennis"], "startsWithinHours": 168, "maxBookmakerMargin": 5, "excludeLive": true, "sortBy": "margin", "maxItems": 200 }

A note on filtering. The filters run on the complete event before the optional blocks are stripped, so maxBookmakerMargin, maxFavouriteOdds and minMarketCount all work without buying the value analysis or the full board.

Pricing

Pay-per-event: $0.007 per event row, dropping to $0.00623 at higher volume, plus $0.008 per listing page read and a $0.054 run-start fee. A league listing returns around 20 events and a whole-sport listing returns hundreds, so the page fee lands well under a cent per event.

Events collectedListing pagesApproximate cost
1005$0.79
1,00020$7.21
10,00060$70.53

Every optional block is billed only for the events that actually receive it:

Optional blockPrice per event
Full market board$0.006
Bet builder pre-packs$0.005
Live score & clock$0.004
Value analysis (no-vig, margin)$0.008
Market comparison$0.012
Outright / futures row$0.009
ParticipantsFree

Bet builder needs the same per-event request as the full board, so enabling it on its own also bills the board once. Outright rows are billed as Outright market instead of Event, because one of them carries a 20-to-30-way futures market rather than a single fixture.

We sit above the per-row aggregators on price and say so plainly. What the difference buys is depth on one book instead of a headline across several: the full board with props and Asian lines, bet builder prices, outrights, the live clock, and the cross-jurisdiction spread. New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 events as a preview. Upgrade your Apify plan to collect up to 1,000,000 events per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Unibet Odds Scraper.
  3. Enter leagues, sports, eventIds, or tick liveOnly, pick a market and language, add any filters, and click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to Unibet's price list through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/unibet-kambi-odds-scraper"

Then prompt it in plain language:

  • "Pull the Premier League fixtures from Unibet this weekend and rank them by bookmaker margin."
  • "Which in-play football matches on Unibet are level after 60 minutes, and what are the current odds?"
  • "Compare Serie A prices between the Swedish and Australian Unibet markets and show me the biggest spreads."

Copy this into ChatGPT, Claude, or Cursor to start:

Use the Apify Actor "parseforge/unibet-kambi-odds-scraper" to collect Unibet (Kambi) sportsbook odds. Input: { "leagues": ["<sport/country/league>"], "sports": ["<sport>"], "liveOnly": <true|false>, "market": "<GB|SE|NL|...>", "maxItems": <n> }. It returns teams, kick-off, league, state, decimal/fractional/American odds per outcome, implied probability, bookmaker margin and payout, plus optional full market board, live score, bet builder packs, no-vig value analysis and cross-jurisdiction comparison. Call it with the ApifyClient and my APIFY_TOKEN.

Troubleshooting

Why am I getting no results?

The league path is probably wrong. It is a Kambi term path, not a display name: football/england/premier_league, not English Premier League. Pasting the Unibet URL of the competition works too. A path with no fixtures inside the book's listing window returns nothing.

Why fewer events than I asked for?

A league listing holds only what the book currently displays - around 20 fixtures for the Premier League, not the whole season - and your filters remove more. Add more leagues, point at the whole sport, or loosen the price and margin filters.

Why is liveData empty?

Only events currently in play carry it. On a pre-match fixture the field is null, and nothing is billed for it.

Why is allMarkets empty on an in-play event?

Once a fixture goes live, Kambi moves its board onto a push channel and the REST endpoint this Actor reads returns nothing for some of them. Measured on three in-play football matches: one returned 74 markets, two returned none. Nothing is billed when the board comes back empty. Use the full board on pre-match fixtures, and the in-play feed for the live score and the main live prices.

What exactly does liveOnly return?

The book's live feed also lists fixtures it has merely opened for in-play betting but that have not kicked off - four out of 91 at the time of writing. liveOnly keeps the ones actually in play. Set eventStates explicitly if you want the whole feed. Sports without a running clock, such as tennis and table tennis, report set scores instead of a minute.

Why do prices differ between two runs of the same fixture?

Because the book moved, or because you changed market. Kambi prices each licensed jurisdiction separately; changedAt on each outcome tells you when that price was last set.

Why is the run slow?

The full market board is one request per event and the biggest fixtures return hundreds of markets. Lower maxItems, set maxMarketsPerEvent, or narrow with marketCriteria. Measured: 200 events with their full boards took about 70 seconds.

A field stopped filling.

Kambi changed its public response shape. Email us with your run ID so we can update the parser.

FAQ

QuestionAnswer
Do I need a Unibet account or an API key?No. It reads Kambi's public offering endpoint, so there is no login, token or affiliate key to manage.
Does it need a proxy?No. The feed answers plain anonymous requests, which is why the run cost is so low.
Which brands does it cover?The Kambi offering that prices Unibet. Kambi's other brand offerings are IP-restricted at the CDN and are not reachable from Apify.
How many markets does an event have?As many as the book prices. A Premier League fixture returned 433, a lower-league table tennis match returned one. marketCount tells you before you buy the board.
Can I get player props?Yes, in the full market board, on pre-match fixtures. Football fixtures carry a couple of hundred player occurrence lines - goalscorer, assists, shots, cards.
Does the full board work on live events?Not reliably. Kambi serves the in-play board over a push channel the REST feed does not mirror. You are not billed when it comes back empty.
What are the no-vig fair odds?The market's implied probabilities normalised back to 100%, then inverted. It is the standard vig-free benchmark, computed from the prices on the row, not an official Unibet number.
Does the arbitrage flag mean free money?No. It only says that the best prices across the Kambi jurisdictions you compared imply a book under 100%. Those markets are separate licensed products and are usually not accessible to one account.
Can I scrape outrights and futures?Yes, tick Include outright markets. Those rows are billed as Outright market.
How many events per run?Free plan: 10. Paid: up to 1,000,000, bounded by what the book's listings and your filters return.
Is this an official Unibet or Kambi product?No. It is unofficial and reads only publicly available data.

Browse the full ParseForge collection for more scrapers.

🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Kambi Group plc, Unibet, or Kindred Group. It collects only publicly available odds data. You are responsible for using the data in compliance with the site's terms and applicable laws. Gambling data carries legal restrictions that vary by jurisdiction - check yours before you use it, and do not use this Actor where sports betting data collection is restricted. 18+. If gambling stops being fun, visit BeGambleAware.