TheLines Scraper - NFL & NBA Odds, Player Props avatar

TheLines Scraper - NFL & NBA Odds, Player Props

Pricing

Pay per event

Go to Apify Store
TheLines Scraper - NFL & NBA Odds, Player Props

TheLines Scraper - NFL & NBA Odds, Player Props

Scrape TheLines.com for NFL and NBA odds, NBA player props with the best sportsbook and price, Super Bowl and MVP futures boards, sportsbook promo codes and betting news. No proxy or login needed.

Pricing

Pay per event

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

Share

ParseForge

TheLines Scraper - NFL & NBA Odds, Player Props

Scrape NFL odds, NBA odds and NBA player props from TheLines.com — no login, no API key, no proxy. Every matchup preview comes back as one row with the moneyline, spread and total plus the sportsbook quoting each number, and optional blocks for player usage, rest and travel, form, season profile, injuries, quarter splits and head-to-head history. Player-prop pages return every priced over and under for tonight's slate with its line, its best book and its price. Super Bowl, NBA MVP, division and award futures come from 334 odds boards. Export to CSV, JSON, Excel, or XML.

TheLines publishes something most odds sites keep behind a widget: static, server-rendered pages with the numbers already in the HTML. This reads them directly. Measured live, an NBA prop page carries 152 priced props on average across six markets from up to ten sportsbooks, and 50 matchup pages fetch and parse in 3.4 seconds over plain HTTP.

Who uses itWhat they scrape TheLines for
Bettors and handicappersProp lines with the best book already named, and TheLines' own highlighted picks
Odds-comparison sitesFutures boards across 334 pages — Super Bowl, NBA MVP, divisions, majors, World Cup
Quants and modellersUsage%, pace, ratings, rest, travel miles and ATS records as model inputs
Affiliate and media teamsSportsbook promo codes, welcome offers, wagering terms and eligible states
Content and SEO teams3,000+ betting articles with author, publish date, categories and full text

What it does

This Actor reads six different parts of TheLines and returns each page as a structured row.

  • 🏀 Matchup previews (NBA + NFL). Teams, tip-off time, broadcaster, and the moneyline, spread and total with the book quoting each side. Every price is restated as American odds, decimal odds, implied probability and profit per $100, and each row carries a computed hold, no-vig probability and favourite.
  • 🎯 Player props (NBA). Every over and under on the page with its line, the best book, the price, and whether TheLines highlighted it as its own pick. Six markets: points, rebounds, assists, 3-pointers made, points + assists, and points + rebounds + assists.
  • 🏆 Futures and award boards. 334 pages — Super Bowl odds, NBA MVP odds, division winners, Cy Young, the golf majors, March Madness, the World Cup, horse racing and elections — read table by table, with the price as printed kept alongside the parsed number.
  • 💸 Sportsbook reviews. Bonus code, welcome offer, offer type, wagering requirement, eligible states, minimum deposit and last-verified date, plus the comparison card of rival offers.
  • 📰 Articles. 5,005 betting posts. Headline, author, publish and update dates, word count, categories, breadcrumbs and optionally the full body as Markdown.
  • 🗂️ Category archives. Which posts a section currently lists, with titles and URLs.

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

What is actually on the site

Scraping is only worth what the source publishes, so here is the measured inventory rather than a promise:

DatasetPages availableWhat each row carries
Matchup previews192 NBA + 7 NFLGame lines, records, and up to 7 optional stat blocks
Player props165 NBA + 7 NFL152 priced props per game on average (NBA)
Futures and award boards334 pages under /odds/Futures, award races and historical results
Sportsbook reviews544 pagesBonus terms where the page publishes a facts box
Articles5,005 postsFull metadata, optional full text
Category archives116 sectionsThe posts each section lists

