# Travelstart Flights Scraper | Africa OTA Fares (`lentic_clockss/travelstart-scraper`) Actor

Scrape Travelstart flight search results & airport suggestions across .com / .co.za / .com.ng / .co.ke. Extract fares, airlines, segments. Export Excel/CSV/JSON. Unofficial — not affiliated with Travelstart.

- **URL**: https://apify.com/lentic\_clockss/travelstart-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Travelstart Flights Scraper | Africa & Global OTA

**Scrape Travelstart flight search results and airport / city suggestions across Africa and global Travelstart sites — then download structured itineraries as Excel, CSV, or JSON.**

Use this Actor as a practical **Travelstart flights data API** for South Africa, Nigeria, Kenya, and the global `.com` market. Pick a country site, enter origin / destination IATA codes (or city text), set dates and cabin, and get Dataset rows with prices, airlines, segments, stops, and trip metadata.

- Scrape **Travelstart flight search** (return, one-way, multi-city style trips)
- Resolve airports / cities via **suggestions** (`lc.json` autocomplete)
- Cover hosts such as **travelstart.com**, **travelstart.co.za**, **travelstart.com.ng**, **travelstart.co.ke**
- Extract **fares, airlines, segments, baggage flags, and outbound / inbound itineraries**
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or the Apify API
- **Pay per event** — Actor start + each Dataset result; **platform usage is included** (you do not pay separate Apify compute on top)

> **Unofficial tool.** This Actor is not affiliated with, endorsed by, or sponsored by Travelstart. It collects publicly reachable shopping surfaces and does **not** complete bookings or access private accounts.

---

### What does the Travelstart Flights Scraper do?

Travelstart Flights Scraper lets you **extract structured flight inventory from Travelstart OTAs** without running your own anti-bot browser fleet. Give it a route (for example `JNB` → `CPT`), dates, and a mode, then start a run.

Under the hood, the Actor:

1. Validates your input (mode, country site, route, dates, cabin, travellers)
2. Enforces free-tier caps when you are on a free Apify plan
3. Calls a managed Cloud Run worker (`travelstart-com`) that completes the Angular flight search with residential egress
4. Reads guest-visible `flightResults` / suggestion payloads into normalized records
5. Pushes Dataset rows ready for Excel / CSV / JSON export
6. Writes `RUN_SUMMARY` (and `ERROR_SUMMARY` on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.

---

### What Travelstart data can I extract?

| Data | Flights search | Airport suggestions |
| --- | :---: | :---: |
| Itinerary id / amount / currency | ✅ | — |
| Airline code / name | ✅ | — |
| Segments (times, airports, flight no.) | ✅ | — |
| Stops / duration | ✅ | — |
| Outbound + inbound (unbundled domestic) | ✅ | — |
| Fare breakdown signals | ✅ | — |
| IATA / city / locationId | — | ✅ |
| Country / countryIata | — | ✅ |
| Country site | ✅ | ✅ |

**Not shipped as successful scrapes (schema waivers):** `hotelsSearch` (Travelstart hotel subdomain was infrastructure-unavailable during recon), `carsSearch` (Meili + Turnstile), `buses`, `packages` — selecting these returns a clear failure instead of fake empty success.

---

### Why scrape Travelstart?

Travelstart is a major African / global flight OTA with strong coverage in markets such as South Africa, Nigeria, and Kenya. Teams scrape Travelstart to:

- Monitor **flight prices and availability** on popular African routes
- Compare **airline / fare signals** for JNB, CPT, DUR, LOS, ABV, NBO, and more
- Enrich catalogs with **airport / city suggestions** (IATA + locationId)
- Feed BI dashboards, pricing tools, or AI agents with structured OTA rows

Compared with generic **Google Flights** or **Skyscanner** scrapers, this Actor targets **Travelstart-specific shopping results** across multiple Travelstart country sites in one input surface.

---

### How to scrape Travelstart flights (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [Travelstart Flights Scraper](https://apify.com/lentic_clockss/travelstart-scraper)
3. Choose a **mode**: `flightsSearch` (default) or `suggestions` / `airportSuggest`
4. Choose a **country site** (default `travelstart.com`)
5. Enter **from** + **to** (flights) or **query** (suggestions)
6. *(Optional)* Set `departureDate` / `returnDate`, `tripType`, `cabin`, travellers
7. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

Start with `maxResults: 5–10` to verify the query, then scale up.

---

### How much does it cost to scrape Travelstart?

This Actor uses **pay-per-event** pricing. You are charged for:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$3.00 / 1,000** results (**$0.003** each) |

**Platform usage costs are included** — you do **not** pay separate Apify compute/proxy usage for this Actor on top of the event prices above (**User pays platform usage costs = No**).

#### Example cost estimates

| Results collected | Approx. event cost* |
| --- | ---: |
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |

\*Assumes one Actor start at default memory billing for start events, plus `$0.003` per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one).

