Tony Wang8 Min. LesezeitPolymarket scrapen 2026 (API & Python)
Polymarket teilt öffentliche Lesezugriffe auf Gamma, CLOB & Data auf — kein Key nötig. Wann direkt aufrufen, wann eine API leichter ist.
Polymarket veröffentlicht seine Marktdaten bereits als offenes, keyloses JSON — allerdings verteilt auf drei separate Services mit drei unterschiedlichen ID-Schemata: Gamma zum Auffinden von Events und Märkten, CLOB für Live-Orderbücher und -Preise, und eine Data API für Konto- und Trade-Aktivität. Die ehrliche Antwort auf „Wie scrape ich Polymarket" im Jahr 2026 lautet also: Für die meisten Lesezugriffe rufst du Polymarkets eigene APIs direkt auf. Mühsam wird es, weil es keinen einzelnen Client gibt, der Gamma, CLOB und Data zusammenführt, und weil Gammas rohe Antwortform ein paar raue Kanten hat (stringifizierte JSON-Felder), um die man sich selbst kümmern muss. Dieser Guide behandelt Polymarkets eigene APIs, einen DIY-Pull dagegen in Python und wann sich eine strukturierte API zusätzlich lohnt.
Warum Polymarket-Daten scrapen?
- Tracking marktimplizierter Wahrscheinlichkeiten — Polymarket ist der größte Prognosemarkt nach Volumen, sein „Yes"-Preis ist also ein liquider, echtgeldbasierter Indikator dafür, wie wahrscheinlich Trader ein Ergebnis einschätzen — bei Wahlen, Fed-Entscheidungen, Sport und Popkultur-Events gleichermaßen.
- Arbitrage und plattformübergreifendes Signal — Polymarkets Quoten mit Kalshi, Umfragen oder Expertenprognosen vergleichen, um zu sehen, wo verschiedene Märkte und Crowds uneinig sind.
- Orderbuch- und Liquiditäts-Recherche — Polymarket bepreist jedes Outcome als eigenen CLOB-Token, sodass Tiefe, Spread und Mittelkurs pro Kontrakt verfügbar sind — für Quant- und Marktmikrostruktur-Recherche.
- Sentiment- und Prognose-Datensätze — live Event-Wahrscheinlichkeiten in Research-Agenten, News-Widgets oder Dashboards einspeisen, die einen numerischen Wert für ein ungewisses Ergebnis brauchen.
- Akademische Forschung zu Crowd-Prognosen — Polymarkets Größe (tausende aktive Märkte, tiefe Orderbücher bei den größten) macht es zu einem gängigen Datensatz für Studien darüber, wie gut Prognosemärkte reale Ereignisse vorhersagen.
Ist es legal, Polymarket zu scrapen?
Option 1: Polymarkets eigene offizielle APIs (und ihre Grenzen)
Bei Polymarket ist die erste Anlaufstelle die eigene API — sie ist öffentlich, dokumentiert und liefert dieselben Daten, die du sonst scrapen müsstest:
curl "https://gamma-api.polymarket.com/markets?limit=5&order=volume24hr&ascending=false"
Kein x-api-key, kein OAuth, kein Konto nötig für Lesezugriffe. Was sie abdeckt und wo trotzdem noch Reibung entsteht:
- Lesezugriffe sind über alle drei Services hinweg offen. Gamma (Events-/Markt-Discovery), CLOB (Preise, Orderbücher, Trade-Historie) und Data (Konto/Aktivität) liefern allesamt öffentliche Daten ohne API-Key — nur das Platzieren oder Verwalten von Orders braucht eine von einer Polygon-Wallet abgeleitete Signatur über Polymarkets offizielles TypeScript- oder Python-SDK.
- Rate Limits sind Cloudflare-IP-basiert, pro Endpunkt. Laut der offiziellen Rate-Limits-Seite erlaubt Gammas
/markets300 Requests/10s und/events500 Requests/10s; CLOBs/bookund/priceerlauben jeweils 1.500 Requests/10s. Die Limits drosseln statt hart abzulehnen, auf einem Sliding Window — aber ein intensiver Poller über viele Tokens hinweg kann trotzdem ins Stocken geraten. - Drei Services, drei ID-Schemata, kein gemeinsamer Client. Ein Event hat einen
slug; ein Markt hat eineid, einen eigenenslugund eine On-Chain-conditionId; jedes Outcome innerhalb dieses Markts hat eine separate CLOB-token_id, die für Preis-, Orderbuch-, Mittelkurs- und Spread-Aufrufe genutzt wird. Diese Kette musst du selbst auflösen — Gamma für IDs, CLOB für Live-Zahlen. - Gammas rohe Felder sind nicht alle direkt nutzbar. Das Schema des Markets-Endpunkts typisiert
outcomesundoutcomePricesals reine Strings, nicht als Arrays — sie kommen als JSON-kodierter Text zurück (z. B.'["Yes","No"]'), den du selbst perjson.loads()in eine echte Liste umwandeln musst.
Option 2: DIY in Python gegen Gamma und CLOB
Ein minimaler DIY-Pull sieht so aus — ein Aufruf, um einen Markt zu finden, ein zweiter, um eines seiner Outcomes zu bepreisen:
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() # ein rohes Array — kein Envelope
top = markets[0]
outcomes = json.loads(top["outcomes"]) # '["Yes","No"]' -> ["Yes", "No"]
token_ids = json.loads(top["clobTokenIds"]) # derselbe Trick für die Token-ID-Liste
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()
Das funktioniert einwandfrei für ein einzelnes Skript. Die Kompromisse zeigen sich, sobald du mehrere Märkte oder Plattformen ziehst:
- Das Parsen der JSON-Strings ist dein Job.
outcomes,outcomePricesundclobTokenIdskommen in der rohen Gamma-Antwort allesamt als kodierte Strings an — ein kleines, aber wiederkehrendes Stück Glue-Code, das jede Integration neu schreibt. - Keine einheitliche Auth oder Normalisierung über Quellen hinweg. Wenn du zusätzlich Kalshi, Metaculus oder klassische Marktdaten ziehst, hat jede Quelle ihre eigene Base-URL, ihr eigenes ID-Schema und eigenes Rate-Limit-Verhalten, die du zusammenführen musst.
- Polling und Speicherung bleiben deine Aufgabe. Weder Gamma noch CLOB wiederholen, deduplizieren oder stempeln deine Pulls für dich — das liegt so oder so bei deinem Code.
Option 3: Eine strukturierte Polymarket-API
Der Mehrwert einer Polymarket scraping API liegt nicht darin, Daten freizuschalten, die Polymarket versteckt — er liegt in einem normalisierten Snake-Case-Schema und einem einzigen x-api-key über Gamma, CLOB, Data und jede andere Plattform im Katalog hinweg, wobei outcomes und Token-IDs bereits in echte Arrays geparst sind. Aktive Märkte nach 24-Stunden-Volumen auflisten:
curl "https://api.crawlora.net/api/v1/polymarket/markets?limit=5&order=volume24hr" \
-H "x-api-key: $CRAWLORA_API_KEY"
Märkte, ein bestimmter Markt per Slug, und Events in 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"]
Eine Marktdetail-Antwort ist normalisiertes JSON, das du direkt speichern kannst (echte Felder, aus einem Live-Pull):
{
"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"
}
}
Live-Preis, Orderbuch und Preishistorie für ein bestimmtes Outcome-Token hinter demselben Key:
token_id = market["market"]["token_ids"][0] # das "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"]
Märkte werden über id, slug oder die On-Chain-condition_id angesprochen; Events über slug oder id; und jedes einzelne Outcome (jeder Yes/No-Kontrakt) hat seine eigene token_id, die für price, orderbook, midpoint, spread und price-history-Aufrufe verwendet wird — diese zusätzliche ID-Ebene ist die Quelle sowohl für Polymarkets Granularität als auch für seine Komplexität. Jede Antwort trägt source_url und fetched_at, speicher den Zeitstempel also bei jeder Zeile mit und zieh die Daten nach Zeitplan erneut.
Was du sammeln kannst
- Märkte — id, slug, condition_id, question, active/closed-Status, best bid/ask, last trade price, liquidity und volume, gelistet oder einzeln nachgeschlagen.
- Events — die Gruppierungsebene über den Märkten: title, description, tags, Marktanzahl, kombinierte liquidity/volume und Start-/Enddatum für ein Thema (z. B. alle Strike-Preis-Märkte unter einem „Bitcoin above ___"-Event).
- Preisdaten auf Token-Ebene — Live-Preis nach Buy-/Sell-Seite, Mittelkurs, Spread und das vollständige Orderbuch (Bids und Asks mit Größe) für ein einzelnes Outcome, plus Batch-Varianten, um mehrere Tokens in einem Aufruf zu bepreisen.
- Preishistorie — eine Zeitreihe von Preispunkten für ein Token in einem gewählten Intervall, von
1mbismax. - Tags — Markt- und Event-Kategorisierung, plus Lookup verwandter Tags zum Durchstöbern nach Thema.
- Leaderboard und Aktivität — Trader-Leaderboard-Rankings und ein Feed aktueller Trade-Aktivität, filterbar nach Größe.
- Suche — Freitextsuche über Events, sortierbar nach Relevanz, Volumen oder Liquidität.
Grenzen
- Öffentliche Marktdaten, keine Anlageberatung. Ein „Yes"-Preis ist die vom Markt implizierte Wahrscheinlichkeit, keine Garantie für das Ergebnis — behandle ihn als Signal, nicht als Prognose, und sieh dir vor kommerzieller Nutzung Polymarkets eigene Nutzungsbedingungen an.
- Keine Trading-Anbindung. Diese Lesezugriffe platzieren oder verwalten keine Orders — dafür braucht es Polymarkets eigenen wallet-basierten CLOB-Client und ein finanziertes, verbundenes Konto, eine völlig andere Integration.
- Rate-limitiert per IP, selbst bei Lesezugriffen. Cloudflare setzt bei Gamma und CLOB pro-Endpunkt Sliding-Window-Limits durch (siehe Option 1) — ein intensiver Poller sollte trotzdem zurückschalten, statt unbegrenzten Durchsatz anzunehmen.
- Märkte lösen sich auf und schließen. Der Preis eines Markts mit
closed: truefriert bei der Auflösung ein; behandle abgeschlossene/aufgelöste Märkte als Archivdaten, nicht als Live-Feed. - Nicht garantiert in Echtzeit. Speicher
fetched_atbei jedem Pull und behandle die Werte als Recherche-Input, nicht als Ersatz für Polymarkets eigenes Live-Orderbuch, wenn du tatsächlich tradest.
Wo das eingesetzt wird
- Prognose- und Wahrscheinlichkeits-Dashboards — verfolgen, wie sich Polymarkets implizierte Quoten für ein Ereignis über die Zeit bewegen, über jedes Outcome eines Multi-Strike-Events hinweg.
- Plattformübergreifender Stimmungsvergleich — Polymarket-Preise neben Kalshi, Umfragen oder Berichterstattung zum selben Ereignis stellen.
- Quant- und Marktmikrostruktur-Recherche — Orderbücher und Preishistorie pro Token für Spread- und Liquiditäts-Recherche.
- KI-Agenten und Research-Tools — ein numerischer Wahrscheinlichkeitswert für reale Ereignisse als Input für nachgelagerte Auswertungen.
Quellen
Loslegen mit dem Sammeln
Probier es erst kostenlos aus: Jag eine beliebige öffentliche URL durch den Free Web Scraper, oder prüf mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste den Markets-Endpunkt im Playground, prüf das Schema in den API-Docs und schau dir das Pricing an. Für die andere große, regulierte Event-Börse deckt wie man Kalshi scrapt einen Markt mit einem einzigen Ticker in einem CFTC-regulierten Rahmen ab — im Gegensatz zu Polymarkets Orderbuch-Tiefe pro Token. Für eine Prognosequelle ohne echtes Geld auf dem Spiel verfolgt wie man Metaculus scrapt Wahrscheinlichkeiten von Community-Prognostikern bei ähnlichen Events, und wie man CoinGecko scrapt deckt die Krypto-Preise ab, die bei vielen Polymarket-Märkten als Auflösungsquelle auftauchen. Für den größeren Zusammenhang siehe den Use Case Prognosemarkt-Daten. Für die rechtlichen Grundlagen dazu siehe ist Web Scraping legal.
Teil unserer Scraping-Guide-Serie — jede Plattform, die wir abdecken, in einem Index.
Häufig gestellte Fragen
Hat Polymarket eine offizielle API?
Ja. Polymarket teilt seine öffentliche API-Oberfläche auf mehrere Services auf — die Gamma API (gamma-api.polymarket.com) zum Auffinden von Events und Märkten, die CLOB API (clob.polymarket.com) für Live-Preise, Orderbücher und Trading, und eine separate Data API für Konto- und Trade-Aktivität. Das Lesen von Marktdaten aus Gamma und CLOB braucht kein Konto und keinen API-Key.
Brauche ich einen Polymarket-API-Key, um Marktdaten zu lesen?
Nein. Polymarkets eigene Gamma- und CLOB-Lese-Endpunkte sind keylos und unauthentifiziert — jeder kann sie direkt aufrufen. Ein von einer Wallet abgeleiteter API-Key, über Polymarkets offizielles TypeScript- oder Python-SDK, wird nur zum Platzieren oder Verwalten von Orders benötigt. Ein Crawlora-API-Key ist wiederum etwas anderes und nur nötig, wenn du die strukturierte API in diesem Guide nutzt, um ein einheitliches Schema über Gamma, CLOB und andere Plattformen zu bekommen.
Wie nutze ich die Polymarket-API in Python?
Für einen schnellen Pull liefert requests.get(«https://gamma-api.polymarket.com/markets», params={«limit»: 10, «order»: «volume24hr»}) ein rohes JSON-Array von Märkten, ohne Auth-Header. Live-Preise und Orderbücher kommen von einer zweiten Base-URL, https://clob.polymarket.com, adressiert über eine token_id pro Outcome, die du aus der Markt-Antwort erhältst.
Was ist der Unterschied zwischen Polymarkets Gamma API und CLOB API?
Gamma ist die Discovery- und Katalog-Ebene — Events, Märkte, Tags und Metadaten. CLOB ist die Live-Orderbuch- und Trading-Ebene — bester Bid und Ask, Mittelkurs, Spread und volle Tiefe für ein bestimmtes Outcome-Token, plus authentifizierte Order-Platzierung. Die meisten reinen Lese-Projekte brauchen beide: Gamma, um die token_id eines Markts zu finden, CLOB, um ihn zu bepreisen.
Polymarket vs. Kalshi API — welche ist für Lesezugriffe offener?
Beide veröffentlichen keylose öffentliche Lese-APIs, sodass für keine eine Anmeldung nötig ist, um Marktdaten zu ziehen. Die Formen unterscheiden sich: Kalshi adressiert alles über einen Ticker, während Polymarket IDs schichtet — ein Event-Slug, eine Markt-ID/-Slug/-condition_id, und dann eine separate CLOB-token_id pro Outcome — weil es jeden Yes/No-Kontrakt unabhängig bis hin zu seinem eigenen Orderbuch bepreist. Kalshi ist eine einzelne, von der CFTC regulierte Börse; Polymarket läuft global, mit dem US-Zugang in einem separaten Polymarket-US-Produkt.
Sind Polymarket-Marktdaten öffentlich?
Ja. Event-Listen, Marktdetails, Preise, Orderbücher und Trade-Aktivität sind allesamt öffentliche Lesezugriffe über Polymarkets eigene Gamma-, CLOB- und Data-APIs, ohne Login-Sperre zwischen dir und den Daten. Das Platzieren von Trades ist der Teil, der eine verbundene, finanzierte Wallet braucht.
Kann ich historische Polymarket-Preisdaten bekommen?
Ja. Der price-history-Endpunkt der CLOB liefert eine Zeitreihe für eine token_id in einem gewählten Intervall, von 1 Minute bis «max», und Polymarkets Data API trackt separat Trade- und Aktivitätshistorie pro Wallet oder Markt für Recherche dazu, wie sich ein Markt bewegt hat.