Two limits worth knowing before you run it:

  • NFL player-prop pages carry no priced props. All seven publish injury reports, quarterback and backfield stat comparisons and the game's moneyline, but no prop board. Priced props are NBA-only. The Actor returns the NFL pages' stat and injury content rather than pretending otherwise.
  • Matchup pages do not all carry every block. Across 30 live pages, trends appeared on 28, usage leaders on 21, head-to-head on 21, injuries on 19, season profile on 17, rest and travel on 15 and quarter splits on 14. Optional blocks are billed only on rows that actually carry them, so turning one on costs nothing when a page does not publish it.

What you can do with it

🎯 Shop prop lines with the book already named.

Every prop row names the sportsbook offering that price. Filter by bookmakers to see only the books you hold an account with, or sort by impliedProbability to find the shortest prices on the slate.

⭐ Follow the site's own picks.

TheLines highlights rows on its prop tables where it likes the number — about 23 per game page. Set onlyHighlightedPicks to return only those.

🧮 Measure the vig on a game.

Each matchup row carries bettingLines.analytics with the moneyline hold, both sides' no-vig probability and which side is favoured, computed from the two prices on the page.

📐 Feed a model.

Turn on the stat blocks and each matchup row carries pace, offensive and defensive rating, net rating, turnovers, rebounding rates, travel miles since the last game, days of rest, schedule strength and last-5 ATS and over/under records.

💸 Track sportsbook offers.

The reviews dataset returns bonus codes, welcome offers, wagering requirements and the state list for each brand, with a lastVerified stamp, across sportsbooks, casinos, sweepstakes and prediction markets.

Why choose this scraper

  • No proxy, no browser, no login. TheLines serves every page anonymously over plain HTTP. Measured at 50 pages across 12 sockets with no challenge, no rate limit and no blocking. That keeps runs fast and cheap, and it is why the price below is what it is.
  • Nothing is thrown away. Turn on includeRawTables and every table on the page comes back with its headers, rows and section heading, so a block the typed fields do not cover is still in your dataset.
  • Prices restated four ways. American, decimal, implied probability and profit per $100 on every quote, so you never convert by hand.
  • Honest about gaps. Where a page prices only one side of a market, the row shows that side and leaves the other null with the book still named — rather than dropping the market.
  • The item cap is exact. Ask for 37 rows and you get 37, even with 16 pages parsing in parallel and 154 props on each.

How it compares

This ActorWidget-based odds scrapersManual copy-paste
Proxy neededNoUsually yes
Browser neededNoUsually yes
Props per gameUp to 214VariesA few
Book named per priceYesSometimesYes
Team stat blocks7 optionalNoNo
Futures and award boards334 pagesNoNo
Bonus/promo dataYesNoYes

What a matchup row looks like

{
"dataset": "matchup",
"url": "https://www.thelines.com/nba/match-ups/04-01-2026-phi-at-was/",
"sport": "nba",
"gameDate": "2026-04-01",
"gameSlug": "04-01-2026-phi-at-was",
"headline": "Philadelphia 76ers @ Washington Wizards Picks and Predictions - April 1st 2026",
"away": { "abbr": "PHI", "name": "76ers" },
"home": { "abbr": "WAS", "name": "Wizards" },
"gameDateText": "Wednesday, April 1, 2026",
"startTimeText": "7:00 PM ET",
"broadcast": "NBCS",
"bettingLines": {
"moneyline": {
"away": { "american": null, "decimal": null, "impliedProbability": null, "payoutPer100": null, "bookmaker": "Sportzino" },
"home": { "american": 690, "decimal": 7.9, "impliedProbability": 12.658, "payoutPer100": 690, "bookmaker": "Sportzino" }
},
"spread": {
"away": { "american": -111, "decimal": 1.9009, "impliedProbability": 52.607, "payoutPer100": 90.09, "bookmaker": "Sportzino", "points": 14 },
"home": { "american": -110, "decimal": 1.9091, "impliedProbability": 52.381, "payoutPer100": 90.91, "bookmaker": "Betr", "points": -14 }
},
"total": {
"points": 238.5,
"over": { "american": -110, "decimal": 1.9091, "impliedProbability": 52.381, "payoutPer100": 90.91, "bookmaker": "Sportzino" },
"under": { "american": null, "decimal": null, "impliedProbability": null, "payoutPer100": null, "bookmaker": "Onyx Odds" }
},
"analytics": {
"moneylineHoldPct": null,
"fairProbabilityAway": null,
"fairProbabilityHome": null,
"spreadHoldPct": 4.988,
"totalHoldPct": null,
"favorite": "home"
}
},
"author": "Nick Crain",
"datePublished": "2026-04-01T11:57:52.000Z",
"scrapedAt": "2026-08-25T20:15:09.143Z"
}