Free Apify trial credit can cover a small test run — try `maxResults: 5` first.

#### Free-tier caps (Actor developer limits)

| Cap | Value |
| --- | --- |
| Free Apify-plan runs of this Actor | **10** total |
| Free results / run | **200** |
| Paying Apify users | Unlimited runs (schema max still applies) |

These limits are enforced in Actor code (set by the Actor developer, not Apify). When the run cap is hit, the Actor finishes successfully with `RUN_SUMMARY.status = FREE_TIER_LIMIT` and a clear status message.

---

### Input

Open the **Input** tab for the full form. Common fields:

| Field | Description |
| --- | --- |
| `mode` | `flightsSearch`, `suggestions`, `airportSuggest` (plus unsupported waivers) |
| `countrySite` | `travelstart.com` (default), `.co.za`, `.com.ng`, `.co.ke` |
| `from` / `to` | Origin and destination IATA or city text for flights |
| `query` | Text for airport / city suggestions |
| `departureDate` / `returnDate` | `YYYY-MM-DD` (return empty for one-way) |
| `tripType` | `return`, `oneway`, `multicity` (`roundtrip` normalized to `return`) |
| `cabin` | `ECONOMY`, `PREMIUM`, `BUSINESS`, `FIRST` |
| `adults` / `children` / `infants` / `youngAdults` | Traveller counts |
| `maxResults` | Cap on emitted Dataset rows |
| `workerBaseUrl` | Advanced allowlisted worker override (optional) |

#### Input example (flights)

```json
{
  "mode": "flightsSearch",
  "countrySite": "travelstart.co.za",
  "from": "JNB",
  "to": "CPT",
  "tripType": "return",
  "departureDate": "2026-08-20",
  "returnDate": "2026-08-27",
  "cabin": "ECONOMY",
  "adults": 1,
  "maxResults": 20
}
````

#### Input example (suggestions)

```json
{
  "mode": "suggestions",
  "query": "Johannesburg",
  "countrySite": "travelstart.com",
  "maxResults": 8
}
```

***

### Output

You can download the dataset extracted by Travelstart Flights Scraper in formats such as **JSON, HTML, CSV, or Excel**.

Each Dataset item includes mode / site metadata plus fields such as:

| Field | Description |
| --- | --- |
| `mode` / `countrySite` | Collection mode and Travelstart host |
| `direction` | `outbound`, `inbound`, or `bundled` |
| `id` | Itinerary id when present |
| `airlineCode` / `airlineName` | Marketing / validating carrier signals |
| `amount` / `currencyCode` / `priceText` | Price signals |
| `segments` | Leg details (times, airports, flight numbers) |
| `stops` / `durationMs` | Route complexity |
| `origin` / `destination` | Requested route |
| `iata` / `locationId` | Suggestion fields |
| `capturedAt` | Capture timestamp |

#### Output example

```json
{
  "type": "flight_itinerary",
  "mode": "flightsSearch",
  "direction": "outbound",
  "id": 0,
  "amount": 849,
  "currencyCode": "ZAR",
  "priceText": "ZAR849",
  "airlineCode": "FA",
  "airlineName": "FlySafair",
  "stops": 0,
  "origin": "JNB",
  "destination": "DUR",
  "countrySite": "travelstart.co.za",
  "source": "travelstart_flightResults"
}
```

Field presence depends on mode and what the public page exposes for that run.

***

### Coverage matrix

| Dimension | Coverage |
| --- | --- |
| Country sites | `travelstart.com` (default) + `.co.za` / `.com.ng` / `.co.ke` |
| Modes shipped | `flightsSearch` · `suggestions` / `airportSuggest` |
| Waivers | Hotels UNAVAILABLE · cars / buses / packages UNSUPPORTED |

***

### Tips for best results

- Prefer **IATA codes** (`JNB`, `CPT`) over ambiguous city strings when possible
- Use `maxResults: 2–5` for first smoke tests, then raise the cap
- Domestic South African routes often return **separate outbound + inbound** lists (`isBundled=false`)
- Do **not** rely on README sample inputs for production monitoring — rotate routes and dates
- Default run memory is **1024 MB** (thin Actor; browser work runs on the worker)

***

### Architecture and proxy ownership

```text
Apify Actor (input, Dataset, free tier, Standby, PPE)
        │ HTTPS + WORKER_AUTH
        ▼
