SoccerStats Football Statistics Scraper avatar

SoccerStats Football Statistics Scraper

Pricing

from $0.62 / 1,000 item extracteds

Go to Apify Store
SoccerStats Football Statistics Scraper

SoccerStats Football Statistics Scraper

Export SoccerStats league tables, team form, fixtures, results, scoring trends, and home-away performance rows.

Pricing

from $0.62 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Export public SoccerStats league tables, fixtures, match results, team form, scoring trends, and home-away performance as structured dataset rows.

The Actor is designed for the recurring job behind a soccerstats league 2 tracker: refresh football datasets without copying tables by hand. It also accepts other public SoccerStats league codes and archived-season codes.

What can you collect?

  • current league standings with position, games, wins, draws, losses, goals, and points;
  • upcoming fixture dates, kickoff times, and teams;
  • completed match results and source outcome indicators;
  • team form tables for several recent-match windows;
  • separate home, away, and relative performance tables;
  • scoring trends such as goal thresholds, both-teams-scored, clean sheets, and failed-to-score rates.

Every row includes its league code, table name, source URL, record type, and extraction timestamp.

Who is this SoccerStats scraper for?

Football analysts can refresh comparable league and team tables for models and notebooks.

Sports publishers can feed fixture, result, and table data into editorial workflows.

Match researchers can compare form, home-away splits, and scoring tendencies.

Data teams can schedule stable exports to datasets, spreadsheets, warehouses, or webhook automations.

Why use this Actor?

SoccerStats exposes many useful tables across separate pages. This Actor turns those pages into one consistent record format while preserving section-specific columns in metrics.

It supports both easy league-code input and exact SoccerStats league URLs. The same section selection and output limit apply to either input route.

SoccerStats blocks ordinary automated datacenter requests. The Actor therefore uses a bounded UK residential-proxy route, retries once with a fresh identity on transient or challenge failures, and stops with a visible error rather than returning a misleading empty dataset.

Input

FieldTypeDefaultDescription
leagueCodesstring array['england4']Values from SoccerStats' league= URL parameter. An _YYYY suffix selects an archived season.
startUrlsURL arraynoneExact public SoccerStats league URLs. The URL must include a valid league parameter.
sectionsstring arrayall sixChoose standings, fixtures, results, form, homeAway, and/or trends.
maxItemsinteger500Global output limit from 1 to 10,000 records.

If both URL and code inputs are supplied, both are processed and duplicate page/section combinations are removed.

Get started in three steps

  1. Open the Actor input page.
  2. Keep england4 for League Two or enter another code from a public SoccerStats league URL.
  3. Select the required sections and click Start.

For a quick current table and match-results export, use:

{
"leagueCodes": ["england4"],
"sections": ["standings", "results"],
"maxItems": 60
}

Supported sections

Standings

Returns the main league table with standard table fields and available source-specific metrics.

Fixtures

Returns upcoming match rows from the league page. Fixtures contain a date label, kickoff time, home team, away team, and scheduled outcome.

Results

Returns completed matches with home and away goals, outcome, and source indicators such as total goals or both-teams-scored.

Form

Returns recent form tables, including the match-window and home/away scope in tableName.

Home-away performance

Returns home table, away table, and relative home-away performance rows.

Returns team scoring-trend rows. Extra table columns are retained by their SoccerStats labels in metrics.

Output fields

FieldMeaning
recordTypeSelected section that produced the row.
leagueCode, leagueName, seasonSource league identity and archived season when present.
tableNameHuman-readable table or statistical slice.
position, teamTeam-table identity fields.
played, wins, draws, lossesStandard team record fields when available.
goalsFor, goalsAgainst, goalDifferenceTeam scoring totals.
points, pointsPerGameTable points and PPG.
date, timeSource match date label and kickoff time.
homeTeam, awayTeamMatch participants.
homeGoals, awayGoals, outcomeResult score and outcome, or fixture state.
metricsAdditional labelled columns from the source table.
sourceUrl, scrapedAtProvenance and UTC extraction time.

Fields that do not apply to a record type are null. This lets one default dataset carry team and match rows without inventing values.

Output example

{
"recordType": "standings",
"leagueCode": "england4",
"leagueName": "League Two",
"season": null,
"tableName": "League table",
"position": 1,
"team": "Sample City",
"played": 5,
"wins": 4,
"draws": 0,
"losses": 1,
"goalsFor": 12,
"goalsAgainst": 6,
"goalDifference": 6,
"points": 12,
"pointsPerGame": 2.4,
"metrics": { "CS": "60%", "SR": "100%" },
"sourceUrl": "https://www.soccerstats.com/latest.asp?league=england4",
"scrapedAt": "2026-09-11T06:00:00.000Z"
}

