Product release

New: a free tier, and game-day injury changes for Pro

Quick answer: GridIron Data now has a free plan: 100 requests a day, no credit card, every endpoint but one. The one it doesn't include is new: a Pro injury changes feed, GET /injuries/changes?since=, which returns only the players whose status flipped since your last call, updated after every game-day injury refresh.

Free
$0 · 100/day
Basic
$5 · 5,000/mo
Pro
$29 · 50,000/mo
Injury refreshes
Up to 4 a day

Why a free plan now?

Because you shouldn't need a credit card to find out whether our numbers are any good. Fantasy developers build on weekends, in the gap between the waiver run and kickoff. A key you can grab in two minutes and a hard, honest daily cap beat a trial clock every time.

The free plan isn't a demo. It's the same API, the same JSON and the same player ids as the paid plans: PPR projections, 2020–2026 actuals, deviations, snap share, matchup history and impact-tagged news.

Which plan is right for you?

PlanBuilt forLimits
Free ($0)Your own league: a start/sit script, a notebook, a class project, kicking the tires before you commit.100 requests/day, 10/minute. Resets 00:00 UTC.
Basic ($5/mo)A personal bot or dashboard that runs all week, or a draft tool that loads the full player pool.5,000 requests/month, 30/minute, no daily cap.
Pro ($29/mo)League-wide Discord or Slack bots and public tools that have to react to inactives on Sunday.50,000 requests/month, 100/minute, plus the injury changes feed.

Rule of thumb: a weekly lineup check for one roster is 4 to 6 requests. If you're serving one person, start free. If you're serving a league, you want Basic. If your users will yell at you when a Sunday inactive slips past, you want Pro.

What can I do with a free key in one call?

Here's one request that earns its keep: snap share with a trend. Rome Odunze played 48% of Chicago's snaps in Week 1 and 84% in Week 2. His points barely moved (7.2, then 7.3). His role moved a lot, and role shows up before production.

import requests

r = requests.get(
    "https://api.gridirondata.com/api/v1/snaps/Rome%20Odunze%23WR",
    headers={"x-api-key": "YOUR_FREE_KEY"},
    params={"trend": 1},          # compare the latest week with his season average
)
d = r.json()
print(d["season_snap_pct_avg"], d["recent_snap_pct_avg"], d["trend_delta"])
# 66.0 84.0 18.0

That's one of your 100 daily requests. Loop it over your roster and you have a role-change alert for about 15 requests a week.

What does the Pro injury changes feed return?

Most injury endpoints hand you the whole league and let you work out what changed. This one does the diff for you. Pass the next_since value from your last response and you get only the players whose status moved since then, with the old and new status:

curl -H "x-api-key: YOUR_PRO_KEY" \
  "https://api.gridirondata.com/api/v1/injuries/changes?since=2026-09-27T16:00:00Z"
{
  "count": 1,
  "changes": [
    { "player_id": "Josh Allen#QB", "team": "BUF",
      "previous_status": "Questionable", "status": "Out",
      "detected_at": "2026-09-27T16:55:12Z" }
  ],
  "next_since": "2026-09-27T16:55:12Z",
  "truncated": false
}

The example is illustrative. The feed tracks around 680 players, and on Saturday, September 26 our table had 33 Questionable, 2 Doubtful, 18 Out and 30 on IR. Sunday is when those flip.

When does injury status update?

Status refreshes on a schedule timed to when NFL teams actually publish news. Inactives come out about 90 minutes before kickoff, so the Sunday runs sit after the announcements and before the games:

Injury refresh schedule (Eastern time; changes are recorded about 10 minutes after each refresh)
WhenRefreshChanges recordedCatches
Every day11:00 am11:12 amPractice reports and overnight moves
Sunday12:45 pm12:55 pmInactives for the 1:00 pm games
Sunday3:50 pm4:00 pmInactives for the 4:05 and 4:25 pm games
Sunday7:45 pm7:55 pmSunday Night Football inactives
Thursday and Monday7:15 pm7:25 pmFinal statuses before the night game

Times follow Eastern time through the November 1 clock change. The game-day polling guide shows how to line your own poller up with these windows.

What doesn't it do?

  • No live in-game stats. Box-score stats land the day after games (Monday night games on Tuesday).
  • No push webhooks yet. You poll the feed. A cheap poll every few minutes during a window costs a handful of requests.
  • A 14-day lookback. Older since values are clamped to 14 days, and the response says so.

Frequently asked questions

Is the free plan really free?

Yes. It costs $0 and needs no credit card: 100 requests a day at 10 a minute, on every endpoint except the Pro injury changes feed.

Which plan gets the injury changes feed?

Pro ($29/month) and Enterprise. A Free or Basic key gets HTTP 403 with "reason": "pro_required" and a link to pricing.

Is the injury feed real-time?

No. It updates about 10 minutes after each scheduled injury refresh: daily at 11:00 am ET, three times on Sunday after inactives, and before Thursday and Monday night games.

Do I keep my key when I upgrade?

Yes. Upgrading from Free to Basic or Pro raises the limits on the key you already have, so your code doesn't change.