Skip to main content

Build with SportScore

Free REST API and MCP server for live scores, match details, standings and player statistics across football, basketball, cricket and tennis. CORS-open. JSON. No API key required for open-source and attribution-tier projects.

The deal

We want more developers using sports data. You want real data without paying enterprise prices or building your own ingestion pipeline. Here's the trade:

You get

  • 8 REST endpoints, JSON, CORS-open
  • Live scores + historical fixtures
  • Standings, top scorers, brackets, player stats
  • MCP server for Claude / Cursor / any MCP host
  • OpenAPI 3.0 spec for code-gen
  • ~10,000 requests / 24h / IP, burst friendly

We get

  • Attribution: one visible "Powered by SportScore" link on pages that use our data
  • Dofollow link to https://sportscore.com/
  • Anchor text "SportScore" (or a brand mention)
  • That's it. No revenue share, no lock-in

Free forever, no paid tier required. Building a commercial white-label product that literally cannot ship the badge? Drop us a line — attribution-free arrangements are handled case-by-case. Otherwise, just keep the badge and you are good. Full terms.

Attribution badges

Pick any of these, or design your own — all we need is a visible dofollow link to https://sportscore.com/. Click any snippet to select it, then copy.

Dark pill (default)
<a href="https://sportscore.com/" rel="dofollow" title="Sports data by SportScore" style="display:inline-flex;align-items:center;gap:6px;padding:6px 10px;background:#0a1e3d;color:#fff;border-radius:4px;text-decoration:none;font:600 .88rem system-ui,-apple-system,sans-serif;">Powered by SportScore</a>
Light pill (for dark sites)
<a href="https://sportscore.com/" rel="dofollow" title="Sports data by SportScore" style="display:inline-flex;align-items:center;gap:6px;padding:6px 10px;background:#fff;color:#0a1e3d;border-radius:4px;text-decoration:none;font:600 .88rem system-ui,-apple-system,sans-serif;border:1px solid #dce3ef;">Powered by SportScore</a>
Minimal text link (low-profile)
Data from SportScore
Data from <a href="https://sportscore.com/" rel="dofollow">SportScore</a>
Tiny circle (sidebar / footer corner)
<a href="https://sportscore.com/" rel="dofollow" title="Powered by SportScore" aria-label="Powered by SportScore" style="display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;background:#0a1e3d;color:#fff;border-radius:50%;text-decoration:none;font:700 .78rem system-ui,sans-serif;">SS</a>
Amber accent (high contrast)
<a href="https://sportscore.com/" rel="dofollow" title="Sports data by SportScore" style="display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:#ffb74d;color:#0a1e3d;border-radius:20px;text-decoration:none;font:700 .86rem system-ui,-apple-system,sans-serif;">Powered by SportScore</a>
Stat-block footer (for data tables)
Last updated 2 min ago · Powered by SportScore
<div style="color:#546277;font-size:.82rem;">Last updated 2 min ago · <a href="https://sportscore.com/" rel="dofollow" style="color:#0a1e3d;text-decoration:none;font-weight:600;">Powered by SportScore</a></div>

All six variants keep rel="dofollow" — that is the one thing we ask. Link text must mention SportScore. Everything else (colors, shape, placement) is yours to style.

REST endpoints

Base URL: https://sportscore.com. All endpoints are GET, return JSON, and serve Access-Control-Allow-Origin: *. Responses are cached 60 s at the edge.

Interactive API reference → Built with SportScore → Try endpoints, read response schemas, download the spec.

GET /api/widget/matches/

Live + recent matches by sport.

Params: sport=football|basketball|cricket|tennis, limit=1..50

https://sportscore.com/api/widget/matches/?sport=football&limit=10
GET /api/widget/match/

Single match detail — score, status, lineups, timeline.

Params: sport=..., slug=<match-slug>

https://sportscore.com/api/widget/match/?sport=football&slug=manchester-united-vs-liverpool
GET /api/widget/team/

Team's recent + upcoming fixtures.

Params: sport=..., slug=<team-slug>, limit=1..30

https://sportscore.com/api/widget/team/?sport=football&slug=barcelona&limit=10
GET /api/widget/standings/

League / competition standings table.

Params: sport=..., slug=<competition-slug>

https://sportscore.com/api/widget/standings/?sport=football&slug=premier-league
GET /api/widget/topscorers/

Top scorers / assists for a competition.

Params: sport=..., slug=<competition-slug>, limit=1..50, stat=goals|assists

https://sportscore.com/api/widget/topscorers/?sport=football&slug=premier-league&limit=20
GET /api/widget/player/

Player statistics + metadata.

Params: sport=..., slug=<player-slug>

https://sportscore.com/api/widget/player/?sport=football&slug=lionel-messi
GET /api/widget/bracket/

Knockout tournament bracket.

Params: sport=..., slug=<competition-slug>

https://sportscore.com/api/widget/bracket/?sport=football&slug=uefa-champions-league
GET /api/widget/tracker/

Live match tracker proxy (position / animation data).

Params: sport=..., id=<match-id>

https://sportscore.com/api/widget/tracker/?sport=football&id=7420812

Optional: self-identify with ?src=

If you add a ?src=<your-host-or-app-name> query parameter to any widget API call, we’ll surface it in our referer analytics even when a browser strips Referer headers (most do, for privacy). This is totally optional — use it if you want us to know you’re using the API, ignore it otherwise.

Examples:

# Self-identify as example.com GET https://sportscore.com/api/widget/matches/?sport=football&limit=5&src=example.com # Self-identify as a CLI / script with a recognisable name GET https://sportscore.com/api/widget/standings/?sport=football&slug=premier-league&src=nba-dashboard-cli # From the MCP server — handled automatically, no action needed GET https://sportscore.com/api/widget/matches/?sport=football&limit=5&src=sportscore-mcp

Why we ask: when you self-identify, we notice you. That means you’re a candidate for the Built with SportScore gallery (reciprocal dofollow link from us to your site), early access to new endpoints, and a heads-up if we ever touch a field you depend on. It’s not a tracker — we log only the src value, method, path and timestamp. No cookies, no fingerprint.

MCP server (Claude / Cursor / IDE integrations)

Install the Model Context Protocol server and your AI assistant can pull live scores, match details and standings directly in chat. Works in Claude, Cursor, and any MCP host.

# Claude Desktop / MCP host config { "mcpServers": { "sportscore": { "command": "npx", "args": ["-y", "sportscore-mcp"] } } }

Source + issues: https://github.com/Backspace-me/sportscore-mcp

New: Full step-by-step Claude Desktop tutorial — install, example prompts, troubleshooting.

Quick start — JavaScript

const r = await fetch( "https://sportscore.com/api/widget/matches/?sport=football&limit=10" ); const { matches } = await r.json(); console.log(matches);

Quick start — Python

import requests r = requests.get( "https://sportscore.com/api/widget/matches/", params={"sport": "football", "limit": 10}, ) print(r.json()["matches"])

Rate limits & fair use

~10,000 requests per 24 hours per IP on the free tier. Responses are cached 60 s — if you're doing > 20 req/sec you're probably double-fetching. Contact us at api@sportscore.com for higher limits, SLAs, or commercial licensing.

Ideas worth building

  • Fantasy football draft assistant pulling live lineup + injury data
  • Telegram / Discord bot for match-day alerts
  • Daily digest email with yesterday's results in your favourite league
  • Whoop / Strava-style "watch this match" notification
  • MCP plugin for a coach's analysis workflow
  • Public dashboards embedded in Notion / Confluence via widget iframes

Ship something interesting? Email api@sportscore.com and we'll feature it on this page.