Tony Wang8 min de lecturaCómo scrapear Polymarket en 2026 (API y Python)
Polymarket reparte sus datos públicos entre Gamma, CLOB y Data — sin clave. Cuándo llamarlas directo y cuándo conviene una API estructurada.
Polymarket ya publica JSON abierto y sin credenciales para sus datos de mercado — pero está repartido entre tres servicios separados con tres esquemas de id distintos: Gamma para descubrir eventos y mercados, CLOB para libros de órdenes y precios en vivo, y una Data API para actividad de cuenta y operaciones. Así que la respuesta honesta a "cómo scrapear Polymarket" en 2026 es: para la mayoría de los casos de lectura, llama directamente a las propias APIs de Polymarket. Lo tedioso es que no existe un único cliente que junte Gamma, CLOB y Data, y que la forma cruda de la respuesta de Gamma tiene algunas aristas (campos JSON convertidos a string) que hay que rodear. Esta guía cubre las propias APIs de Polymarket, una extracción DIY en Python contra ellas, y cuándo vale la pena añadir una API estructurada encima.
¿Por qué scrapear datos de Polymarket?
- Seguimiento de la probabilidad implícita del mercado — Polymarket es el mayor mercado de predicción por volumen, así que su precio "Yes" es una lectura líquida y con dinero real de qué tan probable creen los traders que es un resultado, tanto en elecciones como en decisiones de la Fed, deportes y eventos de cultura pop.
- Arbitraje y señal cruzada entre plataformas — comparar las cuotas de Polymarket contra Kalshi, encuestas o pronósticos de expertos para ver dónde discrepan distintos mercados y multitudes.
- Investigación de libro de órdenes y liquidez — Polymarket cotiza cada resultado como su propio token de CLOB, así que la profundidad, el spread y el punto medio están disponibles por contrato para investigación cuantitativa y de microestructura de mercado.
- Datasets de sentimiento y pronóstico — alimentar probabilidades de eventos en vivo a agentes de investigación, widgets de noticias o dashboards que necesitan una lectura numérica sobre un resultado incierto.
- Investigación académica sobre pronóstico colectivo — la escala de Polymarket (miles de mercados activos, libros de órdenes profundos en los más grandes) lo convierte en un dataset habitual para estudiar qué tan bien pronostican eventos del mundo real los mercados de predicción.
¿Es legal scrapear Polymarket?
Opción 1: las APIs oficiales de Polymarket (y sus límites)
Para Polymarket en particular, lo primero a lo que recurrir son sus propias APIs — son públicas, están documentadas y devuelven los mismos datos que de otro modo scrapearías.
curl "https://gamma-api.polymarket.com/markets?limit=5&order=volume24hr&ascending=false"
Sin x-api-key, sin OAuth, sin cuenta necesaria para lecturas. Lo que cubre y dónde todavía hay fricción:
- Las lecturas están abiertas en los tres servicios. Gamma (descubrimiento de eventos/mercados), CLOB (precios, libros de órdenes, historial de operaciones) y Data (cuenta/actividad) sirven datos públicos sin clave de API — solo colocar o gestionar órdenes requiere una firma derivada de una wallet de Polygon a través del SDK oficial de TypeScript o Python de Polymarket.
- Los límites de tasa son por IP vía Cloudflare, por endpoint. Según la página oficial de límites de tasa,
/marketsde Gamma permite 300 req/10s y/events500 req/10s;/booky/pricede CLOB permiten 1.500 req/10s cada uno. Los límites regulan en lugar de rechazar de plano, sobre una ventana deslizante — pero un sondeo intenso contra muchos tokens igual puede acumular cola. - Tres servicios, tres esquemas de id, sin cliente compartido. Un evento tiene un
slug; un mercado tiene unid, su propioslugy unconditionIdon-chain; cada resultado dentro de ese mercado tiene untoken_idde CLOB aparte usado para las llamadas de precio, libro de órdenes, punto medio y spread. Tú mismo resuelves la cadena — Gamma para los ids, CLOB para los números en vivo. - No todos los campos crudos de Gamma están listos para usar. El esquema del endpoint Markets tipa
outcomesyoutcomePricescomo strings simples, no como arrays — llegan como texto codificado en JSON (p. ej.'["Yes","No"]') que tú mismo pasas porjson.loads()antes de tener una lista real.
Opción 2: DIY en Python contra Gamma y CLOB
Una extracción DIY mínima se ve así — una llamada para descubrir un mercado, una segunda para cotizar uno de sus resultados.
import json
import requests
GAMMA = "https://gamma-api.polymarket.com"
CLOB = "https://clob.polymarket.com"
markets = requests.get(f"{GAMMA}/markets", params={
"limit": 5, "order": "volume24hr", "ascending": False, "closed": "false",
}).json() # a bare array — no envelope
top = markets[0]
outcomes = json.loads(top["outcomes"]) # '["Yes","No"]' -> ["Yes", "No"]
token_ids = json.loads(top["clobTokenIds"]) # same trick for the token id list
price = requests.get(f"{CLOB}/price", params={"token_id": token_ids[0], "side": "buy"}).json()
book = requests.get(f"{CLOB}/book", params={"token_id": token_ids[0]}).json()
Esto funciona bien para un script único. Las contrapartidas aparecen cuando estás extrayendo varios mercados o plataformas:
- Tú te encargas del parseo de strings JSON.
outcomes,outcomePricesyclobTokenIdsllegan como strings codificados en la respuesta cruda de Gamma — un poco de código de pegamento pequeño pero recurrente que cada integración reescribe. - No hay autenticación ni normalización unificadas entre fuentes. Si también extraes Kalshi, Metaculus o datos de mercado tradicionales, cada uno tiene su propia URL base, esquema de id y comportamiento de límite de tasa que conciliar.
- El sondeo y el almacenamiento siguen siendo tuyos. Ni Gamma ni CLOB reintentan, deduplican ni marcan con timestamp tus extracciones — eso queda en tu código de cualquier forma.
Opción 3: una API estructurada de Polymarket
El valor añadido de una API de scraping de Polymarket no es desbloquear datos que Polymarket oculta — es un único esquema normalizado en snake_case y una sola x-api-key sobre Gamma, CLOB, Data y cualquier otra plataforma del catálogo, con outcomes y los ids de token ya parseados en arrays reales. Listar mercados activos por volumen de 24 horas:
curl "https://api.crawlora.net/api/v1/polymarket/markets?limit=5&order=volume24hr" \
-H "x-api-key: $CRAWLORA_API_KEY"
Mercados, un mercado específico por slug y eventos en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/polymarket"
markets = requests.get(f"{base}/markets", headers=h,
params={"limit": 5, "order": "volume24hr"}).json()["data"]["markets"]
market = requests.get(f"{base}/market/slug/will-the-fed-increase-interest-rates-by-25-bps-after-the-september-2026-meeting-649",
headers=h).json()["data"]
events = requests.get(f"{base}/events", headers=h,
params={"limit": 5, "order": "volume24hr"}).json()["data"]["events"]
Una respuesta de detalle de mercado es JSON normalizado que puedes guardar directamente (campos reales, de una extracción en vivo):
{
"code": 200,
"msg": "OK",
"data": {
"id": "2252245",
"slug": "will-the-fed-increase-interest-rates-by-25-bps-after-the-september-2026-meeting-649",
"condition_id": "0x876506d8b2bd7a0d3fa4fe18c024eee6e1dd81ee24c26795dadd6cfe4a7b5d0d",
"market": {
"question": "Will the Fed increase interest rates by 25 bps after the September 2026 meeting?",
"active": true,
"closed": false,
"best_bid": 0.41,
"best_ask": 0.42,
"last_trade_price": 0.41,
"liquidity": 669602.9468,
"volume": 5588803.527363,
"volume_24h": 1116366.822159,
"end_date": "2026-09-16T00:00:00Z",
"token_ids": [
"63842529068710005716169325380315470359047749786610778647370693404952498013178",
"2881957189963819690709899387312951271986076905757701114514025622922000576600"
],
"outcomes": [
{ "outcome": "Yes", "price": 0.415, "volume": 5588803.527363 },
{ "outcome": "No", "price": 0.585, "volume": 5588803.527363 }
]
},
"source_url": "https://gamma-api.polymarket.com/markets/2252245",
"fetched_at": "2026-08-11T07:26:38Z"
}
}
Precio en vivo, libro de órdenes e historial de precios para un token de resultado específico, detrás de la misma clave:
token_id = market["market"]["token_ids"][0] # the "Yes" outcome
price = requests.get(f"{base}/token/{token_id}/price", headers=h,
params={"side": "buy"}).json()["data"]
book = requests.get(f"{base}/token/{token_id}/orderbook", headers=h).json()["data"]
history = requests.get(f"{base}/token/{token_id}/price-history", headers=h,
params={"interval": "1d"}).json()["data"]
search = requests.get(f"{base}/search", headers=h,
params={"q": "bitcoin", "sort": "volume24hr"}).json()["data"]
Los mercados se direccionan por id, slug o el condition_id on-chain; los eventos por slug o id; y cada resultado individual (cada contrato Yes/No) tiene su propio token_id usado para las llamadas price, orderbook, midpoint, spread y price-history — esa capa extra de ids es de donde viene tanto la granularidad de Polymarket como su complejidad. Toda respuesta lleva source_url y fetched_at, así que guarda el timestamp con cada fila y vuelve a extraer según un calendario.
Qué puedes recolectar
- Mercados — id, slug, condition_id, question, estado active/closed, best bid/ask, último precio operado y volumen, listados o consultados individualmente.
- Eventos — la capa de agrupación por encima de los mercados: title, description, tags, cantidad de mercados, liquidez/volumen combinados y fechas de inicio/fin para un tema (p. ej. todos los mercados de precio strike bajo un mismo evento "Bitcoin above ___").
- Precios a nivel de token — precio en vivo por lado buy/sell, punto medio, spread y el libro de órdenes completo (bids y asks con tamaño) para un único resultado, más variantes por lote para cotizar varios tokens en una sola llamada.
- Historial de precios — una serie temporal de puntos de precio para un token en un intervalo elegido, desde
1mhastamax. - Etiquetas — categorización de mercados y eventos, más búsqueda de etiquetas relacionadas para explorar por tema.
- Leaderboard y actividad — clasificación de traders en el leaderboard y un feed de actividad de operaciones recientes, filtrable por tamaño.
- Búsqueda — búsqueda de texto libre entre eventos, ordenable por relevancia, volumen o liquidez.
Limitaciones
- Datos públicos de mercado, no asesoría de inversión. Un precio "Yes" es la probabilidad implícita del mercado, no una garantía del resultado — trátalo como una señal, no como un pronóstico, y revisa los propios Terms of Use de Polymarket antes de un uso comercial.
- No es una conexión de trading. Estas lecturas no colocan ni gestionan órdenes — eso requiere el propio cliente de CLOB basado en wallet de Polymarket y una cuenta financiada y conectada, una integración completamente distinta.
- Limitado por tasa según IP, incluso en lecturas. Cloudflare aplica límites de ventana deslizante por endpoint en Gamma y CLOB (ver Opción 1) — un sondeo intenso debería igualmente reducir el ritmo en lugar de asumir un throughput ilimitado.
- Los mercados se resuelven y cierran. El precio de un mercado
closed: truese congela en la resolución; trata los mercados históricos/liquidados como datos de archivo, no como un feed en vivo. - No hay garantía de tiempo real. Guarda
fetched_atcon cada extracción y trata los valores como insumos de investigación, no como sustituto del propio libro de órdenes en vivo de Polymarket si realmente estás operando.
Dónde se usa esto
- Dashboards de pronóstico y probabilidad — seguir cómo se mueven en el tiempo las cuotas implícitas de Polymarket para un evento, en cada resultado de un evento con múltiples strikes.
- Comparación de sentimiento entre plataformas — poner los precios de Polymarket junto a Kalshi, encuestas o cobertura de noticias del mismo evento.
- Investigación cuantitativa y de microestructura de mercado — libros de órdenes y historial de precios por token para investigación de spread y liquidez.
- Agentes de IA y herramientas de investigación — una lectura numérica de probabilidad sobre eventos del mundo real para razonamiento posterior.
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: ejecuta cualquier URL pública en el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba el endpoint de markets en el Playground, revisa el esquema en los docs de la API y consulta los precios. Para el otro gran mercado de eventos regulado, cómo scrapear Kalshi cubre un mercado de ticker único con un marco regulado por la CFTC en lugar de la profundidad de libro de órdenes por token de Polymarket. Para una fuente de pronósticos sin apuestas de dinero real, cómo scrapear Metaculus sigue las probabilidades de pronosticadores de la comunidad en eventos similares, y cómo scrapear CoinGecko cubre los precios de cripto que aparecen como fuentes de resolución en muchos mercados de Polymarket. Consulta el caso de uso más amplio de datos de mercados de predicción para ver cómo encajan estas fuentes entre sí. Para las bases legales de todo esto, consulta si scrapear la web es legal.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Polymarket tiene una API oficial?
Sí. Polymarket ofrece APIs públicas repartidas en varios servicios — la Gamma API (gamma-api.polymarket.com) para descubrir eventos y mercados, la CLOB API (clob.polymarket.com) para precios en vivo, libros de órdenes y operaciones, y una Data API aparte para actividad de cuenta y operaciones. Leer datos de mercado desde Gamma y CLOB no requiere cuenta ni clave de API.
¿Necesito una clave de API de Polymarket para leer datos de mercado?
No. Los propios endpoints de lectura de Gamma y CLOB de Polymarket no requieren clave ni autenticación, cualquiera puede llamarlos directamente. Una clave de API derivada de una wallet solo hace falta para colocar o gestionar órdenes a través del SDK oficial de TypeScript o Python de Polymarket. La clave de API de Crawlora es otra cosa aparte, y solo hace falta si quieres usar la API estructurada de esta guía para obtener un único esquema sobre Gamma, CLOB y otras plataformas.
¿Cómo uso la API de Polymarket en Python?
Para una extracción rápida, requests.get("https://gamma-api.polymarket.com/markets", params={"limit": 10, "order": "volume24hr"}) devuelve un array JSON plano de mercados sin necesidad de headers de autenticación. Los precios en vivo y el libro de órdenes se obtienen de otra URL base, https://clob.polymarket.com, usando el token_id por resultado que viene en la respuesta del mercado.
¿Cuál es la diferencia entre la Gamma API y la CLOB API de Polymarket?
Gamma es la capa de descubrimiento y catálogo — maneja eventos, mercados, etiquetas y metadatos. CLOB es la capa de libro de órdenes y operaciones en vivo — maneja el mejor bid/ask, el punto medio, el spread y la profundidad completa de un token de resultado específico, además de la colocación de órdenes autenticada. Casi todos los proyectos de solo lectura necesitan ambas: Gamma para encontrar el token_id de un mercado, CLOB para cotizarlo.
¿Qué API es más abierta para lecturas, la de Polymarket o la de Kalshi?
Ambas ofrecen APIs públicas de lectura sin clave, así que no hace falta registro para obtener datos de mercado. La diferencia está en la forma: Kalshi identifica todo con un único ticker, mientras que Polymarket agrega capas de ids — un slug de evento, un id/slug/condition_id de mercado y un token_id de CLOB aparte por resultado. Esto se debe a que cada contrato Yes/No se cotiza de forma independiente con su propio libro de órdenes. Kalshi es un único mercado regulado por la CFTC, mientras que Polymarket opera globalmente y separa el acceso para EE. UU. en un producto distinto, Polymarket US.
¿Los datos de mercado de Polymarket son públicos?
Sí. El listado de eventos, el detalle de mercados, los precios, los libros de órdenes y la actividad de operaciones son todos lecturas públicas a través de las propias APIs Gamma, CLOB y Data de Polymarket, sin muro de inicio de sesión entre tú y los datos. Solo colocar órdenes requiere una wallet financiada y conectada.
¿Puedo obtener datos históricos de precios de Polymarket?
Sí. El endpoint price-history de CLOB devuelve una serie temporal para un token_id en el intervalo que elijas (desde 1 minuto hasta "max"). La Data API de Polymarket, por su parte, sigue el historial de operaciones y actividad por wallet o por mercado para investigar cómo se movió un mercado.