Kooora APIkooora.com ↗
Access live football scores, standings, team profiles, player stats, and news from kooora.com via a single REST API with 9 endpoints.
What is the Kooora API?
The Kooora.com API exposes 9 endpoints covering live match scores, competition standings, team profiles, player stats, and news from one of the Arab world's most-used football platforms. The get_matches endpoint returns today's fixtures and live scores grouped by competition, while get_team_dashboard consolidates team profile, recent results, next fixture, and latest news into a single response — useful for building match-day apps targeting Arabic-language football audiences.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/31311a02-adfe-4734-8ea5-31db2dc8e4ee/get_matches' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace kooora-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: kooora SDK — bounded, re-runnable; every call capped."""
from parse_apis.Kooora_Sports_API import Kooora, ResourceNotFound
client = Kooora()
# Get a unified team dashboard with profile, next/last match, and news
dashboard = client.team_dashboards.for_team(team_name="ريال مدريد")
print(dashboard.team.name, dashboard.team.league, dashboard.team.logo)
if dashboard.next_match:
print(dashboard.next_match.date, dashboard.next_match.home_team, "vs", dashboard.next_match.away_team)
if dashboard.last_match:
print(dashboard.last_match.home_team, dashboard.last_match.score, dashboard.last_match.away_team)
for article in dashboard.news[:3]:
print(article.title, article.date)
# Get today's match schedules grouped by competition
for schedule in client.schedules.today(limit=2):
print(schedule.competition_name, len(schedule.matches))
# Get standings for a competition derived from a schedule
first_schedule = client.schedules.today(limit=1).first()
if first_schedule:
comp = client.competition(id=first_schedule.competition_id.id)
for standing in comp.standings(limit=1):
for ranking in standing.rankings[:3]:
print(ranking.position, ranking.team.name, ranking.points)
# Get latest news articles
for article in client.articles.latest(limit=3):
print(article.title, article.publish_date)
# Get a player profile with typed error handling
try:
player = client.players.get(player_id="unknown_player_id")
print(player.name, player.position, player.age)
except ResourceNotFound as e:
print("not found:", e)
print("exercised: team_dashboards.for_team / schedules.today / competition.standings / articles.latest / players.get")
Get football match schedules and live scores for the current day. Returns matches grouped by competition. Each competition contains its name, ID, and an array of matches with team names, scores, status, venue, and live period information. Matches with status 'FIXTURE' have not started; other statuses indicate live or completed states.
No input parameters required.
{
"type": "object",
"fields": {
"competitions": "array of competition objects each containing competition_name, competition_id, and matches array"
},
"sample": {
"data": {
"competitions": [
{
"matches": [
{
"id": "kx8lsekcWNSOUDnxvF-pl",
"venue": null,
"status": "FIXTURE",
"away_team": {
"logo": "https://cdn.sportfeeds.io/sdl/images/team/crest/medium/SeV5TAiEjbSlaDU3pk0ej.png",
"name": "نيجيريا",
"score": null
},
"home_team": {
"logo": "https://cdn.sportfeeds.io/sdl/images/team/crest/medium/TgVcm6fGZ73VvkIX-vEnP.png",
"name": "البرتغال",
"score": null
},
"start_date": "2026-06-10T19:45:00.000Z",
"live_period": null
}
],
"competition_id": "cesdwwnxbc5fmajgroc0hqzy2",
"competition_name": "المباريات الودية"
}
]
},
"status": "success"
}
}About the Kooora API
Match Data and Live Scores
The get_matches endpoint returns all of today's fixtures grouped into competition objects, each carrying competition_name, competition_id, and a matches array. Each match includes team names, current score, status (FIXTURE, LIVE, or completed), venue, and live period details. For a specific team's live match, get_live_match accepts a team_name parameter in Arabic or English and returns real-time fields: current_minute, status (e.g. FIRST_HALF, SECOND_HALF, HALF_TIME), and a match_events array that breaks down goals, yellow cards, red cards, and substitutions with per-event minute, type, and player_name.
Standings and Team Profiles
get_standings takes a competition_id — obtainable from get_matches results — and returns one or more table objects, each with a rankings array covering position, team details, played, won, drawn, lost, goals for, goals against, goal difference, and points. Multi-group competitions return one table object per group. get_team looks up a club by name and returns team_id, logo_url, founded_year, and the team's primary competition_name and competition_id. get_team_matches returns up to 10 recent completed results and up to 10 upcoming fixtures for the specified team.
Player Stats and News
get_player_stats accepts a player_id and returns biographical fields: name, first_name, last_name, age, nationality, position (one of ATTACKER, MIDFIELDER, DEFENDER, GOALKEEPER), shirt_number, image_url, and a team object with id and name. Player IDs are discoverable through competition and match pages on kooora.com. get_news delivers up to 30 site-wide news articles ordered by most recent first, each with title, teaser, publish_date, publish_time, image_url, url, and tags. get_team_news narrows this to a specific team, also returning up to 30 articles.
Unified Dashboard
get_team_dashboard is a convenience endpoint that aggregates team profile (name, logo, country, league), last_match, next_match, and up to 5 recent news articles into one response. This reduces the number of calls needed when building a team overview widget or chatbot integration targeting Arabic-speaking football fans.
The Kooora API is a managed, monitored endpoint for kooora.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when kooora.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official kooora.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display live Arabic-league match scores grouped by competition using
get_matchescompetitionsandmatchesfields - Build a league table widget using
get_standingswith acompetition_idfrom today's match data - Show a team's next fixture and last result side-by-side using
get_team_dashboardnext_matchandlast_matchobjects - Render in-match event timelines (goals, cards, substitutions) using
get_live_matchmatch_eventsarray - Populate a player profile card with position, age, nationality, and shirt number from
get_player_stats - Aggregate team-specific news feeds using
get_team_newstitle,teaser, andimage_urlfields - Power a football chatbot that answers 'What's the standing of X in their league?' via
get_standingsdata
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does kooora.com have an official developer API?+
What match events does get_live_match return, and how granular are they?+
get_live_match endpoint returns a match_events array where each event includes minute, type (one of GOAL, YELLOW_CARD, RED_CARD, SUBSTITUTION), player_name, and team. The current_minute field can be an integer or a string like '45+2' to represent stoppage time. If no live match is found for the specified team, all fields return null.Can I look up historical match data beyond the most recent 10 completed games?+
get_team_matches returns up to 10 most recent completed matches and up to 10 nearest upcoming fixtures per team. Deeper historical archives beyond those 10 results are not currently covered. You can fork this API on Parse and revise it to add a paginated historical matches endpoint.Are in-match statistics like possession, shots on target, or passing accuracy available?+
How do I find a valid competition_id to use with get_standings?+
get_matches first. Each competition object in the competitions array includes a competition_id field. Pass that string directly as the competition_id parameter in get_standings. Note that get_standings for multi-group competitions returns one table object per group, so your code should handle arrays with more than one entry.