# Limitless Prediction Markets Scraper (`automation-lab/limitless-prediction-markets-scraper`) Actor

📊 Export public Limitless markets, probabilities, volume, liquidity, outcome tokens, orderbooks, and historical prices for monitoring and research.

- **URL**: https://apify.com/automation-lab/limitless-prediction-markets-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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/docs.md):

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

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

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

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

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

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

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

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

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


# README

## Limitless Prediction Markets Scraper

Export public **Limitless prediction markets** as clean, analysis-ready data. Collect current Yes/No probabilities, volume, liquidity, outcome tokens, resolution timing, categories, orderbooks, and historical prices without a login.

Use the Actor for scheduled odds snapshots, liquidity alerts, market discovery, quantitative research, news monitoring, or an AI agent that needs structured prediction-market context.

- 🔎 Search active Limitless markets by keyword
- 🎯 Extract exact market URLs or slugs
- 📊 Add bids, asks, midpoint, spread, and last-trade data
- 📈 Add timestamped historical probability points
- ⚙️ Filter by category, volume, date, trade type, or automation type
- 📦 Export to JSON, CSV, Excel, XML, RSS, or any Apify integration

### What does Limitless Prediction Markets Scraper do?

The Actor reads the public API at `api.limitless.exchange` and saves one normalized dataset row per market.

It supports three common workflows:

1. Browse active markets.
2. Search markets by a topic such as Bitcoin, politics, sports, or macroeconomics.
3. Extract a known market from its Limitless URL or slug.

Core records include identity, title, description, market URL, status, categories, tags, dates, current prices, volume, creator, collateral, venue, and token IDs.

Optional enrichment adds the live orderbook and historical prices to each row.

### Who is it for?

#### Prediction-market traders

Track probabilities, spreads, volume, and orderbook depth before making a trading decision.

#### Quantitative researchers

Build recurring snapshots for backtests, event studies, probability calibration, and cross-venue comparisons.

#### News and research teams

Discover markets around a developing story and use price movement as a structured signal.

#### AI agent builders

Give an agent current prediction-market context through Apify API or MCP instead of parsing a changing website.

#### Data engineers

Feed normalized Limitless data into warehouses, dashboards, webhooks, Sheets, or scheduled ETL jobs.

### Why use this Actor?

- **No login required:** the supported endpoints are public.
- **HTTP-first and efficient:** no browser or proxy overhead.
- **Normalized output:** numeric prices and volumes are ready for analysis.
- **Flexible targeting:** browse, search, URL, or slug input.
- **Optional depth:** pay for enrichment requests only when your workflow needs them.
- **Scheduled monitoring:** run hourly or daily and compare datasets downstream.
- **Forward-compatible:** preserve the full source market object with `preserveRaw`.

### What Limitless data can you extract?

| Field | Meaning |
|---|---|
| `id`, `slug`, `stableSlug` | Limitless market identifiers |
| `title`, `description`, `url` | Human-readable market information |
| `status`, `expired`, `hidden` | Current market state |
| `categories`, `tags` | Limitless classification labels |
| `createdAt`, `startAt`, `expiresAt` | Market timing in ISO format |
| `yesPrice`, `noPrice`, `prices` | Current outcome probabilities/prices |
| `tradePrices` | Reported buy and sell prices |
| `volume`, `openInterest`, `liquidity` | Market activity metrics |
| `tokenIds` | Yes and No outcome token IDs |
| `creator`, `venue`, `collateral` | Market provenance and settlement metadata |
| `orderbook` | Optional bids, asks, midpoint, spread, and last trade |
| `priceHistory` | Optional timestamped probability points |
| `scrapedAt` | UTC collection timestamp |
| `raw` | Optional complete source payload |

### How to scrape active Limitless markets

1. Open the Actor input page.
2. Leave market URLs and slugs empty.
3. Enter an optional `searchQuery`.
4. Add filters if needed.
5. Set a low `maxItems` for the first run.
6. Enable orderbook or history only when required.
7. Click **Start**.
8. Open the dataset to review or export records.

