BestFightOdds MMA Odds Scraper
Pricing
from $1.40 / 1,000 results
BestFightOdds MMA Odds Scraper
UFC and MMA betting odds from BestFightOdds: every sportsbook's moneyline and props, consensus opening and closing lines back to 2008, and full timestamped line movement.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrapes UFC and MMA betting odds from BestFightOdds: every sportsbook's moneyline and prop prices, the consensus opening and closing line for fights back to 2008, and full timestamped line movement, for the UFC, PFL, ONE, Bellator, Rizin, LFA, Cage Warriors, KSW, Oktagon, BKFC and dozens of other promotions. No login required.
Contents
🔑 Key features
- Every book side by side. FanDuel, DraftKings, BetMGM, Caesars, BetRivers, BetWay, Unibet, plus the Kalshi and Polymarket prediction markets, with the best price and the book offering it.
- Opening and closing lines. Each row carries the consensus open and close, when the line opened and last moved, its range and how many times it moved: closing-line value and steam analysis without a second source.
- Line movement, point by point.
lineHistoryreturns every recorded price change, per sportsbook and for the consensus, with a UTC timestamp. - Props. Turn on
includePropsfor method of victory, rounds over/under, goes the distance, round betting, significant strikes and more, often 50+ markets per fight. - History back to 2008. Every event since 2007 is listed. Per-book prices exist for recent years (about 2021 on); for older fights the consensus line is still there.
- Fighter odds histories.
fightersreturns each fight a fighter had odds for: opening price, closing range and movement for both sides. - Incremental runs. Schedule
oddsand get only the lines that moved since the last run. maxItemsdefaults to 50: a fast, cheap preview. Clear it (null) for everything in your selection.
📋 Output
The Output tab lists every field.
odds: one row per side of a market per fight:
{"event": "UFC 334","event_date": "2026-11-15","promotion": "ufc","matchup_id": 43676,"fighter_1": "Ciryl Gane","fighter_2": "Josh Hokit","market_type": "moneyline","market": "Moneyline","selection": "Ciryl Gane","odds": { "FanDuel": -265, "Caesars": -275, "BetRivers": -275, "BetWay": -275, "Unibet": -275 },"best_odds": -265,"best_odds_decimal": 1.3774,"best_book": "FanDuel","consensus_open": -150,"consensus_close": -271,"consensus_opened_at": "2026-06-15T13:20:03Z","consensus_last_change_at": "2026-10-22T09:29:20Z","consensus_changes": 36,"change_type": "new"}
Prop rows have market_type: "prop", the market as the site names it ("Over 2½ rounds",
"Gane wins by TKO/KO"selection for this side ("Under 2½ rounds", "Any other result").
lineHistory: one row per recorded price: event, fight, market, selection, book (a sportsbook or
Consensus), timestamp, odds (American) and odds_decimal.
fighters: one row per fighter with fights: event, date, open, close_low, close_high,
movement_pct, and the opponent's open and closing range.
🔧 Input
| Field | Type | Default | Description |
|---|---|---|---|
entityType | string | odds | odds, lineHistory or fighters. |
promotions | array | ["ufc"] | Promotions to scrape. Empty = every promotion. |
startUrls | array | — | Specific event or fighter pages. Replaces the promotion and date selection. |
dateFrom / dateTo | string | — | Only events in this window (YYYY-MM-DD). |
includeProps | boolean | false | Add every prop market next to the moneyline. |
consensus | string | moneyline | odds: add the consensus opening and closing line to moneyline rows, all rows (props too: about 1 to 2 minutes per event) or none. |
historyBooks | string | all | lineHistory: all, consensus or books. |
maxItems | integer | 50 | Stop after this many rows. null = everything selected. |
mode | string | auto | auto / full / incremental, odds only. |
concurrency | integer | 6 | Requests in flight (max 12). |
impersonate | string | chrome | Browser TLS fingerprint. Change only if requests are blocked. |
proxyConfiguration | object | no proxy | Apify Proxy settings. Not needed in testing. |
📥 Input examples
Default preview (upcoming UFC moneylines):
{}
Every UFC moneyline and prop for 2025 (moneylines with opening and closing lines):
{ "promotions": ["ufc"], "dateFrom": "2025-01-01", "dateTo": "2025-12-31", "includeProps": true, "maxItems": null }
Line movement of one card, every sportsbook:
{ "entityType": "lineHistory", "startUrls": ["https://www.bestfightodds.com/events/ufc-edmonton-4403"], "maxItems": null }
Consensus closing lines for every PFL and ONE event since 2015:
{ "promotions": ["pfl", "one"], "dateFrom": "2015-01-01", "maxItems": null }
A fighter's odds history:
{ "entityType": "fighters", "startUrls": ["https://www.bestfightodds.com/fighters/jon-jones-819"] }
🔁 Incremental mode
odds only, and only for a run with maxItems cleared (null): a capped run is a preview and always returns
rows. After the first complete run, a scheduled run returns only lines that are new or whose price moved
(change_type new or changed). Events older than 30 days are skipped in incremental runs, since their
prices no longer move. Runs with startUrls never update the stored state.
❓ FAQ
Why are some odds empty? BestFightOdds shows per-book prices only for the books it lists today. Fights
from before about 2021 keep their matchups, props and the consensus line (consensus_open, consensus_close),
which is the price history the site still has for them.
What is the consensus line? The average of the books' prices that BestFightOdds charts as its "Mean" line.
consensus_close is its latest value: the closing line once the event is over.
Why does Kalshi or Polymarket differ from the sportsbooks after an event? Prediction markets keep trading until the market settles, so their last price can move after the books have closed.
Do you have fight results? No; BestFightOdds is an odds site. For results, methods and records, use the Sherdog MMA Scraper and join on fighter names and event dates.
How do I pick a promotion that's not in the list? Leave promotions empty for every event, or paste the
event pages into startUrls.
Related sports data scrapers
- Sherdog MMA Scraper — MMA fighter profiles, full fight histories, event cards and bout results for every promotion.
- Action Network Scraper — US sportsbook odds, public betting splits, line movement, props, injuries and futures.
- Kalshi & Polymarket Scraper — prediction market odds, settled results and price history for sports, politics, economics and crypto.
- Sports Betting Odds History Scraper — opening and closing spreads, moneylines and totals for US leagues, and results against the spread.
- Smarkets Betting Exchange Scraper — betting exchange back and lay odds, matched volume, results and traded-price history.
- Flashscore Scraper — results, statistics, lineups, incidents and opening/closing odds from ~20 bookmakers for 17 sports.