Olympedia Olympic Results Scraper avatar

Olympedia Olympic Results Scraper

Pricing

from $0.71 / 1,000 item extracteds

Go to Apify Store
Olympedia Olympic Results Scraper

Olympedia Olympic Results Scraper

Export normalized public Olympedia Olympic event placements and medal-result rows by edition, sport, event, country, athlete or team.

Pricing

from $0.71 / 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

4 days ago

Last modified

Categories

Share

Export normalized Olympedia Olympic results by edition, sport, event, country, athlete or team. The Actor follows public Olympedia edition pages to event result tables and produces one integration-ready row per overall placement.

Use it to refresh historical sports datasets, build medal dashboards, compare editions, or send selected Olympic results to a spreadsheet, warehouse, notebook, or API workflow.

What does this Actor extract?

The Actor extracts the overall placement table published on each selected Olympedia event page. A row can include:

  • Olympic edition ID, title, year, and host city when discovered from an edition;
  • sport name and Olympedia sport code;
  • event ID, name, date, venue, and Olympic status;
  • athlete or team name and athlete ID where available;
  • three-letter NOC/country code;
  • rank or result status such as DNS;
  • Gold, Silver, or Bronze medal;
  • final result plus source-specific round results;
  • qualification labels exposed by Olympedia;
  • canonical source URL and extraction timestamp.

Values that Olympedia does not publish for a row are returned as null, not guessed.

Who is it for?

  • Sports analysts building reproducible Olympic result datasets.
  • Data journalists checking podiums and placements against source pages.
  • Dashboard teams refreshing medal views after source corrections.
  • Researchers comparing athletes, countries, sports, or editions.
  • Developers who need normalized JSON instead of many linked HTML tables.

Why use edition and sport discovery?

An Olympedia edition page links to every listed sport, and each sport page links to its events. Supplying an edition ID and optional sport codes lets the Actor traverse those stable relationships without brittle text search.

For one known event, provide its exact /results/<id> URL instead. Direct URL rows intentionally have null edition and sport context because the result page does not consistently expose those relationships. The Actor never invents missing context.

Input parameters

FieldTypeDefaultMeaning
editionIdsstring array["63"]Olympedia edition IDs, such as 63 for Paris 2024.
sportCodesstring arrayemptyOptional codes such as ATH or SWM. Empty means all listed sports.
eventUrlsURL arrayemptyExact public olympedia.org/results/<id> pages.
countryCodesstring arrayemptyOptional three-letter NOC filters such as USA.
medalsOnlybooleanfalseKeep only podium rows.
maxEventsinteger10Maximum event pages, from 1 to 500.
maxItemsinteger100Maximum accepted placement rows, from 1 to 50,000.

Provide at least one edition ID or event URL. Filters apply upstream of charging and dataset storage.

Getting started

  1. Open the Actor input page.
  2. Keep edition 63 for Paris 2024 or replace it with another Olympedia edition ID.
  3. Add a sport code if you do not need every sport.
  4. Turn on Medalists only for podium datasets.
  5. Set conservative event and row limits for the first run.
  6. Start the Actor and open the default dataset.
  7. Export the dataset as JSON, CSV, Excel, XML, or another Apify-supported format.

Example inputs

Paris 2024 athletics podiums

{
"editionIds": ["63"],
"sportCodes": ["ATH"],
"medalsOnly": true,
"maxEvents": 3,
"maxItems": 9
}

One complete Tokyo event table

{
"editionIds": [],
"eventUrls": [
{ "url": "https://www.olympedia.org/results/19000318" }
],
"medalsOnly": false,
"maxEvents": 1,
"maxItems": 25
}

USA swimming medal rows

{
"editionIds": ["63"],
"sportCodes": ["SWM"],
"countryCodes": ["USA"],
"medalsOnly": true,
"maxEvents": 10,
"maxItems": 30
}

Output example

A real Paris 2024 athletics row looks like this:

{
"editionId": 63,
"edition": "2024 Summer Olympics",
"year": 2024,
"sport": "Athletics",
"sportCode": "ATH",
"eventId": 2013500,
"event": "100 metres, Men",
"eventDate": "3 – 4 August 2024",
"venue": "Stade de France, Saint-Denis, France",
"status": "Olympic",
"rank": "1",
"competitor": "Noah Lyles",
"competitorType": "athlete",
"athleteId": 2104512,
"countryCode": "USA",
"medal": "Gold",
"result": "9.784 (1)",
"qualification": null,
"roundResults": {
"Number": "1328",
"R1": "10.04 (2 h3)",
"SF": "9.83 (2 h1)",
"Final": "9.784 (1)"
},
"sourceUrl": "https://www.olympedia.org/results/2013500"
}

roundResults preserves the named columns in Olympedia's overall table. Column names vary by sport because a race, judged event, tournament, and team event report different measurements.

How much does it cost to export Olympic event results?

Pay-per-event pricing has two parts:

  • Start: $0.0005 once per run.
  • Result item: $0.00118 per saved row on the BRONZE plan, with lower per-row prices on higher tiers.

