# Upscrape Complete API Catalog for LLMs

Paste this document into an LLM or coding agent when an integration may use one or more Upscrape platforms.

This reference is generated from the currently published, live module manifests: 44 platforms and 196 capabilities. Do not invent platform or capability IDs that are not listed here.

## Shared Integration Contract

- API base URL: `https://data.upscrape.com`
- Authenticate every request with `Authorization: Bearer YOUR_API_KEY`.
- Send `Content-Type: application/json`.
- Start every run with `POST /execute`; the request body must contain a listed `capability` and a schema-valid `input` object.
- A `200` response completed inline; read `results[0].data`.
- A `202` response was queued; poll `GET /jobs/{id}` or `GET /jobs/{id}/result` until `state` is `completed` or `failed`.
- `Prefer: wait=N` may hold `POST /execute` for up to N seconds for an inline result.
- `Idempotency-Key` may be supplied when a submission must be safe to retry.
- Optional top-level request fields include `timeout_ms` and `network` (`session_id`, `session_key`, and `sticky`).
- Raw `results[0].data` mirrors the upstream service and may evolve. Treat examples as illustrative rather than a fixed output schema.
- Capabilities marked as normalized may also return a top-level `normalized` object; prefer it for cross-platform product comparisons while retaining raw results as the source of truth.

## How to Use This Catalog

1. Select the smallest set of capabilities that satisfies the user's goal.
2. Validate each `input` against the JSON Schema printed with that capability.
3. Submit and poll each job using the shared contract above.
4. Compose results across platforms in application code; do not send multiple capability IDs in one `/execute` request.
5. For the latest OpenAPI operation and response-envelope definitions, fetch the stable platform brief linked below; it provides that platform's current OpenAPI URL.

## Platform Directory