A simple discovery input:

```json
{
  "searchQuery": "Bitcoin",
  "sortBy": "high_value",
  "maxItems": 25
}
````

### Input parameters

| Parameter | Type | Default | Description |
|---|---:|---:|---|
| `marketUrls` | string\[] | `[]` | Exact Limitless market URLs |
| `slugs` | string\[] | `[]` | Exact market slugs |
| `searchQuery` | string | empty | Keyword search; empty browses active markets |
| `categories` | string\[] | `[]` | Match at least one category or tag |
| `tradeType` | string | empty | `amm`, `clob`, or `group` |
| `automationType` | string | empty | `manual`, `lumy`, or `sports` |
| `sortBy` | string | `newest` | `newest`, `ending_soon`, `high_value`, `lp_rewards`, or `trending` |
| `minVolume` | number | `0` | Minimum reported volume in USDC |
| `startsAfter` | string | empty | Earliest start time, ISO date/time |
| `expiresBefore` | string | empty | Latest expiration, ISO date/time |
| `includeOrderbook` | boolean | `false` | Add bids, asks, midpoint, and spread |
| `includePriceHistory` | boolean | `false` | Add timestamped historical prices |
| `preserveRaw` | boolean | `false` | Include complete source object |
| `maxItems` | integer | `25` | Maximum saved markets |
| `maxConcurrency` | integer | `4` | Parallel enrichment requests, up to 10 |

Exact URLs or slugs take precedence over discovery filters.

### Search and filter examples

Find active crypto markets with meaningful volume:

```json
{
  "categories": ["Crypto"],
  "minVolume": 100,
  "sortBy": "high_value",
  "maxItems": 100
}
```

Find sports markets and include orderbooks:

```json
{
  "automationType": "sports",
  "includeOrderbook": true,
  "maxItems": 50,
  "maxConcurrency": 4
}
```

Extract a specific market:

```json
{
  "marketUrls": [
    "https://limitless.exchange/markets/example-market-slug"
  ],
  "includeOrderbook": true,
  "includePriceHistory": true
}
```

### Output example

```json
{
  "id": 323056,
  "slug": "btc-up-or-down-5-min-1783994700",
  "title": "BTC Up or Down - 5 Min",
  "url": "https://limitless.exchange/markets/btc-up-or-down-5-min-1783994700",
  "status": "FUNDED",
  "categories": ["Minutely", "5 min"],
  "tags": ["Lumy", "Recurring", "Minutely", "Minutes 5"],
  "yesPrice": 0.545,
  "noPrice": 0.455,
  "volume": 0,
  "tradeType": "clob",
  "collateral": {
    "symbol": "USDC",
    "decimals": 6
  },
  "scrapedAt": "2026-07-14T02:10:00.000Z"
}
```

Fields that the source does not provide are omitted rather than filled with invented values.

### Orderbook enrichment

Set `includeOrderbook` to `true` to attach:

- `bids` with price, size, and side
- `asks` with price, size, and side
- outcome `tokenId`
- `midpoint`
- `adjustedMidpoint`
- `lastTradePrice`
- `maxSpread`
- `minSize`

Orderbooks change quickly. For monitoring, schedule frequent small runs and store snapshots in your own database or named dataset.

### Historical price enrichment

Set `includePriceHistory` to `true` to attach the source-provided timeline:

```json
{
  "priceHistory": {
    "marketStatus": "FUNDED",
    "prices": [
      { "timestamp": "2026-07-14T02:05:00.000Z", "price": 0.725 }
    ]
  }
}
```

History coverage depends on the market and Limitless API. An empty history array can be valid for a new or inactive market.

### How much does it cost to scrape Limitless markets?

This Actor uses pay-per-event pricing:

- **Start:** $0.005 per run
- **Market record:** tiered by your Apify plan

| Apify plan | Price per market |
|---|---:|
| FREE | $0.000052223 |
| BRONZE | $0.000045411 |
| SILVER | $0.000035421 |
| GOLD | $0.000027247 |
| PLATINUM | $0.000018165 |
| DIAMOND | $0.000012715 |

Higher plans receive lower per-market rates. Optional enrichment does not add a separate event charge; it can increase run duration slightly because it makes extra public API requests.

Always test with a low `maxItems` before scheduling a large enriched run.

### Tips for reliable monitoring

- Use exact slugs when watching a fixed watchlist.
- Keep `maxConcurrency` between 2 and 5 for recurring enriched runs.
- Sort by high volume when looking for liquid markets.
- Save `scrapedAt` with every snapshot.
- Compare `yesPrice`, `noPrice`, `volume`, and orderbook midpoint over time.
- Enable `preserveRaw` only if you need source-specific fields.
- Treat probabilities as market prices, not guaranteed forecasts.

### Scheduling and alerts

Apify schedules can run this Actor at a regular interval.

A typical alert workflow is:

1. Run the Actor every 15 minutes.
2. Send the dataset to a webhook or automation platform.
3. Compare the newest price with the previous observation.
4. Trigger an alert when probability, spread, or volume crosses your threshold.

For long-term history, write snapshots to a database rather than overwriting the default dataset.

### Integrations

Send Limitless market data to:

- Google Sheets for a shared odds watchlist
- Slack or Discord for movement alerts
- Make or Zapier for no-code workflows
- BigQuery, Snowflake, or PostgreSQL for research
- Airbyte for scheduled data pipelines
- Webhooks for trading dashboards
- LangChain, LlamaIndex, or custom AI agents

Use Apify dataset exports when a destination expects CSV, JSON, Excel, XML, or RSS.

### API usage

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/limitless-prediction-markets-scraper').call({
  searchQuery: 'Bitcoin',
  includeOrderbook: true,
  maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/limitless-prediction-markets-scraper").call(
    run_input={"searchQuery": "Bitcoin", "maxItems": 20}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/automation-lab~limitless-prediction-markets-scraper/runs?token=$APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"Bitcoin","maxItems":20}'
```

