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.
- Total runs
- 47
- Bookmarked
- 0
- Last modified
- 2 days ago
This scraper was last updated on .
What does the TheLines Scraper - NFL & NBA Odds, Player Props return?
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. |
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.
What input does the TheLines Scraper - NFL & NBA Odds, Player Props accept?
| Field | Type | What it does | Default |
|---|---|---|---|
| datasets | array | Which parts of TheLines to collect. Matchups and player props carry the odds; odds boards carry futures; reviews carry sportsbook bonuses. | ["matchups"] |
| startUrls | array | Scrape these exact TheLines URLs instead of discovering pages from the sitemaps. The page type is detected from the URL. | not set |
| maxItems | integer | Stop after this many dataset rows. Free Apify accounts are capped at 10 rows. | 50 |
| sports | array | Limit matchups and player props to these leagues. TheLines only publishes structured matchup pages for NBA and NFL. | not set |
| dateFrom | string | Keep only games played on or after this date (YYYY-MM-DD). Read from the game URL, so no page is fetched to check it. | not set |
| dateTo | string | Keep only games played on or before this date (YYYY-MM-DD). | not set |
| teams | array | Keep only games involving these teams, by the abbreviation in the URL: for example PHI, WAS, SEA, NE. | not set |
| propMarkets | array | Keep only these player-prop markets. These six are the markets TheLines publishes on NBA prop pages; leave empty for all of them. | not set |
| bookmakers | array | Keep only props whose best price comes from these books: FanDuel, DraftKings, BetMGM, Caesars, BetRivers, Fanatics, SugarHouse and others. | not set |
| minOdds | integer | Drop props priced below this. Use -150 to exclude heavy favourites. | not set |
| maxOdds | integer | Drop props priced above this. Use 200 to exclude long shots. | not set |
| minPropLine | number | Drop props whose line is below this number. | not set |
| maxPropLine | number | Drop props whose line is above this number. | not set |
| onlyHighlightedPicks | boolean | Keep only the prop rows TheLines highlights on the page as its own pick. | false |
| flattenPlayerProps | boolean | Write each over and under as its own row instead of nesting every prop inside one row per game. Charged per prop row. | false |
| oddsSections | array | Limit odds boards to these URL sections: nfl, nba, mlb, nhl, golf, world-cup, march-madness, horse-racing, election, ncaa-basketball and more. | not set |
| flattenOddsTables | boolean | Write each team, player or entrant on an odds board as its own row instead of nesting the whole board in one row. | false |
| reviewSections | array | Limit reviews to these verticals. | not set |
| categorySlugs | array | Limit category archives to URLs containing these fragments: for example nfl, college-football, states/ohio. | not set |
| publishedAfter | string | Keep only articles published on or after this date (YYYY-MM-DD). | not set |
| publishedBefore | string | Keep only articles published on or before this date (YYYY-MM-DD). | not set |
| authors | array | Keep only articles by these authors, matched exactly against the byline. | not set |
| titleContains | array | Keep only pages whose headline or category contains one of these phrases. | not set |
| locales | array | TheLines publishes a US, UK and Canadian edition. Matchup and player-prop pages exist only on the US edition. | ["us"] |
| includePlayerStats | boolean | Usage%, minutes, scoring and shooting splits for the featured players. Charged per row that carries the block. | false |
| includeTeamStats | boolean | Record, scoring, efficiency, tempo, ratings, turnovers and rebounding for both teams. | false |
| includeTrends | boolean | Last-5 and last-10 form, ATS records and over/under records. | false |
| includeRestTravel | boolean | Days since last game, back-to-backs, travel miles, time-zone changes and schedule strength. | false |
| includeHeadToHead | boolean | Previous meetings, last result, average margin and the series ATS record. | false |
| includeInjuries | boolean | Ruled out, questionable, practice participation and the rotation minutes at stake. | false |
| includeQuarterSplits | boolean | Scoring by quarter and by half for both teams. | false |
| includeAnalysis | boolean | TheLines' own preview prose, picks and betting takeaways for the game. | false |
| includePromoOffers | boolean | On review pages, the comparison table of rival sportsbook bonuses. | false |
| includeArticleContent | boolean | The complete body text of articles and reviews as Markdown. | false |
| includeRawTables | boolean | Every table on the page exactly as published, with its headers, rows and section heading. Use this when a page carries something the typed fields do not cover. | false |
| sortBy | string (9 options) | Order rows before writing them. Sorting buffers the whole result set, so it is slower than the default stream. | none |
| maxConcurrency | integer | How many pages to fetch at once. TheLines serves 12 in parallel without throttling. | 10 |
| requestTimeoutSecs | integer | How long to wait for one page before retrying it. | 30 |
| maxRequestRetries | integer | How many times to retry a failed page. Retries are also bounded by the run timeout, so a slow upstream cannot consume the whole run. | 2 |
How much does the TheLines Scraper - NFL & NBA Odds, Player Props cost?
from $6.23 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.0267 to $0.03 |
| Matchup preview | One NBA or NFL game with its moneyline, spread, total, book attribution, hold and no-vig probabilities. | $0.00623 to $0.007 |
| Player props, nested per game | One game with every priced prop on the page nested inside it: around 152 props on an NBA slate. | $0.0178 to $0.02 |
| Player prop line | One over or under with its line, best bookmaker and price. Only charged when props are flattened. | $0.00178 to $0.002 |
| Odds board | One futures or award page with every selection nested inside it. | $0.0089 to $0.01 |
| Odds board selection | One team, player or entrant with its price. Only charged when odds boards are flattened. | $0.00267 to $0.003 |
| Sportsbook review | One review with its bonus code, welcome offer, wagering terms and eligible states. | $0.00534 to $0.006 |
| Article | One betting post with headline, author, dates, word count and categories. | $0.00356 to $0.004 |
| Category archive | One section listing with the posts it currently surfaces. | $0.00356 to $0.004 |
| Player stats block | Optional. Usage%, minutes, scoring and shooting splits for the featured players. Charged only on rows that carry it. | $0.00267 to $0.003 |
| Season profile block | Optional. Record, scoring, efficiency, tempo, ratings, turnovers and rebounding for both teams. | $0.00267 to $0.003 |
| Trends and form block | Optional. Last-5 and last-10 form, ATS records and over/under records. | $0.00267 to $0.003 |
| Rest and travel block | Optional. Days of rest, back-to-backs, travel miles, time-zone changes and schedule strength. | $0.00267 to $0.003 |
| Head-to-head block | Optional. Previous meetings, last result, average margin and the series ATS record. | $0.00267 to $0.003 |
| Injury report block | Optional. Ruled out, questionable, practice participation and the rotation minutes at stake. | $0.00267 to $0.003 |
| Quarter splits block | Optional. Scoring by quarter and by half for both teams. | $0.00267 to $0.003 |
| Written analysis block | Optional. TheLines' own preview prose, picks and betting takeaways. | $0.00267 to $0.003 |
| Competing promo offers | Optional. The comparison card of rival sportsbook bonuses on a review page. | $0.00178 to $0.002 |
| Full article text | Optional. The complete body of an article or review as Markdown. | $0.00178 to $0.002 |
| Raw tables | Optional. Every table on the page with its headers, rows and section heading. | $0.00178 to $0.002 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
How do I call the TheLines Scraper - NFL & NBA Odds, Player Props API?
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~thelines-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"datasets": [
"matchups"
],
"maxItems": 50,
"onlyHighlightedPicks": false,
"flattenPlayerProps": false,
"flattenOddsTables": false
}' What example inputs can I use?
Use these inputs to see how a run is configured.
{
"datasets": [
"matchups"
],
"maxItems": 50,
"onlyHighlightedPicks": false,
"flattenPlayerProps": false,
"flattenOddsTables": false
} What do users say about the TheLines Scraper - NFL & NBA Odds, Player Props?
No reviews yet. Be the first.
How do I report an issue with the TheLines Scraper - NFL & NBA Odds, Player Props?
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
What related scrapers can I use?
- Equibase Scraper - Horse Racing Entries, Results & Charts API 367 runs
- SportyTrader Scraper - Predictions, Odds & Live Scores 156 runs
- Understat xG Player Stats Scraper 152 runs
- Sporting Life Scraper - Racecards, Results & Odds API 107 runs
- TeamRankings Scraper - Ratings, Stats & Odds 85 runs
- Covers.com Scraper - NFL, NBA & MLB Odds + Consensus 65 runs
Run TheLines Scraper - NFL & NBA Odds, Player Props on Apify All scrapers
