TheLines Scraper - NFL & NBA Odds, Player Props
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
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 it | What they scrape TheLines for |
|---|---|
| Bettors and handicappers | Prop lines with the best book already named, and TheLines' own highlighted picks |
| Odds-comparison sites | Futures boards across 334 pages — Super Bowl, NBA MVP, divisions, majors, World Cup |
| Quants and modellers | Usage%, pace, ratings, rest, travel miles and ATS records as model inputs |
| Affiliate and media teams | Sportsbook promo codes, welcome offers, wagering terms and eligible states |
| Content and SEO teams | 3,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:
| Dataset | Pages available | What each row carries |
|---|---|---|
| Matchup previews | 192 NBA + 7 NFL | Game lines, records, and up to 7 optional stat blocks |
| Player props | 165 NBA + 7 NFL | 152 priced props per game on average (NBA) |
| Futures and award boards | 334 pages under /odds/ | Futures, award races and historical results |
| Sportsbook reviews | 544 pages | Bonus terms where the page publishes a facts box |
| Articles | 5,005 posts | Full metadata, optional full text |
| Category archives | 116 sections | The 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
includeRawTablesand 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 Actor | Widget-based odds scrapers | Manual copy-paste | |
|---|---|---|---|
| Proxy needed | No | Usually yes | — |
| Browser needed | No | Usually yes | — |
| Props per game | Up to 214 | Varies | A few |
| Book named per price | Yes | Sometimes | Yes |
| Team stat blocks | 7 optional | No | No |
| Futures and award boards | 334 pages | No | No |
| Bonus/promo data | Yes | No | Yes |
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
| Input | What it does |
|---|---|
datasets | Which parts of the site to collect: matchups, playerProps, oddsPages, articles, reviews, categories. Selecting several interleaves them so each is represented. |
startUrls | Scrape exact URLs instead of discovering from the sitemaps. The page type is detected from the URL. |
maxItems | Hard cap on rows. Exact, even under concurrency. |
sports | nba, nfl, or both. |
dateFrom / dateTo | Filter games by date, read from the URL so no page is fetched to check it. |
teams | Team abbreviations as they appear in the URL — PHI, WAS, SEA, NE. |
propMarkets | The six markets TheLines publishes: points, rebounds, assists, 3PM, points + assists, and points + rebounds + assists. |
bookmakers | Keep only props whose best price comes from these books. |
minOdds / maxOdds | Filter props by American price. |
minPropLine / maxPropLine | Filter props by line. |
onlyHighlightedPicks | Keep only the rows TheLines highlights as its own pick. |
flattenPlayerProps | One row per prop instead of one row per game. |
oddsSections | Limit odds boards by URL section: nfl, nba, mlb, golf, world-cup, march-madness, horse-racing, election. |
flattenOddsTables | One row per selection on an odds board. |
reviewSections | betting, casino, prediction-markets, sportsbooks. |
publishedAfter / publishedBefore / authors / titleContains | Article filters. |
locales | US, 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. |
sortBy | Order rows before writing. Buffers the result set, so it is slower than the default stream. |
maxConcurrency | Pages 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.
| Event | Price | What it is |
|---|---|---|
| Actor start | $0.03 | Once per run, and it covers finding the pages the run needs |
| Matchup preview | $0.007 | One game with its lines and records |
| Player props, one row per game | $0.02 | Every prop on the page nested in one row |
| Player prop line | $0.002 | One over or under, when flattened |
| Odds board | $0.01 | One futures page with its selections nested |
| Odds board selection | $0.003 | One team, player or entrant, when flattened |
| Sportsbook review | $0.006 | One review with its bonus terms |
| Article | $0.004 | One post with its metadata |
| Category archive | $0.004 | One section listing |
| Player stats block | $0.003 | Optional |
| Season profile block | $0.003 | Optional |
| Trends block | $0.003 | Optional |
| Rest and travel block | $0.003 | Optional |
| Head-to-head block | $0.003 | Optional |
| Injury block | $0.003 | Optional |
| Quarter splits block | $0.003 | Optional |
| Written analysis block | $0.003 | Optional |
| Competing promo offers | $0.002 | Optional |
| Full article text | $0.002 | Optional |
| Raw tables | $0.002 | Optional |
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
- Pick your datasets — start with Matchup previews.
- Set
maxItems. - Turn on the optional blocks you want.
- 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.