### Use with MCP and AI agents

Connect through Apify MCP at:

```text
https://mcp.apify.com/?tools=automation-lab/limitless-prediction-markets-scraper
```

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/limitless-prediction-markets-scraper"
```

#### Claude Desktop

Add this to the Claude Desktop MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=automation-lab/limitless-prediction-markets-scraper"
    }
  }
}
```

#### Cursor

Open **Settings → MCP**, add a server named `apify`, and use the same `mcpServers` JSON and URL shown above.

#### VS Code

Open **MCP: Add Server** from the command palette, choose HTTP, and enter the Apify MCP URL shown above.

Specific example prompts:

- “Run the Limitless prediction markets scraper for Bitcoin and summarize the five highest-volume markets.”
- “Fetch the orderbooks for active crypto markets and flag wide bid-ask spreads.”
- “Collect Limitless historical prices for my watchlist and identify the largest probability moves.”

### Data quality and source behavior

The Actor reports what the public Limitless API returns at run time.

Market state can change between discovery and enrichment. If one optional endpoint is temporarily unavailable, the Actor keeps the core market record and logs the missing enrichment.

Descriptions are converted from source HTML into readable plain text. Numeric strings are normalized to numbers where safe, while `volumeRaw` preserves the original volume value.

### Errors and troubleshooting

#### Why did the run return no markets?

Your search or filters may be too narrow. Remove categories and date bounds, lower `minVolume`, or run with only `searchQuery` and `maxItems`.

#### Why is an orderbook empty?

A new, inactive, grouped, or non-CLOB market may have no visible levels. This does not mean the core record is invalid.

#### Why was a market URL skipped?

