# Polymarket Scraper: Markets, Order Book, Trades, Price History (`scrapemint/polymarket-scraper`) Actor

Bulk scrape Polymarket prediction markets by category, keyword, tag, slug, or condition ID. One row per market with outcomes, YES and NO prices, 24h volume, liquidity, end date, plus optional order book, recent trades, and price history. No third party API key. Pay per row.

- **URL**: https://apify.com/scrapemint/polymarket-scraper.md
- **Developed by:** [Kennedy Mutisya](https://apify.com/scrapemint) (community)
- **Categories:** Developer tools, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Polymarket Scraper: Markets, Order Book, Trades, Price History

Bulk pull Polymarket prediction markets at scale. Filter by category, keyword, tag, or fetch direct slugs and condition IDs. Each row ships with the full market metadata: question, outcomes, current YES and NO prices, 24h and lifetime volume, on book liquidity, end date, plus optional CLOB order book depth, recent trades, and a YES price history time series. JSON, CSV, or Excel. No third party API key. Pay per row.

**Built for** quant teams modeling event probabilities, hedge funds piping prediction signals into trading models, sports analytics shops correlating Polymarket prices with sportsbook lines, political research desks tracking election odds, crypto traders watching token launch markets, content teams powering odds widgets, and AI builders training event probability models on a clean cross market dataset.

**Keywords this actor ranks for:** polymarket scraper, polymarket api, prediction market data, polymarket order book, polymarket trades, polymarket price history, prediction market dataset, polymarket json, polymarket csv, polymarket condition id, polymarket gamma api, polymarket clob api, election odds api, sports prediction markets, crypto prediction markets, event probabilities api.

---

### Why this actor

| Other prediction market tools | **This actor** |
|---|---|
| Require a paid API key (Kalshi, PredictIt third party feeds) | Hits the public Polymarket Gamma + CLOB APIs directly. No third party key. |
| Surface only the headline price | One row per market with full metadata: outcomes, prices, 24h volume, lifetime volume, liquidity, start and end dates, tags, image |
| No order book depth | Optional CLOB book per outcome with bids and asks at configurable depth |
| No trade feed | Optional recent trades per market with side, size, price, timestamp, and trader wallet |
| Single point in time only | Optional YES price history time series at 1h, 6h, 1d, 1w, 1m, or max windows |
| Slug input only | Search query, category, tag ID, slug, and condition ID inputs all work in the same run |
| No deduplication | Per condition ID dedupe across runs, persisted in a key value store |

---

### How it works

```mermaid
flowchart LR
    A[searchQueries<br/>categories<br/>tagIds<br/>marketSlugs<br/>conditionIds] --> B[Source resolver]
    B --> C[Gamma /markets<br/>list endpoint]
    B --> D[Gamma /markets?slug<br/>direct lookup]
    B --> E[Gamma /markets?condition_ids<br/>direct lookup]
    C --> F[Numeric filters<br/>min volume / liquidity]
    D --> F
    E --> F
    F --> G{Enrichment<br/>requested?}
    G -->|orderbook| H[CLOB /book<br/>token_id]
    G -->|trades| I[Data API /trades<br/>conditionId]
    G -->|history| J[CLOB /prices-history<br/>token_id + interval]
    G -->|none| K[Skip enrichment]
    H --> L[One row per market<br/>with optional nested data]
    I --> L
    J --> L
    K --> L
    L --> M[(JSON CSV API)]
````

The Gamma API serves the same JSON the Polymarket web client consumes. Markets ship with `conditionId`, `slug`, `outcomes`, `outcomePrices`, `volume24hr`, `liquidity`, `endDate`, and the two `clobTokenIds` (one ERC1155 token per outcome). Order book + price history live on the CLOB API keyed by token ID. Trades live on the Polymarket data API keyed by condition ID. Everything stitches into a single row.

***

### What you get per row

```mermaid
flowchart LR
    R[Market row] --> R1[Identity<br/>conditionId slug url]
    R --> R2[Question<br/>description category tags]
    R --> R3[Status<br/>active closed resolved]
    R --> R4[Outcomes<br/>YES NO prices]
    R --> R5[Volume<br/>24h + lifetime + liquidity]
    R --> R6[Dates<br/>start + end]
    R --> R7[orderbook<br/>bids and asks per outcome]
    R --> R8[recentTrades<br/>side size price trader]
    R --> R9[priceHistory<br/>time series]
```

Toggle `includeOrderbook` and every outcome ships a `bids` and `asks` array trimmed to `orderbookDepth` levels. Toggle `includeRecentTrades` and each row carries up to `recentTradesLimit` of the most recent fills with side, size, price, timestamp, and trader wallet. Toggle `includePriceHistory` and the YES outcome gets a time series at the chosen interval.

***

### Quick start

**Top 25 active markets across politics + sports right now**

```json
{
  "categories": ["politics", "sports"],
  "status": "active",
  "sortBy": "volume24hr",
  "maxItemsTotal": 25
}
```

**Search by keyword, drop thin markets**

```json
{
  "searchQueries": ["fed rate cut", "bitcoin", "election"],
  "minVolume24h": 1000,
  "minLiquidity": 5000,
  "maxItemsTotal": 50
}
```

**Direct market with full enrichment**

```json
{
  "marketSlugs": ["russia-ukraine-ceasefire-before-gta-vi-554"],
  "includeOrderbook": true,
  "orderbookDepth": 20,
  "includeRecentTrades": true,
  "recentTradesLimit": 100,
  "includePriceHistory": true,
  "priceHistoryInterval": "1w"
}
```

**Pull every active crypto market into a dataset**

```json
{
  "categories": ["crypto"],
  "status": "active",
  "sortBy": "liquidity",
  "maxItemsTotal": 500,
  "maxItemsPerSource": 500
}
```

**Build a research dataset across closed markets**

```json
{
  "categories": ["elections"],
  "status": "closed",
  "minTotalVolume": 10000,
  "includePriceHistory": true,
  "priceHistoryInterval": "max",
  "maxItemsTotal": 200
}
```

***

### Sample output row

```json
{
  "conditionId": "0x9c1a953fe92c8357f1b646ba25d983aa83e90c525992db14fb726fa895cb5763",
  "slug": "russia-ukraine-ceasefire-before-gta-vi-554",
  "question": "Russia Ukraine Ceasefire before GTA VI?",
  "category": "politics",
  "tags": ["politics", "geopolitics"],
  "endDate": "2026-07-31T12:00:00Z",
  "active": true,
  "closed": false,
  "outcomes": ["Yes", "No"],
  "outcomePrices": [0.535, 0.465],
  "volume24h": 3210.37,
  "totalVolume": 1626624.45,
  "liquidity": 65737.39,
  "url": "https://polymarket.com/event/russia-ukraine-ceasefire-before-gta-vi-554",
  "clobTokenIds": ["8501497159...", "2527312495..."],
  "orderbook": {
    "Yes": {
      "timestamp": "2026-04-30T03:09:51.054Z",
      "bids": [{"price": 0.53, "size": 1500.0}, {"price": 0.52, "size": 800.5}],
      "asks": [{"price": 0.54, "size": 2200.0}, {"price": 0.55, "size": 950.0}]
    }
  },
  "recentTrades": [
    {"side": "BUY", "outcome": "Yes", "price": 0.535, "size": 250.0, "timestamp": "2026-04-30T02:48:00Z", "trader": "0x3b5a..."}
  ],
  "priceHistory": [
    {"timestamp": "2026-04-29T00:00:03Z", "yesPrice": 0.535},
    {"timestamp": "2026-04-29T01:00:04Z", "yesPrice": 0.535}
  ],
  "scrapedAt": "2026-04-30T03:09:51.123Z"
}
```

***

### Pricing

Pay per row, no subscription. First 20 rows per run are free so you can verify the schema before scaling up. After that you pay per market row delivered to the dataset, regardless of which enrichment fields are attached.

| Run shape | Free rows | Paid rows | Cost |
|---|---|---|---|
| 20 row dry run | 20 | 0 | $0.00 |
| 100 row research pull | 20 | 80 | $0.40 |
| 500 row category sweep | 20 | 480 | $2.40 |
| 2000 row dataset build | 20 | 1980 | $9.90 |

Apify platform usage (proxy + compute) is billed separately and charged at cost.

***

### Common questions

**Where do I find a market slug?**
The Polymarket URL after `/event/` is the slug. For example `https://polymarket.com/event/will-trump-win-2024` -> slug is `will-trump-win-2024`.

**Where do I find a condition ID?**
Open the market, then check the network tab for the Gamma API response. The `conditionId` field is a 0x prefixed hex string. You can also find it via the slug input on this actor and read it off the first row.

**Why is `priceHistory` only for YES?**
The two outcome tokens sum to 1 by construction (NO price = 1 - YES price). Pulling YES alone halves the API cost.

**Is the order book live?**
Yes. The CLOB book is the live order book the Polymarket front end uses. The `timestamp` field on each book snapshot reflects when CLOB returned the data.

**How fresh is the data?**
Gamma metadata is real time. Order book is real time. Trades are within a second of execution. Price history is sampled by Polymarket within the requested window.

**Can I pull every market in one run?**
Yes, set `maxItemsTotal` to 0 (unlimited) and pick one or more categories. Expect a few minutes per thousand rows when no enrichment is enabled.

***

### Related actors

- **Polymarket Market Monitor** filters and alerts on price moves, volume surges, and end date approaches across the same markets. Use it for automated watchlists; use this scraper for bulk extraction and dataset builds.
- **Sports Odds Scraper** pulls live odds from DraftKings, Pinnacle, FanDuel, and other sportsbooks. Pair with this scraper to compare prediction market prices to sportsbook lines on the same event.
- **Sports Odds Movement Tracker** alerts on sharp line moves across books in real time.
- **Crypto Whale Token Launch Tracker** surfaces new token launches and large whale moves.
- **SEC Form 4 Insider Tracker** and **SEC 8-K Event Tracker** for equity and corporate event signals that often correlate with politics and macro Polymarket markets.

***

### Disclaimer

This actor uses the public Polymarket Gamma, CLOB, and data APIs. Polymarket may change endpoint shapes or rate limits at any time without notice; if a request shape changes the actor degrades gracefully and logs a warning rather than failing the run. Polymarket access is not available in every jurisdiction; comply with your local regulations.

# Actor input Schema

## `searchQueries` (type: `array`):

Keyword search across market questions and descriptions. Each query runs separately and results merge.

## `categories` (type: `array`):

Top level Polymarket categories. Resolves to internal tag IDs.

## `tagIds` (type: `array`):

Direct numeric tag IDs from Polymarket (advanced). Useful when a category is not in the dropdown.

## `marketSlugs` (type: `array`):

Direct market slugs to scrape, e.g. "will-trump-win-2024". Found in the Polymarket URL after /event/.

## `conditionIds` (type: `array`):

Direct hex condition IDs (0x...). Bypasses search and pulls the exact market.

## `status` (type: `string`):

Active = currently trading. Closed = no longer accepting orders. Resolved = outcome decided.

## `minVolume24h` (type: `number`):

Drop markets below this 24h trading volume.

## `minTotalVolume` (type: `number`):

Drop markets below this lifetime volume.

## `minLiquidity` (type: `number`):

Drop markets below this on book liquidity. Useful for filtering thin markets.

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

Order applied before maxItemsTotal cap.

## `includeOrderbook` (type: `boolean`):

Pull the live CLOB order book per outcome (top bids and asks with size). Adds 1 request per outcome.

## `orderbookDepth` (type: `integer`):

Max number of bid + ask levels to keep per outcome.

## `includeRecentTrades` (type: `boolean`):

Pull the most recent trades for each market from the public data API. Adds 1 request per market.

## `recentTradesLimit` (type: `integer`):

Max number of recent trades to attach per market.

## `includePriceHistory` (type: `boolean`):

Pull the YES outcome price history time series for each market. Adds 1 request per market.

## `priceHistoryInterval` (type: `string`):

Time window for price history. Polymarket samples within the window.

## `maxItemsPerSource` (type: `integer`):

Hard cap per (search query, category, tag) combination. Stops paging once reached.

## `maxItemsTotal` (type: `integer`):

Hard cap on rows pushed per run across all sources. 0 means unlimited.

## `dedupe` (type: `boolean`):

Skip condition IDs already pushed in previous runs. Persisted in a key value store. Turn off to refresh.

## `concurrency` (type: `integer`):

Number of enrichment requests fetched in parallel.

## `proxyConfiguration` (type: `object`):

Apify proxy. Polymarket public APIs work fine on datacenter or unproxied; residential is only needed if you hit aggressive rate limits.

## Actor input object example

```json
{
  "searchQueries": [],
  "categories": [],
  "tagIds": [],
  "marketSlugs": [],
  "conditionIds": [],
  "status": "active",
  "minVolume24h": 0,
  "minTotalVolume": 0,
  "minLiquidity": 0,
  "sortBy": "volume24hr",
  "includeOrderbook": false,
  "orderbookDepth": 10,
  "includeRecentTrades": false,
  "recentTradesLimit": 25,
  "includePriceHistory": false,
  "priceHistoryInterval": "1d",
  "maxItemsPerSource": 100,
  "maxItemsTotal": 200,
  "dedupe": true,
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/polymarket-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    } }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/polymarket-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call scrapemint/polymarket-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Polymarket Scraper: Markets, Order Book, Trades, Price History",
        "description": "Bulk scrape Polymarket prediction markets by category, keyword, tag, slug, or condition ID. One row per market with outcomes, YES and NO prices, 24h volume, liquidity, end date, plus optional order book, recent trades, and price history. No third party API key. Pay per row.",
        "version": "0.1",
        "x-build-id": "79xoCc42T90cxJ72h"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~polymarket-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-polymarket-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/scrapemint~polymarket-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-polymarket-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/scrapemint~polymarket-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-polymarket-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": {
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keyword search across market questions and descriptions. Each query runs separately and results merge.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Top level Polymarket categories. Resolves to internal tag IDs.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "sports",
                                "politics",
                                "crypto",
                                "tech",
                                "music",
                                "entertainment",
                                "elections",
                                "basketball",
                                "football",
                                "blockchain"
                            ],
                            "enumTitles": [
                                "Sports",
                                "Politics",
                                "Crypto",
                                "Tech",
                                "Music",
                                "Entertainment",
                                "Elections",
                                "Basketball",
                                "Football",
                                "Blockchain"
                            ]
                        },
                        "default": []
                    },
                    "tagIds": {
                        "title": "Tag IDs",
                        "type": "array",
                        "description": "Direct numeric tag IDs from Polymarket (advanced). Useful when a category is not in the dropdown.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "marketSlugs": {
                        "title": "Market slugs",
                        "type": "array",
                        "description": "Direct market slugs to scrape, e.g. \"will-trump-win-2024\". Found in the Polymarket URL after /event/.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "conditionIds": {
                        "title": "Condition IDs",
                        "type": "array",
                        "description": "Direct hex condition IDs (0x...). Bypasses search and pulls the exact market.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "status": {
                        "title": "Market status",
                        "enum": [
                            "active",
                            "closed",
                            "resolved",
                            "all"
                        ],
                        "type": "string",
                        "description": "Active = currently trading. Closed = no longer accepting orders. Resolved = outcome decided.",
                        "default": "active"
                    },
                    "minVolume24h": {
                        "title": "Minimum 24h volume (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Drop markets below this 24h trading volume.",
                        "default": 0
                    },
                    "minTotalVolume": {
                        "title": "Minimum total volume (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Drop markets below this lifetime volume.",
                        "default": 0
                    },
                    "minLiquidity": {
                        "title": "Minimum liquidity (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Drop markets below this on book liquidity. Useful for filtering thin markets.",
                        "default": 0
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "volume24hr",
                            "liquidity",
                            "endDate",
                            "startDate"
                        ],
                        "type": "string",
                        "description": "Order applied before maxItemsTotal cap.",
                        "default": "volume24hr"
                    },
                    "includeOrderbook": {
                        "title": "Include order book",
                        "type": "boolean",
                        "description": "Pull the live CLOB order book per outcome (top bids and asks with size). Adds 1 request per outcome.",
                        "default": false
                    },
                    "orderbookDepth": {
                        "title": "Order book depth",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Max number of bid + ask levels to keep per outcome.",
                        "default": 10
                    },
                    "includeRecentTrades": {
                        "title": "Include recent trades",
                        "type": "boolean",
                        "description": "Pull the most recent trades for each market from the public data API. Adds 1 request per market.",
                        "default": false
                    },
                    "recentTradesLimit": {
                        "title": "Recent trades per market",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Max number of recent trades to attach per market.",
                        "default": 25
                    },
                    "includePriceHistory": {
                        "title": "Include price history",
                        "type": "boolean",
                        "description": "Pull the YES outcome price history time series for each market. Adds 1 request per market.",
                        "default": false
                    },
                    "priceHistoryInterval": {
                        "title": "Price history interval",
                        "enum": [
                            "1h",
                            "6h",
                            "1d",
                            "1w",
                            "1m",
                            "max"
                        ],
                        "type": "string",
                        "description": "Time window for price history. Polymarket samples within the window.",
                        "default": "1d"
                    },
                    "maxItemsPerSource": {
                        "title": "Max items per source",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap per (search query, category, tag) combination. Stops paging once reached.",
                        "default": 100
                    },
                    "maxItemsTotal": {
                        "title": "Total maximum items",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on rows pushed per run across all sources. 0 means unlimited.",
                        "default": 200
                    },
                    "dedupe": {
                        "title": "Deduplicate across runs",
                        "type": "boolean",
                        "description": "Skip condition IDs already pushed in previous runs. Persisted in a key value store. Turn off to refresh.",
                        "default": true
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of enrichment requests fetched in parallel.",
                        "default": 4
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Polymarket public APIs work fine on datacenter or unproxied; residential is only needed if you hit aggressive rate limits.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
