MIGRATION GUIDE
Move from a DraftKings scraper to an API
A migration path from your own DraftKings scraper to this API: map fields, run both side by side, cut over with an adapter, and keep what the API does not replace.
Editorial review: · Not a live coverage report
Decide whether to migrate
Moving makes sense if your scraper costs more to keep alive than the data is worth, and if this API's scope covers your fields. Stay on your scraper, or look at other providers, if you need something this service does not supply.
| You need | This API | Decision |
|---|---|---|
| Selected Pick6 categories with multipliers | Yes, with measured coverage on /status | Migrate |
| DFS salaries for selected slates | Yes, with roster-slot detail | Migrate |
| DraftKings mainlines | As of 2026-11-03: native New York NFL, NHL, college basketball and college football game lines, native New York NHL Shots on Goal, points, assists, saves, goalscorers, power-play points and first-period shots, and ESPN-attributed moneyline, spread and total observations. | Migrate if mainlines are enough |
| Sportsbook props, alternates or futures beyond the listed native scopes | Not supplied | Do not migrate this part |
| Every Pick6 category on every run | No. Rotation is bounded | Check first |
| Seconds-level freshness | No. Worker targets are five to fifteen minutes | Do not migrate this part |
| Years of history | No. Recording began around 2026-11-03. Retained history is short, and it is not a complete opening-to-close archive. It does not contain seasons of past lines, and there is no public graded-results endpoint. | Keep your own archive |
Map your fields
List what your scraper stores today, and map each field before you write any code. Most rows have a direct counterpart in the API.
| In your scraper | Pick6 API field | Note |
|---|---|---|
| Player name | entities[].full_name, entities[].entity_id | Join on the id, not the name |
| Stat label | stat, stat_abbreviation | Filter on the exact stat text |
| Line | target_value | One athlete can have several targets |
| Over and under | selections[].side | More, Less or Yes. Can be one-sided |
| Multiplier | selections[].standings_multiplier | Not odds. Do not convert it |
| Game | entities[].events[] | DraftKings event ids, not ESPN ids |
| Your scrape time | observed_at | Our capture clock. Your own arrival time is separate |
| Source change time | source_updated_at | Null when unknown. Do not fill it in |
For DFS, the source record sits under data: draftableId, salary, playerDkId, rosterSlotId. See the response schema.
Write a small adapter
Keep your application's internal shape, and translate at the edge. This keeps your model and UI unchanged and makes cutover reversible.
def from_api(row):
"""Map one Pick6 API row to your existing record shape."""
entity = (row.get("entities") or [{}])[0]
return {
"player_id": entity.get("entity_id"),
"player_name": entity.get("full_name"),
"stat": row.get("stat"),
"line": row.get("target_value"),
"sides": {s["side"]: s.get("standings_multiplier") for s in row.get("selections", [])},
"paused": row.get("is_paused"),
"captured_at": row.get("observed_at"),
"stale": row.get("stale"),
"source_key": (row.get("pick_group_id"), row.get("pickable_id"), row.get("pickable_market_id")),
}Run both side by side
Run your scraper and the adapter together for several days, including one busy game window. Compare by source identity, and record any difference rather than assuming which side is right.
- Rows you have that the API lacks, and rows the API has that you lack. Partial category capture will produce both.
- Target and multiplier differences on the same market, with both capture times.
- How long each source takes to show a change you watched happen.
Use line-movement.py to read changes and daily-archive.py to keep the API side.
Size the budget
Replace your scrape loop with a poll that matches the collection target, not your old interval. Polling faster than the five-minute target spends quota without newer data. Free includes 500 requests/month at 20/minute; Developer is $49/month with 10,000 requests/month at 60/minute; Production is $149/month with 50,000 requests/month at 120/minute. Count pages, not rows: a call returns at most 100 rows. On Developer and Production, the stream replaces most polling for Pick6 changes.
Cut over, and keep what still matters
Switch reads to the adapter behind a flag, watch for a week, then stop the scraper. Keep your old archive, because the API cannot replace it: history here began around 2026-11-03. Keep the parts this API does not replace, and record which ones they are.
What migration does not settle
Using this API does not by itself make your use of the data licensed. Technical access is not a redistribution license. Stopping a scraper does not change obligations you already had under a site's terms. Take your own legal advice for a public product.
Try it
Endpoint docs
Check the recorded data
Questions
Will this API return everything my scraper sees?
Possibly not. Pick6 collection is bounded rotation over selected categories, and DFS covers selected slates. Run both side by side and measure the difference for your sports.
Is using this API cleared under DraftKings' terms?
This is an independent service, not affiliated with or endorsed by DraftKings. Technical access is not a redistribution license, so get your own advice for a public product.
How often should I poll after migrating?
No faster than the five-minute collection target for Pick6 and sportsbook, and fifteen minutes for DFS. Faster polling spends requests without newer data. Check observed_at to see what actually changed.
Related resources
What running your own DraftKings scraper costs, what a stored API replaces and what it does not, and an adapter pattern for moving without a rewrite.
DraftKings API response schema, field by fieldEvery response field for sportsbook, Pick6, DFS, statistics and context rows, with types, null behavior and how to read each one.
DraftKings API pagination: offset, after and cursorsThree pagination styles with working loops: offset lists, the Pick6 next_after sequence and statistics cursors, plus their limits.
DraftKings API freshness: clocks and stale rowsHow to read observed_at, source_updated_at, age_seconds and stale, what worker targets mean, and how to label data honestly.
Compare DraftKings data providersSourced, dated comparisons of OpticOdds, ParlayAPI and DFS pick'em providers, plus a scraper migration path.
Independent service operated by DD Inc., not affiliated with or endorsed by DraftKings. Technical access is not a redistribution license. No wagering: this service does not place, recommend or settle entries or bets. Check sources and status for actual capture context.