Insights
Cost
X API
Build vs buy

Building on the X API for sports content: what it actually costs

8 min readSportFeeds

The subscription is the smallest line item. Here is the arithmetic on reads, engagement polling, entity tagging and compliance that teams discover in month two.

Official sports accounts publish an enormous amount of usable content: highlight clips, injury news, lineup announcements, post-game reaction. It is genuinely a gold mine, and the obvious move is to pull it yourself from the source. The plan usually survives contact with the first invoice.

Reads are priced per post, and posts are not the unit you think

The mistake is modelling cost as a monthly subscription. The subscription is the floor. What actually accumulates is per-post reads, and a real sports pipeline reads the same post many times.

Follow 250 official accounts. Ingest continuously so you are not minutes behind a highlight. Then, for each post, poll engagement repeatedly as it matures — because a clip's value is not knowable at publish time. Seven measurements per post is a reasonable ladder. That is seven reads for every one post you ingested.

The backfill trap

Every time you add sources, you want history so the feed is not empty. A seven-day backfill across a modest set of new accounts routinely runs into thousands of post reads in a single operation. Teams find this out by running it once, unmetered, and then reading the bill. Budget for backfills explicitly, and never run one without pricing it first.

Tagging is the real project

Raw posts are unusable in a sports product. A clip captioned with a nickname and no player name has to be resolved to a player ID, a team ID, a league and a sport before it can appear on a player card. That resolution is where the engineering time goes, and it is never finished — rosters change, accounts rebrand, nicknames are ambiguous across leagues.

  • Profile-level signals: what does this account reliably post about?
  • Source-level signals: is this a team account, a league account, or a generalist media account?
  • Model-level resolution: what does the caption actually say, in context?

A single-signal approach gets you to roughly the right league and quite a lot of wrong players. A resolution chain that falls back across all three is what gets you to a number you can ship.

Compliance is not optional

When a post is deleted upstream, you are required to delete your copy. That means tracking deletions as a first-class feed, not discovering them when a 404 surfaces in your app. It is a small amount of code and a permanent operational obligation.

Region rights

Not every source is viewable in every market. If your users are in South Africa and your content set is US-centric, you will serve clips that cannot legally or practically be watched. Doing this properly means geo-reviewing every source and filtering per request, based on where the end user is.

The honest summary

Line itemFrequently modelled asWhat it actually is
Platform accessOne subscriptionFloor cost before any reads
IngestionOne read per postContinuous polling across every source
EngagementFree metadataMultiple re-reads per post as it matures
BackfillOne-timeRepeated, per source added, thousands of reads each
TaggingA weekend of regexAn ongoing entity-resolution system
ComplianceNot modelledA permanent deletion-tracking obligation
Region rightsNot modelledPer-source geo review plus per-request filtering

None of this is an argument that building it is impossible. It is an argument that the cost is a running engineering commitment rather than a line on a vendor invoice, and that the commitment is unrelated to your actual product. Most teams would rather spend that quarter on the thing their users came for.

Compare against SportFeeds

One REST API, pre-tagged to the player, team and league IDs you already use.

Explore the product