OneFootball Scraper at a glance
OneFootball Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes kind, id, title / team, link and publisher, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 28 options
Scrape public OneFootball data including football news, upcoming fixtures, match results and league tables. Get clean, structured data for teams, competitions and matches in one place.
What OneFootball Scraper can do
- Two ways to collect. Search mode walks the competitions, teams and global feed you list; links mode reads exactly the OneFootball pages you paste: competition, team, match or article pages, or the home feed.
- Three record kinds in one dataset. News articles, match fixtures and results, and league table rows, each labelled by recordType, so one run can feed a news page and a scores widget together.
- Full article text on demand. Turn on Read full article text to fetch each article's own page and add the complete body. A failed read keeps the feed data and is never billed.
- Whole seasons, not just a matchday. A competition's fixtures list follows the site's own continuation link to bring in the rest of the season in the same run.
- Built for schedules. Recurring updates returns only new and changed records on repeat runs, labelled NEW, UPDATED, REAPPEARED, UNCHANGED or EXPIRED. Scores, table numbers and article text are all watched for changes.
- Resume without repaying. Continue an interrupted run by pasting its run id, and records it already collected are skipped.
Choose what to collect
These inputs let you configure OneFootball Scraper - News, Fixtures, Results & Standings. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Where to collect from: the competitions, teams and news feeds you pick below, or your own OneFootball links. |
competitionsarray | Only read when mode = search. One entry per competition: the link slug or the full competition link, e.g. premier-league-9, bundesliga-1, laliga-10, serie-a-13, ligue-1-23. Each competition yields its news, fixtures, results and (for leagues) its table. Find slugs on any competition page link. |
teamsarray | Only read when mode = search. One entry per team: the link slug or the full team link, e.g. arsenal-2 or real-madrid-1915. Each team yields its news and its recent and upcoming matches. |
includeGlobalNewsboolean | Only read when mode = search. Also read the site-wide front-page news feed (the latest headlines across all competitions, in the selected language). |
urlsarray | Only read when mode = my own links. Paste competition pages (optionally with /fixtures, /results or /table at the end), team pages, match pages, news article pages, or the home feed. Each link is read exactly as pasted; the page it names decides what is collected. Left untouched, this field holds one example of every supported link shape (home feed, competition news / fixtures / results / table, team news / fixtures / results, match, article, localized competition links). A ?page= parameter is not followed: the link is read from its first page and the run is flagged as partial scope. |
languagestring | Language of the news feeds, team pages and match pages. The site serves other languages only partially, so English is the one reliably complete edition; article links you paste are read in their own language when the site serves them. |
includeNewsboolean | Collect news articles from competitions, teams and the global feed. |
Show 21 more inputs
| Input | What it controls |
|---|---|
includeFixturesboolean | Collect upcoming matches from competitions and teams. |
includeResultsboolean | Collect played matches with final scores from competitions and teams. |
includeTableboolean | Collect league-table rows (position, played, won, drawn, lost, goal difference, points) from competitions that have one. |
dateFromstring | Keep only matches (by kickoff day) and news (by publish day) on or after this date, format YYYY-MM-DD. League table rows are never narrowed. |
dateTostring | Keep only matches and news on or before this date, format YYYY-MM-DD. |
matchStatusstring | Narrow match rows: scheduled (not started), live (in play or at half time), or finished. News is not affected. |
querystring | Keep only rows whose title, preview, team names or competition name contain this text (case-insensitive). |
sortBystring | Order rows within each source: date (kickoff or publish time) or title (news title or home team). Default keeps the site order. |
sortOrderstring | Direction used when Sort by is not the site order. |
fetchDetailsboolean | Open each news article's own page and add the full article text to the record. Off by default: a run without it is cheaper and still carries titles, previews, publishers and timestamps. |
maxItemsinteger | Stop after this many records across the whole run (0 = the highest allowed cap, 100000; the walk ends earlier when the sources run out). Values above 100000 are read as 100000. News, matches and table rows all count. |
maxPagesinteger | Runaway guard: an upper bound on how many pages are read for any single news feed. Leave 0 to go as deep as the source serves, with the record cap above as the only real limit. |
resumeFromRunIdstring | Paste the run id (or dataset id) of an earlier run of this Actor to continue it. Records that run already returned are skipped, so an interrupted large collection can finish without paying for the same rows twice. Leave empty for a normal run. |
incrementalModeboolean | Turn this on for daily or weekly monitoring. The first run returns everything as NEW. Later runs return only NEW, UPDATED and REAPPEARED records, each labelled in a changeType column. Scores, table numbers and article text are watched, so a match that finished or a row that moved counts as UPDATED. Leave off for a normal one-off run. |
stateKeystring | Optional. Name this monitoring campaign to keep its memory stable, or to deliberately share one memory across differently configured runs. Leave empty and the memory is keyed on the run setup automatically. |
emitUnchangedboolean | Off by default. Turn on to also return records that have not changed since the last run, labelled UNCHANGED. This returns, and bills, rows you already have. |
emitExpiredboolean | Off by default. Turn on to also return records that were present before and are no longer found, labelled EXPIRED (for example a match or article that scrolled out of every source). Only produced when a run covered its whole setup, so a capped or continued run never reports records as gone. This returns, and bills, extra rows. |
ignoreFieldsForChangesarray | Optional. Field names to leave out when deciding whether a record changed, in addition to the built-in handling (read order, source labels and relative times such as "9 minutes ago" already never trigger an UPDATED). Use it when another field turns out to be noisy in your setup. Use a dotted name such as homeTeam.name to ignore a field inside a nested object. The field is still returned in the output; it just does not count as a change. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordTypeKindidIdtitleTitle / teamurlLinkpublisherPublisherpublisherImageUrlPublisher imagepublisherIsVerifiedPublisher verifiedproviderNameProviderproviderImageUrlProvider imagepublishedAtPublishedpublishTimePublished displaypreviewPreviewShow 45 more fields
imageUrlImageisVideoVideoarticleTextArticle textarticleCharsArticle charscompetitionNameCompetitioncompetitionUrlCompetition linkcompetitionLogoUrlCompetition logocompetitionSlugCompetition slughomeTeamHomehomeTeamUrlHome linkhomeTeamBadgeUrlHome badgehomeScoreHome scoreawayTeamAwayawayTeamUrlAway linkawayTeamBadgeUrlAway badgeawayScoreAway scorekickoffKickoffkickoffFormattedKickoff datekickoffTimeFormattedKickoff timestatusStatusstatusLabelStatus labeleventsEventslineupsLineupsstatisticsStatisticsformGuideForm guidestadiumStadiumpositionPositionpositionChangePosition changeteamNameTeamteamUrlTeam linkplayedPlayedwonWondrawnDrawnlostLostgoalDifferenceGDpointsPointslanguageLanguagesourceTypeSource kindsourceIdSourcesourceUrlSource linkscrapedAtScraped atchangeTypeChangechangedFieldsChanged fieldsfirstSeenAtFirst seenlastSeenAtLast seenWays to use this data
- Sports media and newsletters: turn a competition's news feed and results into automated match reports and roundups.
- Live scores and fixtures widgets: feed a site or app with a team's or competition's upcoming matches and results.
- Betting and fantasy research: track fixtures, results and league table movement across the competitions a model follows.
- Season datasets: run on a schedule to build your own archive of results and standings as a season unfolds.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does OneFootball Scraper return?
The documented output for OneFootball Scraper includes kind, id, title / team, link, publisher, publisher image, publisher verified and provider. Availability of each field depends on the source page and the selected mode.
How much does OneFootball Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed records on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Recurring updates. Each run then returns only NEW, UPDATED and REAPPEARED records, and unchanged ones are skipped and not billed unless you turn that on too.
What is the difference between "Continue a previous run" and "Recurring updates"?
They solve different problems. Continue a previous run (resumeFromRunId) finishes ONE run that was interrupted, skipping records it already collected. Recurring updates (incrementalMode) is for running the same setup again and again on a schedule, comparing against last time. Turning both on for the same setup fails the run with a message asking you to pick one.
Why did a competition return nothing, or the wrong league?
Slugs carry the site's own id, and it is not guessable: bundesliga-1 is the German Bundesliga, bundesliga-35 is Liga Portugal. Copy the slug, or the whole link, from the competition's own page on OneFootball rather than typing one from memory. A slug that does not exist fails that one source loud, with the rest of the run unaffected.
Why did my run fail instead of returning an empty dataset?
If every page the run tried was refused, the run stops with a clear message so a genuinely quiet news day is never confused with a connection problem. Run it again in a few minutes. If only some competitions, teams or links could be read, you still get what was found, with a note on the run page.
