# Indian Railways Scraper - Schedules, Fares & Live Status (`jungle_synthesizer/indian-railways-timetable-scraper`) Actor

Indian Railways data: schedules between stations, full train routes with per-stop timings, fares by class (1A/2A/3A/SL/CC/EC), seat availability, and live train running status. Covers Rajdhani, Shatabdi, Vande Bharat, Duronto, Garib Rath, Superfast, and Express trains.

- **URL**: https://apify.com/jungle\_synthesizer/indian-railways-timetable-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Travel, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Indian Railways Trains, Schedules & Live Status Scraper

Scrape Indian Railways train data without IRCTC logins or paid APIs. Returns schedules between stations, full train routes with per-stop timings, fares by class, and live running status — pulled from public sources at [erail.in](https://erail.in) and [runningstatus.in](https://www.runningstatus.in).

---

### Indian Railways Scraper Features

- Searches all trains running between any two Indian Railways stations
- Looks up a train by number and returns its full route, fares, and seat availability
- Tracks live train running status — current position, delay, and next scheduled stop
- Returns fares per class in INR (1A / 2A / 3A / SL / CC / EC / 2S / 3E / FC) where the source publishes them
- Decodes the IR weekly bitmask into a clean array of three-letter day labels
- Pure HTTP — no browser, no captcha solver, no proxy required
- Handles all train types: Rajdhani, Shatabdi, Vande Bharat, Duronto, Garib Rath, Superfast, Mail/Express, Passenger
- Coverage spans 13,000+ trains and 7,300+ stations across the Indian Railways network

---

### Who Uses Indian Railways Train Data?

- **Travel apps** — Power booking flows that need IR schedules without paying RailAPI rates per query.
- **Aggregators** — Combine train, bus, and flight inventory into a single multi-modal route engine.
- **Fintech and SaaS** — Embed train running status into expense apps, employee travel tools, or logistics dashboards.
- **Researchers and analysts** — Build mobility datasets, study delay patterns, or model passenger flows on the world's busiest rail network.
- **Indian developers building side projects** — Skip the IRCTC API approval queue and just get the data.

---

### How the Indian Railways Scraper Works

1. Pick a mode — `train_search`, `train_number`, or `live_status`.
2. Provide the inputs that mode needs (station codes, or a list of train numbers).
3. The scraper hits erail.in for schedules and fares, and runningstatus.in for live status.
4. Each train comes back as one record in the dataset, with consistent field names across modes.

---

### Input

```json
{
  "mode": "train_search",
  "originStation": "NDLS",
  "destinationStation": "BCT",
  "maxItems": 50,
  "sp_intended_usage": "test",
  "sp_improvement_suggestions": "test"
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `"train_search"` | One of `train_search`, `train_number`, `live_status`, `pnr_status`. |
| `originStation` | string | `"NDLS"` | Indian Railways station code for the boarding station (e.g. `NDLS`, `BCT`, `MAS`, `HWH`). Used by `train_search`. |
| `destinationStation` | string | `"BCT"` | Station code for the alighting station. Used by `train_search`. |
| `trainNumbers` | array of strings | `[]` | Train numbers to look up (e.g. `["12951", "22439"]`). Used by `train_number` and `live_status`. |
| `date` | string | `""` (today) | Optional `YYYY-MM-DD` date for `live_status`. Other modes ignore this. |
| `maxItems` | integer | `50` | Maximum number of records returned. |
| `proxyConfiguration` | object | `{useApifyProxy:false}` | Leave default. erail.in and runningstatus.in are public and don't need proxies. |

#### Train number lookup

```json
{
  "mode": "train_number",
  "trainNumbers": ["12951", "12302"],
  "maxItems": 5
}
```

#### Live train status

```json
{
  "mode": "live_status",
  "trainNumbers": ["12951"],
  "maxItems": 1
}
```

`pnr_status` mode is reserved in the schema for a future release. The IRCTC PNR flow needs a CAPTCHA solver and an India residential proxy, and v1 chooses to be honest about that rather than ship something flaky. The actor returns a clear error if you select it.

***

### Indian Railways Scraper Output Fields

Every record uses the same schema regardless of mode. Fields that don't apply to the chosen mode are returned as empty arrays, empty objects, or empty strings.

#### `train_search` example

```json
{
  "train_number": "12951",
  "train_name": "Mumbai Central New Delhi MUMBAI RAJDHANI",
  "train_type": "RAJDHANI",
  "origin_station": "Mumbai Central",
  "origin_code": "MMCT",
  "destination_station": "New Delhi",
  "destination_code": "NDLS",
  "from_station": "Mumbai Central",
  "from_code": "MMCT",
  "to_station": "New Delhi",
  "to_code": "NDLS",
  "departure_time": "17:00",
  "arrival_time": "08:32",
  "duration_minutes": 932,
  "distance_km": 1384,
  "runs_on": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  "classes_available": ["1A", "2A", "3A"],
  "route_stations": [],
  "fare_by_class": {"1A": 5335, "2A": 3235, "3A": 2405},
  "seat_availability": [
    "1A: avail 10",
    "2A: avail 87 / WL 60 / RAC 20",
    "3A: avail 266 / WL 160 / RAC 55"
  ],
  "live_status": {},
  "source_url": "https://erail.in/rail/getTrains.aspx?Station_From=BCT&Station_To=NDLS",
  "scraped_at": "2026-04-25T13:57:07.231Z"
}
```

#### `train_number` example

Same schema as above, plus a populated `route_stations` array — one pre-formatted string per stop.

```json
{
  "route_stations": [
    "01. MMCT Mumbai Central | arr First dep 17:00 | day 1 | no halt | 0 km",
    "02. BVI Borivali | arr 17:20 dep 17:22 | day 1 | halt 2 min | 30 km",
    "03. ST Surat | arr 19:32 dep 19:35 | day 1 | halt 3 min | 263 km",
    "04. BRC Vadodara Jn | arr 21:11 dep 21:16 | day 1 | halt 5 min | 392 km",
    "05. KOTA Kota Jn | arr 03:35 dep 03:40 | day 2 | halt 5 min | 925 km",
    "06. NDLS New Delhi | arr 08:32 dep Last | day 2 | no halt | 1384 km"
  ]
}
```

#### `live_status` example

```json
{
  "train_number": "12951",
  "train_name": "Ndls Tejas Raj",
  "live_status": {
    "current_station": "GHOLVAD",
    "last_event": "Approaching",
    "delay_minutes": 8,
    "next_station": "Surat",
    "source_station": "MUMBAI CENTRAL",
    "destination_station": "NEW DELHI",
    "journey_date": "25-Apr-2026",
    "summary": "Departed from Gholvad at 25-Apr-2026 18:45. Upcoming station is Bordi Road (non-stopping). Next stoppage station is Surat.",
    "updated_at": "2026-04-25T13:57:07.232Z"
  },
  "source_url": "https://www.runningstatus.in/status/12951-today",
  "scraped_at": "2026-04-25T13:57:07.232Z"
}
```

#### Output field reference

| Field | Type | Description |
|-------|------|-------------|
| `train_number` | string | IR train number (e.g. `12951`). |
| `train_name` | string | Full train name. |
| `train_type` | string | Service category: `RAJDHANI`, `SHATABDI`, `VANDE_BHARAT`, `DURONTO`, `GARIB_RATH`, `SUPERFAST`, `MAIL_EXPRESS`, `PASSENGER`, etc. |
| `origin_station` / `origin_code` | string | Station name and code where the train begins its run. |
| `destination_station` / `destination_code` | string | Station name and code where the train ends its run. |
| `from_station` / `from_code` | string | User-effective boarding station for `train_search`. Equals origin for `train_number` mode. |
| `to_station` / `to_code` | string | User-effective alighting station. Equals destination for `train_number` mode. |
| `departure_time` | string | Scheduled departure from the boarding station, `HH:MM` 24h. |
| `arrival_time` | string | Scheduled arrival at the alighting station. |
| `duration_minutes` | integer | Total journey duration in minutes. |
| `distance_km` | number | Distance between boarding and alighting stations in kilometres. |
| `runs_on` | array of strings | Days the train runs (e.g. `["Mon","Wed","Fri"]`). |
| `classes_available` | array of strings | Seat classes the train carries (`1A`, `2A`, `3A`, `SL`, `CC`, `EC`, `2S`, `FC`, `GN`, `GC`). |
| `route_stations` | array of strings | Per-stop schedule lines (`train_number` mode only). |
| `fare_by_class` | object | INR fares keyed by class. Empty for trains where erail.in doesn't publish fares. |
| `seat_availability` | array of strings | Per-class snapshot of available, waitlist, RAC, and tatkal counts (where the source publishes them). |
| `live_status` | object | Real-time position object (`live_status` mode only). |
| `source_url` | string | URL the record was scraped from. |
| `scraped_at` | string | ISO 8601 timestamp when the record was captured. |

***

### FAQ

#### How do I scrape Indian Railways data?

The Indian Railways Scraper covers three modes. Pick `train_search` to list every train between two stations. Pick `train_number` to get a single train's full route and fares. Pick `live_status` to track a running train in real time. Inputs and outputs are all in the tables above.

#### How much does the Indian Railways Scraper cost to run?

The Indian Railways Scraper bills $0.10 per actor start plus $0.001 per record returned — the standard Apify pay-per-event pricing. A typical `train_search` between two metros returns 30-50 trains for about $0.13. A `train_number` lookup returns one record for $0.101.

#### What stations are supported by the Indian Railways Scraper?

The Indian Railways Scraper accepts any of the ~7,300 IR station codes — `NDLS` (New Delhi), `BCT` (Mumbai Central), `MAS` (Chennai Central), `HWH` (Howrah), `SBC` (Bengaluru), and the rest of the network. Use the official IR station code (3-5 letters), not the city name.

#### Does the Indian Railways Scraper need a proxy or India IP?

The Indian Railways Scraper does not need a proxy. The two source sites (erail.in and runningstatus.in) serve traffic globally and don't geofence. The default proxy configuration is `useApifyProxy: false`, which keeps the run free of proxy bandwidth charges.

#### Why is `pnr_status` mode marked "coming soon"?

PNR lookups need to go through IRCTC or indianrail.gov.in, both of which sit behind CAPTCHAs, F5 bot protection, and (in IRCTC's case) a login. v1 of the Indian Railways Scraper handles the 90% of use cases that don't need PNR. v2 will add it once the captcha-solving plumbing is reliable enough to ship.

#### Can I get fares for every train?

The Indian Railways Scraper returns whatever fares erail.in publishes. Most major Mail/Express, Superfast, Rajdhani, Shatabdi, and Vande Bharat trains have fare data. Suburban locals and unreserved passengers usually don't — the source just doesn't carry it. Empty `fare_by_class` is honest about that.

***

### Need More Features?

Need PNR status, station departures, or coverage of another rail network? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use the Indian Railways Scraper?

- **Affordable** — $0.001 per record, undercutting paid alternatives like RailAPI by an order of magnitude.
- **Honest about limits** — v1 ships the modes that work reliably and labels the one that doesn't, instead of pretending IRCTC's captcha layer is a solved problem.
- **Clean output** — flat records with consistent field names across all three modes. Empty fields stay empty; you don't get strings where numbers belong.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `mode` (type: `string`):

What to look up. train\_search: all trains from origin to destination. train\_number: full route + fares + seats for one train. live\_status: real-time position and delay for one running train. pnr\_status is reserved for a future release.

## `originStation` (type: `string`):

Indian Railways station code (e.g. NDLS = New Delhi, BCT = Mumbai Central, MAS = Chennai Central, HWH = Howrah). Used by train\_search.

## `destinationStation` (type: `string`):

Indian Railways station code for the destination. Used by train\_search.

## `trainNumbers` (type: `array`):

List of train numbers (e.g. \["12951", "22439"]). Used by train\_number and live\_status modes.

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

Optional. Used by live\_status to pick a specific running day; defaults to today. Ignored by train\_search and train\_number modes (those return scheduled data, not date-specific).

## `maxItems` (type: `integer`):

Maximum number of records to return. For train\_search this caps the trains-between-stations result. For train\_number and live\_status it caps the train\_numbers list.

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

Proxy settings. erail.in and runningstatus.in are public and do not require proxies. Leave default.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "train_search",
  "originStation": "NDLS",
  "destinationStation": "BCT",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "train_search",
    "originStation": "NDLS",
    "destinationStation": "BCT",
    "date": "",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/indian-railways-timetable-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "train_search",
    "originStation": "NDLS",
    "destinationStation": "BCT",
    "date": "",
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/indian-railways-timetable-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "train_search",
  "originStation": "NDLS",
  "destinationStation": "BCT",
  "date": "",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jungle_synthesizer/indian-railways-timetable-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/indian-railways-timetable-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indian Railways Scraper - Schedules, Fares & Live Status",
        "description": "Indian Railways data: schedules between stations, full train routes with per-stop timings, fares by class (1A/2A/3A/SL/CC/EC), seat availability, and live train running status. Covers Rajdhani, Shatabdi, Vande Bharat, Duronto, Garib Rath, Superfast, and Express trains.",
        "version": "1.0",
        "x-build-id": "t1HzEaOD9VDCKb9Bf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~indian-railways-timetable-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-indian-railways-timetable-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/jungle_synthesizer~indian-railways-timetable-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-indian-railways-timetable-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/jungle_synthesizer~indian-railways-timetable-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-indian-railways-timetable-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": [
                    "sp_intended_usage",
                    "sp_improvement_suggestions"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "train_search",
                            "train_number",
                            "live_status",
                            "pnr_status"
                        ],
                        "type": "string",
                        "description": "What to look up. train_search: all trains from origin to destination. train_number: full route + fares + seats for one train. live_status: real-time position and delay for one running train. pnr_status is reserved for a future release.",
                        "default": "train_search"
                    },
                    "originStation": {
                        "title": "Origin Station Code",
                        "type": "string",
                        "description": "Indian Railways station code (e.g. NDLS = New Delhi, BCT = Mumbai Central, MAS = Chennai Central, HWH = Howrah). Used by train_search."
                    },
                    "destinationStation": {
                        "title": "Destination Station Code",
                        "type": "string",
                        "description": "Indian Railways station code for the destination. Used by train_search."
                    },
                    "trainNumbers": {
                        "title": "Train Numbers",
                        "type": "array",
                        "description": "List of train numbers (e.g. [\"12951\", \"22439\"]). Used by train_number and live_status modes.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "date": {
                        "title": "Journey Date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Optional. Used by live_status to pick a specific running day; defaults to today. Ignored by train_search and train_number modes (those return scheduled data, not date-specific)."
                    },
                    "maxItems": {
                        "title": "Max Results",
                        "type": "integer",
                        "description": "Maximum number of records to return. For train_search this caps the trains-between-stations result. For train_number and live_status it caps the train_numbers list.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. erail.in and runningstatus.in are public and do not require proxies. Leave default."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
