# Target Product Scraper | Prices Stock Reviews (`lentic_clockss/target-scraper`) Actor

Scrape Target.com US products by keyword, category, brand or TCIN. Extract prices, ratings, reviews, DPCI, images, store stock & fulfillment. Export Excel/CSV/JSON. Unofficial — not affiliated with Target.

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

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Target Product Scraper | Prices Stock Reviews TCIN

**Scrape Target.com product listings, keyword search, categories, brands, product detail pages, store locations, aisle search, and reviews — then download structured US retail data as Excel, CSV, or JSON.**

Use this Actor as a practical **Target.com product data API** for price monitoring, assortment research, and competitor tracking. Choose a mode, set ZIP / store context, set limits, and get Dataset rows with **TCIN**, prices, ratings, DPCI, images, and fulfillment.

- Scrape **Target keyword search**, **category browse**, **brand pages**, **category trees / taxonomy**, **product detail (PDP)**, **store locations**, **aisles search**, **product reviews**, and **batch product summaries**
- Extract **TCIN, title, brand, current/regular price, rating, review count, DPCI, images, sponsored flags, children variants, zip/store context, fulfillment**
- Harden **US geo** with `zip`, `storeId` / `storeIds`, and `fulfillmentType` (pickup / same-day / shipping / shop in store)
- Optional **PDP enrich**, **facet slicing**, and **variant expansion** on listings
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or the Apify API
- **Pay per event** — Actor start + each Dataset result; **platform usage is included** (you do not pay separate Apify compute on top)

> **Unofficial tool.** This Actor is not affiliated with, endorsed by, or sponsored by Target Brands, Inc. It collects publicly reachable shopping surfaces and does **not** place orders, checkout, or access private Target Circle / account data. **Weekly Ad deep scrape, Registry / Wish List, Circle checkout price deltas, and Marketplace seller field diffs** are out of scope.

---

### What does the Target Product Scraper do?

Target Product Scraper lets you **extract structured product, store, and taxonomy data from Target.com** without running your own anti-bot browser fleet. Give it a keyword, category ID / URL, brand slug, product URL / TCIN, or ZIP for stores, then start a run.

Under the hood, the Actor:

1. Validates your input (mode, keyword / category / brand / TCIN, geo filters)
2. Enforces free-tier caps when you are on a free Apify plan
3. Calls a managed Cloud Run worker (`target-com`) that opens Target with US residential egress + Patchright (PerimeterX / Redsky session)
4. Parses Redsky aggregations (`plp_search_v2`, `pdp_client_v1`, fulfillment, taxonomy, aisles) with DOM fallback
5. Pushes Dataset rows ready for Excel / CSV / JSON export
6. Writes `RUN_SUMMARY` (and `ERROR_SUMMARY` on failure) to the key-value store

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

---

### What Target data can I extract?

| Data | Keyword / Category / Brand | Product detail | Stores | Taxonomy / Tree | Aisles | Reviews | Summaries |
| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| TCIN / URL | ✅ | ✅ | — | — | ✅* | ✅ | ✅ |
| Title / brand | ✅ | ✅ | name* | name | ✅* | — | ✅ |
| Price / currency (USD) | ✅ | ✅ | — | — | ✅* | — | ✅* |
| Rating / review count | ✅* | ✅ | — | — | — | rating | ✅* |
| DPCI / images | ✅* | ✅ | — | — | — | — | ✅* |
| Children variants | ✅* | ✅ | — | — | — | — | — |
| Zip / store context | ✅ | ✅ | ✅ | — | ✅ | — | ✅ |
| Fulfillment / stock | ✅* | ✅ | — | — | ✅* | — | ✅* |
| Review text / author | — | — | — | — | — | ✅* | — |
| Category / brand path | ✅ | breadcrumbs | — | ✅ | — | — | — |

\*When present in Redsky / DOM, after `enrichDetails`, or as best-effort first-page / summary rows. Review bodies may return a stats-only row when full pagination APIs are unavailable.

---

### Why scrape Target.com?

Target is a major US general-merchandise retailer. Teams scrape Target for **price monitoring**, **competitive analysis**, and **assortment research**:

- Monitor **Target.com** prices, clearance / sale signals, and ratings
- Track **TCIN** (and child variants when parents show *Price Varies*)
- Map **category trees**, **brand pages**, and merchandising facets (pickup, same-day, shipping)
- Pull **store location** rows by ZIP and bind **pricing / inventory** to `storeId`
- Feed BI dashboards, pricing tools, or AI agents with structured Target rows

Compared with Actors that only accept a single search URL **or** only PDP links, this Actor covers **keyword + category + brand + category tree + PDP + stores + aisles + reviews + batch summaries** with explicit **US zip/store/fulfillment** controls in one input surface.

