# Giro d'Italia Stage & Classification Tables (`trovevault/giro-ditalia-stage-classification-tables`) Actor

Returns Giro d'Italia stage results and stage-by-stage GC, points, mountains, young rider, and team standings.

- **URL**: https://apify.com/trovevault/giro-ditalia-stage-classification-tables.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** News, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Giro d'Italia Stage & Classification Tables

Giro d'Italia Stage & Classification Tables returns structured Giro d'Italia stage results and classification tables by edition year and stage. Use it to collect stage standings, overall standings after a selected stage, points, mountains, young rider, and team classifications without managing race-page URLs yourself.

The actor is focused on one competition, so the input stays small: choose a year, choose one stage or all stages, select the tables you need, and set the maximum rank. Output rows are normalized for dashboards, fantasy cycling tools, editorial databases, betting models, sports archives, and API workflows.

### Why Use This Actor

- Get Giro d'Italia data without selecting from a generic cycling race list.
- Pull one stage or every stage in the edition.
- Return stage-by-stage classification snapshots, not only final standings.
- Inspect separate Apify output datasets for stage results, overall, points, mountains, young rider, and team tables.
- Export clean rows by year, stage, classification, rank, rider, team, time, gap, and points.
- Append rows to an existing Apify dataset with `datasetId` when using a larger pipeline.

### What It Produces

The actor can return these table types:

- stage result
- overall / general classification after the selected stage
- points classification after the selected stage
- mountains classification after the selected stage
- young rider classification after the selected stage
- team classification after the selected stage

All rows are written to the default dataset. The actor also writes each table type to its own run-scoped output dataset, so Console users can open Stage Results, Overall / GC, Points, Mountains, Young Rider, or Team without seeing unrelated rows.

### Use Cases

- Fantasy cycling platforms importing leaders and top riders after each stage.
- Sports journalists checking the classification picture on a specific day.
- Cycling analysts building stage-by-stage Grand Tour history tables.
- Betting and prediction tools comparing race position changes.
- Fans or archivists maintaining structured Giro d'Italia dashboards.

### How To Use

1. Enter the edition year, for example `2024`.
2. Set Stage to `all` or a stage number such as `15`.
3. Choose the classifications to return.
4. Set Max Rank.
5. Run the actor and download JSON, CSV, Excel, or consume the dataset through the API.

### Input Example

```json
{
  "year": 2024,
  "stage": "15",
  "classifications": ["stage", "general", "points", "mountains", "young", "team"],
  "maxRank": 10
}
````

### Input Reference

| Field | Type | Description |
| --- | --- | --- |
| `year` | integer | Four-digit Giro d'Italia edition year. |
| `stage` | string | Use `all` for every discovered stage or a stage number such as `15`. |
| `classifications` | array | One or more of `stage`, `general`, `points`, `mountains`, `young`, `team`. |
| `maxRank` | integer | Highest rank returned per selected table. |
| `datasetId` | string | Optional existing Apify dataset ID to append rows to. |
| `runId` | string | Optional workflow identifier copied into output rows. |
| `proxyConfiguration` | object | Apify proxy settings. Residential proxy is the default because the public race pages often block cloud datacenter traffic. |

### Output Example

```json
{
  "raceName": "Giro d'Italia",
  "editionYear": 2024,
  "stageNumber": 15,
  "stageName": "Manerba del Garda > Livigno",
  "classificationType": "general",
  "rank": 1,
  "riderName": "Tadej Pogacar",
  "riderNationality": "Slovenia",
  "teamName": "UAE Team Emirates",
  "time": "49:17:49",
  "winner": true
}
```

### Output Reference

| Field | Description |
| --- | --- |
| `raceName` | Race name. |
| `editionYear` | Race edition year. |
| `stageNumber` | Stage number represented by the row. |
| `stageName` | Stage route or label when available. |
| `stageDate` | Stage date when available. |
| `classificationType` | `stage`, `general`, `points`, `mountains`, `young`, or `team`. |
| `rank` | Position in the table. |
| `riderName` | Rider name for rider-level rows. |
| `riderNationality` | Rider nationality when available. |
| `teamName` | Rider team or team classification entry. |
| `time` | Recorded time when available. |
| `timeBehind` | Gap to the winner or leader when available. |
| `points` | Points total when available. |
| `winner` | `true` when rank is 1. |
| `runId` | Optional workflow ID supplied in the input. |

### API Example

```bash
curl "https://api.apify.com/v2/acts/TroveVault~giro-ditalia-stage-classification-tables/runs?waitForFinish=120" \
  -X POST \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "year": 2024,
    "stage": "15",
    "classifications": ["stage", "general", "points"],
    "maxRank": 10
  }'