At BRONZE, 9 podium rows cost about $0.01112, 100 rows about $0.1185, and 1,000 rows about $1.1805. Rejected rows do not create an item charge. Apify displays the applicable account tier in the run configuration.

Limits, pacing, and reliability

Olympedia is a public third-party source. The Actor sends serialized requests with a minimum delay to avoid unnecessary load. Temporary network errors, HTTP 429 responses, and server errors receive bounded retries and backoff. Stable invalid pages fail without wasteful retries.

Large multi-sport editions require many event requests and therefore take longer. Start with one sport and a modest maxEvents. The Actor does not use an automatic paid proxy or browser fallback.

A source layout change can require a parser update. If a page has no recognizable overall placement table, the run fails rather than emitting misleading empty data.

Filtering behavior

countryCodes and medalsOnly are applied to normalized result rows. maxItems counts accepted rows, not fetched or rejected rows. maxEvents bounds network work independently.

Sport filters use exact Olympedia codes and are case-insensitive. Unknown codes are logged for the selected edition. Duplicate event URLs are processed once.

Export and integration workflows

  • Schedule the Actor and connect the default dataset to Google Sheets.
  • Download CSV files for a BI dashboard refresh.
  • Use dataset item URLs in a Python or R analysis notebook.
  • Trigger a webhook after runs to start warehouse ingestion.
  • Join athleteId, eventId, and countryCode across repeated snapshots.
  • Compare scheduled datasets to identify corrections or newly populated results.

The Actor emits snapshots. Change detection and alerts should compare datasets in your downstream workflow.

Run with the Apify API

Replace YOUR_TOKEN with an Apify API token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~olympic-medal-event-results-tables/runs?token=YOUR_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"editionIds":["63"],"sportCodes":["ATH"],"medalsOnly":true,"maxEvents":3,"maxItems":9}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/olympic-medal-event-results-tables').call({
editionIds: ['63'], sportCodes: ['ATH'], medalsOnly: true,
maxEvents: 3, maxItems: 9,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/olympic-medal-event-results-tables").call(run_input={
"editionIds": ["63"], "sportCodes": ["ATH"],
"medalsOnly": True, "maxEvents": 3, "maxItems": 9,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use through MCP

Claude Code setup

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/olympic-medal-event-results-tables"

Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code clients can use:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/olympic-medal-event-results-tables"
}
}
}

Example prompts:

  • “Export medalists from the first three Paris 2024 athletics events.”
  • “Fetch all placements from Olympedia result 19000318.”
  • “Return USA medal rows from ten Paris 2024 swimming events.”

Legality and responsible use

Olympedia data is public, but public availability does not remove all obligations. Review Olympedia's terms and attribution expectations, respect applicable database and intellectual-property rights, and avoid republishing a substitute copy of the source. Use reasonable limits and schedules. Do not use the output to make sensitive decisions about individuals.

Troubleshooting

Why did the Actor reject my URL?

Only exact public https://www.olympedia.org/results/<numeric-id> URLs are accepted. Edition and sport pages belong in editionIds and sportCodes instead.

Why are edition or sport fields null?

Exact event URLs do not consistently expose edition/sport context. Use edition discovery when you need those fields.

Why are some result fields null?

Olympedia tables differ across eras and sports. The Actor preserves published values and does not infer absent dates, venues, athlete IDs, medals, or qualification labels.

Why is a large run slow?

Conservative serialized requests protect source reliability. Reduce maxEvents, select one sport, or split editions into scheduled runs.

Why did the run fail after retries?

Inspect the run log for the exact URL and status. A persistent source rate limit or changed table shape is treated as an error. Retry later with a smaller scope rather than repeatedly launching the same large input.

Data freshness

Every run reads current public Olympedia HTML. Historical records can be corrected after an Olympic edition ends. scrapedAt records collection time, while event dates remain source text so historical ranges are not silently reinterpreted.

FAQ

Does this scrape every round as a separate row?

No. Each output item is one overall placement. Named round values included in the overall table are retained in roundResults; detailed heat and split tables are not emitted separately.

Are medal-table country totals included?

No. This Actor emits event placements and medal-result rows. It does not emit separate aggregate NOC medal-table entities.

Can it process Winter and historical editions?

Yes, when the public edition follows the same Olympedia edition → sport → result structure. Because historical table shapes vary, test a small input prior to a large archival run.

Does it need a proxy or Olympedia account?

No. It uses anonymous public HTML and has no automatic proxy fallback.

Can I export Excel?

Yes. After the run, choose Excel in the Apify dataset export options or use the dataset API.

For broader sports workflows, explore the ESPN Multi-League Odds Scraper for current betting lines or the ESPNcricinfo Statsguru Scraper for cricket statistics. They are separate sources and are not required by this Actor.

Support

When reporting a problem, include the run URL, sanitized input, affected Olympedia result URL, expected row, and actual behavior. Do not paste API tokens or private integration credentials.