The pipe

How Universal Sports Feeds runs the week

Leagues keep the source of truth. We normalize. Apps consume. Total AI Sports sits on the same family of desks — this one is data, not agents.

01

A league puts data in

CSV, a scorekeeper app, or a POST to /v1/ingest. You keep the source of truth — we do not invent scores.

02

USF normalizes the sport

One schema per sport. NFL box scores, softball linescores, and hockey shots all leave as clean JSON.

03

Apps pull a feed

REST, CSV export, or webhooks on score change. Same key for a rec-league site and a fantasy desk.

Ingest

  • CSV drop: teams, schedule, box scores, standings.
  • JSON POST to /v1/ingest with your league key.
  • Scorekeeper apps can push after each period.
  • We reject rows we cannot parse — we never invent a score.

Normalize

  • One schema per sport family (football, basketball, diamond, hockey, soccer).
  • Team IDs, player IDs, and period clocks stay stable across uploads.
  • Local nicknames map to canonical names when you tell us they should.
  • Format flags (classic, best ball, guillotine, dynasty) travel with the league, not the feed.

Distribute

  • REST GET for games, standings, rosters, and box scores.
  • CSV export for the same objects — spreadsheet-friendly.
  • Pro webhooks on score change, final, and injury.
  • Same API key works for every league on the account.