Skip to content

About

Recomputes a public Polymarket track record from its own rows — 34 checks, no dependencies

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

PolyScout tracker verifier

verify tracker

Recompute our published results yourself. The badge above is this script running against the live spreadsheet every morning — the log of every run is public, so a day on which our totals stopped matching our rows cannot be quietly removed.

We publish every pick to a public spreadsheet before the market resolves, and we quote a handful of headline figures from it — win rate, net profit, bank. This script downloads that spreadsheet, ignores the summary we wrote, rebuilds every one of those figures from the individual pick rows, and tells you whether the two agree.

You do not have to take our word for the totals. You only have to run this.

python3 verify_tracker.py

No installation, no dependencies, no account, no key. Standard library only, Python 3.6 or newer.

Exit code 0 — every figure matches. Exit code 1 — verified, and at least one figure does not match. Exit code 2 — could not verify at all (spreadsheet unreachable, or its layout changed). Never read this as a pass.


What it checks

The whole track, and the current-ruleset subset, separately. The tracker publishes two summaries: every pick we ever made, and the subset our current filters would still accept. Both are rebuilt from scratch.

picks count of rows
resolved rows that carry a verdict
win rate wins ÷ resolved
staked sum of the stake column over closed rows
net profit sum of the profit column over closed rows
bank now starting bank + net profit, and the percentage
money won / money lost the two halves, by count and by sum
average return per pick recomputed from each entry price, not read from the sheet

Row-level integrity, which no summary can hide:

  • every closed row carries both a stake and a result
  • no open row carries a profit or a loss
  • every loss costs exactly its stake and never less
  • the percentage printed on each win matches the entry price printed beside it
  • no market appears twice
  • every settled row states the price we entered at

Optionally, the public page (--site). The page fetches the spreadsheet when it loads, so the numbers baked into its source are only a fallback and are allowed to lag. They are not allowed to lag in our favour: a fallback that claims a better win rate or a bigger bank than the tracker supports is a failure.


How the accounting works

A naive recount will not match, so here are the rules in full. They are not in our favour, which is the point.

A settled win or loss counts everywhere. Nothing surprising.

A provisional loss counts everywhere, exactly like a settled loss. When a market has passed its deadline at an extreme price but has not paid out yet, we book the loss immediately — before the money confirms it.

A provisional win counts nowhere. Not in the money, not in the stake, not in the win rate. An unconfirmed gain is not a gain.

Those two rules are deliberately asymmetric, and the asymmetry costs us: unconfirmed losses go on the record straight away, unconfirmed wins wait.

An early exit counts as money but never as a verdict. If we sell a position before the market resolves, the profit or loss is real and enters the bank, but the pick never won or lost anything — it is excluded from the win rate in both directions. An exit at a profit does not inflate the win rate; an exit at a loss does not deflate it.

Void and still-open picks count only as picks.

The average return per pick uses the formula the tracker publishes in its own legend: a win returns (100 − price) ÷ price, a loss returns −100%. This script recomputes it from the entry price on each row rather than trusting the percentage we printed — and separately checks that the two agree.


What this does not prove

It proves the summary is an honest arithmetic summary of the rows. Nothing dropped, nothing double-counted, no rounding that happens to help us, the same accounting applied to winners and to losers.

It does not prove the rows. Whether a pick really was published before its market resolved is established by its timestamp and by the copies posted to Telegram and Discord at the moment it went out — not by this script.

If you want to audit that, the Discord feed is open to anyone: https://discord.gg/H95R3X8Cjz — channel #free-picks, every pick as it went out, in order, with the timestamp Discord itself put on it. This script is the wrong tool for that job; your eyes are the right one.

It also does not touch how picks are chosen. That is the product, and it is not published. This script reads one public spreadsheet and nothing else.

The results are simulated. Position sizes are modelled and no order has ever been filled. The tracker says so on its own face; this script inherits that limitation completely and cannot detect it.


Usage

python3 verify_tracker.py                  # download and verify
python3 verify_tracker.py --site           # also check the public page
python3 verify_tracker.py --json           # machine-readable output
python3 verify_tracker.py --save rows.csv  # keep the exact rows you verified
python3 verify_tracker.py --csv rows.csv   # re-verify a saved copy offline

--save then --csv is the honest way to argue with us: it pins the exact data you saw, so a later edit to the spreadsheet cannot change what you are pointing at.


Reading a failure

A FAIL line prints what the script computed and what the sheet claims, side by side, with the row numbers where a row-level check tripped. Two failures mean two different things:

  • a row integrity failure is a defect in the data itself
  • a summary failure means the rows and the totals disagree — the rows are the authority, and the totals are wrong

Either way, open an issue with the output. A verifier nobody checks is decoration.

Licence

MIT. Copy it, change it, run your own version — that is the entire idea.

About

Recomputes a public Polymarket track record from its own rows — 34 checks, no dependencies

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages