BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves avatar

BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves

Pricing

from $6.60 / 1,000 fight returneds

Go to Apify Store
BestFightOdds Scraper - MMA Odds, UFC & Boxing Odds, Line Moves

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

14 days ago

Last modified

Features

Limited permissions

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

FieldWhat 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 / fighter2BestOdds and read fighter1BestBooks to see where to place the bet.
  • Spotting value: bestLinesImpliedTotal below 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 fighter1Odds between runs, or plot fighter1TrendDecimal.
  • 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 eventDate is null and eventDateText keeps what the site wrote.
  • Line movement comes from each fighter's own page. lineHistoryStatus says 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 status and a note, 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.