# eSIMDB Scraper (`solidcode/esimdb-scraper`) Actor

\[💰 $2.0 / 1K] Extract eSIM data plans from esimdb.com — prices, data allowance, validity, coverage, 5G, tethering, and promo codes. Filter by country, provider, data, price, and validity across 170+ brands.

- **URL**: https://apify.com/solidcode/esimdb-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## eSIMDB Scraper

Pull live travel eSIM data plans from eSIMDB at scale — provider, data allowance, validity, headline and per-GB pricing, multi-currency rates, promo codes, 5G support, carrier networks, and country coverage for every plan in a destination's catalog. Compare 24 named providers across 37 destinations in a single run. Built for travel-tech and comparison sites, affiliate teams, and pricing analysts who need fresh eSIM plan data without manually checking dozens of provider sites one tab at a time.

### Why This Scraper?

- **24 named providers, 37 destinations, one run** — pick from Airalo, Nomad, Saily, Ubigi, GigSky, aloSIM, Yesim, Truphone and 16 more brands across 37 country catalogs, or pull every brand at once.
- **Whole-catalog pulls** — a single destination can return over 10,000 plans; one run captures the entire catalog instead of paging through provider sites by hand.
- **Six-currency pricing on every plan** — USD, EUR, GBP, JPY, AUD, and CAD prices alongside your chosen headline currency, plus a calculated `pricePerGB` for true cost comparisons.
- **Promo codes and discounted prices captured automatically** — active promo codes (e.g. "ESIMDB15") and the discounted price surface on each plan, so you never miss a deal worth surfacing to your audience.
- **Carrier-level network detail** — underlying carrier names (e.g. "KDDI (5G), Softbank (5G)"), a `has5G` flag, and 4G/5G network types per plan — detail most comparison feeds drop.
- **Four scoped filters** — minimum data (GB), maximum price (USD), minimum validity (days), and 5G-only, applied before you're billed so you only pay for the plans you actually want.
- **Parsed numbers, not just strings** — `dataGB`, `validityDays`, `usdPrice`, and `pricePerGB` come ready to sort and chart, with the raw display strings kept too for plans like "3GB/day + unlimited at 1Mbps".
- **Unlimited and per-day plans kept intelligently** — "unlimited" and per-day allowances survive a `minData` filter instead of being silently dropped because they have no fixed GB number.
- **Hard billable cap with `maxResults`** — set an exact ceiling on the plans returned and billed; results are trimmed to that number so a big catalog never surprises you.

### Use Cases

**Travel-Tech & Comparison Sites**
- Power an eSIM comparison table for any of 37 destinations
- Surface the cheapest plan per GB for each country
- Show 5G-capable plans with their underlying carrier networks
- Keep destination pages fresh with current plan catalogs

**Affiliate & Lead Generation**
- Build affiliate feeds with live promo codes and discounted prices
- Highlight limited-time provider deals across brands
- Generate "best eSIM for [country]" listicle data on demand
- Track which providers run the most aggressive promotions

**Market & Pricing Research**
- Benchmark price per GB across 24 providers in a destination
- Monitor how plan pricing shifts week over week
- Compare validity-versus-price curves for budget vs. premium plans
- Map multi-currency pricing for regional market analysis

**Product & Competitive Intelligence**
- Watch a competitor brand's full catalog across destinations
- Spot gaps where no provider offers long-validity or high-data plans
- Track 5G rollout by counting 5G plans per country over time
- Audit tethering, voice/SMS, and top-up support across the market

### Getting Started

#### Compare a Destination

The simplest run — every plan for one country:

