Multi-sport data platform

Sport data that keeps itself current.

Fixtures, results, tables, squads — and the numbers computed on top of them. Publish it on a WordPress site without running a data pipeline, or call the same data from your own product.

For WordPress publishersFor developers
FootballBasketballdomestic and continentalNBAdedicated feedBaseballHockeyVolleyballHandballAmerican Footballincl. NFL, NCAAAustralian FootballAFLRugbyFormula 1MMA Football
FootballBasketballNBABaseballHockeyVolleyballHandballAmerican FootballAustralian FootballRugbyFormula 1MMA
One platform, twelve sports Open the sport pages

Live

Every sport keeps its own shape.

A football match is decided in goals, a basketball game in points across quarters, a volleyball match in sets. The same components render each of them correctly rather than flattening them into one generic scoreline.

Match states across sports Illustrative demo
FootballLive

LaLiga · Matchday 21

Real Madrid2Girona1
Goals67′

Tsygankov 63′ · Vinícius Jr 41′

BasketballLive

Regular season

Home78Away74
Points · by quarterQ3 04:12

22-19 · 18-25 · 20-18 · 18-12

VolleyballFinal

National league

Home3Away1
SetsFT

25-21 · 22-25 · 25-18 · 25-23

LALIGALive
Real Madrid 2 – 1 Girona
67′
67′TsygankovGOAL41′Vinícius JrGOAL38′BlindYELLOW
Sample data
The same match, in the mobile app.

Capabilities

A complete stack, not a single feed.

What you get across both products.

Coverage

Competitions across twelve sports, with the seasons we hold retained rather than re-fetched.

Computed values

Tables, form, streaks, records and head-to-head calculated in-house, marked in the payload.

Live match states

Goals, quarters, sets, rounds — each sport rendered in its own scoring shape.

WordPress pages

Competition, table, fixture, team and player pages created and kept current for you.

AI written copy

Match previews and summaries, player bios and page copy, generated from computed values.

Keys and quotas

Scoped, revocable keys. Remaining requests and reset time on every response.

The product itself

This is the interface, not a mock-up of one.

On the left, choosing competitions inside WordPress. On the right, a page the plugin publishes on your own domain, rendered by your own theme.

WordPress admin · SportPedia Sample data
Competitions

2 of 2 selected · trial allowance reached

Connected
ENPremier League
ESLaLiga
ITSerie A
DEBundesliga
FRLigue 1
NLEredivisie
TRIAL · 21 DAYS LEFT LAST CHANGE 4 MIN AGO
yoursite.com/football/england/premier-league/ Sample data

Premier League

2025/26 · England

Table

Computed
#ClubPGDPts
1Arsenal24+3355
2Liverpool24+2753
3Manchester City24+2349
4Chelsea24+1545

Next matchday

SAT 15:00Arsenal · Chelsea–
SAT 17:30Liverpool · Everton–
SUN 14:00Man City · Brighton–
SUN 16:30Newcastle · Villa–

How it works

From provider feed to your page.

Five stages. Each one independent, so a change propagates forward instead of forcing a rebuild.

  1. 01AcquireProvider feeds are pulled on a schedule shaped by how often each resource actually changes.
  2. 02NormalizeEvery sport is mapped onto one stable schema, so a fixture is a fixture whether it has halves, quarters or sets.
  3. 03RetainFinished seasons are kept rather than re-fetched, so history accumulates instead of expiring.
  4. 04ComputeTables, form, streaks, records and head-to-head are calculated from the retained layer and stamped with the calculation version.
  5. 05DeliverThe same values reach a WordPress page and an API response through one contract.

— Each stage is independent: a change at one stage propagates forward rather than triggering a full rebuild.

What you are actually buying

Facts, intelligence, and the writing on top.

Three layers. The first is acquired and normalized, the second is computed from it, and the third is written from the second.

Layer 01 — Acquired

Normalized facts

Fixtures, events, lineups, squads, injuries, venues and transfers, mapped onto one stable schema and kept after the season closes.

  • fixtures
  • events
  • lineups
  • squads
  • injuries
  • venues
Layer 02 — Computed

Standings and insights

League tables, form, streaks, records and head-to-head summaries, calculated in-house from layer 01 so every consumer does not have to rebuild them.

  • standings
  • form
  • streaks
  • records
  • h2h
  • rankings
Layer 03 — Written

AI content