Check that the URL contains `/markets/<slug>` and that the public detail endpoint still exposes that slug. Removed or private markets cannot be extracted.

#### Why is price history short?

Limitless decides how much history the public endpoint exposes. Newly created short-duration markets naturally have few points.

### Limits and responsible use

The Actor covers public market data only. It does not:

- place or cancel trades
- access user orders or positions
- manage wallets
- bypass authentication
- promise access to private or resolved-market endpoints
- provide financial advice

Use conservative concurrency and comply with Limitless and Apify terms.

### Legality

The Actor accesses public, documented market-data endpoints without login. Laws and contractual obligations vary by location and use case. Do not use the data for unlawful activity, market manipulation, or to collect restricted personal information.

You are responsible for ensuring that your use complies with applicable law, Limitless terms, and Apify terms.

### FAQ

#### Does it require a Limitless account?

No. Supported market listing, search, detail, orderbook, and historical-price endpoints are public.

#### Does it use a proxy or browser?

No. It uses direct HTTPS requests to the public API.

#### Can it scrape expired markets?

The discovery workflow covers active markets. An exact slug may work while its public detail endpoint remains available, but the Actor does not claim authenticated resolved-market coverage.

#### Can I monitor a watchlist?

Yes. Pass several exact slugs or URLs, enable the desired enrichments, and schedule the Actor.

#### Are prices percentages?

The normalized prices are decimal values such as `0.62`, representing the source market price/probability convention. Multiply by 100 for percentage display.

#### Can I preserve every API field?

Yes. Set `preserveRaw` to `true` and inspect the nested `raw` object.

### Related prediction-market workflows

Combine this Actor with your own Apify automations for:

- cross-exchange probability comparisons
- crypto news monitoring
- scheduled webhook alerts
- market-resolution research
- orderbook spread dashboards
- AI-assisted event summaries