Team names in this documentation are anonymized. Actual runs return the public names shown by SoccerStats.

How much does it cost to export SoccerStats football statistics?

The Actor uses pay-per-event pricing:

  • $0.005 when a run starts;
  • each useful dataset row is charged at the active plan's item price;
  • current item tiers range from $0.0011978 on FREE to $0.00062496 on GOLD, PLATINUM, and DIAMOND.

At the FREE-tier price, 25 useful records cost about $0.03495 including the start event. A 100-row export costs about $0.12478. Apify shows the exact charge limit and active tier before a run.

Failed parsing attempts and rejected rows are not charged as items. Residential proxy and platform usage are covered by the Actor's event price rather than billed as a separate Actor event.

Schedule recurring dataset refreshes

Use an Apify schedule to run the same league and section input daily or weekly. Downstream automations can compare the new dataset against a prior export, update a warehouse, or notify a team when a fixture or table row changes.

The Actor produces snapshots; it does not maintain history or send alerts by itself. Store each run's dataset in your own destination when longitudinal analysis is required.

Export and integrations

From the Dataset tab you can download JSON, CSV, Excel, XML, or RSS-compatible output.

Common workflows include:

  • send current tables to Google Sheets with Make;
  • load results into BigQuery or PostgreSQL;
  • trigger a webhook when a scheduled run finishes;
  • join scoring trends with an internal match model;
  • build a lightweight football-content refresh pipeline.

Run with the Apify API

Set APIFY_TOKEN in your shell; do not put a token into source code.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~soccerstats-football-stats-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"leagueCodes":["england4"],"sections":["fixtures","results"],"maxItems":50}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/soccerstats-football-stats-scraper').call({
leagueCodes: ['england4'],
sections: ['standings', 'form'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/soccerstats-football-stats-scraper').call(run_input={
'leagueCodes': ['england4'],
'sections': ['homeAway', 'trends'],
'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI assistants

Claude Code

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/soccerstats-football-stats-scraper"

Claude Desktop, Cursor, and VS Code

Use this equivalent configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/soccerstats-football-stats-scraper"
}
}
}

Example prompts:

  • “Export the current SoccerStats League Two standings and show the top five teams.”
  • “Get League Two upcoming fixtures and scoring trends as JSON.”
  • “Compare Premier League home and away points-per-game rows.”

Reliability and limits

SoccerStats is the source of truth for available leagues, seasons, fixtures, and statistical columns. Page content can change without notice.

The Actor validates the expected table shape. A challenge page, unsupported URL, missing league parameter, or changed source layout causes a failed run instead of a successful empty dataset.

Dates are kept as source labels because SoccerStats pages may omit a year and timezone. Normalize them downstream only when your league and season context supplies the missing information.

One run stops at maxItems. Records are emitted in page and section processing order, so a small limit may be reached before later selected sections.

Troubleshooting

Why did my run report no records?

Confirm that the league code is current, the selected section exists on that league page, and an archived suffix points to a season that SoccerStats still exposes. A parser-shape error may also indicate a source redesign.

Why do some fields contain null?

The dataset combines team tables and match rows. Match scores do not apply to standings, while table points do not apply to fixtures. Section-specific values remain in metrics.

Why must an exact URL include league=?

The league parameter is the stable source scope. Requiring it prevents accidental crawling of unrelated SoccerStats pages and ensures the selected sections can be applied consistently.

Legality and responsible use

This Actor collects publicly displayed football statistics. Review SoccerStats' terms, robots guidance, and applicable law before running it at scale.

Use modest schedules, request only the sections you need, and do not republish source branding or protected content as your own. Do not use the Actor to bypass accounts, access controls, or personal-data protections.

FAQ

Does it require a SoccerStats account?

No. It targets public league pages and does not accept login credentials.

Can it scrape an archived season?

Yes, when SoccerStats provides the season through a league code such as england4_2025.

Does it predict match outcomes?

No. It exports source statistics for your own analysis; it does not generate predictions or betting advice.

Can I select one team?

Not currently. Use the dataset API or your downstream tool to filter team, homeTeam, or awayTeam.

Are updates real time?

No guarantee is made. Each run captures what the public SoccerStats page displays at extraction time.

For broader sports workflows, combine this Actor with SofaScore Live Events & Statistics Scraper when you need scheduled or live event context from a different source.

Use each source's identifiers independently; the Actors do not claim that team or competition names map perfectly across providers.