Polymarket Markets API: Prices, Volume, New Market Monitor
Pricing
from $1.00 / 1,000 result rows
Polymarket Markets API: Prices, Volume, New Market Monitor
Polymarket prediction markets from the public Gamma API: question, outcome prices (probabilities), best bid/ask, 24h volume, liquidity, start and end dates, event slug and URL. Keyword search, sorting, and a new-market monitor mode. No API key.
Pricing
from $1.00 / 1,000 result rows
Rating
0.0
(0)
Developer
Ailu Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Security
Limited permissionsShare
Polymarket Markets API: Prices, Volume, Liquidity, New Market Monitor
Returns Polymarket prediction markets as flat JSON rows from Polymarket's public Gamma API: the question, outcome labels and current prices (probabilities between 0 and 1), best bid and ask, last trade, 24-hour and lifetime volume, liquidity, start and end dates, parent event, resolution source, condition id, CLOB token ids and the market URL. List the most traded markets, search by keyword, filter by status, liquidity and end date, or run it as a monitor that returns only markets your watchlist has not seen before. No API key, no browser, no proxy.
Use cases
- Pull the top markets by 24-hour volume into a dashboard, spreadsheet or LLM prompt on a schedule.
- Search markets about a topic (
query: "bitcoin","fed","election") and read their current odds. - Monitor newly created markets:
outputMode: "new"withsortBy: "startDate"returns only markets that appeared since the last run. - Find markets resolving soon (
sortBy: "endDate"orendsBefore) for event-driven strategies. - Get
conditionIdandclobTokenIdsto connect rows to the CLOB API or on-chain data.
Input
| Field | Default | Meaning |
|---|---|---|
query | "" | Keyword. Uses Polymarket's search endpoint, then keeps markets whose question, event title or outcome label contains the keyword (case-insensitive). Empty = list mode. |
status | active | active (open for trading), closed (resolved or ended) or all. |
sortBy | volume24hr | volume24hr, volume, liquidity (highest first), endDate (soonest first) or startDate (newest first). |
minLiquidityUsd | 0 | Drop markets with less order-book liquidity (USD). Closed markets report no liquidity. |
endsBefore | "" | ISO date or date-time; keep only markets ending on or before it. |
outputMode | all | all returns every matching market. new returns only markets not seen before by the watchlist in stateStoreName. |
stateStoreName | polymarket-markets-state | Key-value store that remembers seen market ids for outputMode: "new". One per watchlist. |
maxItems | 100 | Maximum rows returned. |
Running with the defaults returns the 100 active markets with the highest 24-hour volume.
Output
| Field | Type | Meaning |
|---|---|---|
id | string | Polymarket market id. |
question, slug, eventSlug, eventTitle, groupItemTitle | string | Question text, URL slugs, parent event title, short label inside multi-outcome events. |
url | string | https://polymarket.com/event/<eventSlug>/<slug> |
outcomes, outcomePrices | string[], number[] | Outcome labels and their prices (probabilities 0-1), same order. |
yesPrice, noPrice | number | Price of the Yes / No outcome. |
bestBid, bestAsk, lastTradePrice, spread | number | Yes order-book quotes. |
priceChange24h, priceChange1w | number or null | Yes price change over 24 h / 7 d. |
volumeUsd, volume24hUsd, volume1wkUsd, liquidityUsd | number or null | Volume and liquidity in USD. |
startDate, endDate, createdAt | string | ISO 8601 UTC. |
active, closed, acceptingOrders, negRisk | boolean | Status flags. |
resolutionSource, conditionId, clobTokenIds, image | Resolution note, on-chain condition id, CLOB token ids per outcome, image URL. | |
changeType, firstSeenAt | string | Only in outputMode: "new": always new, plus when the watchlist first saw the market. |
fetchedAt | string | ISO 8601 UTC fetch time. |
Sample row (trimmed):
{"id": "562831","question": "2026 Balance of Power: R Senate, R House","slug": "2026-balance-of-power-r-senate-r-house-537","eventSlug": "balance-of-power-2026-midterms","eventTitle": "Balance of Power: 2026 Midterms","groupItemTitle": "Republicans Sweep","url": "https://polymarket.com/event/balance-of-power-2026-midterms/2026-balance-of-power-r-senate-r-house-537","outcomes": ["Yes", "No"],"outcomePrices": [0.045, 0.955],"yesPrice": 0.045,"noPrice": 0.955,"bestBid": 0.04,"bestAsk": 0.05,"lastTradePrice": 0.05,"priceChange24h": null,"volumeUsd": 22055475.37,"volume24hUsd": 5690029.61,"liquidityUsd": 2081675.25,"startDate": "2025-07-11T21:05:25.044Z","endDate": "2026-11-04T04:59:00.000Z","active": true,"closed": false,"negRisk": true,"resolutionSource": null,"conditionId": "0xc5eae79d1ffe716572353962eb926b1e3964c500a4880a7a94f58408218ee76b","clobTokenIds": ["1037041417739476789318234100309561819185620627884860347857826416031498288933", "2586929638691165404971548906882475774517468128839723852178011894955376048852"],"fetchedAt": "2026-11-03T15:00:00.000Z"}
The OUTPUT record of the run's key-value store holds a summary (mode, pages, fetched, matched, change counts, errors).
How it works and limits
- List mode reads
GET https://gamma-api.polymarket.com/markets?limit=100&offset=Nwith the status, order,liquidity_num_minandend_date_maxparameters applied server-side, one request per 100 markets, untilmaxItemsis reached or the pages run out (cap: 50 pages). - Keyword mode reads
GET /public-search?q=<query>&limit_per_type=50&page=N(up to 20 pages), flattens the markets of each matching event, and then applies the keyword to question, event title and outcome label. A market whose only match is in its long description is therefore not returned. outputMode: "new"stores the ids of all matching markets in the named key-value store and returns only ids that were absent on the previous run; the first run returns everything up tomaxItemsand still records every matching id as seen. Markets that drop out of the scanned window are forgotten, so with a volume sort a market can be reported as new again if it re-enters the window; usesortBy: "startDate"for a stable new-market feed. Nothing is reported as removed or updated.- Requests are spaced 250 ms apart and retried with back-off on 429 and 5xx responses. Prices are a snapshot from the Gamma index, usually a few seconds behind the order book. Nothing is cached between runs.
- Not covered: order-book depth, trade history, positions, comments, and user profiles.
Pricing
Pay per result: $1.00 per 1,000 rows (result event). Platform usage is billed separately by Apify. Removed/free rows are not charged.
Legal
Not affiliated with Polymarket. Uses the public Polymarket Gamma API only. Data licence/terms: https://docs.polymarket.com/ and https://polymarket.com/tos. Prices are market probabilities, not advice; prediction markets may be restricted in your jurisdiction.
FAQ
What do the prices mean? yesPrice: 0.045 means the market prices a 4.5% chance of Yes. Prices of all outcomes in a market sum to roughly 1.
How do I get only brand-new markets every hour? Set outputMode: "new", sortBy: "startDate", a dedicated stateStoreName, and schedule the Actor hourly. The first run returns the current newest markets; later runs return only markets created since.
Why does a keyword search return a market whose question does not contain the word? It matches the event title or the outcome label instead (for example the candidate name in a multi-outcome event).
Can I get closed or resolved markets? Yes, status: "closed". Their outcomePrices show the resolved outcome as 1 and 0; liquidity is null.
Is there a rate limit? Polymarket does not publish one for the Gamma API. The Actor keeps one request in flight with 250 ms spacing, which has not triggered throttling in testing.