- [Are.na](https://upscrape.com/scrapers/arena/llm.md) — `arena`; 6 capabilities
- [Asda](https://upscrape.com/scrapers/asda/llm.md) — `asda`; 3 capabilities
- [Blinkit](https://upscrape.com/scrapers/blinkit/llm.md) — `blinkit`; 7 capabilities
- [Carrefour KSA](https://upscrape.com/scrapers/carrefourksa/llm.md) — `carrefourksa`; 3 capabilities
- [ChatGPT Answers](https://upscrape.com/scrapers/chatgpt/llm.md) — `chatgpt`; 1 capability
- [Disney Dining](https://upscrape.com/scrapers/disney-dining/llm.md) — `disney-dining`; 2 capabilities
- [eBay](https://upscrape.com/scrapers/ebay/llm.md) — `ebay`; 2 capabilities
- [Facebook](https://upscrape.com/scrapers/facebook/llm.md) — `facebook`; 10 capabilities
- [Facebook Ad Library](https://upscrape.com/scrapers/fb-adlibrary/llm.md) — `fb-adlibrary`; 2 capabilities
- [Gemini Answers](https://upscrape.com/scrapers/gemini/llm.md) — `gemini`; 1 capability
- [Google Ads Transparency](https://upscrape.com/scrapers/google-adstransparency/llm.md) — `google-adstransparency`; 3 capabilities
- [Google Maps](https://upscrape.com/scrapers/googlemaps/llm.md) — `googlemaps`; 5 capabilities
- [GST India](https://upscrape.com/scrapers/gst/llm.md) — `gst`; 2 capabilities
- [HungerStation Market](https://upscrape.com/scrapers/hungerstation/llm.md) — `hungerstation`; 3 capabilities
- [IKEA](https://upscrape.com/scrapers/ikea/llm.md) — `ikea`; 1 capability
- [Instagram Scraper](https://upscrape.com/scrapers/instagram/llm.md) — `instagram`; 17 capabilities
- [JioMart](https://upscrape.com/scrapers/jiomart/llm.md) — `jiomart`; 16 capabilities
- [Keeta Keemart](https://upscrape.com/scrapers/keeta/llm.md) — `keeta`; 4 capabilities
- [Lidl](https://upscrape.com/scrapers/lidl/llm.md) — `lidl`; 2 capabilities
- [LinkedIn Scraper](https://upscrape.com/scrapers/linkedin/llm.md) — `linkedin`; 3 capabilities
- [Linktree Scraper](https://upscrape.com/scrapers/linktree/llm.md) — `linktree`; 3 capabilities
- [Morrisons](https://upscrape.com/scrapers/morrisons/llm.md) — `morrisons`; 3 capabilities
- [Nana Express](https://upscrape.com/scrapers/nana/llm.md) — `nana`; 3 capabilities
- [Panda Saudi Arabia](https://upscrape.com/scrapers/panda/llm.md) — `panda`; 2 capabilities
- [ParkWhiz](https://upscrape.com/scrapers/parkwhiz/llm.md) — `parkwhiz`; 4 capabilities
- [Perplexity Answers](https://upscrape.com/scrapers/perplexity/llm.md) — `perplexity`; 1 capability
- [Pinterest Scraper](https://upscrape.com/scrapers/pinterest/llm.md) — `pinterest`; 7 capabilities
- [Product Hunt](https://upscrape.com/scrapers/producthunt/llm.md) — `producthunt`; 9 capabilities
- [Reddit](https://upscrape.com/scrapers/reddit/llm.md) — `reddit`; 6 capabilities
- [SpotHero](https://upscrape.com/scrapers/spothero/llm.md) — `spothero`; 4 capabilities
- [StubHub](https://upscrape.com/scrapers/stubhub/llm.md) — `stubhub`; 3 capabilities
- [TalabatMart](https://upscrape.com/scrapers/talabatmart/llm.md) — `talabatmart`; 5 capabilities
- [Tesco](https://upscrape.com/scrapers/tesco/llm.md) — `tesco`; 3 capabilities
- [Threads Scraper](https://upscrape.com/scrapers/threads/llm.md) — `threads`; 7 capabilities
- [TikTok Ad Library](https://upscrape.com/scrapers/tiktok-adlibrary/llm.md) — `tiktok-adlibrary`; 2 capabilities
- [TikTok Scraper](https://upscrape.com/scrapers/tiktok/llm.md) — `tiktok`; 2 capabilities
- [ToYou](https://upscrape.com/scrapers/toyou/llm.md) — `toyou`; 4 capabilities
- [Trustpilot](https://upscrape.com/scrapers/trustpilot/llm.md) — `trustpilot`; 1 capability
- [Tumblr Scraper](https://upscrape.com/scrapers/tumblr/llm.md) — `tumblr`; 6 capabilities
- [Uniqlo](https://upscrape.com/scrapers/uniqlo/llm.md) — `uniqlo`; 2 capabilities
- [Universal Web Scraper](https://upscrape.com/scrapers/web/llm.md) — `web`; 3 capabilities
- [X (Twitter)](https://upscrape.com/scrapers/x/llm.md) — `x`; 1 capability
- [Zepto](https://upscrape.com/scrapers/zepto/llm.md) — `zepto`; 11 capabilities
- [Zomato](https://upscrape.com/scrapers/zomato/llm.md) — `zomato`; 11 capabilities

## Complete Capability Reference

### Are.na

- Platform ID: `arena`
- Live module version: `v0.4.9`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/arena/llm.md
- Description: Scrape Are.na profiles, channels, and blocks with sync-first capabilities for profile lookup, channel listing, block listing, and block connection retrieval.

#### `arena.block.connections-list` — List Block Connections

Fetch all channels that contain a specific Are.na block.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `15000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.block.connections-list",
  "input": {
    "block_id": "41532780"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "block_id": {
      "description": "Are.na block ID or block URL",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "block_id"
  ],
  "type": "object"
}
```

#### `arena.block.get` — Get Block

Fetch a single Are.na block by block ID or block URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `10000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.block.get",
  "input": {
    "block_id": "41532780"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "block_id": {
      "description": "Are.na block ID or block URL",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "block_id"
  ],
  "type": "object"
}
```

#### `arena.channel.blocks-list` — List Channel Blocks

Fetch all blocks from an Are.na channel.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.channel.blocks-list",
  "input": {
    "slug": "websites-with-novel-navs"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "slug": {
      "description": "Are.na channel slug or URL",
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "type": "object"
}
```

#### `arena.channel.get` — Get Channel

Fetch an Are.na channel by slug or channel URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `10000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.channel.get",
  "input": {
    "slug": "websites-with-novel-navs"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "slug": {
      "description": "Are.na channel slug or URL",
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "type": "object"
}
```

#### `arena.profile.channels-list` — List Profile Channels

Fetch all channels for an Are.na profile.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.profile.channels-list",
  "input": {
    "username": "laurel-schwulst"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Are.na username or profile URL",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

#### `arena.profile.get` — Get Profile

Fetch an Are.na user or group profile by username or profile URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `10000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "arena.profile.get",
  "input": {
    "username": "laurel-schwulst"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Are.na username or profile URL",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

### Asda

- Platform ID: `asda`
- Live module version: `v0.1.3`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/asda/llm.md
- Description: Scraper for Asda Groceries UK product search, category taxonomy, and product detail, backed by Asda's public Algolia catalog index.

#### `asda.categories.list` — Categories List

List the Asda Groceries category taxonomy (category > department > aisle) with product counts, derived from the catalog index facets.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "asda.categories.list",
  "input": {
    "store_id": "4565"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "default": "4565",
      "description": "Asda store id used for stock boosting",
      "pattern": "^[0-9]{1,6}$",
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `asda.product.detail.get` — Product Detail Get

Fetch one Asda product by product ID or CIN with its full catalog attributes.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "asda.product.detail.get",
  "input": {
    "id": "20504",
    "store_id": "4565"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "id": {
      "description": "Asda product ID or CIN (both are numeric catalog identifiers)",
      "pattern": "^[0-9]{1,14}$",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "default": "4565",
      "description": "Asda store id used for stock boosting and in_stock flags",
      "pattern": "^[0-9]{1,6}$",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "type": "object"
}
```

#### `asda.products.search` — Products Search

Search Asda Groceries UK products by keyword, with store-aware stock boosting and normalized price, rating, GTIN, and taxonomy fields.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "asda.products.search",
  "input": {
    "hits_per_page": 5,
    "page": 1,
    "query": "milk",
    "store_id": "4565"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "hits_per_page": {
      "default": 24,
      "maximum": 60,
      "minimum": 1,
      "type": "integer"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "1-based results page",
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "minLength": 1,
      "type": "string"
    },
    "store_id": {
      "default": "4565",
      "description": "Asda store id used for stock boosting and in_stock flags",
      "pattern": "^[0-9]{1,6}$",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### Blinkit

- Platform ID: `blinkit`
- Live module version: `v0.3.6`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/blinkit/llm.md
- Description: Scrape India's Blinkit q-commerce platform: product details, search with pagination, category listings, delivery ETA, location serviceability, and search autocomplete. No login required.

#### `blinkit.autosuggest` — Auto Suggest

Get Blinkit search autocomplete suggestions for a partial query.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.autosuggest",
  "input": {
    "query": "mil"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for Blinkit search autocomplete.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Partial search query for autocomplete.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "AutoSuggestInput",
  "type": "object"
}
```

#### `blinkit.categories` — List Categories

List Blinkit product categories and subcategories with images and deeplinks.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.categories",
  "input": {
    "latitude": 28.4583,
    "longitude": 77.0728
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for listing Blinkit product categories.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based categories.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based categories.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "ListCategoriesInput",
  "type": "object"
}
```

#### `blinkit.eta` — Get ETA

Get Blinkit delivery ETA estimates for a location, broken down by merchant and delivery type.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.eta",
  "input": {
    "latitude": 28.4583,
    "longitude": 77.0728
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for getting Blinkit delivery ETA.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based ETA.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based ETA.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "GetETAInput",
  "type": "object"
}
```

#### `blinkit.health` — Health Check

Run a Blinkit liveness check across location, ETA, categories, search, product, and autocomplete surfaces.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.health",
  "input": {
    "latitude": 28.4583,
    "longitude": 77.0728
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for Blinkit health check.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based health check.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based health check.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "HealthInput",
  "type": "object"
}
```

#### `blinkit.location` — Resolve Location

Resolve Blinkit serviceability, merchant/store IDs, and address details for a latitude/longitude.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.location",
  "input": {
    "latitude": 28.4583,
    "longitude": 77.0728
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for resolving Blinkit serviceability for a location.",
  "properties": {
    "latitude": {
      "description": "Latitude of the delivery address.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude of the delivery address.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "ResolveLocationInput",
  "type": "object"
}
```

#### `blinkit.product` — Get Product

Get Blinkit product details including images, pricing, brand, and availability by product ID.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.product",
  "input": {
    "product_id": 1
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for getting a Blinkit product by ID.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based pricing.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based pricing.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "product_id": {
      "description": "Blinkit product ID.",
      "type": "integer"
    }
  },
  "required": [
    "product_id"
  ],
  "title": "GetProductInput",
  "type": "object"
}
```

#### `blinkit.search` — Search Products

Search Blinkit products by keyword with pagination support.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "blinkit.search",
  "input": {
    "limit": 5,
    "query": "milk"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for searching Blinkit products by keyword.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based results.",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of products to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based results.",
      "type": "number"
    },
    "max_pages": {
      "default": 10,
      "description": "Maximum number of pages to fetch.",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Offset for pagination.",
      "minimum": 0,
      "type": "integer"
    },
    "query": {
      "description": "Search query string.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchProductsInput",
  "type": "object"
}
```

### Carrefour KSA

- Platform ID: `carrefourksa`
- Live module version: `carrefourksa-scraper-v0.1.0`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/carrefourksa/llm.md
- Description: Scraper for Carrefour Saudi Arabia (Majid Al Futtaim React-web backend): the full category tree, leaf category shelf listings with SAR prices and discounts, and product detail pages with JSON-LD records, breadcrumbs, and barcodes.

#### `carrefourksa.categories.list` — Categories List

Fetch the Carrefour KSA category tree from the storefront menu, flattened into parent-linked rows with leaf flags; leaf ids feed carrefourksa.category.products.list.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "carrefourksa.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "latitude": {
      "description": "Store catchment latitude. Defaults to 24.7136 (Riyadh).",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Store catchment longitude. Defaults to 46.6753 (Riyadh).",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `carrefourksa.category.products.list` — Category Products List

List one 0-based page of a leaf category shelf with SAR prices, discounts, availability, supplier (1P/3P), and product URLs.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "carrefourksa.category.products.list",
  "input": {
    "category_id": "FKSA1550000"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Leaf category id from carrefourksa.categories.list, e.g. FKSA1550000 (Soft Drinks). Root categories return empty sponsored pages upstream; use leaf ids.",
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "0-based shelf page. Defaults to 0; num_of_pages in the response is the page count.",
      "minimum": 0,
      "type": "integer"
    },
    "page_size": {
      "description": "Products per page. Defaults to 24, capped at 100.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "sort_by": {
      "description": "Upstream sort key. Defaults to relevance.",
      "type": "string"
    }
  },
  "required": [
    "category_id"
  ],
  "type": "object"
}
```

#### `carrefourksa.product.detail.get` — Product Detail Get

Fetch the product detail record for a PDP URL, PDP path, or bare numeric product id: JSON-LD product data plus best-effort breadcrumbs and barcode.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "carrefourksa.product.detail.get",
  "input": {
    "url": "https://www.carrefourksa.com/mafsau/en/lemonade-mixers/7up-zero-sugar-cans-150ml-x12/p/694540"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Product page locator: a full PDP URL (https://www.carrefourksa.com/mafsau/en/.../p/694540), a PDP path (/mafsau/en/.../p/694540), or a bare numeric product id (694540, resolved to the canonical /mafsau/en/p/694540 route).",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### ChatGPT Answers

- Platform ID: `chatgpt`
- Live module version: `v0.2.3`
- Category: `ai-answers`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/chatgpt/llm.md
- Description: Generate localized, stateless ChatGPT consumer-web answers with optional search, evidence controls, citations, and verified execution metadata.

#### `chatgpt.answer.generate` — Generate answer

Submit a prompt with locale, country, search, and source-policy controls in a fresh ChatGPT context; return a complete answer, citations, and execution evidence.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"chatgpt_consumer_web_stateless","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "chatgpt.answer.generate",
  "input": {
    "country": "United States",
    "country_mode": "best_effort",
    "include_sources": true,
    "locale": "en-US",
    "max_sources": 6,
    "mode": "search",
    "model": "auto",
    "prompt": "As of 2026-08-03, explain how the official MCP Streamable HTTP transport handles session creation, subsequent protocol headers, and expired sessions. Separate protocol requirements from client design choices.",
    "source_policy": {
      "official_sources_only": true,
      "preferred_domains": [
        "modelcontextprotocol.io"
      ],
      "published_after": "2025-01-01"
    },
    "timezone": "America/New_York"
  }
}
```

Input JSON Schema:

```json
{
  "$defs": {
    "domain_list": {
      "items": {
        "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$",
        "type": "string"
      },
      "maxItems": 20,
      "type": "array",
      "uniqueItems": true
    },
    "source_policy": {
      "additionalProperties": false,
      "properties": {
        "excluded_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "official_sources_only": {
          "default": false,
          "type": "boolean"
        },
        "preferred_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "published_after": {
          "format": "date",
          "type": "string"
        },
        "published_before": {
          "format": "date",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "country": {
      "maxLength": 64,
      "minLength": 2,
      "type": "string"
    },
    "country_mode": {
      "default": "best_effort",
      "description": "best_effort keeps ChatGPT usable and reports whether geotargeting was applied; strict requires a verified country exit and fails closed.",
      "enum": [
        "best_effort",
        "strict"
      ],
      "type": "string"
    },
    "include_sources": {
      "default": true,
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "locale": {
      "maxLength": 35,
      "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_sources": {
      "default": 25,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "default": "auto",
      "enum": [
        "auto",
        "answer",
        "search"
      ],
      "type": "string"
    },
    "model": {
      "default": "auto",
      "enum": [
        "auto"
      ],
      "type": "string"
    },
    "prompt": {
      "maxLength": 32000,
      "pattern": "\\S",
      "type": "string"
    },
    "source_policy": {
      "$ref": "#/$defs/source_policy"
    },
    "timezone": {
      "maxLength": 80,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "prompt"
  ],
  "title": "ChatGPT advanced answer generation input",
  "type": "object"
}
```

### Disney Dining

- Platform ID: `disney-dining`
- Live module version: `v0.1.7`
- Category: `other`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/disney-dining/llm.md
- Description: Scrape Disney resort dining venues, menus, hours, and restaurant details for Walt Disney World and Disneyland.

#### `disney.restaurant` — Get Restaurant

Get detailed information for a single Disney restaurant including meal periods, pricing, menus, booking links, and calendar availability window.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "disney.restaurant",
  "input": {
    "resort": "wdw",
    "slug": "ohana"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "date": {
      "description": "Date for schedule info (YYYY-MM-DD, default: 3 days from now)",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "resort": {
      "description": "Resort code: 'wdw' or 'dlr'",
      "enum": [
        "wdw",
        "dlr"
      ],
      "type": "string"
    },
    "slug": {
      "description": "Restaurant URL slug, e.g. 'ohana', 'be-our-guest-restaurant'",
      "type": "string"
    }
  },
  "required": [
    "resort",
    "slug"
  ],
  "type": "object"
}
```

#### `disney.restaurants` — List Restaurants

List all dining venues at a Disney resort with location, cuisine, pricing, hours, and reservation availability status.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "disney.restaurants",
  "input": {
    "resort": "wdw"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "date": {
      "description": "Date for schedule info (YYYY-MM-DD, default: 3 days from now)",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "resort": {
      "description": "Resort code: 'wdw' (Walt Disney World) or 'dlr' (Disneyland Resort)",
      "enum": [
        "wdw",
        "dlr"
      ],
      "type": "string"
    }
  },
  "required": [
    "resort"
  ],
  "type": "object"
}
```

### eBay

- Platform ID: `ebay`
- Live module version: `ebay-scraper-v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/ebay/llm.md
- Description: Scraper for eBay US (ebay.com): server-rendered keyword search result pages with listing prices and canonical URLs, and product detail pages with schema.org JSON-LD records, behind a mandatory session-cookie warmup.

#### `ebay.product.detail.get` — Product Detail Get

Fetch an eBay item detail page by numeric item id or /itm/ URL. Returns the schema.org JSON-LD Product record (name, images, offers with price and availability) plus the page title.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "ebay.product.detail.get",
  "input": {
    "id": "283987164379"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "id": {
      "description": "Numeric eBay item id (e.g. 283987164379) or a full /itm/ URL (https://www.ebay.com/itm/283987164379, slugged variants included).",
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ],
  "type": "object"
}
```

#### `ebay.products.search` — Products Search

Search eBay US listings by keyword. Returns one 1-based, server-rendered result page of listing cards (item id, title, price text, canonical URL, image URL) plus the raw total-count text.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "ebay.products.search",
  "input": {
    "query": "laptop"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "1-based result page (upstream _pgn). Defaults to 1.",
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Keyword search query, e.g. \"laptop\" or a GTIN/EAN/UPC.",
      "minLength": 1,
      "type": "string"
    },
    "sort": {
      "description": "Result ordering: best_match (upstream _sop=12, default), price_lowest (price + shipping lowest first, _sop=15), price_highest (_sop=16).",
      "enum": [
        "best_match",
        "price_lowest",
        "price_highest"
      ],
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### Facebook

- Platform ID: `facebook`
- Live module version: `v0.2.6`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/facebook/llm.md
- Description: Scrapes public Facebook data including pages, posts, events, videos, reviews, and ads library.

#### `facebook.ads-library.search` — Search Ads Library

Searches the Facebook Ads Library for active and inactive ads by advertiser or keyword.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.ads-library.search",
  "input": {
    "query": "Meta AI"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "cursor": {
      "description": "Pagination cursor from previous response",
      "type": "string"
    },
    "limit": {
      "description": "Maximum number of results to return",
      "example": 20,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search query string",
      "example": "Meta AI",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `facebook.page-posts.list` — List Page Posts

Lists recent posts from a Facebook page including text, media, and engagement metrics.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.page-posts.list",
  "input": {
    "url": "https://www.facebook.com/Meta"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "cursor": {
      "description": "Pagination cursor from previous response",
      "type": "string"
    },
    "limit": {
      "description": "Maximum items per page",
      "example": 20,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Page URL",
      "example": "https://www.facebook.com/Meta",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.page-reels.list` — List Page Reels

Lists reels from a Facebook page with view counts and video metadata.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.page-reels.list",
  "input": {
    "url": "https://www.facebook.com/Meta"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "description": "Maximum items to return",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Page URL",
      "example": "https://www.facebook.com/Meta",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.page-videos.list` — List Page Videos

Lists videos posted by a Facebook page with titles, view counts, and engagement metrics.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.page-videos.list",
  "input": {
    "url": "https://www.facebook.com/Meta"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "cursor": {
      "description": "Pagination cursor from previous response",
      "type": "string"
    },
    "limit": {
      "description": "Maximum items per page",
      "example": 20,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Page URL",
      "example": "https://www.facebook.com/Meta",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.page.get` — Get Page

Fetches a Facebook page's public profile including name, category, follower count, and page metadata.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.page.get",
  "input": {
    "url": "https://www.facebook.com/Meta"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Resource URL to scrape",
      "example": "https://www.facebook.com/Meta",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.photo.get` — Get Photo

Fetches details about a public Facebook photo including image URL and engagement metadata.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.photo.get",
  "input": {
    "url": "https://www.facebook.com/NASA/photos/1496429658519072"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Photo URL",
      "example": "https://www.facebook.com/photo/?fbid=266478569374694",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.post-comments.list` — List Post Comments

Lists comments on a Facebook post including comment text, author, and reaction counts.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.post-comments.list",
  "input": {
    "url": "https://www.facebook.com/Meta/posts/pfbid0EwsxFj5K4PGG5XS58NxrZwEYgrx4aWwnSYJdFVsphLZDJMPXYiokrkefu1CmKm4Vl"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "cursor": {
      "description": "Pagination cursor from previous response",
      "type": "string"
    },
    "limit": {
      "description": "Maximum items per page",
      "example": 20,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Post URL",
      "example": "https://www.facebook.com/Meta/posts/pfbid02abc",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.post.get` — Get Post

Fetches a Facebook post's details including text, reactions, shares, and comment count.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.post.get",
  "input": {
    "url": "https://www.facebook.com/Meta/posts/pfbid0EwsxFj5K4PGG5XS58NxrZwEYgrx4aWwnSYJdFVsphLZDJMPXYiokrkefu1CmKm4Vl"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Post URL",
      "example": "https://www.facebook.com/Meta/posts/pfbid0...",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.reel.get` — Get Reel

Fetches details about a public Facebook Reel including video URL, view count, and engagement.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.reel.get",
  "input": {
    "url": "https://www.facebook.com/reel/911507208162880"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Resource URL to scrape",
      "example": "https://www.facebook.com/reel/123456789",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `facebook.video.get` — Get Video

Fetches details about a public Facebook video including title, view count, and engagement metrics.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "facebook.video.get",
  "input": {
    "url": "https://www.facebook.com/Meta/videos/911507208162880/"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Resource URL to scrape",
      "example": "https://www.facebook.com/watch/?v=123456789",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### Facebook Ad Library

- Platform ID: `fb-adlibrary`
- Live module version: `v0.4.4`
- Category: `ads`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/fb-adlibrary/llm.md
- Description: Scrapes public Facebook Ad Library data including ad search by keyword and advertiser ad listings with full filter support.

#### `fb-adlibrary.ad.search` — Search Ads

Searches the Facebook Ad Library by keyword. Returns raw ad data including creative content, targeting info, spend data, and all metadata. Supports filtering by language, platform, media type, active status, date range, and sorting.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "fb-adlibrary.ad.search",
  "input": {
    "country": "US",
    "limit": 5,
    "query": "nike"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "active": {
      "description": "Filter by active status: all, active, inactive (default: all)",
      "example": "all",
      "type": "string"
    },
    "country": {
      "description": "ISO country code (default: US)",
      "example": "US",
      "type": "string"
    },
    "end_date": {
      "description": "Filter ads with impressions until this date (YYYY-MM-DD)",
      "example": "2025-01-01",
      "type": "string"
    },
    "languages": {
      "description": "Filter by content language codes (e.g. [\"en\", \"es\"])",
      "example": [
        "en"
      ],
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "limit": {
      "description": "Maximum number of ads to return (default: 50)",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "media_type": {
      "description": "Filter by media type: all, image, video, meme, none (default: all)",
      "example": "video",
      "type": "string"
    },
    "platforms": {
      "description": "Filter by publisher platform: facebook, instagram, messenger, audience_network",
      "example": [
        "facebook"
      ],
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "query": {
      "description": "Search keyword or phrase",
      "example": "nike",
      "type": "string"
    },
    "sort_by": {
      "description": "Sort results: relevance, date, impressions (default: impressions)",
      "example": "relevance",
      "type": "string"
    },
    "start_date": {
      "description": "Filter ads with impressions from this date (YYYY-MM-DD)",
      "example": "2024-01-01",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `fb-adlibrary.advertiser-ads.list` — List Advertiser Ads

Lists all ads from a specific Facebook advertiser by their page ID. Returns raw ad data with full filter support.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "fb-adlibrary.advertiser-ads.list",
  "input": {
    "country": "US",
    "limit": 5,
    "page_id": "15087023444"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "active": {
      "description": "Filter by active status: all, active, inactive (default: all)",
      "example": "all",
      "type": "string"
    },
    "country": {
      "description": "ISO country code (default: US)",
      "example": "US",
      "type": "string"
    },
    "end_date": {
      "description": "Filter ads with impressions until this date (YYYY-MM-DD)",
      "example": "2025-01-01",
      "type": "string"
    },
    "languages": {
      "description": "Filter by content language codes (e.g. [\"en\"])",
      "example": [
        "en"
      ],
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "limit": {
      "description": "Maximum number of ads to return (default: 50)",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "media_type": {
      "description": "Filter by media type: all, image, video, meme, none (default: all)",
      "example": "all",
      "type": "string"
    },
    "page_id": {
      "description": "Facebook page ID of the advertiser",
      "example": "15087023444",
      "type": "string"
    },
    "platforms": {
      "description": "Filter by publisher platform: facebook, instagram, messenger, audience_network",
      "example": [
        "facebook"
      ],
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "sort_by": {
      "description": "Sort results: relevance, date, impressions (default: impressions)",
      "example": "date",
      "type": "string"
    },
    "start_date": {
      "description": "Filter ads with impressions from this date (YYYY-MM-DD)",
      "example": "2024-01-01",
      "type": "string"
    }
  },
  "required": [
    "page_id"
  ],
  "type": "object"
}
```

### Gemini Answers

- Platform ID: `gemini`
- Live module version: `v0.3.1`
- Category: `ai-answers`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/gemini/llm.md
- Description: Generate localized, stateless Gemini consumer-web answers with evidence controls, citations, model application checks, and execution metadata.

#### `gemini.answer.generate` — Generate answer

Submit a prompt with locale, country, anonymous model, and source-policy controls in a fresh Gemini context; return a complete answer and execution evidence.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"gemini_consumer_web_stateless","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "gemini.answer.generate",
  "input": {
    "country": "Japan",
    "include_sources": true,
    "locale": "ja-JP",
    "max_sources": 8,
    "mode": "answer",
    "model": "3.5 flash-lite",
    "prompt": "2026年8月3日時点の公式資料だけを使い、日本の個人情報保護法における「個人データ」と「保有個人データ」の違いを日本語で説明し、確認できない点は推測しないでください。",
    "source_policy": {
      "official_sources_only": true,
      "preferred_domains": [
        "ppc.go.jp"
      ]
    },
    "timezone": "Asia/Tokyo"
  }
}
```

Input JSON Schema:

```json
{
  "$defs": {
    "domain_list": {
      "items": {
        "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$",
        "type": "string"
      },
      "maxItems": 20,
      "type": "array",
      "uniqueItems": true
    },
    "source_policy": {
      "additionalProperties": false,
      "properties": {
        "excluded_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "official_sources_only": {
          "default": false,
          "type": "boolean"
        },
        "preferred_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "published_after": {
          "format": "date",
          "type": "string"
        },
        "published_before": {
          "format": "date",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "country": {
      "maxLength": 64,
      "minLength": 2,
      "type": "string"
    },
    "include_sources": {
      "default": true,
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "locale": {
      "maxLength": 35,
      "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_sources": {
      "default": 25,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "default": "auto",
      "enum": [
        "auto",
        "answer"
      ],
      "type": "string"
    },
    "model": {
      "default": "auto",
      "enum": [
        "auto",
        "flash-lite",
        "3.5 flash-lite"
      ],
      "type": "string"
    },
    "prompt": {
      "maxLength": 32000,
      "pattern": "\\S",
      "type": "string"
    },
    "source_policy": {
      "$ref": "#/$defs/source_policy"
    },
    "timezone": {
      "maxLength": 80,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "prompt"
  ],
  "title": "Gemini advanced answer generation input",
  "type": "object"
}
```

### Google Ads Transparency

- Platform ID: `google-adstransparency`
- Live module version: `v0.1.7`
- Category: `ads`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/google-adstransparency/llm.md
- Description: Scrapes Google's Ads Transparency Center (adstransparency.google.com): search creatives by text/region, list every creative run by an advertiser, and resolve an advertiser name or domain to its advertiser id. Returns raw ad payloads for competitor research. RPC response shapes are reconstructed and pending live verification.

#### `google-adstransparency.advertiser-ads.list` — List Advertiser Creatives

Lists every creative run by a specific advertiser, identified by their Google advertiser id (e.g. AR…), within a region. Returns raw creative payloads.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "google-adstransparency.advertiser-ads.list",
  "input": {
    "advertiser_id": "AR06910682252145491969",
    "limit": 5,
    "region": "anywhere"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "advertiser_id": {
      "description": "Google advertiser id (e.g. \"AR06910682252145491969\"). Obtain via advertiser.search.",
      "example": "AR06910682252145491969",
      "type": "string"
    },
    "cursor": {
      "description": "Page token from a previous response's next_cursor.",
      "type": "string"
    },
    "limit": {
      "description": "Maximum number of creatives to return (default: 50).",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "region": {
      "description": "ISO-3166 alpha-2 region code, or \"anywhere\" (default: anywhere).",
      "example": "US",
      "type": "string"
    }
  },
  "required": [
    "advertiser_id"
  ],
  "type": "object"
}
```

#### `google-adstransparency.advertiser.search` — Search Advertisers

Resolves an advertiser name or domain to its Google advertiser id(s) and disclosed metadata. Use the returned advertiser id with advertiser-ads.list.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "google-adstransparency.advertiser.search",
  "input": {
    "limit": 5,
    "query": "nike"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "description": "Maximum number of advertisers to return (default: 20).",
      "example": 5,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Advertiser name or domain to resolve to an advertiser id.",
      "example": "nike",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `google-adstransparency.creative.search` — Search Creatives

Searches the Ads Transparency Center by text (brand, advertiser name, or domain) within a region. Returns raw creative payloads. Use advertiser.search first when you only know the advertiser by name.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "google-adstransparency.creative.search",
  "input": {
    "limit": 5,
    "query": "nike",
    "region": "US"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "cursor": {
      "description": "Page token from a previous response's next_cursor.",
      "type": "string"
    },
    "limit": {
      "description": "Maximum number of creatives to return (default: 50).",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Free text: advertiser name, brand, or domain.",
      "example": "nike",
      "type": "string"
    },
    "region": {
      "description": "ISO-3166 alpha-2 region code, or \"anywhere\" (default: US).",
      "example": "US",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### Google Maps

- Platform ID: `googlemaps`
- Live module version: `v0.1.4`
- Category: `web`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/googlemaps/llm.md
- Description: Google Maps — business search, place details, nearby search, reviews, and business enrichment. Residential proxy required.

#### `enrich.google-maps` — Enrich Business

Unified enrichment lookup: find a business on Google Maps by name + optional city/state and return the best-match Place with phone, website, address, rating, hours, coordinates.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "enrich.google-maps",
  "input": {
    "business_name": "Apple Inc",
    "city": "Cupertino",
    "state": "CA"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "business_name": {
      "description": "Business name to search for.",
      "minLength": 1,
      "type": "string"
    },
    "city": {
      "description": "City name for location bias.",
      "type": "string"
    },
    "country": {
      "default": "us",
      "description": "Country code (default 'us').",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Language code (default 'en').",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "state": {
      "description": "State or region for location bias.",
      "type": "string"
    }
  },
  "required": [
    "business_name"
  ],
  "title": "EnrichBusinessInput",
  "type": "object"
}
```

#### `googlemaps.nearby` — Search Nearby

Search for places near a coordinate — returns name, address, phone, website, rating, coordinates, and categories for businesses within a given radius. Supports keyword filtering and place type constraints.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "googlemaps.nearby",
  "input": {
    "lat": 37.7749,
    "limit": 20,
    "lng": -122.4194,
    "query": "coffee",
    "radius": 500
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "country": {
      "default": "us",
      "description": "Country code (default 'us').",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Language code (default 'en').",
      "type": "string"
    },
    "lat": {
      "description": "Latitude (required).",
      "type": "number"
    },
    "limit": {
      "default": 60,
      "description": "Max results (default 60, max 120).",
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude (required).",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Keyword filter, e.g. 'coffee'.",
      "type": "string"
    },
    "radius": {
      "default": 1000,
      "description": "Search radius in meters (default 1000).",
      "type": "integer"
    },
    "types": {
      "description": "Place types, e.g. ['restaurant'].",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "lat",
    "lng"
  ],
  "title": "SearchNearbyInput",
  "type": "object"
}
```

#### `googlemaps.place` — Get Place

Fetch full details for a single place — name, address, phone, website, rating, review count, coordinates, categories, opening hours, photos, and Google Maps URL. Provide a search query or a Maps URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "googlemaps.place",
  "input": {
    "query": "Empire State Building New York"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "country": {
      "default": "us",
      "description": "Country code (default 'us').",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Language code (default 'en').",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Place name or address, e.g. 'Shake Shack Madison Square Park'.",
      "type": "string"
    },
    "url": {
      "description": "Full Google Maps URL (name extracted from path).",
      "type": "string"
    }
  },
  "title": "GetPlaceInput",
  "type": "object"
}
```

#### `googlemaps.reviews` — List Reviews

Stream all reviews for a place. Provide one of: feature_id (preferred), place_id, cid, or url. If feature_id is not provided, an extra request is made to resolve it.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "googlemaps.reviews",
  "input": {
    "feature_id": "0x89c259a57ed8c6a3:0x7fde98e2e28a5bca",
    "limit": 50,
    "sort": "newest"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "feature_id": {
      "description": "0x...:0x... from SearchPlaces/GetPlace result (preferred).",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Language code (default 'en').",
      "type": "string"
    },
    "limit": {
      "default": 100,
      "description": "Max reviews to return (default 100).",
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "sort": {
      "default": "newest",
      "description": "Sort order.",
      "enum": [
        "relevant",
        "newest",
        "highest",
        "lowest"
      ],
      "type": "string"
    },
    "url": {
      "description": "Google Maps URL (name extracted for feature_id lookup).",
      "type": "string"
    }
  },
  "title": "ListReviewsInput",
  "type": "object"
}
```

#### `googlemaps.search` — Search Places

Search Google Maps for businesses by keyword and optional location — returns name, address, phone, website, rating, coordinates, categories, and place IDs. Supports geo-bias via lat/lng/zoom and country filtering.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "googlemaps.search",
  "input": {
    "limit": 20,
    "location": "San Francisco, CA",
    "query": "coffee shops"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "country": {
      "default": "us",
      "description": "Country code for gl param (default 'us').",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Language code (default 'en').",
      "type": "string"
    },
    "lat": {
      "description": "Latitude for geo-bias (use with lng).",
      "type": "number"
    },
    "limit": {
      "default": 60,
      "description": "Max records to return (default 60, max 120).",
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude for geo-bias.",
      "type": "number"
    },
    "location": {
      "description": "Location bias appended to query, e.g. 'New York, NY'.",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search query, e.g. 'pizza restaurants'.",
      "minLength": 1,
      "type": "string"
    },
    "zoom": {
      "description": "Map zoom level (default 14; higher = tighter area, lower = wider).",
      "maximum": 18,
      "minimum": 10,
      "type": "integer"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchPlacesInput",
  "type": "object"
}
```

### GST India

- Platform ID: `gst`
- Live module version: `v0.2.4`
- Category: `records`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/gst/llm.md
- Description: Search India's Goods and Services Tax taxpayer registry: list every GSTIN registered to a PAN, and fetch the full public registration record for a GSTIN, with external CAPTCHA solving.

#### `gst.taxpayer.get` — Get Taxpayer by GSTIN

Fetch the full public registration record for a single GSTIN. No credentials required. NOTE: the taxpayerDetails request/response shape is reconstructed from the search UI and pending live verification.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"captcha":{"profile":"gst-captcha","required":true,"kind":"http_captcha_solver"}}`

Example `POST /execute` body:

```json
{
  "capability": "gst.taxpayer.get",
  "input": {
    "gstin": "27AACPB0199B1ZA"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "gstin": {
      "description": "15-character GST Identification Number (GSTIN) to fetch the registration record for",
      "maxLength": 15,
      "minLength": 15,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "gstin"
  ],
  "type": "object"
}
```

#### `gst.taxpayer.search` — Search Taxpayers by PAN

List every GSTIN registered against a PAN via the GST taxpayer-search portal. No credentials required.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"captcha":{"profile":"gst-captcha","required":true,"kind":"http_captcha_solver"}}`

Example `POST /execute` body:

```json
{
  "capability": "gst.taxpayer.search",
  "input": {
    "pan": "AACPB0199B"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pan": {
      "description": "10-character Permanent Account Number (PAN) to look up GSTIN registrations for",
      "maxLength": 10,
      "minLength": 10,
      "type": "string"
    }
  },
  "required": [
    "pan"
  ],
  "type": "object"
}
```

### HungerStation Market

- Platform ID: `hungerstation`
- Live module version: `v1.4.12`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/hungerstation/llm.md
- Description: Scraper module for HungerStation Market grocery delivery service in Saudi Arabia. Provides vendor lookup, category listing, and product retrieval capabilities.

#### `hungerstation.categories.list` — Categories List

List product categories for a HungerStation vendor.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "hungerstation.categories.list",
  "input": {
    "vendor_id": "a67ba893-443c-41b6-ba70-fc35a9b2f9f3"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "vendor_id": {
      "description": "Vendor external ID",
      "type": "string"
    }
  },
  "required": [
    "vendor_id"
  ],
  "type": "object"
}
```

#### `hungerstation.products.list` — Products List

List products for a HungerStation vendor category.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `true`
false

Example `POST /execute` body:

```json
{
  "capability": "hungerstation.products.list",
  "input": {
    "category_id": "29404057-5f67-4280-90f5-5de9110f7abe",
    "lat": 24.713,
    "lng": 46.675,
    "vendor_id": "a67ba893-443c-41b6-ba70-fc35a9b2f9f3"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Category ID",
      "type": "string"
    },
    "lat": {
      "description": "Latitude coordinate",
      "maximum": 90,
      "minimum": -90,
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "maximum": 180,
      "minimum": -180,
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "vendor_id": {
      "description": "Vendor external ID",
      "type": "string"
    }
  },
  "required": [
    "vendor_id",
    "category_id",
    "lat",
    "lng"
  ],
  "type": "object"
}
```

#### `hungerstation.vendor.get` — Vendor Get

Resolve the HungerStation vendor for a specific latitude and longitude.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "hungerstation.vendor.get",
  "input": {
    "lat": 24.713,
    "lng": 46.675
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "lat": {
      "description": "Latitude coordinate",
      "maximum": 90,
      "minimum": -90,
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "maximum": 180,
      "minimum": -180,
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "lat",
    "lng"
  ],
  "type": "object"
}
```

### IKEA

- Platform ID: `ikea`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/ikea/llm.md
- Description: Scraper for IKEA product search across multiple locales (France, United Kingdom, Ireland, Germany) via IKEA's internal search API.

#### `ikea.products.search` — Products Search

Search IKEA products by keyword or article number in a supported locale.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "ikea.products.search",
  "input": {
    "locale": "fr/fr",
    "query": "kallax"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "locale": {
      "enum": [
        "fr/fr",
        "gb/en",
        "ie/en",
        "de/de"
      ],
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### Instagram Scraper

- Platform ID: `instagram`
- Live module version: `v1.3.8`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/instagram/llm.md
- Description: Collect public Instagram profiles, rich post details, comments, reels, audio feeds, embeds, Explore sections, and indexed discovery through logged-out surfaces.

#### `instagram.audio-reels.list` — List Reels by Audio

Streams public reels attached to an Instagram audio page with bounded cursor pagination.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.audio-reels.list",
  "input": {
    "audio_id": "28601503179449709",
    "limit": 12,
    "max_pages": 2
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "audio_id": {
      "description": "Audio cluster ID from an Instagram /reels/audio/{id}/ URL",
      "pattern": "^[0-9]{1,30}$",
      "type": "string"
    },
    "cursor": {
      "maxLength": 4096,
      "type": "string"
    },
    "limit": {
      "default": 30,
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "audio_id"
  ],
  "type": "object"
}
```

#### `instagram.comments.list` — List Comments

Streams public post comments with bounded cursor pagination and deduplication.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.comments.list",
  "input": {
    "limit": 20,
    "max_pages": 2,
    "url": "https://www.instagram.com/reel/DTfS7SMEk8B/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "maxLength": 4096,
      "type": "string"
    },
    "limit": {
      "default": 50,
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Instagram post/reel URL or shortcode",
      "maxLength": 2048,
      "minLength": 5,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.embed.get` — Get Embed

Fetches Instagram's public profile or post embed HTML, including the captioned post variant.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.embed.get",
  "input": {
    "url": "https://www.instagram.com/nasa/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "captioned": {
      "default": false,
      "description": "Use Instagram's captioned post embed variant",
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Public profile username/URL or post/reel URL",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.explore.list` — Get Explore

Returns public Explore home sections or paginates a selected section.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.explore.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "maxLength": 4096,
      "type": "string"
    },
    "limit": {
      "default": 24,
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "section_id": {
      "description": "Optional section ID returned by the Explore home response",
      "maxLength": 256,
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `instagram.hashtag-posts.search` — Search Hashtag Posts

Discovers public indexed posts and reels for a hashtag with media-type and date filters.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.hashtag-posts.search",
  "input": {
    "date_posted": "any",
    "enrich": false,
    "hashtag": "india",
    "limit": 10,
    "max_pages": 2,
    "media_type": "all"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "date_posted": {
      "default": "any",
      "enum": [
        "any",
        "day",
        "week",
        "month",
        "year"
      ],
      "type": "string"
    },
    "enrich": {
      "default": false,
      "type": "boolean"
    },
    "hashtag": {
      "maxLength": 101,
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 2,
      "maximum": 5,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "media_type": {
      "default": "all",
      "enum": [
        "all",
        "posts",
        "reels"
      ],
      "type": "string"
    },
    "page": {
      "default": 1,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "hashtag"
  ],
  "type": "object"
}
```

#### `instagram.hashtag.search` — Search Hashtag Keyword

Searches logged-out popular content for a hashtag keyword; output declares match_mode=keyword_popular and is not an exact tag feed.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.hashtag.search",
  "input": {
    "hashtag": "india",
    "limit": 12
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "hashtag": {
      "description": "Hashtag keyword or Instagram /explore/tags/ URL",
      "example": "photography",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "default": 24,
      "description": "Maximum popular-keyword results",
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "hashtag"
  ],
  "type": "object"
}
```

#### `instagram.popular.search` — Search Popular

Searches popular Instagram content for a keyword.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.popular.search",
  "input": {
    "keyword": "india",
    "limit": 12
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "keyword": {
      "description": "Keyword, slug, or public Instagram /popular/ URL",
      "example": "india",
      "maxLength": 100,
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "default": 24,
      "description": "Maximum deduplicated results",
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "keyword"
  ],
  "type": "object"
}
```

#### `instagram.post.get` — Get Post

Fetches rich public post, reel, or carousel metadata plus backward-compatible oEmbed fields.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.post.get",
  "input": {
    "url": "https://www.instagram.com/reel/DTfS7SMEk8B/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Instagram post/reel URL or shortcode",
      "example": "https://www.instagram.com/reel/DTfS7SMEk8B/",
      "maxLength": 2048,
      "minLength": 5,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.profile-posts.list` — List Profile Posts

Lists public profile posts with bounded cursor pagination, deduplication, and optional timestamp filtering.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.profile-posts.list",
  "input": {
    "limit": 5,
    "max_pages": 1,
    "url": "https://www.instagram.com/nasa"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum posts returned per job",
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "description": "Maximum upstream pages, including the embedded first page",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "since": {
      "description": "Unix timestamp; stop when older posts are reached",
      "minimum": 0,
      "type": "integer"
    },
    "url": {
      "description": "Instagram profile URL or username",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.profile.basic` — Get Basic Profile by ID

Fetches current public profile metadata using a numeric Instagram user ID.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.profile.basic",
  "input": {
    "user_id": "528817151"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "user_id": {
      "description": "Numeric Instagram user ID",
      "example": "528817151",
      "pattern": "^[0-9]{1,30}$",
      "type": "string"
    }
  },
  "required": [
    "user_id"
  ],
  "type": "object"
}
```

#### `instagram.profile.get` — Get Profile

Fetches public Instagram profile metadata by username or profile URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.profile.get",
  "input": {
    "url": "https://www.instagram.com/nasa"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "fields": {
      "description": "Optional top-level field allowlist",
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "type": "string"
      },
      "maxItems": 100,
      "type": "array",
      "uniqueItems": true
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Instagram profile URL or username",
      "example": "https://www.instagram.com/nasa",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.profile.search` — Search Profiles

Discovers public Instagram profiles through web indexing with bounded page traversal and optional enrichment.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.profile.search",
  "input": {
    "enrich": false,
    "limit": 10,
    "max_pages": 2,
    "query": "space agency"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "enrich": {
      "default": false,
      "description": "Fetch current Instagram profile data for each discovered result",
      "type": "boolean"
    },
    "limit": {
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 2,
      "maximum": 5,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "default": 1,
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "maxLength": 100,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `instagram.reels.list` — List Reels

Lists public profile reels with bounded cursor pagination, deduplication, and optional timestamp filtering.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.reels.list",
  "input": {
    "limit": 5,
    "max_pages": 1,
    "url": "https://www.instagram.com/nasa"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 50,
      "description": "Maximum reels returned per job",
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "description": "Maximum upstream pages",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "since": {
      "description": "Unix timestamp; stop when older reels are reached",
      "minimum": 0,
      "type": "integer"
    },
    "url": {
      "description": "Instagram profile URL or username",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `instagram.reels.search` — Search Reels

Discovers public Instagram reels through web indexing with bounded page traversal and optional enrichment.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.reels.search",
  "input": {
    "enrich": false,
    "limit": 10,
    "max_pages": 2,
    "query": "space launch"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "enrich": {
      "default": false,
      "description": "Fetch current Instagram oEmbed data for each discovered result",
      "type": "boolean"
    },
    "limit": {
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 2,
      "maximum": 5,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "default": 1,
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "maxLength": 100,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `instagram.reels.trending` — List Trending Reels

Streams Instagram's public logged-out reels feed with bounded cursor pagination.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.reels.trending",
  "input": {
    "limit": 16,
    "max_pages": 2
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "maxLength": 4096,
      "type": "string"
    },
    "limit": {
      "default": 24,
      "maximum": 200,
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `instagram.topic.search` — Search Topic

Searches Instagram's public popular-content surface for a known explore topic slug, ID, or topic URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.topic.search",
  "input": {
    "limit": 12,
    "topic": "sports"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 24,
      "description": "Maximum deduplicated results",
      "maximum": 120,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "topic": {
      "description": "Known topic ID, topic slug, explore-topic URL, or public /popular/ URL",
      "example": "travel",
      "maxLength": 2048,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "topic"
  ],
  "type": "object"
}
```

#### `instagram.topics.list` — List Topics

Lists the module's known Instagram explore-topic taxonomy, optionally filtered by category.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `5000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "instagram.topics.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category": {
      "description": "Optional case-insensitive category filter",
      "maxLength": 100,
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

### JioMart

- Platform ID: `jiomart`
- Live module version: `v0.1.5`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/jiomart/llm.md
- Description: Scraper for JioMart and Reliance Retail catalog search and collection listings in India.

#### `jiomart.ads.sponsored.products` — Sponsored Products Ads

Fetch JioMart sponsored product ad placements for a keyword or inventory value.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.ads.sponsored.products",
  "input": {
    "num_ads": 5,
    "pincode": "400001",
    "query": "rice"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "query"
      ]
    },
    {
      "required": [
        "inventory_value"
      ]
    }
  ],
  "properties": {
    "channel_type": {
      "type": "string"
    },
    "custom_id": {
      "type": "string"
    },
    "inventory_id": {
      "type": "string"
    },
    "inventory_value": {
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "num_ads": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "page_id": {
      "type": "string"
    },
    "pincode": {
      "type": "string"
    },
    "query": {
      "type": "string"
    },
    "request_origin": {
      "type": "string"
    },
    "store_ids": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "targeting_type": {
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `jiomart.autocomplete.search` — Autocomplete Search

Fetch JioMart search autocomplete suggestions.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.autocomplete.search",
  "input": {
    "limit": 10,
    "pincode": "400001",
    "query": "rice"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "pincode": {
          "pattern": "^[0-9]{6}$",
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "pattern": "^[0-9]{6}$",
      "type": "string"
    },
    "query": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `jiomart.brands.list` — Brands

List JioMart brands with logos. Paginated.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.brands.list",
  "input": {
    "page_size": 10
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "type": "integer"
    },
    "page_size": {
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.categories.list` — Categories

List the full JioMart category tree with department mapping, banners, and images.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "properties": {
    "department": {
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.category.filters.list` — Category Filters List

Fetch JioMart department/category/filter hierarchy for a Vertex filter expression.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.category.filters.list",
  "input": {
    "filter": "journey:standard:::department:groceries",
    "pincode": "400001"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "filter": {
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "latitude": {
          "type": "string"
        },
        "longitude": {
          "type": "string"
        },
        "pincode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `jiomart.collection.products.list` — Collection Products List

List JioMart products from a collection slug and pincode.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.collection.products.list",
  "input": {
    "page": 1,
    "page_size": 20,
    "pincode": "400001",
    "slug": "groceries"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "pincode": {
          "pattern": "^[0-9]{6}$",
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "minimum": 1,
      "type": "integer"
    },
    "page_id": {
      "type": "string"
    },
    "page_size": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "pattern": "^[0-9]{6}$",
      "type": "string"
    },
    "slug": {
      "minLength": 1,
      "type": "string"
    },
    "sort_on": {
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "type": "object"
}
```

#### `jiomart.collections.list` — Collections

List the JioMart collection directory. Paginated (26K+ collections).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.collections.list",
  "input": {
    "page_size": 5
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "type": "integer"
    },
    "page_size": {
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.departments.list` — Departments

List top-level JioMart departments (e.g. Groceries).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.departments.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.home.listing` — Home Listing

Fetch the JioMart homepage product feed. Cursor-paginated, location-sensitive.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.home.listing",
  "input": {
    "page_size": 10,
    "pincode": "400001"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page_id": {
      "type": "string"
    },
    "page_size": {
      "type": "integer"
    },
    "pincode": {
      "type": "string"
    },
    "sort_on": {
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `jiomart.location.pincode.lookup` — Pincode Location Lookup

Validate and resolve JioMart location metadata for an Indian pincode.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.location.pincode.lookup",
  "input": {
    "pincode": "400001"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "maxLength": 6,
      "minLength": 6,
      "type": "string"
    }
  },
  "required": [
    "pincode"
  ],
  "type": "object"
}
```

#### `jiomart.logistics.countries` — Logistics Countries

List countries where JioMart delivery is available.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.logistics.countries",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.navigations.list` — Navigations

Fetch the JioMart site navigation tree (menus, links, sections).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.navigations.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.pages.list` — Pages

List JioMart CMS pages. Paginated.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.pages.list",
  "input": {
    "page_size": 5
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "type": "integer"
    },
    "page_size": {
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `jiomart.product.detail.get` — Product Detail Get

Fetch JioMart product detail by product slug, optionally including size/availability data.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.product.detail.get",
  "input": {
    "include_sizes": true,
    "pincode": "400001",
    "slug": "921-classic-red-label-basmati-rice-5kg-mj707c-49856704"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "include_sizes": {
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "latitude": {
          "type": "string"
        },
        "longitude": {
          "type": "string"
        },
        "pincode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "type": "string"
    },
    "slug": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "type": "object"
}
```

#### `jiomart.products.list` — Products List

List JioMart products for an arbitrary Vertex filter expression, such as department/category browse pages.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.products.list",
  "input": {
    "filter": "journey:standard:::department:groceries",
    "page_size": 20,
    "pincode": "400001"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "filter": {
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "latitude": {
          "type": "string"
        },
        "longitude": {
          "type": "string"
        },
        "pincode": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "minimum": 1,
      "type": "integer"
    },
    "page_id": {
      "type": "string"
    },
    "page_size": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "type": "string"
    },
    "sort_on": {
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `jiomart.products.search` — Products Search

Search JioMart products for a query and pincode.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "jiomart.products.search",
  "input": {
    "page": 1,
    "page_size": 20,
    "pincode": "400001",
    "query": "rice"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "city": {
          "type": "string"
        },
        "pincode": {
          "pattern": "^[0-9]{6}$",
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "minimum": 1,
      "type": "integer"
    },
    "page_id": {
      "type": "string"
    },
    "page_size": {
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "pincode": {
      "pattern": "^[0-9]{6}$",
      "type": "string"
    },
    "query": {
      "minLength": 1,
      "type": "string"
    },
    "sort_on": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### Keeta Keemart

- Platform ID: `keeta`
- Live module version: `v0.5.7`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/keeta/llm.md
- Description: Scraper module for Keeta Keemart grocery catalog data. Resolves the active store, lists the named category tree, returns every product in a category (categorised by subcategory) via the categories/products endpoint, and retrieves a specific product by SKU.

#### `keeta.categories.list` — Categories List

List the named Keemart category tree (e.g. Fresh, Beverages, Salty Snacks) with category ids for a store/location.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `45000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "keeta.categories.list",
  "input": {
    "location": {
      "latitude": 24.89377104655503,
      "longitude": 46.60596106427802
    }
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "lat": {
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "type": "number"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "probe_products": {
      "default": false,
      "description": "When true, count products for Gundam-backed category tiles (one extra signed fetch each). Category-id tiles are not probed.",
      "type": "boolean"
    },
    "store_id": {
      "type": "string"
    }
  },
  "required": [
    "location"
  ],
  "type": "object"
}
```

#### `keeta.product.get` — Product Get

Retrieve one Keeta Keemart product by SKU id.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "keeta.product.get",
  "input": {
    "category_id": "660",
    "location": {
      "latitude": 24.89377104655503,
      "longitude": 46.60596106427802
    },
    "sku_id": "10147503",
    "store_id": "90015"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "minLength": 1,
      "type": "string"
    },
    "lat": {
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "type": "number"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "sku_id": {
      "minLength": 1,
      "type": "string"
    },
    "store_id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "required": [
    "category_id",
    "sku_id",
    "location"
  ],
  "type": "object"
}
```

#### `keeta.products.list` — Products List

List every product in a Keemart category (by keemart category_id from categories.list), categorised by subcategory.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `true`
false

Example `POST /execute` body:

```json
{
  "capability": "keeta.products.list",
  "input": {
    "category_id": "660",
    "location": {
      "latitude": 24.89377104655503,
      "longitude": 46.60596106427802
    }
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Keemart top-level category id from categories.list (e.g. \"148\" = Salty Snacks). A non-numeric value is treated as a legacy Gundam template id.",
      "minLength": 1,
      "type": "string"
    },
    "category_name": {
      "description": "Optional top-level category display name from categories.list, preserved in normalized output.",
      "type": "string"
    },
    "lat": {
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "type": "number"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "description": "Optional keemart poi id; resolved from the coordinate when omitted.",
      "type": "string"
    },
    "title": {
      "type": "string"
    }
  },
  "required": [
    "category_id",
    "location"
  ],
  "type": "object"
}
```

#### `keeta.store.get` — Store Get

Resolve the Keemart store for a geographic location.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "keeta.store.get",
  "input": {
    "location": {
      "latitude": 24.89377104655503,
      "longitude": 46.60596106427802
    }
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "lat": {
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "type": "number"
    },
    "location": {
      "additionalProperties": false,
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "location"
  ],
  "type": "object"
}
```

### Lidl

- Platform ID: `lidl`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/lidl/llm.md
- Description: Search Lidl's online assortment and fetch product detail across lidl.co.uk, lidl.de, and lidl.fr, including prices, ratings, images, stock availability, and EANs when available.

#### `lidl.product.detail.get` — Get Product Detail

Fetch a single Lidl product by its PDP URL on lidl.co.uk, lidl.de, or lidl.fr. Returns price, brand, ratings, media, variants, delivery charges, JSON-LD, and EANs when available.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "lidl.product.detail.get",
  "input": {
    "url": "https://www.lidl.co.uk/p/parkside-led-light-with-pull-out-light/p10051036"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Lidl product detail page URL on lidl.co.uk, lidl.de, or lidl.fr, e.g. https://www.lidl.co.uk/p/parkside-led-light-with-pull-out-light/p10051036",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `lidl.products.search` — Search Products

Search Lidl's online assortment by keyword across GB, DE, and FR storefronts. Returns products with title, brand, price, ratings, images, PDP URL, and EAN when available.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "lidl.products.search",
  "input": {
    "country": "GB",
    "fetchsize": 24,
    "offset": 0,
    "query": "chocolate"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "country": {
      "default": "GB",
      "enum": [
        "GB",
        "DE",
        "FR"
      ],
      "type": "string"
    },
    "fetchsize": {
      "default": 24,
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "minimum": 0,
      "type": "integer"
    },
    "query": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

### LinkedIn Scraper

- Platform ID: `linkedin`
- Live module version: `v1.0.13`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/linkedin/llm.md
- Description: Scrapes LinkedIn profiles, articles, and posts using JSON-LD parsing and caller-provided HTTP transport settings.

#### `linkedin.article.get` — Get Article

Runs Get Article for Linkedin.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linkedin.article.get",
  "input": {
    "url": "https://www.linkedin.com/pulse/positive-sum-future-satya-nadella-bjs7c"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "LinkedIn article URL",
      "example": "https://www.linkedin.com/pulse/...",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `linkedin.post.get` — Get Post

Runs Get Post for Linkedin.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linkedin.post.get",
  "input": {
    "url": "https://www.linkedin.com/posts/satyanadella_were-the-first-cloud-to-bring-up-an-nvidia-activity-7438280341322334208-Vw2c"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "LinkedIn post URL",
      "example": "https://www.linkedin.com/posts/...",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `linkedin.profile.get` — Get Profile

Runs Get Profile for Linkedin.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `90000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linkedin.profile.get",
  "input": {
    "url": "https://www.linkedin.com/in/satyanadella"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "LinkedIn profile URL",
      "example": "https://www.linkedin.com/in/satyanadella",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### Linktree Scraper

- Platform ID: `linktree`
- Live module version: `v0.2.3`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/linktree/llm.md
- Description: Scrape public Linktree profiles (bio, email, socials, links, tier) and browse or harvest the public profile directory by category

#### `linktree.directory.get` — Get Directory Page

Fetch one page (up to 18 profiles) of the Linktree public profile directory, filtered by category

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linktree.directory.get",
  "input": {
    "category": "all",
    "page": 1
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category": {
      "description": "Directory category filter (defaults to \"all\")",
      "enum": [
        "all",
        "business",
        "creative",
        "education",
        "entertainment",
        "fashion-beauty",
        "food-beverage",
        "government-politics",
        "health-wellness",
        "non-profit",
        "other",
        "tech",
        "travel-tourism"
      ],
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "1-indexed directory page number",
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `linktree.directory.profiles` — Harvest Directory Profiles

Harvest profiles across many directory pages in a single call. Sync mode collects all profiles; stream mode emits one profile per event

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linktree.directory.profiles",
  "input": {
    "category": "business",
    "max_pages": 3
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category": {
      "description": "Directory category filter (defaults to \"all\")",
      "enum": [
        "all",
        "business",
        "creative",
        "education",
        "entertainment",
        "fashion-beauty",
        "food-beverage",
        "government-politics",
        "health-wellness",
        "non-profit",
        "other",
        "tech",
        "travel-tourism"
      ],
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_pages": {
      "description": "Maximum directory pages to fetch (~18 profiles each); the walk also stops at the directory's reported total",
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `linktree.profile.get` — Get Profile

Fetch a Linktree profile: display name, bio, email, country, tier, verification, social handles, and all content links

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "linktree.profile.get",
  "input": {
    "username": "nike"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Linktree handle or full profile URL (e.g. \"nike\" or \"https://linktr.ee/nike\")",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

### Morrisons

- Platform ID: `morrisons`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/morrisons/llm.md
- Description: Scraper for Morrisons Groceries UK: the full category tree, category product listings with prices and ratings, and product detail pages.

#### `morrisons.categories.list` — Categories List

List the full Morrisons Groceries category tree (four levels) with category ids and breadcrumbs.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "morrisons.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `morrisons.category.products.list` — Category Products List

List products in a Morrisons category aisle with price, promotion, rating, and availability from the server-rendered first page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "morrisons.category.products.list",
  "input": {
    "category_id": "177938"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Morrisons retailerCategoryId (e.g. \"177938\") or a full /categories/ URL.",
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "default": 1,
      "description": "Only page 1 is served: the server-rendered page state carries the first category page (up to ~50 products); deeper pages are client-side only.",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "category_id"
  ],
  "type": "object"
}
```

#### `morrisons.product.detail.get` — Product Detail Get

Fetch a Morrisons product detail page: price, availability, rating, images, and the product information sections.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "morrisons.product.detail.get",
  "input": {
    "product_id": "107573440"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "product_id"
      ]
    },
    {
      "required": [
        "url"
      ]
    }
  ],
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "product_id": {
      "description": "Morrisons retailerProductId (e.g. \"107573440\").",
      "pattern": "^\\d+$",
      "type": "string"
    },
    "url": {
      "description": "Full Morrisons /products/ URL. Used when product_id is not given.",
      "type": "string"
    }
  },
  "type": "object"
}
```

### Nana Express

- Platform ID: `nana`
- Live module version: `v1.3.4`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/nana/llm.md
- Description: Go client library for scraping Nana Express grocery stores in Saudi Arabia. Supports store lookup by coordinates, category listing, and product retrieval.

#### `nana.categories.list` — Categories List

List categories available in a Nana store.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "nana.categories.list",
  "input": {
    "store_id": "STR00002232"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "description": "The store ID obtained from nana.store.get",
      "pattern": "^STR[0-9]+$",
      "type": "string"
    }
  },
  "required": [
    "store_id"
  ],
  "type": "object"
}
```

#### `nana.products.list` — Products List

List products for a Nana store category.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `true`
false

Example `POST /execute` body:

```json
{
  "capability": "nana.products.list",
  "input": {
    "category_id": "COL2581000813",
    "store_id": "STR00002232"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "The category ID obtained from nana.categories.list",
      "pattern": "^COL[0-9]+$",
      "type": "string"
    },
    "category_name": {
      "description": "Optional category display name from nana.categories.list, preserved in normalized output.",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "description": "The store ID obtained from nana.store.get",
      "pattern": "^STR[0-9]+$",
      "type": "string"
    }
  },
  "required": [
    "store_id",
    "category_id"
  ],
  "type": "object"
}
```

#### `nana.store.get` — Store Get

Resolve the Nana store for a geographic location.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "nana.store.get",
  "input": {
    "location": {
      "latitude": 24.70886700126982,
      "longitude": 46.687542982399464
    }
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location": {
      "additionalProperties": false,
      "description": "Geographic coordinates for store lookup",
      "properties": {
        "latitude": {
          "description": "Latitude of the location (e.g., 24.7089 for Riyadh)",
          "maximum": 90,
          "minimum": -90,
          "type": "number"
        },
        "longitude": {
          "description": "Longitude of the location (e.g., 46.6875 for Riyadh)",
          "maximum": 180,
          "minimum": -180,
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "location"
  ],
  "type": "object"
}
```

### Panda Saudi Arabia

- Platform ID: `panda`
- Live module version: `v1.3.8`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/panda/llm.md
- Description: Scraper module for Panda grocery stores in Saudi Arabia. Provides access to product categories and product listings with pagination support.

#### `panda.categories.list` — Categories List

Fetches all product categories from Panda stores.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "panda.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}
```

#### `panda.products.list` — Products List

Fetches products for a given category with pagination support.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `true`
false

Example `POST /execute` body:

```json
{
  "capability": "panda.products.list",
  "input": {
    "category_id": "568",
    "page": 1,
    "parent_category_id": "526",
    "sort": "default"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "The category ID to fetch products from.",
      "type": "string"
    },
    "category_name": {
      "description": "Optional category display name, preserved in normalized output when raw product category metadata is unavailable.",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "default": 1,
      "description": "Page number (1-indexed).",
      "minimum": 1,
      "type": "integer"
    },
    "parent_category_id": {
      "description": "The parent category ID.",
      "type": "string"
    },
    "sort": {
      "default": "default",
      "description": "Sort order for products.",
      "enum": [
        "default",
        "price_asc",
        "price_desc"
      ],
      "type": "string"
    }
  },
  "required": [
    "parent_category_id",
    "category_id"
  ],
  "type": "object"
}
```

### ParkWhiz

- Platform ID: `parkwhiz`
- Live module version: `v0.1.5`
- Category: `events`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/parkwhiz/llm.md
- Description: Scrape ParkWhiz parking data with OAuth authentication, event search, venue search, smart parking lookup with fuzzy address matching, and bulk event quotes.

#### `parkwhiz.event-quotes` — List Event Quotes

Fetch all parking locations with coordinates, prices, and availability for a ParkWhiz event.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "parkwhiz.event-quotes",
  "input": {
    "event_id": 2814805
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "event_id": {
      "description": "ParkWhiz event ID",
      "type": "integer"
    },
    "event_url": {
      "description": "ParkWhiz event URL",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `parkwhiz.search-events` — Search Events

Search ParkWhiz for events by name or venue ID.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "parkwhiz.search-events",
  "input": {
    "query": "Bruno Mars"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Event name to search (e.g. 'Bruno Mars')",
      "type": "string"
    },
    "venue_id": {
      "description": "ParkWhiz venue ID to list events for",
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `parkwhiz.search-venues` — Search Venues

Search ParkWhiz for venues by name.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "parkwhiz.search-venues",
  "input": {
    "query": "SoFi Stadium"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Venue name to search (e.g. 'SoFi Stadium')",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `parkwhiz.smart-lookup` — Smart Lookup

Find the cheapest parking option for a ParkWhiz event by event URL or ID and address, using exact location match or fuzzy address matching.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "parkwhiz.smart-lookup",
  "input": {
    "address": "1901 W Madison St",
    "event_url": "https://www.parkwhiz.com/p/united-center-parking/1000-w-madison-st-chicago-il-60612/?event_id=2814805/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "address": {
      "description": "Parking lot address for fuzzy matching (e.g. '1901 W Madison St')",
      "type": "string"
    },
    "event_id": {
      "description": "ParkWhiz event ID (alternative to event_url)",
      "type": "integer"
    },
    "event_url": {
      "description": "ParkWhiz event page URL (e.g. https://www.parkwhiz.com/p/united-center-parking/.../?event_id=2814805/)",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "location_id": {
      "description": "ParkWhiz location ID for exact match (optional, skips address resolution)",
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "address"
  ],
  "type": "object"
}
```

### Perplexity Answers

- Platform ID: `perplexity`
- Live module version: `v0.2.2`
- Category: `ai-answers`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/perplexity/llm.md
- Description: Generate localized, stateless Perplexity consumer-web answers with evidence controls, SSE-grounded citations, and verified execution metadata.

#### `perplexity.answer.generate` — Generate answer

Submit a prompt with locale, country, search, and source-policy controls in a fresh Perplexity context; return a complete answer, citations, and execution evidence.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"perplexity_consumer_web_stateless","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "perplexity.answer.generate",
  "input": {
    "country": "Germany",
    "include_sources": true,
    "locale": "en-GB",
    "max_sources": 10,
    "mode": "search",
    "model": "auto",
    "prompt": "Verify the claim that Upscrape received a €20 million regulatory fine in July 2026. Do not accept the premise; require a primary regulator notice matching the entity, amount, and date, and report clearly if no reliable record supports it.",
    "source_policy": {
      "official_sources_only": true,
      "published_after": "2026-01-01"
    },
    "timezone": "Europe/Berlin"
  }
}
```

Input JSON Schema:

```json
{
  "$defs": {
    "domain_list": {
      "items": {
        "pattern": "^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$",
        "type": "string"
      },
      "maxItems": 20,
      "type": "array",
      "uniqueItems": true
    },
    "source_policy": {
      "additionalProperties": false,
      "properties": {
        "excluded_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "official_sources_only": {
          "default": false,
          "type": "boolean"
        },
        "preferred_domains": {
          "$ref": "#/$defs/domain_list"
        },
        "published_after": {
          "format": "date",
          "type": "string"
        },
        "published_before": {
          "format": "date",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "country": {
      "maxLength": 64,
      "minLength": 2,
      "type": "string"
    },
    "include_sources": {
      "default": true,
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "locale": {
      "maxLength": 35,
      "pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_sources": {
      "default": 25,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "default": "search",
      "enum": [
        "auto",
        "search"
      ],
      "type": "string"
    },
    "model": {
      "default": "auto",
      "enum": [
        "auto"
      ],
      "type": "string"
    },
    "prompt": {
      "maxLength": 32000,
      "pattern": "\\S",
      "type": "string"
    },
    "source_policy": {
      "$ref": "#/$defs/source_policy"
    },
    "timezone": {
      "maxLength": 80,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "prompt"
  ],
  "title": "Perplexity advanced answer generation input",
  "type": "object"
}
```

### Pinterest Scraper

- Platform ID: `pinterest`
- Live module version: `v1.4.3`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/pinterest/llm.md
- Description: Scraper module for Pinterest content including users, boards, pins, and sections with streaming support

#### `pinterest.board-full.get` — Get Full Board

Fetches complete board data including all pins and sections. IMPORTANT: 'pins' contains board-level pins NOT in any section. Section-specific pins are nested inside 'sections[].pins'. This separation preserves the exact board organization. Also returns summary statistics.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.board-full.get",
  "input": {
    "max_pins": 25,
    "max_sections": 0,
    "page_size": 25,
    "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_pins": {
      "description": "Maximum total number of pins to return across board-level pins and section pins. Omit or set to 0 to fetch all available pins.",
      "example": 100,
      "minimum": 0,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_sections": {
      "description": "Maximum number of sections to scrape. When set, only the first N sections will have their pins fetched. Section metadata is always returned for all sections via stats.total_sections. Omit or set to 0 to scrape all sections.",
      "example": 20,
      "minimum": 0,
      "type": "integer"
    },
    "page_size": {
      "description": "Pinterest pagination page size for full-board pin fetching. Board pin requests are capped at 250 and section pin requests at 50.",
      "example": 100,
      "maximum": 250,
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest board URL or ?boardId= URL",
      "example": "https://www.pinterest.com/pinterest/home-decor-ideas/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.board-id.get` — Get Board ID

Extracts the numeric board ID from a Pinterest board URL. The board ID is required for some API operations and is extracted from the page's embedded data.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.board-id.get",
  "input": {
    "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest board URL",
      "example": "https://www.pinterest.com/pinterest/home-decor-ideas/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.board-info.get` — Get Board Info

Fetches board metadata without pins. Returns board name, description, pin count, section count, owner, privacy setting, cover images, and section list with pin counts.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `45000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.board-info.get",
  "input": {
    "url": "https://www.pinterest.com/PinterestPredicts/gimme-gummy/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest board URL",
      "example": "https://www.pinterest.com/pinterest/home-decor-ideas/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.pin.get` — Get Pin

Fetches complete metadata for a single Pinterest pin including title, description, images at multiple resolutions, engagement metrics (saves, repins), creator info, rich metadata (for articles/products), and video URL for video pins.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.pin.get",
  "input": {
    "url": "https://www.pinterest.com/pin/46443439902640817/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest pin URL",
      "example": "https://www.pinterest.com/pin/549157816661240123/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.section.get` — Get Section

Fetches a board section with all its pins. Returns section metadata (title, slug, pin count) and complete pin data for all pins in that section.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.section.get",
  "input": {
    "url": "https://www.pinterest.com/ashishbishnoi18/myboard/mysection/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest section URL",
      "example": "https://www.pinterest.com/pinterest/home-decor-ideas/living-room/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.user-boards.get` — Get User Boards

Fetches all public boards for a Pinterest user. Returns board metadata including name, description, pin count, section count, privacy setting, cover image, and owner information.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.user-boards.get",
  "input": {
    "url": "https://www.pinterest.com/PinterestPredicts/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest profile URL",
      "example": "https://www.pinterest.com/pinterest/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `pinterest.user.get` — Get User

Fetches a Pinterest user's public profile data including username, display name, follower count, profile image URL, and verification status (partner, merchant, domain verified).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "pinterest.user.get",
  "input": {
    "url": "https://www.pinterest.com/PinterestPredicts/"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "cookies": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional cookies for authenticated requests",
      "type": "object"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Full Pinterest profile URL",
      "example": "https://www.pinterest.com/pinterest/",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### Product Hunt

- Platform ID: `producthunt`
- Live module version: `v0.1.5`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/producthunt/llm.md
- Description: Scrape Product Hunt products, reviews, topics, categories, users, leaderboards, search results, homepage launches, and RSS feed entries.

#### `producthunt.category` — Get Category

Fetch a Product Hunt category with subcategories, parent category, and ranked product listing.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.category",
  "input": {
    "max_products": 5,
    "url": "ai-meeting-notetakers"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_products": {
      "description": "Max products to return (default: 100, max: 500)",
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Category URL or slug",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `producthunt.feed` — RSS Feed

Stream Product Hunt RSS feed entries of recent launches, optionally filtered by category.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.feed",
  "input": {
    "category": "all",
    "limit": 5
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "category": {
      "description": "Feed slice - \"all\" (default), \"ai\", \"design\", \"developer-tools\", etc.",
      "type": "string"
    },
    "limit": {
      "description": "Max records to return (default: unlimited, max: 500)",
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `producthunt.homepage` — Get Homepage

Get today's featured launches from the Product Hunt homepage.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.homepage",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `producthunt.leaderboard` — Get Leaderboard

Get Product Hunt top-ranked products for a daily, weekly, monthly, or yearly period.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.leaderboard",
  "input": {
    "period": "daily"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "date": {
      "description": "YYYY-MM-DD for daily, YYYY-WW for weekly, YYYY-MM for monthly, YYYY for yearly. Omit for current period.",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "period": {
      "description": "Leaderboard period",
      "enum": [
        "daily",
        "weekly",
        "monthly",
        "yearly"
      ],
      "type": "string"
    }
  },
  "required": [
    "period"
  ],
  "type": "object"
}
```

#### `producthunt.product` — Get Product

Fetch a Product Hunt product with ratings, reviews, categories, topics, awards, alternatives, and maker credits.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.product",
  "input": {
    "url": "chatgpt"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Product URL or slug (e.g. \"chatgpt\" or \"https://www.producthunt.com/products/chatgpt\")",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `producthunt.product.reviews` — List Product Reviews

Stream reviews on a Product Hunt product with sub-ratings, feedback text, and reviewer profiles.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.product.reviews",
  "input": {
    "limit": 5,
    "url": "chatgpt"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "description": "Max records to return (default: 200, max: 500)",
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Product URL or slug",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `producthunt.search` — Search Products

Search Product Hunt for products by keyword and return matched product listings.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.search",
  "input": {
    "query": "ai writing assistant"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Free-form search query",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `producthunt.topic` — Get Topic

Fetch a Product Hunt topic with description, follower count, and ranked product listing.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.topic",
  "input": {
    "url": "artificial-intelligence"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Topic URL or slug",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `producthunt.user` — Get User

Fetch a Product Hunt user profile with social links, follower counts, and made/hunted/stacked products.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "producthunt.user",
  "input": {
    "url": "ryan_hoover"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Username, @-handle, or full /@user URL",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### Reddit

- Platform ID: `reddit`
- Live module version: `v0.1.6`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/reddit/llm.md
- Description: Read-only Reddit data: recent posts and comments from given subreddits or all of Reddit (newest first), subreddit metadata, and subreddit/post/comment search.

#### `reddit.comments.list` — List Comments

Recent comments from one or more subreddits (or all of Reddit), newest first, with a cursor for the next page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.comments.list",
  "input": {
    "limit": 25,
    "subreddits": "SaaS"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "after": {
      "description": "Opaque cursor from a previous result's \"next\".",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "description": "Page size, 1-100 (default 50).",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "subreddits": {
      "description": "Comma-separated subreddit names (no leading r/), or the literal \"all\" for all of Reddit.",
      "examples": [
        "SaaS,startups",
        "all"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "subreddits"
  ],
  "title": "ListCommentsInput",
  "type": "object"
}
```

#### `reddit.comments.search` — Search Comments

Search comments by query, newest first, optionally restricted to subreddits, with a cursor for the next page. Approximate; callers re-filter locally.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.comments.search",
  "input": {
    "limit": 25,
    "q": "pricing",
    "subreddits": "SaaS"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "after": {
      "description": "Opaque cursor from a previous result's \"next\".",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "description": "Page size, 1-100 (default 50).",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "q": {
      "description": "Search query. Supports AND (space), OR, -term/NOT exclusion, and \"exact phrase\".",
      "examples": [
        "pricing complaint"
      ],
      "minLength": 1,
      "type": "string"
    },
    "subreddits": {
      "description": "Optional comma-separated subreddit restriction (no leading r/).",
      "type": "string"
    }
  },
  "required": [
    "q"
  ],
  "title": "SearchCommentsInput",
  "type": "object"
}
```

#### `reddit.posts.list` — List Posts

Recent posts from one or more subreddits (or all of Reddit), newest first, with a cursor for the next page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.posts.list",
  "input": {
    "limit": 25,
    "subreddits": "webdev,startups"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "after": {
      "description": "Opaque cursor from a previous result's \"next\".",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "description": "Page size, 1-100 (default 50).",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "subreddits": {
      "description": "Comma-separated subreddit names (no leading r/), or the literal \"all\" for all of Reddit.",
      "examples": [
        "webdev,startups",
        "all"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "subreddits"
  ],
  "title": "ListPostsInput",
  "type": "object"
}
```

#### `reddit.posts.search` — Search Posts

Search posts by query, newest first, optionally restricted to subreddits, with a cursor for the next page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.posts.search",
  "input": {
    "limit": 25,
    "q": "supabase alternative"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "after": {
      "description": "Opaque cursor from a previous result's \"next\".",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "description": "Page size, 1-100 (default 50).",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "q": {
      "description": "Search query. Supports AND (space), OR, -term/NOT exclusion, and \"exact phrase\".",
      "examples": [
        "supabase alternative"
      ],
      "minLength": 1,
      "type": "string"
    },
    "subreddits": {
      "description": "Optional comma-separated subreddit restriction (no leading r/).",
      "type": "string"
    }
  },
  "required": [
    "q"
  ],
  "title": "SearchPostsInput",
  "type": "object"
}
```

#### `reddit.subreddit.get` — Get Subreddit

Fetch a single subreddit's public metadata by name.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.subreddit.get",
  "input": {
    "name": "webdev"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "name": {
      "description": "Subreddit name, without the leading r/ (case-insensitive).",
      "examples": [
        "webdev"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "GetSubredditInput",
  "type": "object"
}
```

#### `reddit.subreddit.search` — Search Subreddits

Search communities by name or topic (typeahead-friendly), ordered by relevance, with subscribers and description.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "reddit.subreddit.search",
  "input": {
    "limit": 10,
    "q": "web development"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "default": 10,
      "description": "Result count, 1-25 (default 10).",
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "q": {
      "description": "Name or topic; works for short prefixes (typeahead).",
      "examples": [
        "webdev"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "q"
  ],
  "title": "SearchSubredditsInput",
  "type": "object"
}
```

### SpotHero

- Platform ID: `spothero`
- Live module version: `v0.1.5`
- Category: `events`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/spothero/llm.md
- Description: Read-only SpotHero parking data: event search, venue/destination lookup, parking facility listing, and exact lot price lookup.

#### `spothero.event-facilities` — List Event Facilities

Fetch all parking facilities with coordinates, prices, and availability for a SpotHero event in one call.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "spothero.event-facilities",
  "input": {
    "event_id": 2814805
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "event_id": {
      "description": "SpotHero event ID (alternative to event_url).",
      "examples": [
        2814805
      ],
      "type": "integer"
    },
    "event_url": {
      "description": "SpotHero event page URL containing ?id=<event_id>.",
      "examples": [
        "https://spothero.com/events/united-center-events?id=2814805"
      ],
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "ListEventFacilitiesInput",
  "type": "object"
}
```

#### `spothero.lookup` — Lookup Parking

Look up parking price and availability for a specific lot at a SpotHero event, matched by lot name or facility ID.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "spothero.lookup",
  "input": {
    "event_url": "https://spothero.com/events/united-center-events?id=2814805",
    "lot": "United Center Parking"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "event_id": {
      "description": "SpotHero event ID (alternative to event_url).",
      "examples": [
        2814805
      ],
      "type": "integer"
    },
    "event_url": {
      "description": "SpotHero event page URL containing ?id=<event_id>.",
      "examples": [
        "https://spothero.com/events/united-center-events?id=2814805"
      ],
      "type": "string"
    },
    "facility_id": {
      "description": "SpotHero facility ID (bypasses name matching; alternative to lot).",
      "examples": [
        100077
      ],
      "type": "integer"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lot": {
      "description": "Parking lot name for fuzzy matching (required if facility_id is not set).",
      "examples": [
        "United Center Parking"
      ],
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "start_time": {
      "description": "Override start time in ISO 8601 format; defaults to event parking window start.",
      "examples": [
        "2025-03-15T17:00:00-05:00"
      ],
      "type": "string"
    }
  },
  "title": "LookupInput",
  "type": "object"
}
```

#### `spothero.search` — Search Events

Search SpotHero for events by name or destination, returning event IDs, times, and venue info.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "spothero.search",
  "input": {
    "query": "Chicago Bulls"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "destination_id": {
      "description": "SpotHero destination/venue ID to list events at (e.g. 79050 for SoFi Stadium).",
      "examples": [
        79050
      ],
      "type": "integer"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Event name to search (e.g. 'Bruno Mars', 'Chicago Bulls').",
      "examples": [
        "Bruno Mars",
        "Chicago Bulls"
      ],
      "type": "string"
    }
  },
  "title": "SearchEventsInput",
  "type": "object"
}
```

#### `spothero.venues` — Search Venues

Search SpotHero for destinations/venues by name, returning destination IDs, cities, and coordinates.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `15000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "spothero.venues",
  "input": {
    "query": "Madison Square Garden"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Venue or destination name to search (e.g. 'SoFi Stadium', 'Madison Square Garden').",
      "examples": [
        "SoFi Stadium",
        "Madison Square Garden"
      ],
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchVenuesInput",
  "type": "object"
}
```

### StubHub

- Platform ID: `stubhub`
- Live module version: `v0.2.2`
- Category: `events`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/stubhub/llm.md
- Description: Scrape StubHub parking pass data with event search, listing extraction via in-browser grid pagination, and fuzzy lot matching. Event pages are loaded in headless Chrome to clear DataDome.

#### `stubhub.parking.lookup` — Lookup Parking

Fetch all parking listings for a StubHub event. The event page is loaded in headless Chrome (DataDome-protected) and its grid pagination is replayed in-browser. Supports fuzzy lot matching and price sorting.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `90000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "stubhub.parking.lookup",
  "input": {
    "lot": "161st St Garage",
    "query": "yankees parking"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "event_id": {
      "description": "StubHub event ID (e.g. 159266602). Use event_url, event_id, or query.",
      "type": "integer"
    },
    "event_url": {
      "description": "StubHub parking event URL (e.g. 'https://www.stubhub.com/parking-passes-only-new-york-yankees-bronx-tickets-7-19-2026/event/159266602/')",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lot": {
      "description": "Parking lot/garage name for fuzzy matching (e.g. '161st St Garage')",
      "type": "string"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "description": "Sort mode: 'cheapest' for price ascending, default unsorted",
      "type": "string"
    },
    "query": {
      "description": "Search query (e.g. 'yankees parking') — resolves to the first current parking event. Alternative to event_url/event_id.",
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `stubhub.parking.search` — Search Parking

Search StubHub for parking events matching a query. Returns event IDs, titles, URLs, dates, and venues.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "stubhub.parking.search",
  "input": {
    "query": "yankees parking"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "date": {
      "description": "Date hint for filtering (e.g. 'april 3', '03/21/26')",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search query (e.g. 'yankees parking', 'lakers parking')",
      "type": "string"
    },
    "venue": {
      "description": "Venue name hint for disambiguation (e.g. 'Allegiant Stadium')",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `stubhub.parking.venue-lots` — Venue Lots

Fetch venue lot names and prices for a StubHub event, derived from the full listing set scraped in headless Chrome (DataDome-protected).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "stubhub.parking.venue-lots",
  "input": {
    "mode": "cheapest",
    "query": "yankees parking"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "event_id": {
      "description": "StubHub event ID",
      "type": "integer"
    },
    "event_url": {
      "description": "StubHub parking event URL",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "mode": {
      "description": "Sort mode: 'cheapest' for price ascending, default unsorted",
      "type": "string"
    },
    "query": {
      "description": "Search query (e.g. 'yankees parking') — resolves to the first current parking event. Alternative to event_url/event_id.",
      "type": "string"
    }
  },
  "type": "object"
}
```

### TalabatMart

- Platform ID: `talabatmart`
- Live module version: `v1.1.16`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/talabatmart/llm.md
- Description: Scraper for TalabatMart grocery delivery service in UAE. Supports location lookup, vendor discovery, and product catalog retrieval.

#### `talabatmart.categories.list` — Categories List

List TalabatMart categories for a vendor.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "talabatmart.categories.list",
  "input": {
    "area_id": 4001,
    "lat": 25.2938803,
    "lng": 55.4288672,
    "page": 0,
    "vendor_id": "650917"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "area_id": {
      "description": "Area ID",
      "type": "integer"
    },
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "Page number",
      "type": "integer"
    },
    "vendor_id": {
      "description": "Vendor ID",
      "type": "string"
    }
  },
  "required": [
    "vendor_id",
    "area_id",
    "lat",
    "lng",
    "page"
  ],
  "type": "object"
}
```

#### `talabatmart.globalid.get` — Global ID Get

Resolve the TalabatMart global identifier for a vendor.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "talabatmart.globalid.get",
  "input": {
    "area_id": 4001,
    "lat": 25.2938803,
    "lng": 55.4288672,
    "vendor_id": "650917"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "area_id": {
      "description": "Area ID",
      "type": "integer"
    },
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "vendor_id": {
      "description": "Vendor ID",
      "type": "string"
    }
  },
  "required": [
    "vendor_id",
    "area_id",
    "lat",
    "lng"
  ],
  "type": "object"
}
```

#### `talabatmart.products.list` — Products List

List TalabatMart products for a category and global identifier.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `true`
false

Example `POST /execute` body:

```json
{
  "capability": "talabatmart.products.list",
  "input": {
    "category_id": "558a1d0e-bf08-4e9f-8097-7ca17a3230cd",
    "global_id": "07205cb7-ca4e-4872-9414-fe9b865de22b"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Category ID",
      "type": "string"
    },
    "category_name": {
      "description": "Optional category display name from talabatmart.categories.list, preserved in normalized output.",
      "type": "string"
    },
    "global_id": {
      "description": "Global vendor ID (UUID from GetGlobalID)",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "global_id",
    "category_id"
  ],
  "type": "object"
}
```

#### `talabatmart.userlocation.get` — User Location Get

Resolve the TalabatMart area and city identifiers for a user location.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "talabatmart.userlocation.get",
  "input": {
    "lat": 25.2938803,
    "lng": 55.4288672
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "lat",
    "lng"
  ],
  "type": "object"
}
```

#### `talabatmart.vendor.get` — Vendor Get

Resolve the TalabatMart vendor for an area and city.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "talabatmart.vendor.get",
  "input": {
    "area_id": 4001,
    "city_id": 44,
    "lat": 25.2938803,
    "lng": 55.4288672
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "area_id": {
      "description": "Area ID from user location",
      "type": "integer"
    },
    "city_id": {
      "description": "City ID from user location",
      "type": "integer"
    },
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "lat",
    "lng",
    "area_id",
    "city_id"
  ],
  "type": "object"
}
```

### Tesco

- Platform ID: `tesco`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/tesco/llm.md
- Description: Scraper for Tesco Groceries UK: category taxonomy, shelf product listings with prices and promotions, and full product detail including reviews, nutrition, and allergen data.

#### `tesco.categories.list` — Categories List

Fetch the Tesco Groceries category taxonomy tree with the opaque facet ids used by tesco.category.products.list.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tesco.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `tesco.category.products.list` — Category Products List

List one page of a Tesco category shelf for a taxonomy facet id, with prices, promotions, ratings, and GTINs.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tesco.category.products.list",
  "input": {
    "count": 24,
    "facet": "b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA==",
    "page": 1,
    "sort_by": "relevance"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "count": {
      "description": "Products per page. Defaults to 24.",
      "minimum": 1,
      "type": "integer"
    },
    "facet": {
      "description": "Opaque category facet id from tesco.categories.list, e.g. b;RnJlc2glMjBGb29kJTdDRnJlc2glMjBGcnVpdA== (Fresh Fruit).",
      "minLength": 1,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page": {
      "description": "1-based shelf page. Defaults to 1.",
      "minimum": 1,
      "type": "integer"
    },
    "sort_by": {
      "description": "Upstream sort key. Observed values: relevance (default), price-ascending, price-descending.",
      "type": "string"
    }
  },
  "required": [
    "facet"
  ],
  "type": "object"
}
```

#### `tesco.product.detail.get` — Product Detail Get

Fetch the full Tesco product detail record by tpnc or product URL: price, promotions, reviews, nutrition, ingredients, and availability.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tesco.product.detail.get",
  "input": {
    "tpnc": "284477542"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "tpnc": {
      "description": "Numeric Tesco product id (tpnc), or a full tesco.com product URL such as https://www.tesco.com/groceries/en-GB/products/284477542.",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "tpnc"
  ],
  "type": "object"
}
```

### Threads Scraper

- Platform ID: `threads`
- Live module version: `v0.2.6`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/threads/llm.md
- Description: Scrapes public Threads (threads.com) profiles, posts, replies, reposts, and search results by parsing embedded JSON from server-rendered HTML pages.

#### `threads.health` — Health Check

Check the availability of all Threads scraping surfaces.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.health",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for running a Threads scraper health check.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "HealthInput",
  "type": "object"
}
```

#### `threads.post` — Get Post

Fetch a single Threads post and its reply threads.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.post",
  "input": {
    "shortcode": "DZpPDXbCeTt",
    "username": "zuck"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a single Threads post.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "shortcode": {
      "description": "Shortcode identifier of the post.",
      "type": "string"
    },
    "url": {
      "description": "Full URL of the Threads post.",
      "type": "string"
    },
    "username": {
      "description": "Username of the post author.",
      "type": "string"
    }
  },
  "title": "PostInput",
  "type": "object"
}
```

#### `threads.profile` — Get Profile

Fetch a Threads user profile including bio, follower count, and verification status.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.profile",
  "input": {
    "username": "zuck"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a Threads user profile.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Threads profile URL to look up.",
      "type": "string"
    },
    "username": {
      "description": "Threads username to look up.",
      "type": "string"
    }
  },
  "title": "ProfileInput",
  "type": "object"
}
```

#### `threads.search` — Search Threads

Search for threads matching a text query.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.search",
  "input": {
    "limit": 5,
    "query": "threads"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for searching Threads.",
  "properties": {
    "limit": {
      "default": 20,
      "description": "Maximum number of results to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search query string.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchInput",
  "type": "object"
}
```

#### `threads.user.replies` — List User Replies

Fetch the replies posted by a user.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.user.replies",
  "input": {
    "limit": 5,
    "username": "zuck"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a user's replies.",
  "properties": {
    "limit": {
      "default": 20,
      "description": "Maximum number of replies to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Threads username whose replies to fetch.",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "title": "UserRepliesInput",
  "type": "object"
}
```

#### `threads.user.reposts` — List User Reposts

Fetch the reposts made by a user.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.user.reposts",
  "input": {
    "limit": 5,
    "username": "zuck"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a user's reposts.",
  "properties": {
    "limit": {
      "default": 20,
      "description": "Maximum number of reposts to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Threads username whose reposts to fetch.",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "title": "UserRepostsInput",
  "type": "object"
}
```

#### `threads.user.threads` — List User Threads

Fetch the threads (posts) published by a user.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "threads.user.threads",
  "input": {
    "limit": 5,
    "username": "zuck"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a user's threads.",
  "properties": {
    "limit": {
      "default": 20,
      "description": "Maximum number of threads to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Threads username whose threads to fetch.",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "title": "UserThreadsInput",
  "type": "object"
}
```

### TikTok Ad Library

- Platform ID: `tiktok-adlibrary`
- Live module version: `v0.2.4`
- Category: `ads`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/tiktok-adlibrary/llm.md
- Description: Scrapes TikTok's public Commercial Content Library (library.tiktok.com): search paid ads by keyword and country, and list every ad run by a specific advertiser. Returns raw ad payloads for competitor research. Endpoint shapes verified live 2026-07-18; search requests are authorized with an X-CCL-STR header minted by the bundled tiktok-web signer sidecar.

#### `tiktok-adlibrary.ad.search` — Search Ads

Searches the TikTok Commercial Content Library by keyword. Returns raw ad payloads including creative, advertiser, run dates, targeted countries, and disclosed reach. Supports country and date-range filtering.

- Credits per request: `10`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"signer":{"profile":"tiktok-web","required":true,"transport":"http_signer"}}`

Example `POST /execute` body:

```json
{
  "capability": "tiktok-adlibrary.ad.search",
  "input": {
    "country": "ALL",
    "limit": 5,
    "query": "nike"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "country": {
      "description": "ISO-3166 alpha-2 country code, or \"ALL\" for all available regions (default: ALL). The library covers EU/UK/EEA regions.",
      "example": "GB",
      "type": "string"
    },
    "cursor": {
      "description": "Pagination cursor from a previous response's next_cursor.",
      "type": "string"
    },
    "end_date": {
      "description": "Only ads shown on or before this date (YYYY-MM-DD). Default: today.",
      "example": "2026-07-01",
      "type": "string"
    },
    "limit": {
      "description": "Maximum number of ads to return (default: 50).",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search keyword or phrase (brand, product, slogan).",
      "example": "nike",
      "type": "string"
    },
    "start_date": {
      "description": "Only ads shown on or after this date (YYYY-MM-DD). Default: 30 days ago.",
      "example": "2026-06-01",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `tiktok-adlibrary.advertiser-ads.list` — List Advertiser Ads

Lists every ad run by a specific TikTok advertiser, identified by its exact registered entity name (e.g. "NIKE Retail B.V."). Returns raw ad payloads with country and date-range filtering.

- Credits per request: `10`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"signer":{"profile":"tiktok-web","required":true,"transport":"http_signer"}}`

Example `POST /execute` body:

```json
{
  "capability": "tiktok-adlibrary.advertiser-ads.list",
  "input": {
    "advertiser_name": "NIKE Retail B.V.",
    "business_id": "6876453864464188162",
    "country": "ALL",
    "limit": 5
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "advertiser_name": {
      "description": "The advertiser's exact registered entity name as shown in the TikTok Commercial Content Library (e.g. \"NIKE Retail B.V.\"). Resolve names via the library's advertiser suggestions; matching is exact.",
      "example": "NIKE Retail B.V.",
      "type": "string"
    },
    "business_id": {
      "description": "TikTok advertiser business id (adv_biz_ids). Optional: carried through for parity with the upstream request; the filter is driven by advertiser_name.",
      "example": "6876453864464188162",
      "type": "string"
    },
    "country": {
      "description": "ISO-3166 alpha-2 country code, or \"ALL\" for all available regions (default: ALL).",
      "example": "GB",
      "type": "string"
    },
    "cursor": {
      "description": "Pagination cursor from a previous response's next_cursor.",
      "type": "string"
    },
    "end_date": {
      "description": "Only ads shown on or before this date (YYYY-MM-DD). Default: today.",
      "example": "2026-07-01",
      "type": "string"
    },
    "limit": {
      "description": "Maximum number of ads to return (default: 50).",
      "example": 10,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "start_date": {
      "description": "Only ads shown on or after this date (YYYY-MM-DD). Default: 30 days ago.",
      "example": "2026-06-01",
      "type": "string"
    }
  },
  "required": [
    "advertiser_name"
  ],
  "type": "object"
}
```

### TikTok Scraper

- Platform ID: `tiktok`
- Live module version: `v1.0.10`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/tiktok/llm.md
- Description: Scrapes TikTok profiles and posts by parsing server-rendered HTML.

#### `tiktok.post.get` — Get Post

Fetch TikTok post/video metadata from the server-rendered HTML.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tiktok.post.get",
  "input": {
    "url": "https://www.tiktok.com/@khaby.lame/video/6804458085789256966"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "TikTok post/video URL",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `tiktok.profile.get` — Get Profile

Fetch TikTok profile data from the server-rendered HTML.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tiktok.profile.get",
  "input": {
    "url": "https://www.tiktok.com/@tiktok"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "TikTok profile URL, @handle, or username",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### ToYou

- Platform ID: `toyou`
- Live module version: `v1.2.20`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/toyou/llm.md
- Description: Scraper for ToYou grocery delivery in Saudi Arabia with renewable anonymous AWS WAF browser sessions.

#### `toyou.categories.list` — Categories List

List ToYou categories for a merchant.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"toyou-waf","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "toyou.categories.list",
  "input": {
    "lat": 24.713,
    "lng": 46.675,
    "merchant_id": "96e2e119-90a6-412a-a506-0c31d733d893",
    "operation_area": "SA_Riyadh"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "merchant_id": {
      "description": "Merchant identifier",
      "type": "string"
    },
    "operation_area": {
      "description": "Operation area identifier (e.g., SA_Riyadh)",
      "type": "string"
    }
  },
  "required": [
    "merchant_id",
    "lat",
    "lng",
    "operation_area"
  ],
  "type": "object"
}
```

#### `toyou.merchant.get` — Merchant Get

Resolve the ToYou merchant identifier for a location and operation area.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"toyou-waf","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "toyou.merchant.get",
  "input": {
    "lat": 24.713,
    "lng": 46.675,
    "operation_area": "SA_Riyadh"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "operation_area": {
      "description": "Operation area identifier (e.g., SA_Riyadh)",
      "type": "string"
    }
  },
  "required": [
    "lat",
    "lng",
    "operation_area"
  ],
  "type": "object"
}
```

#### `toyou.operation_areas.list` — Operation Areas List

List the supported ToYou operation areas.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
- Runtime requirements: `{"session":{"profile":"toyou-waf","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "toyou.operation_areas.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}
```

#### `toyou.products.list` — Products List

List ToYou products for a merchant category.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `true`
- Runtime requirements: `{"session":{"profile":"toyou-waf","required":true,"kind":"http_session_provider"}}`

Example `POST /execute` body:

```json
{
  "capability": "toyou.products.list",
  "input": {
    "category_id": "eea49430-9492-4294-bd85-ed353e456067",
    "lat": 24.713,
    "lng": 46.675,
    "merchant_id": "96e2e119-90a6-412a-a506-0c31d733d893",
    "operation_area": "SA_Riyadh"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "category_id": {
      "description": "Category identifier",
      "type": "string"
    },
    "category_name": {
      "description": "Optional category display name from toyou.categories.list, preserved in normalized output.",
      "type": "string"
    },
    "lat": {
      "description": "Latitude coordinate",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "lng": {
      "description": "Longitude coordinate",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "merchant_id": {
      "description": "Merchant identifier",
      "type": "string"
    },
    "operation_area": {
      "description": "Operation area identifier (e.g., SA_Riyadh)",
      "type": "string"
    }
  },
  "required": [
    "merchant_id",
    "category_id",
    "lat",
    "lng",
    "operation_area"
  ],
  "type": "object"
}
```

### Trustpilot

- Platform ID: `trustpilot`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/trustpilot/llm.md
- Description: Scrape Trustpilot product ratings, review counts, and GTINs from the public TrustBox widget JSON-LD API.

#### `trustpilot.product.rating.get` — Product Rating Get

Fetch the aggregate Trustpilot product rating, review count, and GTIN for a business unit's SKU.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "trustpilot.product.rating.get",
  "input": {
    "business_unit_id": "605071d79427c2000147bff9",
    "language": "fr",
    "product_name": "Irrésistible Givenchy",
    "sku": "41013C42",
    "url": "https://www.my-origines.com/fr/irresistible-givenchy-41013C42.html"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "business_unit_id": {
      "minLength": 1,
      "type": "string"
    },
    "language": {
      "default": "en",
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "number_of_reviews": {
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "type": "integer"
    },
    "product_name": {
      "type": "string"
    },
    "sku": {
      "minLength": 1,
      "type": "string"
    },
    "template_id": {
      "default": "5717796816f630043868e2e8",
      "type": "string"
    },
    "url": {
      "type": "string"
    }
  },
  "required": [
    "business_unit_id",
    "sku"
  ],
  "type": "object"
}
```

### Tumblr Scraper

- Platform ID: `tumblr`
- Live module version: `v0.5.12`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/tumblr/llm.md
- Description: Scrape public Tumblr blogs for profiles, posts, and images with full pagination support

#### `tumblr.images.list` — List Images

Extract all original-resolution images from a Tumblr blog

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.images.list",
  "input": {
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Tumblr username",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

#### `tumblr.post-images.get` — Get Post Images

Extract images from a specific Tumblr post

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.post-images.get",
  "input": {
    "post_id": "802275442449170432",
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "post_id": {
      "description": "Numeric post ID",
      "type": "string"
    },
    "username": {
      "description": "Tumblr username",
      "type": "string"
    }
  },
  "required": [
    "username",
    "post_id"
  ],
  "type": "object"
}
```

#### `tumblr.posts.list` — List Posts

Fetch all posts from a Tumblr blog with automatic pagination

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.posts.list",
  "input": {
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Tumblr username",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

#### `tumblr.profile.get` — Get Profile

Fetch a Tumblr user's profile information

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.profile.get",
  "input": {
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Tumblr username or blog name",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

#### `tumblr.raw-posts.list` — List Raw Posts

Fetch all posts as raw JSON for custom parsing

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.raw-posts.list",
  "input": {
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Tumblr username",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

#### `tumblr.raw-profile.get` — Get Raw Profile

Fetch raw JSON profile data for custom parsing

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "tumblr.raw-profile.get",
  "input": {
    "username": "ashishbishnoi-blog"
  }
}
```

Input JSON Schema:

```json
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "username": {
      "description": "Tumblr username",
      "type": "string"
    }
  },
  "required": [
    "username"
  ],
  "type": "object"
}
```

### Uniqlo

- Platform ID: `uniqlo`
- Live module version: `v0.1.2`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/uniqlo/llm.md
- Description: Scrape the Uniqlo France catalog via the Fast Retailing native-app API: category taxonomy, and category product listings with prices, promotions, ratings, stock, colors, and sizes.

#### `uniqlo.categories.list` — Categories List

List the flattened Uniqlo France taxonomy: genders, classes, and categories with parent chains and ready-to-use product paths.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "uniqlo.categories.list",
  "input": {}
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `uniqlo.category.products.list` — Category Products List

List Uniqlo France products for a taxonomy path such as "37608,84986" with prices, promotions, ratings, stock, colors, and sizes. Offset-paginated.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "uniqlo.category.products.list",
  "input": {
    "path": "37608,84986"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "include_unavailable": {
      "default": false,
      "description": "Keep out-of-stock products in the parsed items. The anonymous API has no server-side in-stock-only filter, so false filters client-side; pagination still reflects upstream totals.",
      "type": "boolean"
    },
    "limit": {
      "default": 36,
      "description": "Page size. Defaults to 36, clamped to 96.",
      "maximum": 96,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Zero-based item offset.",
      "minimum": 0,
      "type": "integer"
    },
    "path": {
      "description": "Taxonomy path from uniqlo.categories.list: \"{gender_id},{class_id}\" (e.g. \"37608,84986\" for WOMEN tops). A third category id segment is also accepted.",
      "pattern": "^\\d+(,\\d+){1,2}$",
      "type": "string"
    },
    "sort": {
      "default": 0,
      "description": "Upstream sort order id; 0 is the app's default ranking.",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}
```

### Universal Web Scraper

- Platform ID: `web`
- Live module version: `v0.4.9`
- Category: `web`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/web/llm.md
- Description: Universal browser-first page capture and schema-first extraction. Clients provide a URL for capture, or a URL plus output schema for extraction; browser/backend choices are internal.

#### `web.page.archive` — Archive Page

Archive one public webpage into durable offline artifacts for saved-page collections. Returns best-effort self-contained HTML and ZIP snapshots with CSS/images/fonts/media/scripts rewritten or packed, plus optional PDF when a Chrome/Chromium backend is configured.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "web.page.archive",
  "input": {
    "formats": [
      "single_html",
      "zip"
    ],
    "include_scripts": false,
    "url": "https://example.com/"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "formats": {
      "default": [
        "single_html"
      ],
      "description": "Archive artifact formats to return. single_html is a self-contained HTML snapshot, zip contains index.html plus local assets, and pdf requires a configured Chrome/Chromium backend. If a requested single_html artifact is too large for the worker-result budget and zip was not requested, the module may return a zip fallback.",
      "items": {
        "enum": [
          "single_html",
          "zip",
          "pdf",
          "all"
        ],
        "type": "string"
      },
      "type": "array"
    },
    "include_scripts": {
      "default": false,
      "description": "Preserve external and inline scripts. Defaults to false because archived arbitrary JavaScript should only be replayed in a sandboxed viewer.",
      "type": "boolean"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_asset_bytes": {
      "default": 1000000,
      "description": "Requested maximum bytes to download for a single CSS/image/font/script/media asset. The module may clamp this lower to keep the worker result under platform size limits.",
      "maximum": 10000000,
      "minimum": 1024,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_total_asset_bytes": {
      "default": 4000000,
      "description": "Requested maximum bytes to download across all archived assets. The module may clamp this lower to keep the worker result under platform size limits.",
      "maximum": 50000000,
      "minimum": 1024,
      "type": "integer"
    },
    "url": {
      "description": "Public http(s) URL to archive.",
      "format": "uri",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `web.page.capture` — Capture Page

Capture one public webpage as a browser-rendered, domain-neutral artifact graph: DOM, text, elements, URLs, links, images, media, resources, structured data, forms, tables, and frames.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "web.page.capture",
  "input": {
    "url": "https://example.com/"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "detail": {
      "default": "full",
      "description": "How much of the artifact graph to return. summary: metadata, counts, and warnings. standard: everything except raw HTML and the per-element dump. full: the complete graph.",
      "enum": [
        "summary",
        "standard",
        "full"
      ],
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "url": {
      "description": "Public http(s) URL to capture.",
      "format": "uri",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

#### `web.page.extract` — Extract Page

Capture one public webpage and return data shaped by a caller-provided JSON Schema or fields shorthand. Deterministic extraction (metadata, evidence graph, filtered URL enumeration) runs first; internal AI resolves remaining fields per the ai mode (never/auto/always), grounded to captured page content.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "web.page.extract",
  "input": {
    "ai": "never",
    "fields": {
      "canonical_url": "canonical url of the page",
      "description": "short page description",
      "title": "page title"
    },
    "url": "https://example.com/"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "properties": {
    "ai": {
      "description": "Extraction mode. never: deterministic only. auto: deterministic first, internal AI only for unresolved fields (degrades gracefully when AI is unavailable). always: deterministic plus AI. Defaults to auto when fields is used, otherwise never.",
      "enum": [
        "never",
        "auto",
        "always"
      ],
      "type": "string"
    },
    "ai_enabled": {
      "default": false,
      "description": "Deprecated alias for ai: always. Prefer the ai parameter.",
      "type": "boolean"
    },
    "fields": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "Shorthand alternative to output_schema: field name mapped to a natural-language description of what to extract. Compiled into a schema internally. Provide exactly one of output_schema or fields.",
      "type": "object"
    },
    "instructions": {
      "description": "Optional extraction guidance. Do not include secrets.",
      "maxLength": 4000,
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "output_schema": {
      "additionalProperties": true,
      "description": "JSON Schema object describing the desired data shape. Property descriptions double as per-field extraction hints. Constraints such as items.pattern filter deterministic URL enumeration. Provide exactly one of output_schema or fields.",
      "type": "object"
    },
    "url": {
      "description": "Public http(s) URL to extract from.",
      "format": "uri",
      "type": "string"
    }
  },
  "required": [
    "url"
  ],
  "type": "object"
}
```

### X (Twitter)

- Platform ID: `x`
- Live module version: `v0.1.10`
- Category: `social`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/x/llm.md
- Description: Fetches public X posts from the logged-out syndication endpoint.

#### `x.tweet.syndication` — Get Tweet (Syndication)

Get a public post from X's logged-out syndication API without an account.

- Credits per request: `10`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "x.tweet.syndication",
  "input": {
    "tweet_id": "1911516207322439730"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "tweet_id": {
      "description": "Numeric tweet ID",
      "example": "1911516207322439730",
      "type": "string"
    }
  },
  "required": [
    "tweet_id"
  ],
  "type": "object"
}
```

### Zepto

- Platform ID: `zepto`
- Live module version: `v0.1.10`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/zepto/llm.md
- Description: Scrape India's Zepto q-commerce platform: product details, search, category listings, ad placements, place/location resolution, search filters, and platform health checks. No login required.

#### `zepto.ads` — List Ads

List current Zepto sponsored product, campaign, and banner placements for a location or page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.ads",
  "input": {
    "latitude": 12.96902,
    "limit": 5,
    "longitude": 77.75395,
    "page_type": "HOME"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for listing Zepto ad placements.",
  "properties": {
    "category_id": {
      "description": "Category ID (relevant when page_type is CATEGORY).",
      "type": "string"
    },
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of ad placements to return.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page_type": {
      "default": "HOME",
      "description": "Type of page to fetch ads for.",
      "enum": [
        "HOME",
        "SEARCH",
        "CATEGORY"
      ],
      "type": "string"
    },
    "query": {
      "description": "Search query (relevant when page_type is SEARCH).",
      "type": "string"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    },
    "subcategory_id": {
      "description": "Subcategory ID (relevant when page_type is CATEGORY).",
      "type": "string"
    },
    "url": {
      "description": "Direct URL to a Zepto page for ad context.",
      "type": "string"
    }
  },
  "title": "ListAdsInput",
  "type": "object"
}
```

#### `zepto.categories` — List Categories

List Zepto category and subcategory IDs for a store or latitude/longitude.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.categories",
  "input": {
    "latitude": 12.96902,
    "longitude": 77.75395
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for listing Zepto product categories.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    }
  },
  "title": "ListCategoriesInput",
  "type": "object"
}
```

#### `zepto.category.products` — List Category Products

List Zepto products from a /cn/.../cid/.../scid/... category URL.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.category.products",
  "input": {
    "limit": 5,
    "url": "https://www.zepto.com/cn/fruits-vegetables/fresh-fruits/cid/64374cfe-d06f-4a01-898e-c07c46462c36/scid/09e63c15-e5f7-4712-9ff8-513250b79942"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for listing products within a Zepto category or subcategory.",
  "properties": {
    "category_id": {
      "description": "Zepto category ID to browse.",
      "type": "string"
    },
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of products to return per page.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_pages": {
      "default": 10,
      "description": "Maximum number of pages to fetch.",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page_number": {
      "default": 1,
      "description": "One-based page number to start from.",
      "minimum": 1,
      "type": "integer"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    },
    "subcategory_id": {
      "description": "Zepto subcategory ID to browse.",
      "type": "string"
    },
    "url": {
      "description": "Direct URL to a Zepto category page.",
      "type": "string"
    }
  },
  "title": "ListCategoryProductsInput",
  "type": "object"
}
```

#### `zepto.health` — Health Check

Run a Zepto liveness check across location, catalog, search, and ad surfaces.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.health",
  "input": {
    "latitude": 12.96902,
    "longitude": 77.75395
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for running a Zepto scraper health check.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based health check.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based health check.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "title": "HealthInput",
  "type": "object"
}
```

#### `zepto.location` — Resolve Location

Resolve Zepto serviceability and store IDs for a latitude/longitude.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.location",
  "input": {
    "latitude": 12.96902,
    "longitude": 77.75395
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for resolving a Zepto delivery location from geographic coordinates.",
  "properties": {
    "latitude": {
      "description": "Latitude of the delivery location.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude of the delivery location.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "ResolveLocationInput",
  "type": "object"
}
```

#### `zepto.place.autocomplete` — Place Autocomplete

Find Zepto-supported address and place suggestions.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.place.autocomplete",
  "input": {
    "limit": 3,
    "query": "Indiranagar Bengaluru"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for autocompleting place names via Zepto.",
  "properties": {
    "limit": {
      "default": 5,
      "description": "Maximum number of autocomplete suggestions to return.",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Partial place name or address to autocomplete.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "PlaceAutocompleteInput",
  "type": "object"
}
```

#### `zepto.place.details` — Place Details

Resolve a Zepto place ID to coordinates and address components.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.place.details",
  "input": {
    "place_id": "ChIJkQN3GKQWrjsRNhBQJrhGD7U"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching details of a specific place.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "place_id": {
      "description": "Google Maps place ID to look up.",
      "type": "string"
    }
  },
  "required": [
    "place_id"
  ],
  "title": "PlaceDetailsInput",
  "type": "object"
}
```

#### `zepto.place.resolve` — Resolve Place

Resolve an address or place ID to coordinates, address details, and Zepto store serviceability.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.place.resolve",
  "input": {
    "query": "Indiranagar Bengaluru"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for resolving a place by query or place ID, returning both place details and Zepto location info.",
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "place_id": {
      "description": "Google Maps place ID to resolve directly.",
      "type": "string"
    },
    "query": {
      "description": "Place name or address to search for.",
      "type": "string"
    }
  },
  "title": "ResolvePlaceInput",
  "type": "object"
}
```

#### `zepto.product` — Get Product

Get Zepto product details from a product URL or product variant ID.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.product",
  "input": {
    "url": "https://www.zepto.com/pn/tender-coconut/pvid/b9fbf0e7-de2d-4a89-ae74-b12a7c0ab236"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching a single Zepto product.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "pvid": {
      "description": "Zepto product variant ID.",
      "type": "string"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    },
    "url": {
      "description": "Direct URL to a Zepto product page.",
      "type": "string"
    }
  },
  "title": "GetProductInput",
  "type": "object"
}
```

#### `zepto.search` — Search Products

Search Zepto products by keyword.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.search",
  "input": {
    "limit": 5,
    "query": "rice"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for searching Zepto products by keyword.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of products to return per page.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_pages": {
      "default": 10,
      "description": "Maximum number of pages to fetch.",
      "maximum": 20,
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "page_number": {
      "default": 0,
      "description": "Zero-based page number to start from.",
      "minimum": 0,
      "type": "integer"
    },
    "query": {
      "description": "Search query string.",
      "type": "string"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchProductsInput",
  "type": "object"
}
```

#### `zepto.search.filters` — Search Filters

Get Zepto filter metadata for a search query.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zepto.search.filters",
  "input": {
    "latitude": 12.96902,
    "longitude": 77.75395,
    "query": "rice"
  }
}
```

Input JSON Schema:

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "description": "Input for fetching available search filters for a query.",
  "properties": {
    "latitude": {
      "description": "Latitude for location-based store resolution.",
      "type": "number"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "longitude": {
      "description": "Longitude for location-based store resolution.",
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Search query to get filters for.",
      "type": "string"
    },
    "store_id": {
      "description": "Zepto store ID. Defaults to the public Bangalore sample store.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "title": "SearchFiltersInput",
  "type": "object"
}
```

### Zomato

- Platform ID: `zomato`
- Live module version: `v0.2.5`
- Category: `commerce`
- Stored platform credentials: not required
- Current platform brief and OpenAPI link: https://upscrape.com/scrapers/zomato/llm.md
- Description: Scrapes Zomato restaurant listings, search results, restaurant details, menus, reviews, cuisines, and collections via Zomato web APIs.

#### `zomato.cities` — Cities

List Zomato delivery cities.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.cities",
  "input": {
    "limit": 50
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `zomato.collections` — Get Collections

Fetch featured collections from a Zomato restaurant page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.collections",
  "input": {
    "res_id": "18439027"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    }
  },
  "required": [
    "res_id"
  ],
  "type": "object"
}
```

#### `zomato.cuisines` — Get Cuisines

Extract cuisine list with deeplink filters from a Zomato restaurant page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.cuisines",
  "input": {
    "res_id": "18439027"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    }
  },
  "required": [
    "res_id"
  ],
  "type": "object"
}
```

#### `zomato.location.search` — Location Search

Search Zomato locations (cities, neighborhoods, landmarks) by name.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.location.search",
  "input": {
    "query": "Connaught Place"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```

#### `zomato.restaurant.get` — Get Restaurant

Fetch full Zomato restaurant detail: info, cuisines, ratings, hours, address, phone, cost.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurant.get",
  "input": {
    "res_id": "18439027"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    }
  },
  "required": [
    "res_id"
  ],
  "type": "object"
}
```

#### `zomato.restaurant.menu` — Get Menu

Fetch restaurant menu photos and items from the Zomato info page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurant.menu",
  "input": {
    "res_id": "18439027"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    }
  },
  "required": [
    "res_id"
  ],
  "type": "object"
}
```

#### `zomato.restaurant.ordermenu` — Order Menu

Fetch the full ordering menu for a restaurant: dishes with names, descriptions, images, veg/non-veg tags, and modifier groups (addons/variants with prices).

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurant.ordermenu",
  "input": {
    "url": "/ncr/behrouz-biryani-connaught-place-new-delhi/order"
  }
}
```

Input JSON Schema:

```json
{
  "anyOf": [
    {
      "required": [
        "res_id"
      ]
    },
    {
      "required": [
        "url"
      ]
    }
  ],
  "properties": {
    "limit": {
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    },
    "url": {
      "type": "string"
    }
  },
  "type": "object"
}
```

#### `zomato.restaurant.reviews` — Get Reviews

Fetch restaurant reviews from the Zomato info page.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `30000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurant.reviews",
  "input": {
    "res_id": "18439027"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "limit": {
      "type": "integer"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "res_id": {
      "type": "string"
    }
  },
  "required": [
    "res_id"
  ],
  "type": "object"
}
```

#### `zomato.restaurants.all` — List All Restaurants

Crawl a Zomato city grid and stream deduplicated delivery restaurants. Supports city presets, explicit bounds, or center+radius.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `120000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurants.all",
  "input": {
    "center_latitude": 28.6315,
    "center_longitude": 77.2167,
    "city": "ncr",
    "max_restaurants": 100,
    "radius_km": 5,
    "step_km": 2
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "center_latitude": {
      "type": "number"
    },
    "center_longitude": {
      "type": "number"
    },
    "city": {
      "type": "string"
    },
    "concurrency": {
      "type": "integer"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "max_cells": {
      "type": "integer"
    },
    "max_latitude": {
      "type": "number"
    },
    "max_longitude": {
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "max_restaurants": {
      "type": "integer"
    },
    "min_latitude": {
      "type": "number"
    },
    "min_longitude": {
      "type": "number"
    },
    "radius_km": {
      "type": "number"
    },
    "step_km": {
      "type": "number"
    }
  },
  "type": "object"
}
```

#### `zomato.restaurants.list` — List Restaurants

List delivery restaurants for a Zomato city.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.restaurants.list",
  "input": {
    "city": "ncr",
    "limit": 10
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "city": {
      "type": "string"
    },
    "latitude": {
      "type": "number"
    },
    "limit": {
      "type": "integer"
    },
    "longitude": {
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "type": "object"
}
```

#### `zomato.search` — Search

Search Zomato restaurants by query and location.

- Credits per request: `1`
- Billable: `true`
- Maximum `timeout_ms`: `60000`
- Normalized cross-platform output: `false`
false

Example `POST /execute` body:

```json
{
  "capability": "zomato.search",
  "input": {
    "latitude": 28.6257,
    "longitude": 77.2102,
    "query": "biryani"
  }
}
```

Input JSON Schema:

```json
{
  "properties": {
    "city": {
      "type": "string"
    },
    "latitude": {
      "type": "number"
    },
    "limit": {
      "type": "integer"
    },
    "longitude": {
      "type": "number"
    },
    "max_records": {
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "type": "object"
}
```
