# Products Shop Crawler (`emt_getdataforu/products-shop-crawler`) Actor

It discovers product pages from start URLs and/or sitemaps, follows internal links intelligently, and extracts structured data such as product name, description, price, currency, SKU, images, availability, and page metadata.

- **URL**: https://apify.com/emt\_getdataforu/products-shop-crawler.md
- **Developed by:** [Danis Arthur](https://apify.com/emt_getdataforu) (community)
- **Categories:** E-commerce, SEO tools, Social media
- **Stats:** 5 total users, 4 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## JavaScript Crawlee & CheerioCrawler Actor Template

<!-- This is an Apify template readme -->

This template example was built with [Crawlee](https://crawlee.dev/) to scrape data from a website using [Cheerio](https://cheerio.js.org/) wrapped into [CheerioCrawler](https://crawlee.dev/api/cheerio-crawler/class/CheerioCrawler).

### Quick Start

Once you've installed the dependencies, start the Actor:

```bash
apify run
````

Once your Actor is ready, you can push it to the Apify Console:

```bash
apify login ## first, you need to log in if you haven't already done so

apify push
```

### Project Structure

```text
.actor/
├── actor.json ## Actor config: name, version, env vars, runtime settings
├── dataset_schema.json ## Structure and representation of data produced by an Actor
├── input_schema.json ## Input validation & Console form definition
└── output_schema.json ## Specifies where an Actor stores its output
src/
└── main.js ## Actor entry point and orchestrator
storage/ ## Local storage (mirrors Cloud during development)
├── datasets/ ## Output items (JSON objects)
├── key_value_stores/ ## Files, config, INPUT
└── request_queues/ ## Pending crawl requests
Dockerfile ## Container image definition
```

For more information, see the [Actor definition](https://docs.apify.com/platform/actors/development/actor-definition) documentation.

### How it works

This code is a JavaScript script that uses Cheerio to scrape data from a website. It then stores the website titles in a dataset.

- The crawler starts with URLs provided from the input `startUrls` field defined by the input schema. Number of scraped pages is limited by `maxPagesPerCrawl` field from the input schema.
- The crawler uses `requestHandler` for each URL to extract the data from the page with the Cheerio library and to save the title and URL of each page to the dataset. It also logs out each result that is being saved.

### What's included

- **[Apify SDK](https://docs.apify.com/sdk/js)** - toolkit for building [Actors](https://apify.com/actors)
- **[Crawlee](https://crawlee.dev/)** - web scraping and browser automation library
- **[Input schema](https://docs.apify.com/platform/actors/development/input-schema)** - define and easily validate a schema for your Actor's input
- **[Dataset](https://docs.apify.com/sdk/python/docs/concepts/storages#working-with-datasets)** - store structured data where each object stored has the same attributes
- **[Cheerio](https://cheerio.js.org/)** - a fast, flexible & elegant library for parsing and manipulating HTML and XML
- **[Proxy configuration](https://docs.apify.com/platform/proxy)** - rotate IP addresses to prevent blocking

### Resources

- [Quick Start](https://docs.apify.com/platform/actors/development/quick-start) guide for building your first Actor
- [Video tutorial](https://www.youtube.com/watch?v=yTRHomGg9uQ) on building a scraper using CheerioCrawler
- [Written tutorial](https://docs.apify.com/academy/web-scraping-for-beginners/challenge) on building a scraper using CheerioCrawler
- [Web scraping with Cheerio in 2023](https://blog.apify.com/web-scraping-with-cheerio/)
- How to [scrape a dynamic page](https://blog.apify.com/what-is-a-dynamic-page/) using Cheerio
- [Integration with Zapier](https://apify.com/integrations), Make, Google Drive and others
- [Video guide on getting data using Apify API](https://www.youtube.com/watch?v=ViYYDHSBAKM)

### Creating Actors with templates

[How to create Apify Actors with web scraping code templates](https://www.youtube.com/watch?v=u-i-Korzf8w)

### Getting started

For complete information [see this article](https://docs.apify.com/platform/actors/development#build-actor-at-apify-console). In short, you will:

1. Build the Actor
2. Run the Actor

### Pull the Actor for local development

If you would like to develop locally, you can pull the existing Actor from Apify console using Apify CLI:

1. Install `apify-cli`

   **Using Homebrew**

   ```bash
   brew install apify-cli
   ```

   **Using NPM**

   ```bash
   npm -g install apify-cli
   ```

2. Pull the Actor by its unique `<ActorId>`, which is one of the following:

   - unique name of the Actor to pull (e.g. "apify/hello-world")
   - or ID of the Actor to pull (e.g. "E2jjCZBezvAZnX8Rb")

   You can find both by clicking on the Actor title at the top of the page, which will open a modal containing both Actor unique name and Actor ID.

   This command will copy the Actor into the current directory on your local machine.

   ```bash
   apify pull <ActorId>
   ```

### Documentation reference

To learn more about Apify and Actors, take a look at the following resources:

- [Apify SDK for JavaScript documentation](https://docs.apify.com/sdk/js)
- [Apify SDK for Python documentation](https://docs.apify.com/sdk/python)
- [Apify Platform documentation](https://docs.apify.com/platform)
- [Join our developer community on Discord](https://discord.com/invite/jyEM2PRvMU)

# Actor input Schema

## `startUrls` (type: `array`):

Homepage, category, or collection URLs to start from. Leave empty if you only use sitemap URLs below. Note: regular webpage URLs should usually go here, not in the sitemap field.

**Examples by platform (replace with your own URLs):**

- Shopify: `https://thewolf.vn/collections/giay-da-nam` (auto-reads `var meta` inline JSON for variants, prices, gallery)
- WooCommerce: `https://teeworld.vn/shop/` (DOM + `.woocommerce-Price-amount` fallback)
- Haravan: `https://juno.vn/collections/all` (auto-reads `window.product` / `Haravan.product`)
- Sapo / Bizweb: `https://your-sapo-shop.com/collections/all` (auto-reads `Sapo.product`)
- Magento: `https://your-magento-shop.com/` (microdata + `form#product_addtocart_form` fallback)
- Custom VN (cellphones, dienmayxanh, fptshop…): often work via JSON-LD `Product`

## `productSitemapUrls` (type: `array`):

One XML sitemap URL per line. Prefer `/sitemap.xml` (index sitemap). Nested indexes and `.gz` are supported.

**Examples by platform:**

- Shopify: `https://thewolf.vn/sitemap.xml` (index → `sitemap_products_*.xml`)
- Haravan: `https://juno.vn/sitemap.xml`
- WooCommerce (Yoast / Rank Math): `https://teeworld.vn/product-sitemap.xml` or `https://teeworld.vn/sitemap_index.xml`
- Sapo: `https://your-sapo-shop.com/sitemap.xml`
- Magento: `https://your-magento-shop.com/pub/sitemap.xml`

For Shopify, use the index sitemap instead of shortened `sitemap_products_*.xml` URLs.

## `onlyFollowProductSitemapsFromIndex` (type: `boolean`):

When enabled, index sitemap parsing follows only child sitemap URLs containing `sitemap_products`. Useful for Shopify stores to skip pages/blog/collections branches.

## `maxRequestsPerCrawl` (type: `integer`):

Total page requests allowed in a run (including discovered links). Homepages often contain many navigation links; low values can hit enqueue limits before reaching enough product pages.

## `maxConcurrency` (type: `integer`):

Number of parallel requests. Higher values are faster but increase blocking risk.

## `maxProduct` (type: `integer`):

Maximum product records pushed to dataset. `0` means unlimited. Once reached, the Actor stops storing new products, stops deep link expansion, and gracefully stops the crawler run.

## `maxUrlsFromSitemaps` (type: `integer`):

Upper bound for URLs extracted from sitemap XML to prevent excessive memory usage on very large sitemap sets.

## `followInternalLinks` (type: `boolean`):

If disabled, crawl only seed URLs (start URLs + sitemap URLs). If enabled, discover additional links within the same subdomain.

## `maxDepth` (type: `integer`):

How many link hops from seed URLs are allowed. `0` means no expansion.

## `saveNonProductPages` (type: `boolean`):

When disabled (default), only product-like pages are stored. Enable for debugging or broader page analysis.

## `excludeNavigationNoisePaths` (type: `boolean`):

Exclude common non-shopping paths (blog, support, account, contact, etc.) from discovered links to preserve request budget for product/category pages.

## `smartFollowPatterns` (type: `boolean`):

Prioritize URL patterns commonly used by e-commerce platforms (e.g. `/product/`, `/products/`, `/collections/`, `/category/`) to improve product discovery.

## `followIncludeGlobs` (type: `array`):

Advanced: add extra glob patterns for URLs that should be considered for enqueueing. Leave empty to use default smart patterns.

## `followExcludeRegex` (type: `string`):

Advanced: URLs matching this regex are skipped during enqueue (in addition to built-in excludes).

## `stripTrackingQueryParams` (type: `boolean`):

Remove common tracking query params (`utm_*`, `fbclid`, `gclid`, etc.) before enqueueing to reduce duplicate URLs.

## `dropCommonFilterQueryParams` (type: `boolean`):

Remove common faceted-navigation params (`filter_*`, `sort`, `orderby`, `view`, `variant`, etc.) before enqueueing to avoid URL explosion.

## `sitemapFetchDelayMs` (type: `integer`):

Delay between sitemap fetches. Useful for hosts sensitive to request bursts.

## `productUrlRegex` (type: `string`):

Optional regex to keep only matching page URLs from sitemap urlsets (not index files). Leave empty to disable.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://thewolf.vn/collections/giay-da-nam?gad_source=1"
    }
  ],
  "productSitemapUrls": [],
  "onlyFollowProductSitemapsFromIndex": true,
  "maxRequestsPerCrawl": 3000,
  "maxConcurrency": 10,
  "maxProduct": 0,
  "maxUrlsFromSitemaps": 100000,
  "followInternalLinks": true,
  "maxDepth": 5,
  "saveNonProductPages": false,
  "excludeNavigationNoisePaths": true,
  "smartFollowPatterns": true,
  "followIncludeGlobs": [],
  "stripTrackingQueryParams": true,
  "dropCommonFilterQueryParams": true,
  "sitemapFetchDelayMs": 0
}
```

# Actor output Schema

## `productsDataset` (type: `string`):

No description

## `datasetApi` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://thewolf.vn/collections/giay-da-nam?gad_source=1"
        }
    ],
    "productSitemapUrls": [],
    "followIncludeGlobs": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("emt_getdataforu/products-shop-crawler").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 = {
    "startUrls": [{ "url": "https://thewolf.vn/collections/giay-da-nam?gad_source=1" }],
    "productSitemapUrls": [],
    "followIncludeGlobs": [],
}

# Run the Actor and wait for it to finish
run = client.actor("emt_getdataforu/products-shop-crawler").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 '{
  "startUrls": [
    {
      "url": "https://thewolf.vn/collections/giay-da-nam?gad_source=1"
    }
  ],
  "productSitemapUrls": [],
  "followIncludeGlobs": []
}' |
apify call emt_getdataforu/products-shop-crawler --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Products Shop Crawler",
        "description": "It discovers product pages from start URLs and/or sitemaps, follows internal links intelligently, and extracts structured data such as product name, description, price, currency, SKU, images, availability, and page metadata.",
        "version": "0.0",
        "x-build-id": "97U5Ld0bLH8fGWEgT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/emt_getdataforu~products-shop-crawler/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-emt_getdataforu-products-shop-crawler",
                "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/emt_getdataforu~products-shop-crawler/runs": {
            "post": {
                "operationId": "runs-sync-emt_getdataforu-products-shop-crawler",
                "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/emt_getdataforu~products-shop-crawler/run-sync": {
            "post": {
                "operationId": "run-sync-emt_getdataforu-products-shop-crawler",
                "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": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Homepage, category, or collection URLs to start from. Leave empty if you only use sitemap URLs below. Note: regular webpage URLs should usually go here, not in the sitemap field.\n\n**Examples by platform (replace with your own URLs):**\n- Shopify: `https://thewolf.vn/collections/giay-da-nam` (auto-reads `var meta` inline JSON for variants, prices, gallery)\n- WooCommerce: `https://teeworld.vn/shop/` (DOM + `.woocommerce-Price-amount` fallback)\n- Haravan: `https://juno.vn/collections/all` (auto-reads `window.product` / `Haravan.product`)\n- Sapo / Bizweb: `https://your-sapo-shop.com/collections/all` (auto-reads `Sapo.product`)\n- Magento: `https://your-magento-shop.com/` (microdata + `form#product_addtocart_form` fallback)\n- Custom VN (cellphones, dienmayxanh, fptshop…): often work via JSON-LD `Product`",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "productSitemapUrls": {
                        "title": "Product sitemap URLs (recommended for Shopify / Haravan)",
                        "minItems": 0,
                        "type": "array",
                        "description": "One XML sitemap URL per line. Prefer `/sitemap.xml` (index sitemap). Nested indexes and `.gz` are supported.\n\n**Examples by platform:**\n- Shopify: `https://thewolf.vn/sitemap.xml` (index → `sitemap_products_*.xml`)\n- Haravan: `https://juno.vn/sitemap.xml`\n- WooCommerce (Yoast / Rank Math): `https://teeworld.vn/product-sitemap.xml` or `https://teeworld.vn/sitemap_index.xml`\n- Sapo: `https://your-sapo-shop.com/sitemap.xml`\n- Magento: `https://your-magento-shop.com/pub/sitemap.xml`\n\nFor Shopify, use the index sitemap instead of shortened `sitemap_products_*.xml` URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "onlyFollowProductSitemapsFromIndex": {
                        "title": "Only follow product sitemap branches from index",
                        "type": "boolean",
                        "description": "When enabled, index sitemap parsing follows only child sitemap URLs containing `sitemap_products`. Useful for Shopify stores to skip pages/blog/collections branches.",
                        "default": true
                    },
                    "maxRequestsPerCrawl": {
                        "title": "Max requests per crawl",
                        "minimum": 1,
                        "maximum": 99999999,
                        "type": "integer",
                        "description": "Total page requests allowed in a run (including discovered links). Homepages often contain many navigation links; low values can hit enqueue limits before reaching enough product pages.",
                        "default": 3000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Number of parallel requests. Higher values are faster but increase blocking risk.",
                        "default": 10
                    },
                    "maxProduct": {
                        "title": "Max products to store",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Maximum product records pushed to dataset. `0` means unlimited. Once reached, the Actor stops storing new products, stops deep link expansion, and gracefully stops the crawler run.",
                        "default": 0
                    },
                    "maxUrlsFromSitemaps": {
                        "title": "Max URLs collected from sitemaps",
                        "minimum": 1,
                        "maximum": 5000000,
                        "type": "integer",
                        "description": "Upper bound for URLs extracted from sitemap XML to prevent excessive memory usage on very large sitemap sets.",
                        "default": 100000
                    },
                    "followInternalLinks": {
                        "title": "Follow internal links",
                        "type": "boolean",
                        "description": "If disabled, crawl only seed URLs (start URLs + sitemap URLs). If enabled, discover additional links within the same subdomain.",
                        "default": true
                    },
                    "maxDepth": {
                        "title": "Max link depth",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many link hops from seed URLs are allowed. `0` means no expansion.",
                        "default": 5
                    },
                    "saveNonProductPages": {
                        "title": "Store non-product pages",
                        "type": "boolean",
                        "description": "When disabled (default), only product-like pages are stored. Enable for debugging or broader page analysis.",
                        "default": false
                    },
                    "excludeNavigationNoisePaths": {
                        "title": "Exclude non-commerce navigation paths",
                        "type": "boolean",
                        "description": "Exclude common non-shopping paths (blog, support, account, contact, etc.) from discovered links to preserve request budget for product/category pages.",
                        "default": true
                    },
                    "smartFollowPatterns": {
                        "title": "Use smart commerce URL patterns",
                        "type": "boolean",
                        "description": "Prioritize URL patterns commonly used by e-commerce platforms (e.g. `/product/`, `/products/`, `/collections/`, `/category/`) to improve product discovery.",
                        "default": true
                    },
                    "followIncludeGlobs": {
                        "title": "Additional include URL globs",
                        "type": "array",
                        "description": "Advanced: add extra glob patterns for URLs that should be considered for enqueueing. Leave empty to use default smart patterns.",
                        "items": {
                            "type": "object",
                            "required": [
                                "glob"
                            ],
                            "properties": {
                                "glob": {
                                    "type": "string",
                                    "title": "Glob of a web page"
                                }
                            }
                        }
                    },
                    "followExcludeRegex": {
                        "title": "Additional exclude regex for discovered links",
                        "pattern": "^[^\\n\\r]{0,500}$",
                        "type": "string",
                        "description": "Advanced: URLs matching this regex are skipped during enqueue (in addition to built-in excludes)."
                    },
                    "stripTrackingQueryParams": {
                        "title": "Strip tracking query params",
                        "type": "boolean",
                        "description": "Remove common tracking query params (`utm_*`, `fbclid`, `gclid`, etc.) before enqueueing to reduce duplicate URLs.",
                        "default": true
                    },
                    "dropCommonFilterQueryParams": {
                        "title": "Drop common filter/sort query params",
                        "type": "boolean",
                        "description": "Remove common faceted-navigation params (`filter_*`, `sort`, `orderby`, `view`, `variant`, etc.) before enqueueing to avoid URL explosion.",
                        "default": true
                    },
                    "sitemapFetchDelayMs": {
                        "title": "Delay between sitemap requests (ms)",
                        "minimum": 0,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Delay between sitemap fetches. Useful for hosts sensitive to request bursts.",
                        "default": 0
                    },
                    "productUrlRegex": {
                        "title": "Product URL regex filter",
                        "pattern": "^[^\\n\\r]{0,500}$",
                        "type": "string",
                        "description": "Optional regex to keep only matching page URLs from sitemap urlsets (not index files). Leave empty to disable."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