Cloud Run worker travelstart-com (Patchright session, parse, OpenAPI)
        ▼
Travelstart public flight shopping / suggestion APIs
```

`WORKER_PROVIDES_PROXY=1` is enabled by default. The Actor does not mint or transmit `proxyUrl`; proxy/egress is configured on the worker (including egress-control). Set `WORKER_BASE_URL` and secret `WORKER_AUTH` in Actor settings.

***

### Run artifacts

| Key | Purpose |
| --- | --- |
| `INPUT_ECHO` | Normalized non-secret input and resolved worker source |
| `RUN_SUMMARY` | Worker, proxy source, free-tier, and record metrics |
| `ERROR_SUMMARY` | Structured failure before valid records are emitted |

***

### Integrations & API

- Schedule recurring Travelstart flight pulls from Apify Console
- Call the Actor from Python, Node.js, or `curl` via the [Apify API](https://docs.apify.com/api/v2)
- Connect to Make, n8n, Zapier, Google Sheets, or your BI stack

#### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/lentic_clockss~travelstart-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "flightsSearch",
    "countrySite": "travelstart.com",
    "from": "JNB",
    "to": "CPT",
    "maxResults": 20
  }'
```

***

### FAQ

#### Is login required?

No. The Actor targets publicly reachable Travelstart shopping / suggestion surfaces via the managed worker.

#### Can it book flights?

No. Booking, payment, and traveller checkout flows are intentionally excluded.

#### Why not hotels or cars?

Hotels were unavailable (Cloudflare 522 on the hotel subdomain during recon). Cars use a third-party Meili embed with Turnstile. Those modes stay visible and fail with clear waiver errors.

#### Do I pay Apify platform usage separately?

No for this Actor’s configured PPE plan — **User pays platform usage costs = No**. You pay the event prices above; platform usage is covered by the Actor developer.

#### How is this different from Google Flights scrapers?

This Actor scrapes **Travelstart OTA** results (Africa / global Travelstart hosts), not Google Flights aggregates. Use it when you need Travelstart-specific prices and suggestion IDs.

***

### Legal & responsible use

Use this Actor only for lawful purposes and in line with Travelstart terms and applicable laws. You are responsible for how you store and use the data. Prefer low-volume smoke inputs first (`maxResults: 2–5`).

Our scrapers target publicly shared shopping / suggestion data. Results may still contain personal or business data depending on what the site exposes. Do not scrape personal data unless you have a legitimate reason. If unsure, consult your counsel.

***

### Support

Questions or feature requests: open an issue on the Actor page in Apify Console or contact the developer through Apify.

# Actor input Schema

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

Shipped: flightsSearch + suggestions. hotelsSearch returns UNAVAILABLE (CF 522). cars/buses/packages are unsupported waivers.

## `countrySite` (type: `string`):

Travelstart host / market. Default global .com (locale en-GO).

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

Origin IATA or city text (e.g. JNB).

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

Destination IATA or city text (e.g. CPT).

## `query` (type: `string`):

Text for mode=suggestions / airportSuggest (lc.json).

## `departureDate` (type: `string`):

YYYY-MM-DD. Defaults to ~24 days ahead.

## `returnDate` (type: `string`):

YYYY-MM-DD for return trips. Empty for oneway.

## `tripType` (type: `string`):

roundtrip is normalized to return.

## `cabin` (type: `string`):

Cabin

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

Adults

## `children` (type: `integer`):

Children

## `infants` (type: `integer`):

Infants

## `youngAdults` (type: `integer`):

Young adults

## `currency` (type: `string`):

Optional. Session currency may still follow IP/site defaults.

## `locale` (type: `string`):

Optional override (e.g. en-GO, en-ZA).

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

Free Apify plan capped at 200 results/run by Actor developer policy.

## `workerBaseUrl` (type: `string`):

Optional HTTPS Cloud Run origin (.run.app or ALLOWED\_WORKER\_HOSTS). Production uses Actor env WORKER\_BASE\_URL.