With the optional blocks on, the same row also carries:

{
"playerStats": [
{ "Team": "Philadelphia 76ers", "Player": "Joel Embiid", "Min": "32", "Usage%": "33.7", "PPG": "26.9", "RPG": "7.7", "APG": "3.9", "TS%": "60.5", "eFG%": "52.7", "+/-": "4.1", "TO/G": "2.9" }
],
"restAndTravel": {
"Days since last game": { "away": "2", "home": "2" },
"Travel miles since last game": { "away": "924.8", "home": "2296.5" },
"Schedule strength": { "away": "52.2", "home": "36.5" }
},
"seasonProfile": {
"Tempo, Ratings & Turnovers": {
"Pace": { "away": "102.3", "home": "104" },
"Net Rating": { "away": "0.5", "home": "-11.4" },
"Offensive Rating": { "away": "112.5", "home": "108.2" },
"Defensive Rating": { "away": "112", "home": "119.6" }
}
},
"trends": [ { "section": "Quick Trends", "headers": ["Metric", "76ers", "Wizards"], "rows": [ { "Metric": "ATS record", "76ers": "3-2-0", "Wizards": "2-3-0" } ] } ],
"headToHead": [ { "headers": ["Item", "Value"], "rows": [ { "Item": "Last meeting score", "Value": "122-103" } ] } ]
}

What a player-prop row looks like

With flattenPlayerProps on, each over and under is its own row:

{
"dataset": "playerProp",
"url": "https://www.thelines.com/nba/player-props/04-01-2026-phi-at-was/",
"sport": "nba",
"gameDate": "2026-04-01",
"away": { "abbr": "PHI", "name": "Philadelphia 76ers" },
"home": { "abbr": "WAS", "name": "Washington Wizards" },
"player": "Tyrese Maxey",
"teamAbbr": "PHI",
"market": "assists",
"marketSection": "76ers at Wizards Player Assists Props Picks",
"line": 6.5,
"side": "over",
"bookmaker": "Caesars",
"american": 128,
"decimal": 2.28,
"impliedProbability": 43.86,
"payoutPer100": 128,
"isHighlightedPick": false,
"scrapedAt": "2026-08-25T20:22:41.008Z"
}

Leave flattenPlayerProps off and you get one row per game with every prop nested under it — far cheaper when you want the whole slate.

Configure the run

InputWhat it does
datasetsWhich parts of the site to collect: matchups, playerProps, oddsPages, articles, reviews, categories. Selecting several interleaves them so each is represented.
startUrlsScrape exact URLs instead of discovering from the sitemaps. The page type is detected from the URL.
maxItemsHard cap on rows. Exact, even under concurrency.
sportsnba, nfl, or both.
dateFrom / dateToFilter games by date, read from the URL so no page is fetched to check it.
teamsTeam abbreviations as they appear in the URL — PHI, WAS, SEA, NE.
propMarketsThe six markets TheLines publishes: points, rebounds, assists, 3PM, points + assists, and points + rebounds + assists.
bookmakersKeep only props whose best price comes from these books.
minOdds / maxOddsFilter props by American price.
minPropLine / maxPropLineFilter props by line.
onlyHighlightedPicksKeep only the rows TheLines highlights as its own pick.
flattenPlayerPropsOne row per prop instead of one row per game.
oddsSectionsLimit odds boards by URL section: nfl, nba, mlb, golf, world-cup, march-madness, horse-racing, election.
flattenOddsTablesOne row per selection on an odds board.
reviewSectionsbetting, casino, prediction-markets, sportsbooks.
publishedAfter / publishedBefore / authors / titleContainsArticle filters.
localesUS, UK or Canadian edition. Matchup and prop pages exist only on the US edition.
include*The optional blocks, each billed only on rows that carry it.
sortByOrder rows before writing. Buffers the result set, so it is slower than the default stream.
maxConcurrencyPages in flight. TheLines serves 12 without throttling.

