Czech Athletics Scraper
Pricing
Pay per usage
Czech Athletics Scraper
Scrapes official competition results, athlete profiles, and event calendars from atletika.cz. Returns clean JSON data with auto-calculated World Athletics (Spiriev) scoring points.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Dan Kováč
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Apify actor that scrapes public results from atletika.cz, the official website of the Czech Athletics Federation.
The actor exposes three independent scrapers — meet results, athlete profiles, and calendar lookup — and returns raw parsed dictionaries. It performs no ETL, aggregation, or post-processing; downstream consumers are expected to transform the records into whatever shape they need.
Modes
Set the mode input to one of:
| Mode | Inputs used | Returned records |
|---|---|---|
meet | meetIds: int[] | One row per athlete performance (or attempt for field/vertical events). record_type = "meet_result". |
athlete | athleteIds: int[] | Athlete profile (record_type = "athlete_profile"), plus one row per medal (athlete_medal) and one row per achievement entry (athlete_achievement). |
calendar | dateFrom, dateTo (YYYY-MM-DD) | One row per meet ID found in the range. record_type = "calendar_meet_id". |
All records are pushed to a single default dataset. Use the record_type field to route them.
Inputs
| Field | Type | Description |
|---|---|---|
mode | string (enum) | meet, athlete, or calendar. |
meetIds | int[] | Meet IDs to scrape (for mode = meet). |
athleteIds | int[] | Athlete CAS IDs to scrape (for mode = athlete). |
dateFrom | string | ISO date, defaults to today (for mode = calendar). |
dateTo | string | ISO date, defaults to dateFrom + 31 days. |
requestDelayMs | int | Delay between HTTP requests. |
requestTimeoutSecs | int | Per-request timeout. Defaults to 30. |
proxyConfiguration | object | Apify Proxy config. Recommended — atletika.cz rate-limits aggressively. |
Output Data Structure
All records are pushed to a single default dataset. Use the record_type field to route them in your downstream pipelines.
1. Meet Results (mode = "meet")
{"meet_id": "Integer: Unique identifier of the athletics meet","meet_name": "String: Official name of the competition","location": "String: Competition location","date": "String: Competition date (YYYY-MM-DD)","time": "String: Event start time or null","is_indoor": "Boolean: Indoor or outdoor competition flag","event_id": "String: Unique identifier of the event","discipline": "String: Discipline name","specification": "String: Event-specific parameters (e.g., hurdle height, javelin weight) or null","main_phase": "String: Main competition phase (e.g., Final, Heat, Qualification)","sub_phase": "String: Subdivision of phase (e.g., Heat 2, Final A)","name": "String: Athlete name","cas_id": "String: Unique federation athlete identifier","category": "String: Competition category","sex": "String: Athlete sex (M/Z)","birth_year": "String: Athlete birth year","age": "Integer: Athlete age at competition date","team": "String: Represented club","lane": "Integer: Assigned lane number or null","order": "Integer: Starting order or null","reaction": "Float: Reaction time or null","performance_raw": "String: Original result text as displayed on the website","numeric_value": "Float: Parsed numerical performance value","wind": "Float: Wind measurement value or null","wa_points": "Integer: World Athletics scoring points","height": "Float: Height value for vertical jump events or null","attempt_in_series": "Integer: Attempt sequence identifier or null","position": "String: Final competition placement","record": "String: Performance status marker (e.g., PB, SB, MR) or null","dq_rule": "String: Disqualification rule code or null","trial_id": "String: Unique UUID of the result record","record_type": "String: Always 'meet_result'"}
2. Athlete Data (mode = "athlete")
Athlete Info
{"cas_id": "Integer: Athlete official CAS federation ID","name": "String: Athlete full name","birth_year": "Integer: Athlete birth year","club": "String: Current represented club","coach_1": "String: Primary coach or null","coach_2": "String: Secondary coach or null","coach_3": "String: Tertiary coach or null","registration_until": "String: Registration validity date (YYYY-MM-DD)","record_type": "String: Always 'athlete_profile'"}
Athlete Medals
{"medal_id": "String: Unique UUID of the medal record","cas_id": "Integer: Athlete official CAS federation ID","year": "Integer: Year of the championship","placement": "Integer: Final placement (1, 2, or 3)","category": "String: Championship category (e.g., MČR)","type": "String: Environment (e.g., dráha, hala)","discipline": "String: Discipline name","location": "String: Host city/location","performance_raw": "String: Original result text","numeric_value": "Float: Parsed numerical performance value","record_type": "String: Always 'athlete_medal'"}
Athlete Achievements
{"achievement_id": "String: Unique UUID of the achievement record","cas_id": "Integer: Athlete official CAS federation ID","year": "Integer: Year of the event","event_name": "String: Name of the major event (e.g., OH, MS)","discipline": "String: Discipline name","result_phase": "String: Reached phase or placement","record_type": "String: Always 'athlete_achievement'"}
3. Calendar (mode = "calendar")
{"record_type": "String: Always 'calendar_meet_id'","meet_id": "Integer: Unique identifier of the meet"}
Scoring
Meet results include a wa_points field computed via the quadratic model. Coefficients live in src/coefficients-2025.json; replacing that file is all that's required to migrate to a future edition of the tables. The methodology follows Jeff Chen's iaaf-scoring-tables.
Development
Local run (without Apify platform):
pip install -r requirements.txt$env:APIFY_LOCAL_STORAGE_DIR="apify_storage"; python -m src
The actor reads its input via the standard Apify input mechanism — for local runs, place an apify_storage/key_value_stores/default/INPUT.json file with the desired input.
Layout
.actor/actor.json # Actor metadatainput_schema.json # Input UI schemaDockerfile # Build reciperequirements.txt # apify, requests, selectolaxsrc/__main__.py # python -m src entrypointmain.py # Async actor orchestratorscraper.py # HTML fetch + parsing logiccas_config.py # Discipline / category / WA mappingscalculator.py # Spiriev points calculatorcoefficients-2025.json