Core Concepts
Polystrike keeps a per-post record of Polymarket’s post-count markets for three accounts:
| Account | Platform | API {user} | How often we read it |
|---|---|---|---|
Elon Musk (@elonmusk) | X | elon | every 1 s |
Ted Cruz (@tedcruz) | X | cruz | every 5 s |
Donald Trump (@realDonaldTrump) | Truth Social | trump | every ~15 s, falling back to about every 5 minutes when Truth Social blocks the fast reader |
We sell the record: counts, posts, bucket prices and their history. We do not sell forecasts, trading signals, position sizing or portfolio advice; those were retired on 2026-11-08.
Three counters
Section titled “Three counters”For every open market window we keep three numbers:
| Counter | Field | Meaning |
|---|---|---|
| Our count | real_counter | Qualifying posts we captured in the window, under the rules below. |
| XTracker count | polymarket_xtracker_counter | The settlement oracle’s count. XTracker updates about every 5 minutes. This is the number the market pays on. |
| Page count | polymarket_ui_counter | The number the Polymarket market page shows. Display only; it can lag or freeze. |
And the gaps between them:
| Field | Formula |
|---|---|
settlement_delta | real_counter - polymarket_xtracker_counter |
display_delta | real_counter - polymarket_ui_counter |
internal_delta | polymarket_ui_counter - polymarket_xtracker_counter |
The gaps are timing, not a trading signal. A positive settlement_delta usually means XTracker has not scraped a new post yet; after a deletion it can also mean XTracker missed a post we kept. The order book prices off the settling count, and our own research found trading the page-vs-oracle gap roughly breakeven.
Counting rules
Section titled “Counting rules”- X (Elon Musk, Ted Cruz): main-feed posts, quote posts, reposts and main-feed replies count; in-thread replies and community reposts don’t.
- Truth Social (Donald Trump): Truths, quote Truths and ReTruths count; replies don’t.
Every post in the API carries is_counted, our verdict under these rules.
Settlement
Section titled “Settlement”When the window closes, the bucket containing XTracker’s final in-window count resolves YES; every other bucket resolves NO. Our count does not settle anything; it is a second, independent record.
Deleted posts
Section titled “Deleted posts”Rule in force since 2026-08-06:
- Our count keeps every qualifying post we captured while it was live, even after it is deleted. The post is flagged
is_deletedand keepsis_counted: true. - XTracker still counted about 7 in 10 of the deletions we caught (52 measured). A post deleted before XTracker’s next scrape (about every 5 minutes) can be missed, so after a deletion our count can read 1-3 above XTracker’s.
- The Truth Social market counts deleted posts once they were captured.
- On X we re-read the full timeline every 10 minutes, and a post must be missing from two re-reads in a row before we flag it, so
is_deletedappears about 20 minutes after the deletion. The post keeps counting either way.
The recent-posts feeds (/api/v1/meta/elon/tweets, /api/v1/meta/cruz/tweets, /api/v1/meta/trump/posts) leave deleted posts out. The full record, deletions included, is /api/v1/history/{user}/tweets.
Freshness
Section titled “Freshness”| What | Figure |
|---|---|
@elonmusk: post published to counted | median 11.5 s, p90 12.6-15.1 s, p99 28.2 s, worst logged 631 s (measured on production 2026-07-29, for @elonmusk only) |
| X’s timeline index | needs about 10.8 s to list a new post, so polling harder does not move the median |
@tedcruz | polled every 5 s; the 11.5 s figure was measured for Elon only and does not apply here |
@realDonaldTrump (Truth Social) | read every ~15 s, or about every 5 minutes when the fast reader is blocked; the 11.5 s figure does not apply here |
| XTracker (not ours) | updates about every 5 minutes |
| API with a Data key or x402 | counters live ("freshness": "live") |
| Counter pages on polystrike.xyz | public and server-rendered, about 30 minutes behind; each page shows the UTC time it was generated |
These figures tell you how current a number is, nothing more. In our own paper testing, when a post pushed the count past a bucket boundary, the price had finished moving within about 2-3 seconds, before our feed had the post.
Access
Section titled “Access”| Data key | Pay per call (x402) | Public archive | |
|---|---|---|---|
| Price | $29 for 30 days, $290 for a year | $0.01 per call | open |
| Auth | X-API-Key header | x402 payment, no key | none |
| Rate limit | 10,000 requests/hour | no hourly cap | - |
| Counters | live | live | snapshots older than 30 days |
| Posts | up to 100 per page with is_counted, plus the full archive | same as Data | no |
History (/api/v1/history/*) | yes | yes | no |
| Bulk parquet | full archive | no | files older than 30 days |
WebSocket /ws | yes | no | no |
There is no free tier and no free key. A data endpoint called without a key or payment answers HTTP 402. See API Overview for how to pay.