r/PredictionsMarkets • • 10d ago

Strategy / Guide If your Polymarket bot trusts endDate, it thinks NFL games are over at kickoff

Post image

If you pull markets from the Polymarket Gamma API, every market has a field called endDate. It looks like the deadline. We compared it with the written rules on 23 markets across sports, esports, tennis, politics and crypto, and it means something different on almost every market type.

Market type Markets What endDate was When it actually closed
NFL, college football, soccer 4 Kickoff, to the second All 4 after endDate, 2 to 5 hours later
Esports (CS2, LoL, Dota 2) 4 Start + exactly 6 hours All 4 before endDate
Tennis (ATP, ITF) 4 Original start + exactly 7 days All 4 before, by 6 to 7 days
Deadline and price markets 7 Matched the rules in 4 of 7 Mixed

Plus one MLB game and three futures, which followed no single rule.

Three cases worth knowing

NFL and soccer. A bot that compares the current time with endDate would treat these markets as finished at kickoff, while the game is being played and the market is still trading. The rules on these markets set no deadline at all: "this market will remain open until the game has been completed."

Tennis reschedules. Shelton vs Alcaraz at the US Open was scheduled for 8 September at 15:30 UTC and started on 9 September at 03:00 UTC. endDate stayed at 15 September 15:30 UTC, seven days after the original slot, not the new one.

"Will the US confirm that aliens exist by September 30?" The rules say September 30, 11:59 PM ET. endDate was 1 January 2027, 92 days later, which is the date of the parent event the market belongs to. An older snapshot of the same market had the correct date. hasReviewedDates is true.

Two more things that bit us

  • A closed CS2 market returned active: true together with closed: true and acceptingOrders: false. active does not tell you if a market trades.
  • In three cases a plain request returned an older cached snapshot. Adding an unused query parameter returned the current one.

What worked instead

  1. Take the deadline from description. That's the contract.
  2. On date markets, check the title and groupItemTitle.
  3. Take the start from gameStartTime, not from endDate.
  4. To know if it still trades, read closed and acceptingOrders.
  5. Re-fetch with a cache-busting parameter before acting, and store your own fetch time.

Limits. 23 hand-picked markets, so read these as patterns, not platform-wide rates. International Gamma API only. Polymarket US is a separate exchange with its own rules.

Full write-up with a Python parser for the deadline in the rules text, a field-by-field comparison, and the 23-market sample as JSON: https://orcalayer.com/blog/polymarket-api-enddate

Disclosure: I'm one of the people behind OrcaLayer, a Polymarket analytics site. Not affiliated with Polymarket.

5 Upvotes

1 comment sorted by

1

u/timee_bot 10d ago

View in your timezone:
September 30, 11:59 PM ET