How RulesWatch works
A prediction market pays out according to its rules, and the rules can change after you buy. Polymarket adds clarifications to the rules text. Kalshi edits its contract terms. Either venue can move an end date. Until now the only way to notice was to watch Polymarket's Discord or reread the rules of every market you hold. I built this to do the rereading.
Who it's for
People who hold positions on Polymarket or Kalshi and want to know the moment the terms change; market makers and bot builders who need edits as data; reporters and researchers who need a dated record of what a market said before an edit.
What counts as a change
- Polymarket: the question, the rules text (Polymarket calls it the description), the resolution source, the end date, and the UMA resolution status, which shows when someone has proposed or disputed an outcome.
- Kalshi: the title, the outcome name, the primary and secondary rules, the close time, the expiration time and the early-close condition.
- Clarifications. Polymarket usually adds them to the end of the rules text, often under "Additional context". If an edit only adds text, or the added text reads like a clarification, I label it one. The label is a guess from the wording; the diff underneath is exact.
- Routine changes. An outcome proposed when a market ends, and a target price filled into a short market's rules when its window opens. I keep them and leave them out of the default feed.
- Not changes: prices, volume, liquidity, spaces at the ends of lines, and a close time moved to the moment a market closes early, which its rules allow.
For every market I store a fingerprint of those fields. On each check I compare fingerprints. When one differs, I compare the old and new text word by word, once, and save the result. Where a sentence was rewritten, the old wording and the new wording show as two whole runs so you can read both as sentences.
How the numbers are computed
- Edit window: the time between my last check that still saw the old text and the check that found the new one. The edit happened inside it. Neither venue publishes when it edited.
- Prices: the Yes price at my last check with the old text, at detection, and at a follow-up read about an hour later. On Kalshi it's the midpoint of the bid and ask when both exist, else the last trade.
- Price charts: from Polymarket's CLOB price history and Kalshi's hourly candlesticks, fetched when you open a market page and kept for 15 minutes.
- One edit per event: when the same clarification lands on every market in an event, the record and the feed count it once and link the rest.
- Categories: keyword matches on the title, event and Kalshi series. Neither venue gives a category on the market record.
- Ratings: one answer per browser and per network for each edit. The split shows after you answer, once 5 people have. Answers from watchlists that follow a wallet holding the market are counted apart as holders.
How often I check
A small program on Cloudflare runs every 5 minutes. Each run gets a few milliseconds of computing time, so it checks a slice of the markets, in this order:
- Watched markets: up to 50 Polymarket and 100 Kalshi markets per run, so every watched market is checked every 5 minutes while there are fewer than that.
- Midterm markets: until Dec 1, 40 Polymarket and 60 Kalshi House, Senate and governor markets per run, in rotation.
- Kalshi: Kalshi's API lists markets whose record changed since a given time. I read up to 300 of them every 5 minutes, oldest first. On quiet hours that's all of them, so an edit shows up within about 10 minutes. On busy evenings Kalshi updates more than that (about 700 markets in 5 minutes on Oct 31); when I fall 30 minutes behind I skip to the latest updates, and the status endpoint counts the time skipped. Watched and midterm markets are read on their own rounds either way.
- Polymarket's busiest markets: Polymarket has no list of recent edits, so I reread. Three runs in four take the next 50 of the 1,000 markets with the most trading in the last day.
- Everything else on Polymarket: the fourth run takes the next 50 in a sweep of every open market. A full sweep takes weeks. For a quiet market, the watchlist is the only quick check.
What I track
When I started on Oct 31, 2026, 09:06 UTC, there were 245,634 open markets on Polymarket and 179,446 on Kalshi. Most never trade. I keep a market once it has traded in the last day, or as soon as someone watches it: 21,016 Polymarket and 20,709 Kalshi markets now. I leave out Kalshi's combination markets, whose rules are generated from the markets they combine.
Why the history can't be rebuilt
Polymarket's and Kalshi's APIs return only the current rules. Once a market is edited, the old text is gone from both. Every diff here exists because I saved the old version before the edit. Anyone can write a program like this one, but a copy started today would begin with an empty history.
Two parts come from traders. On each change, they answer whether the edit changed who should win. On each market, they link clarifications posted on Discord or X that never reached the market itself.
Limits
- The time on a change is when I noticed it, inside the stated window.
- Polymarket doesn't publish when an outcome was proposed, so the challenge-window estimate counts from when I first saw the proposal.
- If a market changes twice between checks, I see only the end result.
- If a venue's API is down, that run skips it and the change shows up later.
- A clarification posted only on Discord or X is invisible to me until someone links it.
- This is information, not financial advice. The rules on the venue's own page are the ones that count.
Data sources
Polymarket's Gamma API for markets, its Data API for wallet positions and its CLOB API for price history; Kalshi's public Trade API for markets and candlesticks. All are public and need no login. RulesWatch isn't affiliated with Polymarket, Kalshi or UMA.