# SNCF Train Ticket and Connection Scraper (`jindrich.bar/sncf-train-ticket-scraper`) Actor

Scrape live SNCF train connections, schedules, ticket prices, transfers, delays, and fares across France and Europe. Extract structured SNCF timetable data for travel apps, price monitoring, analytics, and AI agents.

- **URL**: https://apify.com/jindrich.bar/sncf-train-ticket-scraper.md
- **Developed by:** [Jindřich Bär](https://apify.com/jindrich.bar) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 trips

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

## SNCF train tickets & connections scraper

Search **SNCF Connect** train journeys across France (TGV INOUI, OUIGO, Intercités, TER, and
connecting services) and get back a structured dataset of routes, times, transfers, and **live
ticket prices** — ready to plug into spreadsheets, databases, dashboards, or AI agents.

Pulls data straight from SNCF Connect ([sncf-connect.com](https://www.sncf-connect.com)), so you get
the same trains, schedules, and fares a passenger sees when booking.

### What you can do with it

- **Compare ticket prices** between any two French stations in real time — Paris to Marseille,
  Lyon to Bordeaux, Lille to Nice, and every other route SNCF Connect covers.
- **See fares by class** — cheapest 2nd-class and 1st-class prices, plus the discount-card price
  when one is offered.
- **Inspect each journey's legs** — train type and number, transfer points, per-leg times.
- **Monitor fares over time** by scheduling the actor to run daily / hourly and writing results to
  your own datastore.
- **Build a travel-planning assistant** — feed the JSON output into an LLM agent that answers
  "what's the cheapest train from Paris to Marseille next Saturday morning".

Typical use cases: travel comparison sites, price-monitoring tools, business-trip planners,
journalists covering transport, and AI agents that need a structured French rail-data source.

### Input

| Field | Required | Default | Description |
| --- | --- | --- | --- |
| `from` | yes | — | Departure station or city (e.g. `"Paris"`, `"Marseille Saint-Charles"`, `"Lyon Part Dieu"`) |
| `to` | yes | — | Destination station or city |
| `date` | no | today | Departure date (date picker, ISO `YYYY-MM-DD`), Paris local time |
| `time` | no | now | Departure time (`HH:MM`, 24-hour, Paris local time) |
| `adults` | no | `1` | Number of adult passengers — prices are quoted for this group (1–9) |
| `maxResults` | no | `20` | Maximum number of journeys to push to the dataset (1–100) |

Station and city names are matched against SNCF Connect's autocomplete; the actor picks the best
matching station (or city) automatically.

#### Example input

```json
{
    "from": "Marseille",
    "to": "Paris",
    "date": "2026-06-15",
    "time": "08:00",
    "adults": 1,
    "maxResults": 20
}
````

### Output

Each item in the dataset describes one proposed journey.

#### Example item

```json
{
    "id": "51148c3f-fa2e-44f2-b24f-25b24672995e",
    "from": "Marseille Saint-Charles",
    "to": "PARIS - GARE DE LYON - HALL 1 & 2",
    "departure": "2026-06-15T07:57:00+02:00",
    "arrival": "2026-06-15T11:16:00+02:00",
    "departureTime": "7:57 AM",
    "arrivalTime": "11:16 AM",
    "durationLabel": "3h 19min",
    "transfers": 0,
    "transporter": "Direct OUIGO",
    "priceAmount": 109,
    "priceCurrency": "EUR",
    "priceLabel": "€109",
    "priceWithDiscountCardAmount": null,
    "firstClassPriceAmount": null,
    "secondClassPriceAmount": 109,
    "legs": [
        {
            "line": "OUIGO",
            "trainNumber": "7822",
            "from": "Marseille Saint-Charles",
            "to": "PARIS - GARE DE LYON - HALL 1 & 2",
            "departure": "2026-06-15T07:57:00+02:00",
            "arrival": "2026-06-15T11:16:00+02:00",
            "departureTime": "7:57 AM",
            "arrivalTime": "11:16 AM",
            "durationLabel": "3h 19min"
        }
    ]
}
```

#### Field reference

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Identifier for the proposed journey |
| `from` / `to` | string | Origin / destination station labels |
| `departure` / `arrival` | ISO 8601 datetime | Scheduled times with Paris offset (e.g. `+02:00` in summer); arrival rolls to a later day on overnight journeys |
| `departureTime` / `arrivalTime` | string | Human-readable time labels as shown in the app (e.g. `"7:57 AM"`) |
| `durationLabel` | string | Total travel time (e.g. `"3h 19min"`) |
| `transfers` | integer | Number of transfers (0 = direct) |
| `transporter` | string | Service summary (e.g. `"Direct TGV INOUI"`, `"1 connection"`) |
| `priceAmount` | number or `null` | Cheapest 2nd-class fare for the requested passengers, in `priceCurrency`. Null when no bookable fare is shown |
| `priceCurrency` | string or `null` | ISO 4217 (`"EUR"`) |
| `priceLabel` | string or `null` | Raw price label as shown in the app (e.g. `"€109"`) |
| `priceWithDiscountCardAmount` | number or `null` | Cheapest fare with a discount card applied, when offered |
| `firstClassPriceAmount` / `secondClassPriceAmount` | number or `null` | Cheapest 1st- / 2nd-class fares, when shown |
| `legs[]` | array | Per-leg breakdown: line (TGV INOUI, OUIGO, Intercités, TER…), train number, stations, times |

`priceAmount` is `null` on journeys that aren't currently bookable (sold out, or not yet on sale).
The journey is still returned with full timing and leg details — only the price is missing.

### Pricing

Pay-per-event — one `search-result` event is charged for each journey pushed to the dataset. A query
with `maxResults: 10` charges for at most ten events, regardless of how many requests the actor makes
under the hood.

### Using the API

Trigger runs from your own code via the Apify API. With your Apify API token, a `POST` request runs
the actor synchronously and returns the dataset items:

```bash
curl -X POST "https://api.apify.com/v2/acts/jindrich.bar~sncf-train-ticket-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"from": "Marseille", "to": "Paris", "maxResults": 10}'
```

Or run asynchronously and poll for status / dataset items:

```bash
## Start a run
curl -X POST "https://api.apify.com/v2/acts/jindrich.bar~sncf-train-ticket-scraper/runs?token=<APIFY_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"from": "Marseille", "to": "Paris"}'

## When it's done, read the dataset
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<APIFY_TOKEN>"
```

Official client libraries are available for [JavaScript / TypeScript](http://docs.apify.com/sdk/js),
[Python](http://docs.apify.com/sdk/python), and via the [Apify REST API](http://docs.apify.com/api/v2)
directly.

### Scheduling

Run the actor on a cron schedule from the **Schedules** tab in the Apify console — daily, hourly, or
any custom cron expression. Common patterns:

- **Daily price snapshot at 09:00** — track fare changes for a fixed Paris → Marseille route and chart
  the trend over weeks.
- **Hourly refresh for a launch week** — keep a real-time price board for a route during a promotional
  campaign.
- **Weekly market scan** — compare a basket of intercity routes (`Paris↔Lyon`, `Paris↔Bordeaux`,
  `Lyon↔Marseille`) for week-over-week price changes.

Schedules can fan out into multiple datasets, push to a webhook, or trigger downstream actors when the
run finishes.

### Use with AI Agents (Apify MCP)

This actor is exposed through the
[Apify Model Context Protocol (MCP) server](https://docs.apify.com/platform/integrations/mcp), so any
AI agent that speaks MCP — Claude, ChatGPT custom agents, OpenAI Agents SDK, Cursor, etc. — can call it
directly to fetch live SNCF ticket prices and connection options.

Once the Apify MCP server is connected, the agent picks up the actor's input schema automatically.
Typical prompts that work out of the box:

- *"What's the cheapest train from Paris to Marseille tomorrow morning?"*
- *"Find me a direct TGV from Paris to Lyon on 2026-06-15."*
- *"How long does the train from Paris to Bordeaux take, and what does it cost?"*
- *"List the next five trains from Lyon to Marseille."*

The agent fills the input, runs the actor, and reads the structured dataset items back — no scraping,
no HTML parsing, no scheduling logic on the agent side.

#### Why this works well for agents

- **Typed input schema** — every field has a title, type, default, and validation rules, so an agent
  can call the actor without trial-and-error prompting.
- **Typed output** — `departure`, `arrival`, `transfers`, `priceAmount` are numbers / ISO timestamps,
  ready to be diffed, sorted, or compared directly.
- **Predictable results** — journeys come back in departure order with full leg breakdowns.

### Troubleshooting & support

Most issues come from date/time formatting or sparsely-served routes. Try the fixes below before
opening an issue.

#### Common problems

**No results returned**

- The departure date is in the past, or beyond the SNCF Connect booking horizon. Pick a date within
  the next few months.
- The route genuinely has no service on the requested day. Try shifting the date.

**`priceAmount` is `null` on some / all journeys**

- The journey isn't currently bookable (sold out, or not yet on sale). The connection is still returned
  with full timing and leg details — only the price is missing.

**Fewer results than `maxResults`**

- On sparsely-served routes or late departures, the timetable simply may not have enough matching
  trains after the requested time. Try an earlier departure time or a larger nearby station.

**`Invalid time` error**

- `date` must be `YYYY-MM-DD` (e.g. `2026-06-15`). `time` must be `HH:MM` in 24-hour format (e.g.
  `08:00`, not `8 AM`). Both fields are optional — leave them empty to use "now".

**Different prices than the SNCF Connect site shows in a browser**

- The actor returns the cheapest available fare for the requested passengers. Loyalty discounts and
  promo codes that require a logged-in account aren't applied.

#### FAQs

**Can I search by station ID instead of name?**
`from` and `to` accept station or city names; the actor resolves them to the best-matching SNCF
station automatically.

**Does it cover metro, trams, or buses?**
Mainline rail (TGV INOUI, OUIGO, Intercités, TER) and the connecting services SNCF Connect surfaces.
Urban transit is largely out of scope. For long-distance buses, see the Flixbus actor below.

**Can I get seat availability or book a ticket?**
No — the actor returns timetable and fare data only. Booking requires SNCF Connect's checkout flow.

#### Support

Open an issue on the actor's **Issues** tab in the Apify console. Include the full input JSON, the run
ID (visible in the run URL), and the expected vs. actual output — that lets the maintainer pull the
exact logs and reproduce the issue quickly.

### Need a different data source?

If you're scraping connections across multiple operators, check our companion actors:

- [**ÖBB ticket scraper**](https://apify.com/jindrich.bar/oebb-ticket-scraper) — Austrian railways timetable and ticket prices.
- [**Deutsche Bahn ticket scraper**](https://apify.com/jindrich.bar/deutsche-bahn-ticket-scraper) — German and European rail timetable and ticket prices.
- [**Trenitalia connection scraper**](https://apify.com/jindrich.bar/trenitalia-connections) — Italian rail timetable and ticket prices.
- [**Flixbus connection scraper**](https://apify.com/jindrich.bar/flixbus-connections) — long-distance bus routes across Europe and the US.

All these actors emit a comparable schema (`from`, `to`, `departure`, `arrival`, `price`, leg-level
breakdown), so an aggregator agent can merge their outputs into a single multi-modal travel search.

# Actor input Schema

## `from` (type: `string`):

Departure station or city name (e.g. "Paris", "Marseille Saint-Charles", "Lyon Part Dieu").

## `to` (type: `string`):

Destination station or city name.

## `date` (type: `string`):

Departure date (YYYY-MM-DD), interpreted as Paris local time. Leave empty to use today.

## `time` (type: `string`):

Time in HH:MM (24h) format, Paris local time. Leave empty to use the current time.

## `adults` (type: `integer`):

Number of adult passengers (prices are quoted for this group).

## `maxResults` (type: `integer`):

Maximum number of journeys to push to the dataset.

## Actor input object example

```json
{
  "from": "Marseille",
  "to": "Paris",
  "adults": 1,
  "maxResults": 20
}
```

# Actor output Schema

## `journeys` (type: `string`):

Default dataset items — one entry per proposed journey, with train legs and fares.

# 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("jindrich.bar/sncf-train-ticket-scraper").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("jindrich.bar/sncf-train-ticket-scraper").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 jindrich.bar/sncf-train-ticket-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jindrich.bar/sncf-train-ticket-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SNCF Train Ticket and Connection Scraper",
        "description": "Scrape live SNCF train connections, schedules, ticket prices, transfers, delays, and fares across France and Europe. Extract structured SNCF timetable data for travel apps, price monitoring, analytics, and AI agents.",
        "version": "0.0",
        "x-build-id": "tzrPj81grqS0G4MZb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jindrich.bar~sncf-train-ticket-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jindrich.bar-sncf-train-ticket-scraper",
                "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/jindrich.bar~sncf-train-ticket-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jindrich.bar-sncf-train-ticket-scraper",
                "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/jindrich.bar~sncf-train-ticket-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jindrich.bar-sncf-train-ticket-scraper",
                "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": [
                    "from",
                    "to"
                ],
                "properties": {
                    "from": {
                        "title": "From station",
                        "type": "string",
                        "description": "Departure station or city name (e.g. \"Paris\", \"Marseille Saint-Charles\", \"Lyon Part Dieu\").",
                        "default": "Marseille"
                    },
                    "to": {
                        "title": "To station",
                        "type": "string",
                        "description": "Destination station or city name.",
                        "default": "Paris"
                    },
                    "date": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "Departure date (YYYY-MM-DD), interpreted as Paris local time. Leave empty to use today."
                    },
                    "time": {
                        "title": "Departure time",
                        "pattern": "^\\d{1,2}:\\d{2}$",
                        "type": "string",
                        "description": "Time in HH:MM (24h) format, Paris local time. Leave empty to use the current time."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult passengers (prices are quoted for this group).",
                        "default": 1
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of journeys to push to the dataset.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
