# Polymarket Order Book Scraper API - CLOB Bids & Asks (`vonsensey/polymarket-orderbook-clob-prices-scraper-api`) Actor

The full live Polymarket order book per market: every bid and ask level with size, best bid, best ask, spread, and the total USD depth standing on each side, plus tick size and minimum order size. Books are fetched in batches. Failures are free, no run-start fee.

- **URL**: https://apify.com/vonsensey/polymarket-orderbook-clob-prices-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** Business, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 markets

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Polymarket Order Book Scraper API - CLOB Bids & Asks

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Nordic Marketplaces Suite](https://apify.com/vonsensey/blocket-se-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [LinkedIn Public Data Suite](https://apify.com/vonsensey/linkedin-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [Google Maps Suite](https://apify.com/vonsensey/google-maps-reviews-scraper-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

**The full live Polymarket order book per market: every bid and ask level with size, best bid, best ask, spread, and the total USD depth standing on each side, plus tick size and minimum order size. Books are fetched in batches. Failures are free, no run-start fee.**

**A run that finds nothing costs nothing.** There is no run-start fee, error and coverage rows are free, and on a schedule a market is billed only when it has actually moved.

### ⭐ Why this one

Full CLOB depth with USD standing on each side, batched.

Every market returned is one that **actually trades** — placeholder markets carrying no volume and no prices never reach your dataset, and the number dropped is reported to you in a free coverage row.

Prices are **probabilities from 0 to 1** on both venues, so rows are directly comparable. No account, no API key and no proxy is needed for anything here.

### 🚀 Run it

Click **Start** — the defaults below are already filled in.

```json
{
  "platforms": [
    "polymarket"
  ],
  "includeOrderBook": true,
  "maxItems": 50
}
```

Every option is exposed directly on this Actor.

### 💵 Pricing

| Event | GOLD per 1,000 |
|---|---|
| **market** | **$5.00** |
| order book | $12.00 |
| history | $12.00 |
| arbitrage | $12.00 |

Enrichments are **never billed when the data could not be fetched**. Error rows, coverage rows, the unchanged rows themselves and the run summary are always free, and there is no run-start fee. The page fetch behind an unchanged market is billed once as a market checked ($0.0005), a tenth of the market row.

### ❓ FAQ

#### Do I need an account on either venue?

No. No email, no password, no API key, no wallet.

#### Do I need a proxy?

No. Everything is handled for you and there is nothing to buy on top.

#### Are prices in cents or dollars?

Neither — probabilities from 0 to 1, identically on both venues.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly` to true. Only markets whose price or status moved are billed; everything else comes back as a free row.

#### Can I cap what one run costs?

Yes — set `maxCostUsd`. The run stops cleanly and says why in the free summary row.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/polymarket-orderbook-clob-prices-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/polymarket-orderbook-clob-prices-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/polymarket-orderbook-clob-prices-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/polymarket-orderbook-clob-prices-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~polymarket-orderbook-clob-prices-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/polymarket-orderbook-clob-prices-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/polymarket-orderbook-clob-prices-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/polymarket-orderbook-clob-prices-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Get the Polymarket order book with USD depth](https://apify.com/vonsensey/polymarket-orderbook-clob-prices-scraper-api/examples/polymarket-order-book-with-depth), a ready-made example you can start as-is or copy.

### Use cases

- **Size a position properly.** The full Polymarket order book per market: every bid and ask level with size, best bid and ask, the spread, and the total USD depth standing on each side.
- **Watch depth on a schedule.** Poll a set of markets and pay only for the books that actually moved — everything unchanged comes back as a free row.
- **Build a liquidity dataset.** Tick size, minimum order size and standing depth per side, in one schema, for backtesting or research.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per market delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

### FAQ

#### Do I need a Polymarket account?

No. No email, no password, no API key, no wallet.

#### Do I need a proxy?

No. Everything is handled for you and there is nothing to buy on top.

#### Are prices in cents or dollars?

Neither — probabilities from 0 to 1.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly`. Only markets whose watched fields moved are billed; the rest are free rows.

#### Can I cap what one run costs?

Yes — set `maxCostUsd`. The run stops cleanly and says why in the free summary row.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `platforms` (type: `array`):

Which prediction markets to read. Leave both on to get one normalised schema across the two, which is what makes the rows directly comparable.

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

Markets returns one row per market. Arbitrage returns one row per cross-venue price gap — the same question priced differently on the two venues, with the edge worked out. Arbitrage always reads both venues.

## `search` (type: `string`):

Optional. Narrow to markets whose slug matches this text, e.g. `election`, `bitcoin`, `fed-rate`.

## `eventSlugs` (type: `array`):

Optional. Restrict Polymarket to specific events, e.g. `kraken-ipo-in-2025`. Take the slug from the event URL.

## `seriesTicker` (type: `string`):

Optional. Restrict Kalshi to one or more series — comma separated. e.g. `KXHIGHNY` for New York daily highs, or `KXHIGHNY,KXHIGHCHI,KXHIGHMIA` for several cities at once. Leave empty for everything.

## `tickers` (type: `array`):

Optional. Restrict to specific Kalshi markets by full ticker, e.g. `KXOAIANTH-40-ANTH`.

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

Open returns markets currently trading. Closed and settled return resolved markets with their outcome.

## `maxItems` (type: `integer`):

Hard ceiling on billable rows. The default of 100 keeps a first run well under a cent.

## `includeOrderBook` (type: `boolean`):

Adds every bid and ask level with size, best bid, best ask, spread and total USD depth per side. Billed as its own event, and never billed when the book could not be fetched.

## `includeHistory` (type: `boolean`):

Adds OHLC candles with volume and open interest. Billed as its own event, and never billed when no history could be fetched.

## `historyDays` (type: `integer`):

How far back price history goes, up to a year.

## `historyIntervalMinutes` (type: `string`):

Minutes per candle.

## `monitorChangesOnly` (type: `boolean`):

For schedules. The run remembers what it saw last time and bills only markets whose watched fields have changed since; unchanged markets come back as free rows. This is what makes a 5-minute cron affordable.

## `watchFields` (type: `array`):

Which fields make a market billable again on a re-run. Price and status by default. Adding volume makes any trade at all count as a change.

## `minEdge` (type: `integer`):

Arbitrage only. Smallest price gap worth reporting, in probability points × 100 — 2 means a 0.02 gap.

## `minSimilarity` (type: `integer`):

Arbitrage only. How closely two questions must match to be treated as the same market, 0–100. Higher is stricter. Pairs whose numbers disagree are always refused, whatever this is set to.

## `minLiquidity` (type: `integer`):

Arbitrage only. Drop pairs where either venue has less than this much liquidity. Leave empty to keep all pairs.

## `maxCostUsd` (type: `number`):

A hard ceiling on what one run may spend, in USD. The run stops cleanly at the limit and says so in the free summary row. Accepts cents (0.25 is valid). Leave empty for no ceiling.

## Actor input object example

```json
{
  "platforms": [
    "polymarket"
  ],
  "mode": "markets",
  "search": "bitcoin",
  "eventSlugs": [],
  "seriesTicker": "KXHIGHNY,KXHIGHCHI",
  "tickers": [],
  "status": "open",
  "maxItems": 50,
  "includeOrderBook": true,
  "includeHistory": false,
  "historyDays": 7,
  "historyIntervalMinutes": "60",
  "monitorChangesOnly": false,
  "watchFields": [
    "price",
    "status"
  ],
  "minEdge": 2,
  "minSimilarity": 50
}
```

# Actor output Schema

## `dataset` (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 = {
    "platforms": [
        "polymarket"
    ],
    "maxItems": 50,
    "includeOrderBook": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/polymarket-orderbook-clob-prices-scraper-api").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 = {
    "platforms": ["polymarket"],
    "maxItems": 50,
    "includeOrderBook": True,
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/polymarket-orderbook-clob-prices-scraper-api").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "platforms": [
    "polymarket"
  ],
  "maxItems": 50,
  "includeOrderBook": true
}' |
apify call vonsensey/polymarket-orderbook-clob-prices-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/polymarket-orderbook-clob-prices-scraper-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/QFpA0VTV5cSoLMSpL/builds/gXGPAjm77FeS4h4br/openapi.json