Match previews and summaries, player bios and page copy, generated from layer 02 rather than from a raw feed. Available on paid WordPress plans; not part of the trial.

  • match previews
  • match summaries
  • player bios
  • page copy

What we compute

One event. Everything it touches.

Follow a single goal through the values that move with it.

67′GOAL Vinícius Jr · Real Madrid Illustrative demo
Matchnow
RMA 1–12–1 GIR

Fixture state updates first.

Player · seasonnow
Vinícius Jr 1213

Goals, season to date.

Standingsprojected FT
Real Madrid 2nd1st
Points4952 Form DWLWW

If the result holds.

How this works

One event updates the fixture, then everything computed from it. Match and player values are current match facts. Standings and form only settle at full time, so the third card is shown as a projection — not a table we would publish at 67′. Sample values throughout.

Sports

Twelve sports, each modelled properly.

Every sport gets its own entities and its own scoring shape. Open any of them to see the model and the pages it produces.

Premier League — league table

Sample dataComputed
#ClubPWDLGFGAGDFormPts
1Arsenal2417435522+33WWDWL55
2Liverpool2416535225+27WDWWW53
3Manchester City2415455027+23LWWDW49
4Chelsea2413654429+15WDDWL45
5Newcastle United2412574132+9WLWDW41
6Aston Villa2411763831+7DWDLW40
Illustrative table — shows the shape, not today’s standings

Beyond a raw feed

The part you would otherwise build yourself.

A raw sports feed hands back the provider payload. Everything below the first row is work that every consumer of such a feed ends up repeating.

A raw sports feed, and what we add to it

Capability comparison
CapabilityRaw provider feedSportPedia
Fixtures, results, squadsBothBothA raw feed gives you these. So do we.
One stable schema across sportsYou build itIncludedProvider payloads differ per sport and change over time.
League tables, form, records, head-to-headYou compute itIncludedEvery consumer of a raw feed rebuilds this separately.
History kept after the season closesYou store itIncludedRetained rather than re-fetched each year.
Ready-made WordPress pagesNot offeredIncludedThe plugin creates and maintains the pages themselves.
AI match previews and summariesNot offeredPaid plansWritten from computed values, not from a raw feed.
Comparison is against a generic raw data feed, not any named vendor

One platform, two products

The same data, in the shape you need it.

WordPress and the API are bought and metered separately. Neither one’s allowance is spent by the other.

One normalized data spine Fixtures, results, tables, squads and the values computed from them
Product 01

WordPress pages

  • Competition and season pages
  • League tables
  • Fixtures and results
  • Match centre
  • Team and squad pages
  • Player pages
  • Head-to-head
How the plugin works →
Product 02

API resources

  • /v1/fixtures
  • /v1/standings
  • /v1/teams
  • /v1/players
  • /v1/competitions
  • /v1/h2h
How the API works →

Getting started

Pick the route that matches your stack.

Product 01

WordPress in four steps

For publishers who want current sport pages without owning a data pipeline.

01Install the pluginFrom the WordPress plugin directory, or upload the ZIP.
02Paste your keyOne field. The plugin verifies the connection and reports what your plan allows.
03Choose competitionsThe trial allows two. Paid plans allow more, set by the plan’s allowance.
04Pages build themselvesCreated once, then kept in step with the data behind them.
Product 02

API in three

For developers who want the entities and computed values behind one key.

01Create a keyScoped per site, revocable, usage reported per key.
02Call an endpointComputed resources sit beside the acquired ones, on versioned paths.
03Read the quota headersRemaining requests and reset time come back on every response.
$ curl https://api.sportpedia.io/v1/standings?league=39&season=2025 \
  -H "Authorization: Bearer $SPORTPEDIA_KEY"

Product states

What it looks like when things aren’t fine.

Loading, empty, failed, expired and over-quota are designed surfaces, reused across every product screen.

Loading

The skeleton takes the shape of the table replacing it — no spinner, no layout jump.

Empty
◇
No fixtures on 14 June

This competition is between seasons. The next scheduled matchday is 9 August.

Error
!
Standings didn’t load

The data service returned 503. Nothing was lost — your site is still publishing the last synced table.

Trial expired
⌛
Your trial has ended

All data updates have stopped. Published pages still render the last data they received.

Over quota
▪
Monthly request quota used

Requests return 429 with the reset time until the allowance refills.

Not in your plan
○
Competition outside your allowance

Your plan covers a set number of competitions. Swap one out, or move to a larger allowance.