## Actor input object example

```json
{
  "mode": "flightsSearch",
  "countrySite": "travelstart.com",
  "from": "JNB",
  "to": "CPT",
  "tripType": "return",
  "cabin": "ECONOMY",
  "adults": 1,
  "children": 0,
  "infants": 0,
  "youngAdults": 0,
  "maxResults": 21
}
```

# Actor output Schema

## `results` (type: `string`):

Normalized Travelstart flight / suggestion rows from the default dataset.

## `runSummary` (type: `string`):

Structured summary record stored in the default key-value store.

## `inputEcho` (type: `string`):

Normalized input saved at run start.

## `errorSummary` (type: `string`):

Present when a failed run stores structured terminal error information.

# 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 = {
    "from": "JNB",
    "to": "CPT"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/travelstart-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 = {
    "from": "JNB",
    "to": "CPT",
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/travelstart-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 '{
  "from": "JNB",
  "to": "CPT"
}' |
apify call lentic_clockss/travelstart-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Travelstart Flights Scraper | Africa OTA Fares",
        "description": "Scrape Travelstart flight search results & airport suggestions across .com / .co.za / .com.ng / .co.ke. Extract fares, airlines, segments. Export Excel/CSV/JSON. Unofficial — not affiliated with Travelstart.",
        "version": "0.1",
        "x-build-id": "lnDoIslFgN6sBv3SH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~travelstart-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-travelstart-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/lentic_clockss~travelstart-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-travelstart-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/lentic_clockss~travelstart-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-travelstart-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",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "flightsSearch",
                            "suggestions",
                            "airportSuggest",
                            "hotelsSearch",
                            "carsSearch",
                            "buses",
                            "packages"
                        ],
                        "type": "string",
                        "description": "Shipped: flightsSearch + suggestions. hotelsSearch returns UNAVAILABLE (CF 522). cars/buses/packages are unsupported waivers.",
                        "default": "flightsSearch"
                    },
                    "countrySite": {
                        "title": "Country site",
                        "enum": [
                            "travelstart.com",
                            "travelstart.co.za",
                            "travelstart.com.ng",
                            "travelstart.co.ke"
                        ],
                        "type": "string",
                        "description": "Travelstart host / market. Default global .com (locale en-GO).",
                        "default": "travelstart.com"
                    },
                    "from": {
                        "title": "Origin",
                        "type": "string",
                        "description": "Origin IATA or city text (e.g. JNB)."
                    },
                    "to": {
                        "title": "Destination",
                        "type": "string",
                        "description": "Destination IATA or city text (e.g. CPT)."
                    },
                    "query": {
                        "title": "Suggest query",
                        "type": "string",
                        "description": "Text for mode=suggestions / airportSuggest (lc.json)."
                    },
                    "departureDate": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "YYYY-MM-DD. Defaults to ~24 days ahead."
                    },
                    "returnDate": {
                        "title": "Return date",
                        "type": "string",
                        "description": "YYYY-MM-DD for return trips. Empty for oneway."
                    },
                    "tripType": {
                        "title": "Trip type",
                        "enum": [
                            "return",
                            "oneway",
                            "multicity",
                            "roundtrip"
                        ],
                        "type": "string",
                        "description": "roundtrip is normalized to return.",
                        "default": "return"
                    },
                    "cabin": {
                        "title": "Cabin",
                        "enum": [
                            "ECONOMY",
                            "PREMIUM",
                            "BUSINESS",
                            "FIRST"
                        ],
                        "type": "string",
                        "description": "Cabin",
                        "default": "ECONOMY"
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Adults",
                        "default": 1
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Children",
                        "default": 0
                    },
                    "infants": {
                        "title": "Infants",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Infants",
                        "default": 0
                    },
                    "youngAdults": {
                        "title": "Young adults",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Young adults",
                        "default": 0
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Optional. Session currency may still follow IP/site defaults."
                    },
                    "locale": {
                        "title": "Locale",
                        "type": "string",
                        "description": "Optional override (e.g. en-GO, en-ZA)."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Free Apify plan capped at 200 results/run by Actor developer policy.",
                        "default": 21
                    },
                    "workerBaseUrl": {
                        "title": "Worker base URL override",
                        "type": "string",
                        "description": "Optional HTTPS Cloud Run origin (.run.app or ALLOWED_WORKER_HOSTS). Production uses Actor env WORKER_BASE_URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