```

### Limitations

Coverage is strongest for modern editions with complete public race records. Older editions can have fewer stage details or missing secondary classifications. Some stages may not have every classification table, especially if a classification was not active or the public record is incomplete for that edition.

The actor returns normalized cycling rows, not diagnostic source-navigation data. If a table is not found, the run still completes and records missing table details in `RUN_SUMMARY`.

### FAQ

#### Can I search one stage?

Yes. Set `stage` to a number such as `15`.

#### Can I get every stage?

Yes. Set `stage` to `all`. The actor discovers stage pages for the selected edition and returns the selected classifications for each stage.

#### Are final standings included?

For Grand Tours, the last stage classification snapshot represents the final race state. Use `stage: "all"` to collect every stage snapshot, including the final stage.

#### Are the classifications separate datasets?

Yes. The default dataset contains all rows, and the run output also links to separate datasets for stage results, overall, points, mountains, young rider, and team tables.

#### Can I use this with MCP or scheduled workflows?

Yes. Run it through Apify API, schedules, integrations, or MCP workflows. Use `datasetId` and `runId` when you need to append rows or tag downstream exports.

### Related Actors

Use this actor when you need a focused Giro d'Italia table. Use the broader Professional Cycling Results & Classifications actor when you need many races from one generic input.

### Changelog

- `0.1`: Initial TroveVault release with stage results and stage-by-stage classification tables.

### Support

Open an issue in the actor discussion tab with the year, stage value, selected classifications, and run ID.

# Actor input Schema

## `year` (type: `integer`):

Four-digit Giro d'Italia edition year to retrieve. Recent editions usually have the most complete public stage and classification records.

## `stage` (type: `string`):

Use all for every discovered stage, or enter a stage number such as 1, 12, or 21. Stage-specific classification rows represent standings after that stage.

## `classifications` (type: `array`):

Result tables to return. Stage gives the stage result. General, points, mountains, young rider, and team give the standing after each selected stage.

## `maxRank` (type: `integer`):

Highest rank returned for each selected table. Use 1 for winners/leaders, 10 to 25 for compact analysis, or a higher value for fuller tables.

## `datasetId` (type: `string`):

Optional existing Apify dataset ID. When provided, the actor writes the same rows to the default dataset and appends them to this dataset for pipeline workflows.

## `runId` (type: `string`):

Optional workflow identifier copied to output rows so scheduled runs or external systems can group exports.

## `proxyConfiguration` (type: `object`):

Apify proxy configuration. The default uses Residential proxy because the public race pages often block cloud datacenter traffic.

## Actor input object example

```json
{
  "year": 2024,
  "stage": "all",
  "classifications": [
    "stage",
    "general",
    "points",
    "mountains",
    "young",
    "team"
  ],
  "maxRank": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `allTables` (type: `string`):

No description

## `stageResults` (type: `string`):

No description

## `overall` (type: `string`):

No description

## `points` (type: `string`):

No description

## `mountains` (type: `string`):

No description

## `young` (type: `string`):

No description

## `team` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/giro-ditalia-stage-classification-tables").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("trovevault/giro-ditalia-stage-classification-tables").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call trovevault/giro-ditalia-stage-classification-tables --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/giro-ditalia-stage-classification-tables",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Giro d'Italia Stage & Classification Tables",
        "description": "Returns Giro d'Italia stage results and stage-by-stage GC, points, mountains, young rider, and team standings.",
        "version": "0.1",
        "x-build-id": "Skfim9Mx7bhVsKHac"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~giro-ditalia-stage-classification-tables/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-giro-ditalia-stage-classification-tables",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~giro-ditalia-stage-classification-tables/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-giro-ditalia-stage-classification-tables",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~giro-ditalia-stage-classification-tables/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-giro-ditalia-stage-classification-tables",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "year"
                ],
                "properties": {
                    "year": {
                        "title": "Edition Year",
                        "minimum": 1900,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Four-digit Giro d'Italia edition year to retrieve. Recent editions usually have the most complete public stage and classification records.",
                        "default": 2024
                    },
                    "stage": {
                        "title": "Stage",
                        "type": "string",
                        "description": "Use all for every discovered stage, or enter a stage number such as 1, 12, or 21. Stage-specific classification rows represent standings after that stage.",
                        "default": "all"
                    },
                    "classifications": {
                        "title": "Classifications",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Result tables to return. Stage gives the stage result. General, points, mountains, young rider, and team give the standing after each selected stage.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "stage",
                                "general",
                                "points",
                                "mountains",
                                "young",
                                "team"
                            ],
                            "enumTitles": [
                                "Stage result",
                                "Overall / GC",
                                "Points",
                                "Mountains",
                                "Young rider",
                                "Team"
                            ]
                        },
                        "default": [
                            "stage",
                            "general",
                            "points",
                            "mountains",
                            "young",
                            "team"
                        ]
                    },
                    "maxRank": {
                        "title": "Max Rank",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Highest rank returned for each selected table. Use 1 for winners/leaders, 10 to 25 for compact analysis, or a higher value for fuller tables.",
                        "default": 25
                    },
                    "datasetId": {
                        "title": "Append To Dataset ID",
                        "type": "string",
                        "description": "Optional existing Apify dataset ID. When provided, the actor writes the same rows to the default dataset and appends them to this dataset for pipeline workflows."
                    },
                    "runId": {
                        "title": "Run ID",
                        "type": "string",
                        "description": "Optional workflow identifier copied to output rows so scheduled runs or external systems can group exports."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. The default uses Residential proxy because the public race pages often block cloud datacenter traffic.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