---

### How to scrape Target products (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
3. Choose a **mode**: `keywordSearch`, `categoryBrowse`, `brandBrowse`, `categoryTree`, `productDetail`, `storeLocations`, `taxonomyBrowse`, `aislesSearch`, `productReviews`, or `productSummaries`
4. Enter a **keyword**, **categoryId** / **categoryUrl**, **brandSlug** / **brandId**, or **productUrl** / **tcin**
5. *(Optional)* Set `zip`, `storeId` / `storeIds`, `fulfillmentType`, `sortBy`, `facets`, `enrichDetails`, `maxResults`
6. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

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

---

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

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

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

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

#### Example cost estimates

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

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

#### Free plan limits

On a **free Apify plan**, this Actor enforces developer limits of **10 runs** and **200 results per run**. Upgrade to a paid Apify plan for unlimited runs (event prices still apply).

---

### Input examples

#### Keyword search (US geo + pickup)

```json
{
  "mode": "keywordSearch",
  "keyword": "air fryer",
  "zip": "10001",
  "storeId": "1771",
  "fulfillmentType": "pickup",
  "sortBy": "PriceLow",
  "maxResults": 40,
  "maxPages": 2,
  "enrichDetails": true,
  "enrichLimit": 5
}
````

#### Category browse (Electronics)

```json
{
  "mode": "categoryBrowse",
  "categoryId": "5xtg6",
  "categorySlug": "electronics",
  "zip": "52404",
  "storeId": "1771",
  "maxResults": 48,
  "expandFacets": false,
  "expandVariants": true
}
```

#### Brand browse

```json
{
  "mode": "brandBrowse",
  "brandId": "5y3ej",
  "brandSlug": "apple",
  "maxResults": 24
}
```

#### Product detail (TCIN / URL)

```json
{
  "mode": "productDetail",
  "productUrl": "https://www.target.com/p/gain-liquid-laundry-detergent-original-194-fl-oz/-/A-93248143",
  "tcin": "93248143",
  "zip": "52404",
  "storeId": "1771",
  "includeFulfillment": true,
  "expandVariants": true
}
```

#### Category tree

```json
{
  "mode": "categoryTree",
  "categoryId": "5xtg6",
  "categorySlug": "electronics",
  "taxonomyDepth": 2,
  "maxResults": 100
}
```

#### Store locations

```json
{
  "mode": "storeLocations",
  "zip": "75201",
  "maxResults": 20
}
```

#### Batch product summaries

```json
{
  "mode": "productSummaries",
  "tcins": ["93248143", "89110863"],
  "zip": "52404",
  "storeId": "1771",
  "includeFulfillment": true
}
```

***

### Output example

```json
{
  "source": "target",
  "mode": "keywordSearch",
  "tcin": "89110863",
  "title": "Gourmia 6qt Digital Window Air Fryer…",
  "brand": "Gourmia",
  "price": 49.99,
  "regPrice": 69.99,
  "formattedPrice": "$49.99",
  "currency": "USD",
  "rating": 4.6,
  "reviewCount": 1200,
  "dpci": "072-04-0231",
  "url": "https://www.target.com/p/…/-/A-89110863",
  "image": "https://target.scene7.com/is/image/Target/…",
  "zip": "10001",
  "storeId": "1771",
  "children": [],
  "capturedAt": "2026-07-28T08:18:53.313553+00:00"
}
```

***

### Tips for better Target scrapes

- Always set a realistic **US ZIP** + **storeId** — Target prices and availability are location-bound
- Parent TCINs often show **Price Varies**; enable `expandVariants` or open the child TCIN / `preselectTcin`
- Use `fulfillmentType` or `facets` (e.g. `d_channel:pick_it_up`) to narrow Pickup / Same-day / Shipping
- Keep `enrichDetails` on for richer PDP fields; lower `enrichLimit` to control latency
- Prefer `categoryId` (`N-` without prefix) over fragile HTML-only paths when possible
- Start small (`maxResults: 5`) before large facet expansions (`expandFacets`)

***

### FAQ

#### Is this an official Target API?

No. It is an unofficial scraper for publicly reachable Target.com shopping surfaces.

#### Does it work outside the US?

Target.com ecommerce coverage in this Actor is **US-only** (USD). Geo expansion is via **ZIP / store / fulfillment**, not country-site switches.

#### Why are some prices missing?

Parent SKUs may hide price (`PRICE_VARIES`), some summary endpoints omit retail until a child is selected, or the session fell back to DOM cards. Use `productDetail` / `expandVariants` / `enrichDetails`.

#### Can I get full review pagination?

`productReviews` returns first-page bodies when present, otherwise a ratings summary row. Full review-pagination APIs are not guaranteed.

#### Do I need my own proxies?

No for normal use. With `WORKER_PROVIDES_PROXY=1`, the worker owns US residential egress. Do not point `workerBaseUrl` at untrusted hosts.

***

### Integrations

- **Apify API / client** — start runs and pull Dataset items programmatically
- **Schedules** — daily / weekly price monitors
- **Make · n8n · Zapier** — push rows to Sheets, Airtable, Slack, warehouses
- **Webhooks** — notify when a run finishes
- Standby / Live View OpenAPI surface included

#### Standby / Live View

When the Actor runs in Standby mode, these **Actor-side** HTTP paths are available (see `.actor/openapi.json`):

| Method | Path | Purpose |
| --- | --- | --- |
| `GET` | `/`, `/health` | Readiness / Actor health |
| `GET` | `/input-example` | Documentation-only sample input |
| `GET` | `/openapi.json`, `/schema` | OpenAPI document |
| `POST` | `/search`, `/v1/search` | Actor scrape request (`mode` in JSON; Standby caps `maxResults` at 10) |

Batch Actor runs remain the primary path for Dataset export; Standby is for Live View / small HTTP calls. Live View OpenAPI documents **Actor paths only** (worker URLs and worker OpenAPI are not exposed).

***

### Support

Issues or feature requests: open an issue on the Actor page or contact the developer via Apify Console.

**Disclaimer:** Use responsibly and comply with Target’s terms and applicable laws. You are responsible for how you use the data.

# Actor input Schema

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

Scrape mode.

## `keyword` (type: `string`):

Search keyword.

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

Alias of keyword.

## `categoryId` (type: `string`):

N-id without prefix (e.g. 5xtg6).

## `categoryUrl` (type: `string`):

Full /c/ or /b/ URL.

## `categorySlug` (type: `string`):

HTML slug hint.

## `brandId` (type: `string`):

Brand N-id for brandBrowse.

## `brandSlug` (type: `string`):

Brand path slug (e.g. apple).

## `tcin` (type: `string`):

Product TCIN.

## `tcins` (type: `array`):

Batch TCINs for productSummaries.

## `productUrl` (type: `string`):

Full PDP URL.

## `preselectTcin` (type: `string`):

Child variant TCIN.

## `zip` (type: `string`):

Ship-to ZIP (price/stock context).

## `storeId` (type: `string`):

Primary pricing\_store\_id.

## `storeIds` (type: `array`):

Additional store\_ids for Redsky geo.

## `fulfillmentType` (type: `string`):

Maps to d\_channel facet.

## `facets` (type: `array`):

Raw facet URLs e.g. d\_deals:sale.

## `expandFacets` (type: `boolean`):

Slice PLP by channel/deals facets.

## `expandVariants` (type: `boolean`):

Include children\[] prices.

## `sortBy` (type: `string`):

PLP sort (mapped to sorting\_algorithm).

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

Max rows (free cap 200).

## `maxPages` (type: `integer`):

PLP pages (offset step 24).

## `taxonomyDepth` (type: `integer`):

categoryTree recursion depth.

## `enrichDetails` (type: `boolean`):

Default on.

## `enrichLimit` (type: `integer`):

Max PDP enrich rows.

## `includeFulfillment` (type: `boolean`):

Attach fulfillment. Default on.

## `maxReviews` (type: `integer`):

For productReviews.

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

Optional HTTPS Cloud Run override.

## Actor input object example

```json
{
  "mode": "keywordSearch",
  "keyword": "paper towels",
  "zip": "52404",
  "storeId": "1771",
  "fulfillmentType": "any",
  "expandFacets": false,
  "expandVariants": true,
  "sortBy": "relevance",
  "maxResults": 24,
  "maxPages": 3,
  "taxonomyDepth": 2,
  "enrichDetails": true,
  "enrichLimit": 5,
  "includeFulfillment": true,
  "maxReviews": 20
}
```

# Actor output Schema

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

Normalized Target product / store / taxonomy rows from the default dataset.

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

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

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

Normalized input saved at run start.

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

Present when a failed run stores structured terminal error information.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "paper towels"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/target-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keyword": "paper towels" }

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/target-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "paper towels"
}' |
apify call lentic_clockss/target-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Target Product Scraper | Prices Stock Reviews",
        "description": "Scrape Target.com US products by keyword, category, brand or TCIN. Extract prices, ratings, reviews, DPCI, images, store stock & fulfillment. Export Excel/CSV/JSON. Unofficial — not affiliated with Target.",
        "version": "0.1",
        "x-build-id": "y7ZCcuQlHlzhU6PkL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~target-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-target-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lentic_clockss~target-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-target-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lentic_clockss~target-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-target-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "keywordSearch",
                            "categoryBrowse",
                            "brandBrowse",
                            "productDetail",
                            "storeLocations",
                            "taxonomyBrowse",
                            "categoryTree",
                            "aislesSearch",
                            "productReviews",
                            "productSummaries"
                        ],
                        "type": "string",
                        "description": "Scrape mode.",
                        "default": "keywordSearch"
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Search keyword."
                    },
                    "query": {
                        "title": "Query alias",
                        "type": "string",
                        "description": "Alias of keyword."
                    },
                    "categoryId": {
                        "title": "Category ID",
                        "type": "string",
                        "description": "N-id without prefix (e.g. 5xtg6)."
                    },
                    "categoryUrl": {
                        "title": "Category/Brand URL",
                        "type": "string",
                        "description": "Full /c/ or /b/ URL."
                    },
                    "categorySlug": {
                        "title": "Category slug",
                        "type": "string",
                        "description": "HTML slug hint."
                    },
                    "brandId": {
                        "title": "Brand ID",
                        "type": "string",
                        "description": "Brand N-id for brandBrowse."
                    },
                    "brandSlug": {
                        "title": "Brand slug",
                        "type": "string",
                        "description": "Brand path slug (e.g. apple)."
                    },
                    "tcin": {
                        "title": "TCIN",
                        "type": "string",
                        "description": "Product TCIN."
                    },
                    "tcins": {
                        "title": "TCINs",
                        "type": "array",
                        "description": "Batch TCINs for productSummaries.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "productUrl": {
                        "title": "Product URL",
                        "type": "string",
                        "description": "Full PDP URL."
                    },
                    "preselectTcin": {
                        "title": "Preselect child TCIN",
                        "type": "string",
                        "description": "Child variant TCIN."
                    },
                    "zip": {
                        "title": "ZIP",
                        "type": "string",
                        "description": "Ship-to ZIP (price/stock context).",
                        "default": "52404"
                    },
                    "storeId": {
                        "title": "Store ID",
                        "type": "string",
                        "description": "Primary pricing_store_id.",
                        "default": "1771"
                    },
                    "storeIds": {
                        "title": "Store IDs",
                        "type": "array",
                        "description": "Additional store_ids for Redsky geo.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fulfillmentType": {
                        "title": "Fulfillment filter",
                        "enum": [
                            "any",
                            "pickup",
                            "same_day",
                            "shipping",
                            "shop_in_store"
                        ],
                        "type": "string",
                        "description": "Maps to d_channel facet.",
                        "default": "any"
                    },
                    "facets": {
                        "title": "Facets",
                        "type": "array",
                        "description": "Raw facet URLs e.g. d_deals:sale.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "expandFacets": {
                        "title": "Expand facets",
                        "type": "boolean",
                        "description": "Slice PLP by channel/deals facets.",
                        "default": false
                    },
                    "expandVariants": {
                        "title": "Expand variants",
                        "type": "boolean",
                        "description": "Include children[] prices.",
                        "default": true
                    },
                    "sortBy": {
                        "title": "Sort",
                        "enum": [
                            "relevance",
                            "Featured",
                            "PriceLow",
                            "PriceHigh",
                            "RatingHigh",
                            "bestselling",
                            "newest"
                        ],
                        "type": "string",
                        "description": "PLP sort (mapped to sorting_algorithm).",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Max rows (free cap 200).",
                        "default": 24
                    },
                    "maxPages": {
                        "title": "Max pages",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "PLP pages (offset step 24).",
                        "default": 3
                    },
                    "taxonomyDepth": {
                        "title": "Taxonomy depth",
                        "minimum": 1,
                        "maximum": 4,
                        "type": "integer",
                        "description": "categoryTree recursion depth.",
                        "default": 2
                    },
                    "enrichDetails": {
                        "title": "Enrich with PDP",
                        "type": "boolean",
                        "description": "Default on.",
                        "default": true
                    },
                    "enrichLimit": {
                        "title": "Enrich limit",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Max PDP enrich rows.",
                        "default": 5
                    },
                    "includeFulfillment": {
                        "title": "Include fulfillment",
                        "type": "boolean",
                        "description": "Attach fulfillment. Default on.",
                        "default": true
                    },
                    "maxReviews": {
                        "title": "Max reviews",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "For productReviews.",
                        "default": 20
                    },
                    "workerBaseUrl": {
                        "title": "Worker base URL override",
                        "type": "string",
                        "description": "Optional HTTPS Cloud Run override."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
