# 🚀 Sofascore Scraper · 5,000 Free Matches/Month (`omkar-cloud/sofascore-scraper`) Actor

Sofascore Scraper gets you Sofascore matches ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — live scores, fixtures & results for 26 sports, with full stats, lineups & incidents on demand. 💰 $1 per 1,000 matches, no start fee. Scrape your first 5,000 matches free every month 🚀

- **URL**: https://apify.com/omkar-cloud/sofascore-scraper.md
- **Developed by:** [Chetan Jain](https://apify.com/omkar-cloud) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Sofascore Scraper

Sofascore Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Sofascore match data.

Sofascore covers live scores, fixtures and results for 26 sports — football, tennis, basketball, ice hockey, cricket, MMA, esports and more — and every run scrapes it live, so you get today's scores, lineups and statistics as they happen, and can successfully complete your project.

**$1 per 1,000 matches.** And with Apify's free plan you get $5 of credit every month, so your first **~5,000 matches each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 30 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Sofascore Scraper free**](https://apify.com/omkar-cloud/sofascore-scraper) — your first ~5,000 matches are Free.

### What can I get

- ⚽ **Fixtures, live scores & results for 26 sports** — every match of a sport on any day (past days give results, future days give fixtures), narrowed to one tournament or country if you like; the matches in progress right now; or the matches fans in a country are following
- 🏆 **One row per match** — teams with logos, codes, colours & follower counts, score by period, status & clock, winner, kick-off time, round, tournament & category, season, venue with coordinates, and the sofascore.com link
- 📋 **Full match details on demand** — managers, venue, referee with career totals, attendance & period format, plus team statistics per period (possession, xG, shots, passes, duels, tackles, goalkeeping), confirmed lineups & benches with formation, missing players & every player's per-match statistics, and the incident timeline (goals with scorer & assist, cards, substitutions, VAR decisions, injury time)
- 🔗 **Any match URL** — paste sofascore.com match links or ids and get the full profile back

### Why Sofascore Scraper

Most other Sofascore scrapers fail you in one of four ways:

- 🗄️ **Inaccurate, cached, stale data**
- 🧩 **Low-detail data** — a score and two team names, never the statistics, lineups or timeline
- 💸 **Pay more to get the same data** — start fees, tiers and paid "enrichment" events
- 🪦 **Works today, breaks next month** — nobody maintains it

Sofascore Scraper is scraped live on every run, priced honestly, and actively maintained.

### Example: A Full Sofascore Match

```json
{
  "mode": "scheduled",
  "sport": "football",
  "search_date": "2026-05-24",
  "id": 14023961,
  "custom_id": "rP",
  "slug": "aston-villa-manchester-city",
  "link": "https://www.sofascore.com/football/match/aston-villa-manchester-city/rP#id:14023961",
  "start_time": "2026-05-24T15:00:00Z",
  "status": { "code": 100, "type": "finished", "description": "Ended" },
  "is_live": false,
  "is_finished": true,
  "winner_code": 2,
  "home_team": {
    "id": 17, "name": "Manchester City", "short_name": "Man City", "code": "MCI",
    "link": "https://www.sofascore.com/team/football/manchester-city/17",
    "image_link": "https://img.sofascore.com/api/v1/team/17/image",
    "country": { "name": "England", "alpha2": "EN", "alpha3": "ENG", "slug": "england" },
    "followers_count": 4747370, "founded_date": "1880-11-23",
    "manager": { "id": 794873, "name": "Enzo Maresca", "link": "https://www.sofascore.com/manager/enzo-maresca/794873", "country": { "name": "Italy", "alpha2": "IT", "alpha3": "ITA", "slug": "italy" } }
  },
  "away_team": {
    "id": 40, "name": "Aston Villa", "short_name": "Aston Villa", "code": "AVL",
    "link": "https://www.sofascore.com/team/football/aston-villa/40",
    "image_link": "https://img.sofascore.com/api/v1/team/40/image",
    "country": { "name": "England", "alpha2": "EN", "alpha3": "ENG", "slug": "england" },
    "followers_count": 1090431, "founded_date": "1874-03-01",
    "manager": { "id": 53062, "name": "Unai Emery", "link": "https://www.sofascore.com/manager/unai-emery/53062", "country": { "name": "Spain", "alpha2": "ES", "alpha3": "ESP", "slug": "spain" } }
  },
  "home_score": { "current": 1, "display": 1, "periods": { "period1": 1, "period2": 0, "normaltime": 1 } },
  "away_score": { "current": 2, "display": 2, "periods": { "period1": 0, "period2": 2, "normaltime": 2 } },
  "round": { "number": 38, "name": null, "slug": null, "cup_round_type": null },
  "tournament": {
    "id": 17, "name": "Premier League", "slug": "premier-league",
    "link": "https://www.sofascore.com/tournament/football/england/premier-league/17",
    "image_link": "https://img.sofascore.com/api/v1/unique-tournament/17/image",
    "category": { "id": 1, "name": "England", "country": { "name": "England", "alpha2": "EN", "alpha3": "ENG", "slug": "england" } }
  },
  "season": { "id": 76986, "name": "Premier League 25/26", "year": "25/26" },
  "time": { "injury_time1": 3, "injury_time2": 10, "current_period_start_time": "2026-05-24T16:05:15Z" },
  "venue": { "id": 606, "name": "Etihad Stadium", "capacity": 53400, "city": "Manchester", "coordinates": { "latitude": 53.483091, "longitude": -2.200252 } },
  "referee": { "id": 79884, "name": "Andy Madley", "link": "https://www.sofascore.com/referee/andy-madley/79884", "career": { "games": 462, "yellow_cards": 1440, "red_cards": 36, "second_yellow_cards": 16 } },
  "attendance": 60332,
  "format": { "period_count": 2, "period_length_minutes": 45, "overtime_length_minutes": 15 },
  "has_highlights": true,
  "has_xg": true,
  "has_player_statistics": true,
  "statistics": [
    {
      "period": "ALL",
      "groups": [
        { "name": "Match overview", "items": [
          { "key": "ballPossession", "name": "Ball possession", "home": "53%", "away": "47%", "home_value": 53, "away_value": 47 },
          { "key": "expectedGoals", "name": "Expected goals", "home": "1.34", "away": "1.77", "home_value": 1.34, "away_value": 1.77 }
        ] },
        { "name": "Shots", "items": [
          { "key": "totalShotsOnGoal", "name": "Total shots", "home": "16", "away": "12", "home_value": 16, "away_value": 12 }
        ] }
      ]
    },
    { "period": "1ST", "groups": ["…"] },
    { "period": "2ND", "groups": ["…"] }
  ],
  "lineups": {
    "is_confirmed": true,
    "home": {
      "formation": "4-2-2-2",
      "players": [
        {
          "player": { "id": 980643, "name": "James Trafford", "short_name": "J. Trafford", "link": "https://www.sofascore.com/player/james-trafford/980643", "position": "G", "jersey_number": 1, "date_of_birth": "2002-10-10", "market_value": { "amount": 27000000, "currency": "EUR" } },
          "position": "G", "jersey_number": 1, "is_substitute": false, "is_captain": false,
          "statistics": { "minutes_played": 90, "rating": 6.5, "total_pass": 11, "accurate_pass": 10, "touches": 16, "saves": 3 }
        },
        "…"
      ],
      "missing_players": [
        { "player": { "id": 189061, "name": "Jack Grealish", "link": "https://www.sofascore.com/player/jack-grealish/189061" }, "type": "missing", "reason": 1, "description": "Foot Injury" }
      ],
      "kit_colors": { "player": { "primary": "abd1f5", "number": "000000", "outline": "abd1f5" }, "goalkeeper": { "primary": "008b48", "number": "feb139", "outline": "008b48" } }
    },
    "away": { "formation": "4-2-3-1", "players": ["…"], "missing_players": ["…"], "kit_colors": { "…": "…" } },
    "statistical_version": 3
  },
  "incidents": [
    { "type": "substitution", "class": "regular", "time": 86, "is_home": false, "player_in": { "id": 250223, "name": "John McGinn" }, "player_out": { "id": 98435, "name": "Ross Barkley" } },
    { "type": "card", "class": "yellow", "time": 82, "is_home": true, "player": { "id": 1136731, "name": "Rico Lewis", "link": "https://www.sofascore.com/player/rico-lewis/1136731" }, "reason": "Foul" },
    { "type": "goal", "class": "regular", "time": 61, "home_score": 1, "away_score": 2, "is_home": false, "player": { "id": 555386, "name": "Ollie Watkins", "link": "https://www.sofascore.com/player/ollie-watkins/555386" }, "assist1": { "id": 98435, "name": "Ross Barkley" } },
    { "type": "goal", "class": "regular", "time": 47, "home_score": 1, "away_score": 1, "is_home": false, "player": { "id": 555386, "name": "Ollie Watkins", "link": "https://www.sofascore.com/player/ollie-watkins/555386" }, "assist1": null },
    { "type": "goal", "class": "regular", "time": 23, "home_score": 1, "away_score": 0, "is_home": true, "player": { "id": 934354, "name": "Antoine Semenyo", "link": "https://www.sofascore.com/player/antoine-semenyo/934354" }, "assist1": null },
    "…"
  ]
}
```

*Trimmed for readability — the real row lists every statistic of every period, all 20 players of each side with their full per-match statistics, and the complete incident timeline. Without **Scrape Full Match Details** the row stops at `is_final_result_only`, minus the managers, venue, referee, attendance and format.*

### Get Started with 5,000 Free Matches

1. [Hit **Try for Free Button**](https://apify.com/omkar-cloud/sofascore-scraper) — the input is pre-filled with today's football matches.
2. Enjoy your data 😎.

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Standard matches** | **$1 per 1,000** | id, link, kick-off time, status & clock, winner, score by period, both teams with logo, code, country, colours & follower count, round, tournament & category, season, venue with coordinates, coverage flags + the search context (`mode`, `sport`, `search_date`) |
| **Detailed matches** | $3 per 1,000 | Everything above + managers, venue, referee with career totals, attendance & period format, team statistics per period, confirmed lineups & benches with formation, missing players & every player's per-match statistics, and the incident timeline (goals, cards, substitutions, VAR decisions, injury time) |

No start fee — you pay only for the rows you get. Control your spend with **Max Matches per Search**: 1,000 matches ≈ $1. A day of football at the default 100 matches costs about $0.10, or $0.30 with full details.

💡 Apify's free plan includes $5 of credit every month — about **5,000 free matches, or ~1,666 fully-detailed matches, every month**.

👉 [**Scrape your first 5,000 matches free**](https://apify.com/omkar-cloud/sofascore-scraper)

### Run It from Code

Grab your API token from [Integrations Settings here](https://console.apify.com/settings/integrations) and replace `<YOUR_API_TOKEN>` below.

**Python** (`pip install apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("omkar-cloud/sofascore-scraper").call(run_input={
    "sports": ["football"],
    "mode": "scheduled",
    "date": "2026-05-24",
    "tournamentId": "17",
    "scrapeDetails": True,
    "maxResults": 10,
})
for match in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(match["home_team"]["name"], match["home_score"]["display"], "-", match["away_score"]["display"], match["away_team"]["name"])
```

**Node.js** (`npm install apify-client`)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('omkar-cloud/sofascore-scraper').call({
    matchUrls: ['https://www.sofascore.com/football/match/aston-villa-manchester-city/rP#id:14023961'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQ

#### Do I have to set a date?

No. Leave **Date** empty and the Scheduled mode lists today's matches — "today" as set by **Timezone Offset** (UTC unless you change it; `5.5` for India, `-5` for US Eastern). Set a past date for results or a future date for fixtures. Dates are `YYYY-MM-DD`. The Live and Trending modes ignore the date.

#### Which sports can I scrape?

All 26 that Sofascore covers: `football`, `tennis`, `basketball`, `ice-hockey`, `volleyball`, `handball`, `baseball`, `american-football`, `rugby`, `cricket`, `table-tennis`, `esports`, `mma`, `motorsport`, `darts`, `snooker`, `badminton`, `futsal`, `waterpolo`, `aussie-rules`, `beach-volley`, `cycling`, `floorball`, `bandy`, `minifootball` and `padel` (`soccer`, `hockey`, `nfl` and `ufc` work as aliases). List several under **Sports** and each is searched separately; rows carry `sport` so you can tell them apart.

#### How do I get one league or one country only?

Set **Tournament id** to the competition's Sofascore id (`17` for the Premier League — it is the last number of the tournament's sofascore.com URL, and pasting that URL works too) or **Category id** to a Sofascore category (`1` for England). Both apply to the Scheduled mode and return that competition's or country's matches on the day.

#### How many matches do I get per search?

A day's schedule comes back tournament by tournament, 20 tournaments per page (a page of football is roughly 80 matches); the Actor keeps paging until it has **Max Matches per Search** matches or the day runs out. Live and Trending return everything in one go, capped at the same number. Matches found twice in a run — the same match under two sports, or a match URL that also appears in a search — are scraped and billed only once.

#### What does "Scrape Full Match Details" add?

Four more fields on each row: the full match card (managers, venue with coordinates, referee with career totals, attendance, period format), `statistics` (team statistics per period — ALL, 1ST, 2ND — in Sofascore's groups: Match overview, Shots, Attack, Passes, Duels, Defending, Goalkeeping), `lineups` (formation, every player with their per-match statistics, bench, missing players with the reason, kit colours) and `incidents` (goals with scorer, assist and running score, cards with reason, substitutions, VAR decisions, injury time, period markers). A match that has not kicked off yet has no statistics or incidents, so those come back `null`; sports without lineups (tennis, MMA…) return `null` there too. Match URLs are always scraped in full.

#### Is the data live?

Yes. Every run fetches Sofascore live — scores, clocks, statistics and lineups are as fresh as Sofascore itself, which updates in-play matches every minute.

#### What does it cost?

$0.001 per match — $1 per 1,000, flat on every plan, with no start fee. Full details add $0.002 per match ($3 per 1,000 all in), charged only when the details come back — if Sofascore has no details page for a match you keep the standard row at the standard rate. Apify's free plan gives you $5 of credit every month, which is 5,000 matches or ~1,666 fully-detailed matches free every month.

#### Is it legal to scrape Sofascore?

The Actor collects publicly available sports data — scores, fixtures, statistics and lineups — without personal information beyond the public profiles of professional players and staff. Please review Sofascore's terms of use and make sure your use complies with the law of your jurisdiction.

#### Can I get standings, player profiles or odds?

Not with this Actor — it is built for matches. Message us below if you need standings, player or team statistics, transfers or odds and we will sort you out.

### 💬 Have Questions? We Have Answers.

You're a business owner — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274\&text=I%20need%20help%20with%20using%20the%20Sofascore%20Scraper%20Actor.)

[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Sofascore%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20Sofascore%20Scraper%20Actor.)

You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

### Popular Actors by Omkar Cloud

- [**Skyscanner Scraper**](https://apify.com/omkar-cloud/skyscanner-scraper) — Skyscanner flights with every agent's price & booking link, $1 per 1,000 itineraries
- [**Booking Scraper**](https://apify.com/omkar-cloud/booking-scraper) — Booking.com hotels: prices, ratings, rooms & amenities
- [**Rightmove Scraper**](https://apify.com/omkar-cloud/rightmove-scraper) — UK homes for sale, to rent & new homes with agent phones, $1 per 1,000 listings
- [**Zoopla Scraper**](https://apify.com/omkar-cloud/zoopla-scraper) — Zoopla homes for sale, to rent & new homes with agent phones, $1 per 1,000 listings
- [**IMDb Scraper**](https://apify.com/omkar-cloud/imdb-scraper) — IMDb titles, charts, cast, ratings & box office
- [**G2 Product Scraper**](https://apify.com/omkar-cloud/g2-product-scraper) — G2 product details, ratings & AI-found contacts
- [**Website Email Contact Scraper**](https://apify.com/omkar-cloud/website-email-contact-scraper) — emails, phones & socials from any website
- [**AliExpress Product Scraper**](https://apify.com/omkar-cloud/aliexpress-product-scraper) — live product details, SKU variants, stock & shipping
- [**Etsy Scraper**](https://apify.com/omkar-cloud/etsy-scraper) — Etsy products: prices, discounts, shops & variations

👉 [**Scrape your first 5,000 matches free now**](https://apify.com/omkar-cloud/sofascore-scraper)

# Actor input Schema

## `sports` (type: `array`):

Sport slugs to search, one per entry: `football`, `tennis`, `basketball`, `ice-hockey`, `volleyball`, `handball`, `baseball`, `american-football`, `rugby`, `cricket`, `table-tennis`, `esports`, `mma`, `motorsport`, `darts`, `snooker`, `badminton`, `futsal`, `waterpolo`, `aussie-rules`, `beach-volley`, `cycling`, `floorball`, `bandy`, `minifootball`, `padel` (`soccer`, `hockey`, `nfl` and `ufc` are accepted as aliases). Used by the Scheduled and Live modes; Trending covers every sport. Leave empty to scrape only match URLs.

## `mode` (type: `string`):

Which matches to list: every match of the sport on a day (Scheduled), the matches in progress right now (Live), or the matches fans in a country are following across all sports (Trending).

## `date` (type: `string`):

Day to list as `YYYY-MM-DD` — past days give results, future days give fixtures. Optional: leave it empty and the API lists today (in the Timezone Offset). Only applies to the Scheduled mode.

## `tournamentId` (type: `string`):

Only that competition's matches on the day, e.g. `17` for the Premier League or a pasted sofascore.com tournament URL. Only applies to the Scheduled mode.

## `categoryId` (type: `string`):

Only that country's or region's matches on the day — a Sofascore category id such as `1` for England. Only applies to the Scheduled mode.

## `timezoneOffset` (type: `string`):

Hours from UTC that set the day boundary, from `-12` to `14` (half hours like `5.5` are fine). Leave empty for UTC. Only applies to the Scheduled mode.

## `country` (type: `string`):

2-letter ISO country code whose fans' trending matches to list, e.g. `US`, `GB`, `IN`, `BR`. Only applies to the Trending mode.

## `matchUrls` (type: `array`):

Sofascore match URLs like `https://www.sofascore.com/football/match/aston-villa-manchester-city/rP#id:14023961` or bare match ids like `14023961`. Always scraped with full details (billed at the detailed-match rate).

## `maxResults` (type: `integer`):

Maximum number of matches to scrape per sport (or per trending list). Use this to control your cost (1,000 matches ≈ $1). Ignored for match URLs.

## `scrapeDetails` (type: `boolean`):

When enabled, every match found is also scraped in full — managers, venue with coordinates, referee with career totals, attendance and period format, plus team statistics per period (possession, xG, shots, passes, duels, tackles, goalkeeping), confirmed lineups and benches with formation, missing players and every player's per-match statistics, and the incident timeline (goals with scorer, assist and xG, cards, substitutions, VAR decisions, injury time). Still one dataset row per match, billed once at the detailed-match rate instead of the standard rate (1,000 detailed matches ≈ $3 vs $1 standard). Runs take longer because each match is fetched individually.

## Actor input object example

```json
{
  "sports": [
    "football"
  ],
  "mode": "scheduled",
  "country": "US",
  "matchUrls": [
    "https://www.sofascore.com/football/match/aston-villa-manchester-city/rP#id:14023961",
    "14023961"
  ],
  "maxResults": 100,
  "scrapeDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sports": [
        "football"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/sofascore-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sports": ["football"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/sofascore-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sports": [
    "football"
  ],
  "maxResults": 100
}' |
apify call omkar-cloud/sofascore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/sofascore-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Y4zPdgc7bsAkU7LVK/builds/TsarBOj5qI59T8hbo/openapi.json
