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
21 days 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