I wanted a cross-venue price comparison for prediction markets and assumed the hard part would be the order books. It was not. The hard part is deciding that two markets are the same market.
One event, two records, nothing in common
The Federal Reserve decision at the 16 September 2026 meeting.
On Polymarket it is titled Fed Decision in September? at slug fed-decision-in-september-762.
On Kalshi it is titled Fed funds rate after Sep 2026 meeting? under ticker KXFED-26SEP, with the date carried in a separate sub_title field reading On Sep 16, 2026.
The titles share the word "Fed". The identifiers share nothing. And a fuzzy title match loose enough to pair those two will also pair the other four Fed meetings Kalshi has open right now: KXFED-26OCT, KXFED-26DEC, KXFED-27JAN, KXFED-27MAR.
You cannot build the ID from the question
Polymarket slugs carry a suffix you cannot predict. The Fed event ends in -762. The October shutdown event ends in -20260610162414910. One is a counter, one is a timestamp. Slugify the title and you get a 404.
Kalshi tickers decompose cleanly into series, year and month once you have the series ticker. Getting the series ticker from the question text is the part that does not work, because it is an abbreviation a person chose:
Who will the next Pope be? -> KXNEWPOPE
Will OpenAI or Anthropic IPO first? -> KXOAIANTH
Will a human land on Mars before California
starts high-speed rail? -> KXMARSVRAIL
Two reasonable guesses, both empty on 13 September 2026:
/trade-api/v2/events?series_ticker=KXGOVSHUTDOWN -> events: []
/trade-api/v2/events?series_ticker=KXPROFOOTBALLCHAMP -> events: []
There is a prefix trap too. Newer series carry KX, older ones do not. The debt ceiling series is plain DCEIL. Any regex assuming KX drops the legacy inventory without an error.
Duplicates inside one venue
Deduplicating across venues is the visible half. The other half is that a single venue lists the same question twice. Polymarket currently carries both Government shutdown by October 1? and Federal Appropriations Lapse on October 1? as separate events with unrelated slugs. A matcher that trusts one venue to be internally unique will report the gap between those two as arbitrage.
What to key on instead
In order of how much they actually discriminate:
- Resolution date or window. This is what separates five open Fed meetings from each other.
- Resolution source. Different settling body means different market, however identical the question reads.
- Outcome set and bucket edges. Two rate-bucketed markets are not comparable until the edges line up.
- Settlement rule text. The tie breaker between a shutdown market and an appropriations lapse market.
Price comes last, not first.
The endpoints
Both venues serve read-only market data with no key and no account:
https://gamma-api.polymarket.com/public-search?q=government+shutdown
https://api.elections.kalshi.com/trade-api/v2/events?status=open
https://api.elections.kalshi.com/trade-api/v2/series?category=Politics
Polymarket's public-search is the only one of these that takes free text. Kalshi has no free-text search on the public read API, so pull the series list per category once and resolve against your own copy.
I wrote the whole thing up as a reference, examples and failed guesses included: [Matching prediction markets across venues
If you want the matched output rather than the mapping, the Preduck terminal runs it live across Polymarket, Kalshi and Hyperliquid.
Collected from the public APIs on 13 September 2026. Venue naming changes without notice.
Top comments (0)