Pricing

Pay per event. You are charged for the rows you receive, plus any optional block a row actually carries.

EventPriceWhat it is
Actor start$0.03Once per run, and it covers finding the pages the run needs
Matchup preview$0.007One game with its lines and records
Player props, one row per game$0.02Every prop on the page nested in one row
Player prop line$0.002One over or under, when flattened
Odds board$0.01One futures page with its selections nested
Odds board selection$0.003One team, player or entrant, when flattened
Sportsbook review$0.006One review with its bonus terms
Article$0.004One post with its metadata
Category archive$0.004One section listing
Player stats block$0.003Optional
Season profile block$0.003Optional
Trends block$0.003Optional
Rest and travel block$0.003Optional
Head-to-head block$0.003Optional
Injury block$0.003Optional
Quarter splits block$0.003Optional
Written analysis block$0.003Optional
Competing promo offers$0.002Optional
Full article text$0.002Optional
Raw tables$0.002Optional

A 100-game matchup run with no extras costs $0.73. The same run with every optional block turned on costs $2.38 — pages carry 4.5 blocks each on average, so you are not billed for seven.

The whole NBA prop slate — 165 game pages holding roughly 25,000 individual prop lines — costs $3.33 nested one row per game, or $50.19 flattened to one row per line. Nested is the cheap way to take the slate; flatten when you want each line as its own record.

Free users

Free Apify accounts cannot be charged, so a free run returns a 10-row preview. Everything else is identical. Upgrade to lift the cap.

Run it

  1. Pick your datasets — start with Matchup previews.
  2. Set maxItems.
  3. Turn on the optional blocks you want.
  4. Run, then export from the Dataset tab or pull from the API.

The default input is a live health check: it returns 50 NBA matchup rows in about 35 seconds on the platform.

Use with AI agents (MCP)

The Actor is callable over Apify's MCP server, so an agent can request odds directly:

https://mcp.apify.com/?actors=parseforge/thelines-scraper

Ask it for "NBA player props today where FanDuel has the best price over +150" and it will map that onto datasets, flattenPlayerProps, bookmakers and minOdds.

Troubleshooting

No rows came back. Check the dataset selection. Matchup and prop pages exist for NBA and NFL only, and only on the US edition — a run filtered to locales: ["uk"] with datasets: ["matchups"] has nothing to find.

A prop market is missing. TheLines publishes six prop markets for NBA and none for NFL. If marketsFound is empty on an NFL prop page, that is the page, not the scraper — those pages carry injuries and stat comparisons instead.

Moneyline is null on one side. The page priced only one side. The row keeps the side that exists and names the book on the empty side, rather than dropping the market.

A review has no bonus code. Most review pages are prose with no facts box. headline, author, brandSlug, vertical and the page content fill on every review; the bonus fields fill where the page publishes them.

The run stopped early. The Actor stops before the run timeout so the dataset is written cleanly. Raise the timeout or lower maxItems.

FAQ

Do I need a proxy? No. TheLines serves everything anonymously.

Is it blocked? No challenge or rate limit was observed at 12 concurrent requests.

How fresh is the data? Each row carries scrapedAt, and matchup and article rows carry the page's own datePublished and dateModified.

Can I scrape one game? Yes — put its URL in startUrls.

What about the UK and Canadian sites? Set locales. Those editions carry articles, reviews and category pages; matchups and props are US-only.