Check any pick
in your own browser.
Every pick is published as a SHA-256 hash before kick-off, and the exact string behind that hash is released once the day has settled. That turns the record into something you check rather than something you believe. This page explains how it works, walks through a real day from the archive, and hashes it in your own browser — no answer here comes from our server.
A hash before,
the string after.
We publish a hash, and nothing else
The date, the fixture, the market, the selection, the line, the price, the minimum price, the kick-off time and a random salt are joined with a | and run through SHA-256. What goes out before the game is the 64-character digest. It reads the same whichever side we took, so it tells you nothing about the pick — which is the point, because you have not paid for it yet.
We publish the string it was made from
Once the day is graded the whole string goes out, salt included. Now the selection can be read — and it is far too late for it to have been chosen. Hash the string yourself and compare it against the digest published hours earlier.
Nothing in the middle can be changed
SHA-256 runs one way. Nobody knows how to take a published digest and find a second string that produces it, so once the hash is out the pick behind it is fixed. If we edited the selection afterwards, the string we released would stop matching the hash we published — and the thing that notices is your browser, not our server.
Why the random salt
is not decoration.
Without it the hash would be worth nothing, and this is the part most commitment claims quietly get wrong. The string being hashed is short and predictable: a date, two team names, a market, a price. Before kick-off there is a handful of games on the board and two sides in each one, so anybody could hash every possibility and read our selection straight off the published digest. On a laptop that is seconds of work.
The salt is 64 random characters generated with the pick and held back until the day settles. It makes the list of strings to try unenumerable, so the digest gives nothing away while the game is being played and still pins the selection exactly. The salt is what makes the commitment binding rather than a gesture: not guessable forwards, and not changeable once published.
What we would have to do
to fake this.
Swap the string behind the hash
Closed. Finding a second string with the same SHA-256 digest is not something anybody knows how to do. Edit the selection after the fact and the published hash stops matching — and the checker below says so in plain words, on our own page, about our own record.
Show you only the days that worked
Closed by the archive rather than by the arithmetic. Every day we published is there, losses included, each with its own address and its own hash — and the box below takes any string and any hash you care to type. We do not get to choose which rows can be checked.
Publish the hash later than we say we did
It was open, and it is not any more. A timestamp authority signs the commitment hash beside a time, and the signature checks against their certificate rather than against our own server's word. What that leaves is a different gap: a signed hash proves that hash existed, not that we published every day we ran, and the completeness of the archive still rests on us.
What would close it, in full → The exact string,
field by field.
The fixture and the final result
Competition, teams, kick-off, the exact market, and the score the row settles on. None of it belongs to us — it is on the league's own site and at your own bookmaker. If a row says won and the score says otherwise, it shows without leaving the page.
Example: 2026-08-29|Texas Rangers — Milwaukee Brewers|spread|Texas Rangers +1.5|1.50|-165.00|-165.00|2026-08-29T23:15:00+00:00|<salt>Watch a hash being published
The commit hash goes out in the Telegram channel before kick-off, as text, while the selection is still sealed. The payload follows once the day settles — so both halves of the check arrive in the same place, in the order that makes the check mean something.
@betsbeats on Telegram One real day,
end to end.
Not an invented row. This is the most recent day in the archive whose salt has been released, carrying the same figures as the day's own page.
printf '%s' '2026-11-05|UTSA Roadrunners — Florida Atlantic Owls|moneyline|UTSA Roadrunners||-230.00|-230.00|2026-11-06T00:30:00+00:00|WMxF3veWpR6D34JsFMKSYX5t26VbILukcg8SpBrkjyRLK8L7CtWlWw5qfQE3TWpt' | shasum -a 256
Run that line in a terminal and the output is the hash above, character for character. If it were not, we would have edited the record after publishing it — and you would be looking at the proof.
curl -sO https://api.betsbeats.com/api/v1/public/timestamps/8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade.tsr curl -sO https://freetsa.org/files/cacert.pem openssl ts -verify -digest 8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade -in 8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade.tsr -CAfile cacert.pem
Download the token (.tsr)The authority's certificate
Fetch both files, run the line, and openssl answers Verification: OK. Change one character of the hash and it answers message imprint mismatch instead. That settles when the hash existed — not that this archive holds every day we ran, and not that the pick was a good one.
Run it
in your browser.
Everything below happens inside this page, using your browser's own crypto.subtle. Nothing you type is sent to us, and no verdict here comes from our server — an answer from us about our own record would be worth precisely nothing on a page about not having to trust us.
What this
does not prove.
That the hash itself went out before kick-off
The hash proves the row was not edited. A timestamp authority that is not us has now signed that same hash beside a time, and the signature checks against their certificate rather than against our word. The authority was never shown the pick — the request is a digest and a nonce — which is why a pick can be stamped while it is still locked.
curl -sO https://api.betsbeats.com/api/v1/public/timestamps/8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade.tsr
curl -sO https://freetsa.org/files/cacert.pem
openssl ts -verify -digest 8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade -in 8db69b4206a28a5c2cd7e22d3535de98c276f89f6fca16154579990fff177ade.tsr -CAfile cacert.pemDownload the token (.tsr)That the result is set by someone other than us
The settlement rules name a source (league-official) and a tiebreak (league-wins), and they are served as data rather than typed onto a page. What is not published is the reading: today a person looks up the public result and marks the row, so the rule is declared and the reading is still ours.
That a settled row is never touched afterwards
The commitment hash covers the pick as it was written. It says nothing about the fields added at settlement — the score, the verdict, the timestamp — and a page that quietly edits itself would not tell you.
It covers the days published here
One row per day published here: the main pick, the only one that moves the counter. A day delivered only in Telegram or by hand, if there is one, is counted in the record and has no row here, because it was never published on this page. Only a published day carries a hash and a permanent address, so only a published day can be checked this way.
159 days are published here today.
The archive, and what it counts →It proves the pick was not altered. It says nothing about whether it was any good
A commitment is a claim about tampering and about nothing else. A hash that matches proves the selection is the one fixed before the game started; it does not make it a sound bet. A day that lost verifies exactly as cleanly as a day that won, and this page would be dishonest if it let the two blur.
Today's free pick, for your email
Team, bet, price and the hash it was sealed under, on this page the moment you send. Lose or win, it stays public.
or by email
Public record of the main pick, losses included: 115 won, 44 lost. See every pick
One free pick a day by email until you unsubscribe, in one click. 21+.