BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves
Pricing
from $6.60 / 1,000 fight returneds
BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves
MMA and UFC odds plus boxing odds from BestFightOdds: one row per fight with every sportsbook's moneyline side by side, the best price and which book has it, implied probability, the opening line, the line range and the movement chart. Optional prop bets (rounds, method).
Pricing
from $6.60 / 1,000 fight returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
14 days ago
Last modified
Categories
Features
Share
MMA and UFC odds, plus boxing odds, from BestFightOdds - one row per fight with every sportsbook's moneyline side by side, the best price and which book has it, implied probability, the opening line, the line range and the odds-movement chart.
Built for line shoppers, betting-model builders, fight-preview writers and anyone tracking how the market moves before fight night. Pick UFC, PFL, ONE or any other promotion by name, or paste the event pages you want. Prop bets (over/under rounds, method of victory, goes the distance) are one switch away.
No login, no API key. Export as JSON, CSV or Excel, or pull the rows into a spreadsheet on a schedule.
What you get
One row per fight, with:
- The card: event name, the event date with its year, the fight time (boxing), the event page address
- Both fighters: name, id and their BestFightOdds page
- Every book's line for each side:
{"Caesars": -110, "FanDuel": -113, "Polymarket": 108, ...}in American odds, exactly as the site shows them - The best price for each side: the American odds, decimal odds, implied probability and every book offering that price
bestLinesImpliedTotal: the two best prices' implied probabilities added up - below 1 means the best lines across books leave no margin- The opening line for each fighter, the range (worst and best line seen) and the movement % from the open to now
- The movement chart as a list of decimal odds, oldest first, ready to plot
- Prop bets when you turn them on: each prop with every book's price
- When the odds last changed on the site, in UTC
Example output (one fight, shortened)
{"sport": "mma","eventName": "UFC 333","eventDate": "2026-10-24","eventDateText": "October 24th","eventUrl": "https://www.bestfightodds.com/events/ufc-333-4321","matchupId": "44524","fighter1Name": "Alexander Volkanovski","fighter2Name": "Movsar Evloev","bookCount": 7,"fighter1Odds": { "Polymarket": -113, "Kalshi": -112, "FanDuel": -113, "Caesars": -110, "BetRivers": -112, "BetWay": -110, "Unibet": -112 },"fighter2Odds": { "Polymarket": 108, "Kalshi": -112, "FanDuel": -113, "Caesars": -110, "BetRivers": -112, "BetWay": -110, "Unibet": -112 },"fighter1BestOdds": -110,"fighter1BestOddsDecimal": 1.9091,"fighter1BestImpliedProbability": 0.5238,"fighter1BestBooks": ["Caesars", "BetWay"],"fighter2BestOdds": 108,"fighter2BestOddsDecimal": 2.08,"fighter2BestImpliedProbability": 0.4808,"fighter2BestBooks": ["Polymarket"],"bestLinesImpliedTotal": 1.0046,"fighter1OpeningOdds": -120,"fighter2OpeningOdds": -110,"fighter1RangeWorstOdds": -113,"fighter1RangeBestOdds": -110,"fighter1MovementPct": 3.6,"fighter1TrendDecimal": [1.8333, 1.868, 1.8677, 1.8832, 1.9005, 1.9395, 1.8997],"lineHistoryStatus": "ok","props": [{ "label": "Over 1½ rounds", "odds": { "BetRivers": -2000, "BetWay": -1205, "Unibet": -2000 } }],"oddsLastChangedUtc": "2026-10-21T09:14:00Z","source": "bestfightodds.com"}
Input
| Field | What it does |
|---|---|
Sport (sport) | mma (UFC, PFL, ONE and more - the default), boxing, or both |
Only events whose name contains (eventKeywords) | For example UFC, PFL, ONE. Leave empty for every upcoming event |
How many events to read (maxEvents) | The nearest upcoming events with lines first, after the name filter (per site when Sport is both) |
Event URLs (eventUrls) | Paste event pages - upcoming or past - to read exactly those events |
Only fights with these fighters (fighterNames) | Part of a name, for example Volkanovski |
Include opening line and line movement (includeLineMovement) | On by default. Turn off for the fastest run with the current lines only |
Include prop bets (includeProps) | Off by default |
Include fights without odds (includeFightsWithoutOdds) | Fights announced before any book has a line are left out unless you turn this on |
Maximum fights (maxRecords) | The most fight rows this run returns and charges for |
Maximum page requests (maxRequests) | A safety limit on pages opened per run |
The quickest start: Sport mma, Only events whose name contains UFC, How many events to read 1. That returns the next UFC card with every book's line and the movement since the open.
How to use it
- Line shopping: sort by
fighter1BestOdds/fighter2BestOddsand readfighter1BestBooksto see where to place the bet. - Spotting value:
bestLinesImpliedTotalbelow 1.0 means the best lines on the two sides, at different books, add up to less than 100%. - Tracking the market: schedule the run every few hours and compare
fighter1Oddsbetween runs, or plotfighter1TrendDecimal. - Fight previews: the opening line and movement % tell the story of who the money has moved toward.
Good to know
- Every row is checked against the event you asked for. If an event address does not exist, the site sends the request to its home page; you get a free row saying the event was not found - never the home page's fights sold as that event.
- Nothing is guessed. A line the site shows as unavailable comes back missing for that book, not as 0. The event date carries a year only when the site shows one that matches the date on the page; otherwise
eventDateisnullandeventDateTextkeeps what the site wrote. - Line movement comes from each fighter's own page.
lineHistoryStatussays whether both pages were read (ok), only one (partial- the opening line and range for the other side still come through), or why not. The chart is the site's own movement chart for that fighter. - Boxing events are named by date on the site (for example "October 24th Boxing"), so leave the event-name filter empty for boxing.
- Rows that explain a problem are free: pages that could not be read, events the site does not have, filters that matched nothing, and fights left out by your maximum each come back as their own row with a
statusand anote, and are not charged. - The site's robots.txt is read at the start of every run and respected.
Frequently asked
How do I get UFC odds from every sportsbook in one table?
Run it with Sport mma and the event-name filter UFC. Each fight comes back with every book's moneyline for both fighters, the best price and the book that has it.
Can I see the opening line and how the odds moved?
Yes - fighter1OpeningOdds, fighter1MovementPct and fighter1TrendDecimal (and the same for fighter 2) are on every row by default.
Does it cover boxing?
Yes. Choose boxing, or both for MMA and boxing in one run.
Can I get odds for a past event? Paste the event page under Event URLs. Past events keep their final lines on the site.
Can I get prop bets like over/under rounds or method of victory?
Turn on "Include prop bets". Each fight row then carries a props list with every book's price for each prop.
How do I track odds changes over time? Schedule the Actor (for example every 3 hours) with the same input and compare the rows between runs, or use the movement chart on each row.
Pricing
You pay per fight row returned. Rows that only explain a problem (status and note) are never charged. Set Maximum fights to control the cost of a run.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.