```json
{
    "countries": ["usa"],
    "maxResults": 100
}
````

#### One Brand, Two Destinations

```json
{
    "countries": ["japan", "south-korea"],
    "providers": ["airalo"],
    "maxResults": 200
}
```

#### One Brand's Entire Global Catalog

Leave `countries` empty and pick a provider to sweep every destination for that brand:

```json
{
    "providers": ["airalo"],
    "maxResults": 200
}
```

#### Filtered, Multi-Currency Search

5G-only plans with at least 5 GB, capped at $30, priced in euros:

```json
{
    "countries": ["france", "spain", "italy"],
    "providers": ["airalo", "nomad", "saily"],
    "minData": 5,
    "maxPrice": 30,
    "minValidityDays": 7,
    "only5G": true,
    "currency": "EUR",
    "maxResults": 500
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `countries` | select\[] | `["United States"]` | One or more destinations to compare plans for. Choose from 37 countries (United States, United Kingdom, Japan, France, and more). Leave empty and pick a provider below to pull that brand's full catalog across every destination; leave both empty and it defaults to the United States. |
| `providers` | select\[] | `[]` | Limit results to specific brands — Airalo, Nomad, Saily, Ubigi, aloSIM, and 19 others. Leave empty to include every provider. Combine with countries to get one brand's plans for a destination, or use providers alone (no countries) to pull a brand's entire global catalog across all 37 destinations. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `minData` | integer | `0` | Only include plans with at least this much data, in GB. 0 means no minimum. Unlimited and per-day plans are always kept. |
| `maxPrice` | integer | `0` | Only include plans priced at or below this amount in US dollars. 0 means no price cap. |
| `minValidityDays` | integer | `0` | Only include plans valid for at least this many days. 0 means no minimum. |
| `only5G` | boolean | `false` | When on, return only plans that support 5G networks. |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `currency` | select | `US Dollar` | Currency for the headline price of each result: US Dollar, Euro, British Pound, Japanese Yen, Australian Dollar, or Canadian Dollar. Every plan also carries prices in the other major currencies. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Hard cap on the total number of plans returned — also the maximum you can be billed for, since each plan is one result. Set to 0 for no limit. A single destination can hold over 10,000 plans, so start small to test before scaling up. |

### Output

Each plan is one result. Here's a representative item:

```json
{
    "provider": "Airalo",
    "name": "Change - 3 GB",
    "country": "United States",
    "countrySlug": "usa",
    "coverage": ["United States"],
    "data": "3GB",
    "dataGB": 3,
    "validity": "30 days",
    "validityDays": 30,
    "price": 11,
    "currency": "USD",
    "usdPrice": 11,
    "prices": { "USD": 11, "EUR": 10.2, "GBP": 8.7, "JPY": 1650, "AUD": 16.8, "CAD": 15 },
    "pricePerGB": 3.6667,
    "promoPrice": 9.35,
    "promoCode": "ESIMDB15",
    "network": "T-Mobile (5G), AT&T (5G)",
    "networkTypes": ["5G"],
    "has5G": true,
    "tethering": true,
    "voiceSms": false,
    "maxSpeed": "5G",
    "reducedSpeed": null,
    "canTopUp": true,
    "providerSlug": "airalo",
    "url": "https://esimdb.com/usa/airalo",
    "planId": "5f3a1c9e2b"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `provider` | string | eSIM provider/brand name (e.g. "Airalo") |
| `name` | string | Plan name (e.g. "Change - 3 GB") |
| `country` | string | Destination this plan was scraped for (display name) |
| `countrySlug` | string | eSIMDB country slug (e.g. "usa", "japan") |
| `url` | string | Source page URL on eSIMDB |
| `providerSlug` | string | eSIMDB provider slug |
| `planId` | string | eSIMDB internal plan identifier when available |

#### Data & Validity

| Field | Type | Description |
|-------|------|-------------|
| `data` | string | Raw data allowance as shown ("3GB", "Unlimited", "3GB/day + unlimited at 1Mbps") |
| `dataGB` | number | Parsed data in GB; null for unlimited, per-day, or unparseable plans |
| `validity` | string | Raw validity as shown (e.g. "30 days") |
| `validityDays` | integer | Parsed validity in whole days |
| `canTopUp` | boolean | Whether the plan can be topped up |

#### Pricing

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Headline price in your selected currency |
| `currency` | string | Currency of the headline `price` |
| `usdPrice` | number | Canonical USD price for sorting and comparison |
| `prices` | object | Multi-currency price map (USD, EUR, GBP, JPY, AUD, CAD) when available |
| `pricePerGB` | number | USD price divided by GB, for true cost comparison |

#### Promo

| Field | Type | Description |
|-------|------|-------------|
| `promoPrice` | number | Discounted USD price when a promo applies |
| `promoCode` | string | Active promo/discount code (e.g. "ESIMDB15") |

#### Coverage & Network

| Field | Type | Description |
|-------|------|-------------|
| `coverage` | string\[] | Countries/regions the plan covers |
| `network` | string | Underlying carrier network(s), e.g. "KDDI (5G), Softbank (5G)" |
| `networkTypes` | string\[] | Network generations (e.g. "5G", "4G/LTE") |
| `has5G` | boolean | Whether the plan supports 5G |
| `tethering` | boolean | Whether hotspot/tethering is allowed |
| `voiceSms` | boolean / string | Voice and SMS support |
| `maxSpeed` | string | Maximum speed when stated |
| `reducedSpeed` | string | Throttled speed after the data cap (e.g. "1000 kbps") |

### Tips for Best Results

- **Start small** — set `maxResults` to 100 on your first run to confirm the data fits your needs, then scale up. A single destination can hold over 10,000 plans.
- **`maxResults: 0` means unlimited** — leaving it at 0 returns every matching plan and bills for each one, which can run into many thousands of results and take much longer, especially on a broad country selection or a providers-only run that sweeps all 37 destinations. Set a number first, then raise it deliberately.
- **Pull a brand's whole global catalog** — leave `countries` empty and pick one or more providers to sweep every destination for those brands; `maxResults` still caps the run, so start at a few hundred.
- **Leave providers empty to pull a whole catalog** — select only destinations and skip the providers field to capture every brand's plans, then filter locally however you like.
- **Combine country and provider for the cheapest run** — pairing a destination with a brand (e.g. Japan + Airalo) returns a tight, precise set instead of a full catalog.
- **Keep per-day and unlimited plans** — a `minData` filter never drops "unlimited" or per-day plans, since they have no fixed GB number; they pass through so you don't lose the best high-data options.
- **Sort on `pricePerGB`, not headline price** — the cheapest sticker price is rarely the best value; `pricePerGB` reveals which plans actually deliver more data per dollar.
- **Use `currency` for display, `usdPrice` for math** — the headline `price` follows your chosen currency, but `usdPrice` stays constant across every plan, making it the reliable key for sorting and ranking.
- **Watch `promoCode` for affiliate value** — plans with a live promo code and `promoPrice` are the ones worth featuring to a deal-seeking audience.

### Pricing

**From $2.00 per 1,000 results** — among the most competitive rates for structured eSIM plan data. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.24 | $0.225 | $0.21 | $0.20 |
| 1,000 | $2.40 | $2.25 | $2.10 | $2.00 |
| 10,000 | $24.00 | $22.50 | $21.00 | $20.00 |
| 100,000 | $240.00 | $225.00 | $210.00 | $200.00 |

A "result" is one eSIM plan row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate travel-tech research, price comparison, and market analysis. Users are responsible for complying with applicable laws and eSIMDB's Terms of Service. The data collected is publicly listed plan and pricing information — use it responsibly and do not use extracted data for spam or any unlawful purpose.

# Actor input Schema

## `countries` (type: `array`):

Pick one or more destinations to compare eSIM plans for. Leave empty and select one or more Providers below to pull that brand's entire catalog across every destination. Leave both empty and the scraper defaults to the United States. Example: choose 'United States' and 'Japan' to get every eSIM plan available for those destinations.

## `providers` (type: `array`):

Limit results to specific eSIM brands (e.g. Airalo, Nomad, Saily, Ubigi). Leave empty to include every provider. Combine with Countries to get a single brand's plans for a destination — or use providers alone to pull a brand's entire global catalog (can be several thousand plans).

## `minData` (type: `integer`):

Only include plans with at least this much data, in GB. Leave at 0 for no minimum. Note: 'unlimited' and per-day plans are always included.

## `maxPrice` (type: `integer`):

Only include plans priced at or below this amount in US dollars. Leave at 0 for no price cap.

## `minValidityDays` (type: `integer`):

Only include plans valid for at least this many days. Leave at 0 for no minimum.

## `only5G` (type: `boolean`):

When enabled, only include plans that support 5G networks.

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

Currency used for the headline price in each result. Plans also include prices in several major currencies regardless of this setting.

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

Hard cap on the total number of plans returned across everything you selected — this is also the maximum you can be billed for, since each plan is one result. The result set is trimmed to exactly this number. Set to 0 for no limit (returns every matching plan). Note: 0 = unlimited can return many thousands of billable plans and take much longer, especially with broad country or provider selections (a single destination can hold over 10,000 plans, and a providers-only run scans all 37 destinations). Start small (e.g. 100) to test before scaling up.

## Actor input object example

```json
{
  "countries": [
    "usa"
  ],
  "providers": [],
  "minData": 0,
  "maxPrice": 0,
  "minValidityDays": 0,
  "only5G": false,
  "currency": "USD",
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped eSIM plans with provider, country, data, validity, price, and 5G support.

## `pricing` (type: `string`):

Per-plan pricing breakdown including USD price, price per GB, promo price, and promo code.

# 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 = {
    "countries": [
        "usa"
    ],
    "providers": [],
    "minData": 0,
    "maxPrice": 0,
    "minValidityDays": 0,
    "only5G": false,
    "currency": "USD",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/esimdb-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 = {
    "countries": ["usa"],
    "providers": [],
    "minData": 0,
    "maxPrice": 0,
    "minValidityDays": 0,
    "only5G": False,
    "currency": "USD",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/esimdb-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 '{
  "countries": [
    "usa"
  ],
  "providers": [],
  "minData": 0,
  "maxPrice": 0,
  "minValidityDays": 0,
  "only5G": false,
  "currency": "USD",
  "maxResults": 100
}' |
apify call solidcode/esimdb-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "eSIMDB Scraper",
        "description": "[💰 $2.0 / 1K] Extract eSIM data plans from esimdb.com — prices, data allowance, validity, coverage, 5G, tethering, and promo codes. Filter by country, provider, data, price, and validity across 170+ brands.",
        "version": "1.0",
        "x-build-id": "gZKjtSTftjSHbi18u"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~esimdb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-esimdb-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/solidcode~esimdb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-esimdb-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/solidcode~esimdb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-esimdb-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": {
                    "countries": {
                        "title": "Countries",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Pick one or more destinations to compare eSIM plans for. Leave empty and select one or more Providers below to pull that brand's entire catalog across every destination. Leave both empty and the scraper defaults to the United States. Example: choose 'United States' and 'Japan' to get every eSIM plan available for those destinations.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "usa",
                                "uk",
                                "france",
                                "spain",
                                "italy",
                                "germany",
                                "greece",
                                "portugal",
                                "netherlands",
                                "switzerland",
                                "austria",
                                "ireland",
                                "turkey",
                                "japan",
                                "china",
                                "thailand",
                                "vietnam",
                                "malaysia",
                                "singapore",
                                "indonesia",
                                "philippines",
                                "south-korea",
                                "india",
                                "hong-kong",
                                "taiwan",
                                "canada",
                                "mexico",
                                "brazil",
                                "argentina",
                                "australia",
                                "new-zealand",
                                "uae",
                                "saudi-arabia",
                                "israel",
                                "egypt",
                                "morocco",
                                "south-africa"
                            ],
                            "enumTitles": [
                                "United States",
                                "United Kingdom",
                                "France",
                                "Spain",
                                "Italy",
                                "Germany",
                                "Greece",
                                "Portugal",
                                "Netherlands",
                                "Switzerland",
                                "Austria",
                                "Ireland",
                                "Turkey",
                                "Japan",
                                "China",
                                "Thailand",
                                "Vietnam",
                                "Malaysia",
                                "Singapore",
                                "Indonesia",
                                "Philippines",
                                "South Korea",
                                "India",
                                "Hong Kong",
                                "Taiwan",
                                "Canada",
                                "Mexico",
                                "Brazil",
                                "Argentina",
                                "Australia",
                                "New Zealand",
                                "United Arab Emirates",
                                "Saudi Arabia",
                                "Israel",
                                "Egypt",
                                "Morocco",
                                "South Africa"
                            ]
                        },
                        "default": []
                    },
                    "providers": {
                        "title": "Providers",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Limit results to specific eSIM brands (e.g. Airalo, Nomad, Saily, Ubigi). Leave empty to include every provider. Combine with Countries to get a single brand's plans for a destination — or use providers alone to pull a brand's entire global catalog (can be several thousand plans).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "airalo",
                                "nomad",
                                "saily",
                                "ubigi",
                                "gigsky",
                                "truphone",
                                "yesim",
                                "bnesim",
                                "airhub",
                                "esimplus",
                                "globalesim",
                                "billionconnect",
                                "breeze",
                                "bytesim",
                                "chillaxsim",
                                "esim4travel",
                                "alosim",
                                "jetpac",
                                "gomoworld",
                                "roamless",
                                "instabridge",
                                "simoptions",
                                "mobimatter",
                                "etravelsim"
                            ],
                            "enumTitles": [
                                "Airalo",
                                "Nomad",
                                "Saily",
                                "Ubigi",
                                "GigSky",
                                "Truphone",
                                "Yesim",
                                "BNESIM",
                                "Airhub",
                                "eSIMplus",
                                "GlobaleSIM",
                                "Billion Connect",
                                "Breeze",
                                "ByteSIM",
                                "ChillaxSIM",
                                "eSIM4Travel",
                                "aloSIM",
                                "Jetpac",
                                "GoMoWorld",
                                "Roamless",
                                "Instabridge",
                                "SimOptions",
                                "MobiMatter",
                                "EtravelSIM"
                            ]
                        },
                        "default": []
                    },
                    "minData": {
                        "title": "Minimum Data (GB)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include plans with at least this much data, in GB. Leave at 0 for no minimum. Note: 'unlimited' and per-day plans are always included.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum Price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include plans priced at or below this amount in US dollars. Leave at 0 for no price cap.",
                        "default": 0
                    },
                    "minValidityDays": {
                        "title": "Minimum Validity (days)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include plans valid for at least this many days. Leave at 0 for no minimum.",
                        "default": 0
                    },
                    "only5G": {
                        "title": "5G Plans Only",
                        "type": "boolean",
                        "description": "When enabled, only include plans that support 5G networks.",
                        "default": false
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "JPY",
                            "AUD",
                            "CAD"
                        ],
                        "type": "string",
                        "description": "Currency used for the headline price in each result. Plans also include prices in several major currencies regardless of this setting.",
                        "default": "USD"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on the total number of plans returned across everything you selected — this is also the maximum you can be billed for, since each plan is one result. The result set is trimmed to exactly this number. Set to 0 for no limit (returns every matching plan). Note: 0 = unlimited can return many thousands of billable plans and take much longer, especially with broad country or provider selections (a single destination can hold over 10,000 plans, and a providers-only run scans all 37 destinations). Start small (e.g. 100) to test before scaling up.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