Browse other actors from [automation-lab](https://apify.com/automation-lab) for complementary news, finance, and monitoring data.

### Support

If a public Limitless market does not appear or an output field looks wrong, open an issue from the Actor page.

Include:

- the run URL
- the exact input
- one expected market URL or slug
- the field or behavior you expected

That evidence makes source changes and edge cases much faster to diagnose.

# Actor input Schema

## `marketUrls` (type: `array`):

Limitless market URLs to extract directly. Direct targets take precedence over discovery filters.

## `slugs` (type: `array`):

Exact Limitless market slugs to extract directly.

## `searchQuery` (type: `string`):

Search market titles and descriptions. Leave empty to browse active markets.

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

Keep markets matching at least one category or tag, case-insensitively.

## `tradeType` (type: `string`):

Optional exchange mechanism filter.

## `automationType` (type: `string`):

Optional Limitless market automation filter.

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

Ordering requested from the Limitless API.

## `minVolume` (type: `number`):

Exclude markets below this reported volume.

## `startsAfter` (type: `string`):

Keep markets starting at or after this ISO date/time.

## `expiresBefore` (type: `string`):

Keep markets expiring at or before this ISO date/time.

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

Fetch public bids, asks, midpoint, and last trade for every selected market.

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

Fetch timestamped historical probability points for every selected market.

## `preserveRaw` (type: `boolean`):

Include the full Limitless market payload under raw for custom analysis.

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

Maximum number of market records to save.

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

Maximum simultaneous orderbook/history requests. Keep conservative for scheduled monitors.

## Actor input object example

```json
{
  "marketUrls": [],
  "slugs": [],
  "searchQuery": "Bitcoin",
  "categories": [],
  "sortBy": "newest",
  "minVolume": 0,
  "includeOrderbook": false,
  "includePriceHistory": false,
  "preserveRaw": false,
  "maxItems": 10,
  "maxConcurrency": 4
}
```

# Actor output Schema

## `overview` (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 = {
    "marketUrls": [],
    "slugs": [],
    "searchQuery": "Bitcoin",
    "categories": [],
    "includeOrderbook": false,
    "includePriceHistory": false,
    "preserveRaw": false,
    "maxItems": 10,
    "maxConcurrency": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/limitless-prediction-markets-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 = {
    "marketUrls": [],
    "slugs": [],
    "searchQuery": "Bitcoin",
    "categories": [],
    "includeOrderbook": False,
    "includePriceHistory": False,
    "preserveRaw": False,
    "maxItems": 10,
    "maxConcurrency": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/limitless-prediction-markets-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 '{
  "marketUrls": [],
  "slugs": [],
  "searchQuery": "Bitcoin",
  "categories": [],
  "includeOrderbook": false,
  "includePriceHistory": false,
  "preserveRaw": false,
  "maxItems": 10,
  "maxConcurrency": 4
}' |
apify call automation-lab/limitless-prediction-markets-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Limitless Prediction Markets Scraper",
        "description": "📊 Export public Limitless markets, probabilities, volume, liquidity, outcome tokens, orderbooks, and historical prices for monitoring and research.",
        "version": "0.1",
        "x-build-id": "I9W43jxnadZ7URH3W"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~limitless-prediction-markets-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-limitless-prediction-markets-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/automation-lab~limitless-prediction-markets-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-limitless-prediction-markets-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/automation-lab~limitless-prediction-markets-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-limitless-prediction-markets-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": {
                    "marketUrls": {
                        "title": "🔗 Market URLs",
                        "type": "array",
                        "description": "Limitless market URLs to extract directly. Direct targets take precedence over discovery filters.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "slugs": {
                        "title": "Market slugs",
                        "type": "array",
                        "description": "Exact Limitless market slugs to extract directly.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Search market titles and descriptions. Leave empty to browse active markets."
                    },
                    "categories": {
                        "title": "Categories or tags",
                        "type": "array",
                        "description": "Keep markets matching at least one category or tag, case-insensitively.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "tradeType": {
                        "title": "Trade type",
                        "enum": [
                            "amm",
                            "clob",
                            "group"
                        ],
                        "type": "string",
                        "description": "Optional exchange mechanism filter."
                    },
                    "automationType": {
                        "title": "Automation type",
                        "enum": [
                            "manual",
                            "lumy",
                            "sports"
                        ],
                        "type": "string",
                        "description": "Optional Limitless market automation filter."
                    },
                    "sortBy": {
                        "title": "Sort markets",
                        "enum": [
                            "newest",
                            "ending_soon",
                            "high_value",
                            "lp_rewards",
                            "trending"
                        ],
                        "type": "string",
                        "description": "Ordering requested from the Limitless API.",
                        "default": "newest"
                    },
                    "minVolume": {
                        "title": "Minimum volume (USDC)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Exclude markets below this reported volume.",
                        "default": 0
                    },
                    "startsAfter": {
                        "title": "Starts after",
                        "type": "string",
                        "description": "Keep markets starting at or after this ISO date/time."
                    },
                    "expiresBefore": {
                        "title": "Expires before",
                        "type": "string",
                        "description": "Keep markets expiring at or before this ISO date/time."
                    },
                    "includeOrderbook": {
                        "title": "📊 Include orderbook",
                        "type": "boolean",
                        "description": "Fetch public bids, asks, midpoint, and last trade for every selected market.",
                        "default": false
                    },
                    "includePriceHistory": {
                        "title": "Include price history",
                        "type": "boolean",
                        "description": "Fetch timestamped historical probability points for every selected market.",
                        "default": false
                    },
                    "preserveRaw": {
                        "title": "Preserve raw source object",
                        "type": "boolean",
                        "description": "Include the full Limitless market payload under raw for custom analysis.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum markets",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of market records to save.",
                        "default": 25
                    },
                    "maxConcurrency": {
                        "title": "Enrichment concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum simultaneous orderbook/history requests. Keep conservative for scheduled monitors.",
                        "default": 4
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
