StatCrow

Verification

How StatCrow verifies

A verified page is only worth something if its numbers can’t be typed in. Here is exactly what stands behind every check on statcrow.com.

Read-only connections

Every number on a verified page comes from a connection to the source: Stripe, RevenueCat, App Store Connect, Google Play, Search Console, Plausible, Vercel or PageWarden.

StatCrow asks for the narrowest read-only access each provider offers and lists the exact permissions before you connect. The only thing StatCrow ever writes to a provider is a review reply, and only after you tap Approve.

Credentials are encrypted at rest with AES-256-GCM and decrypted only on the server, at the moment StatCrow calls the provider for you.

No manual edits

There is no form anywhere in StatCrow that changes a synced number. Daily metrics are written only by connector syncs.

Anything a person types in, like hours worked per week or the X handle and website on a profile, is labeled Self-reported and never carries a check.

Source lines and freshness

Every verified number carries a source line: the provider and when it last synced, for example "✓ Stripe · synced 2h ago".

Sources report on different schedules. Stripe is same day, App Store Connect is next day, Search Console runs 2 to 3 days behind and Google Play 3 to 7, with earnings once a month. StatCrow never compares a partial day to a complete one.

When a source misses its normal schedule by more than 48 hours, its numbers turn amber and show their age.

History breaks stay visible

If a connection is removed and added again, or the account behind it changes, the verified page says so: "History restarts Mar 4, 2026: Stripe reconnected." Nobody can hide a break in the record.

Each source shows how long it has been connected, so a new account can't pass as an old one.

Signed daily snapshots

Once a day StatCrow signs what each verified page shows: the public numbers, their visibility, sources, sync times and connection ages. The signature is Ed25519.

Anyone can fetch the latest snapshot at /@handle.json and the last 90 at /@handle/history.json, then check the signature against the public keys at /.well-known/statcrow-keys.json. Retired keys stay published, so old snapshots keep verifying.

Check a signature yourself

Take the payload field of /@handle.json and write it as canonical JSON: object keys sorted by their UTF-16 code units, no spaces or line breaks, arrays in their given order, and strings and numbers written the way JavaScript's JSON.stringify writes them. The UTF-8 bytes of that text are exactly what was signed.

The signature field is base64url. At /.well-known/statcrow-keys.json, find the key whose kid matches the snapshot's keyId; its publicKey is a 32-byte Ed25519 public key, also base64url. Any Ed25519 library can then check the signature against those bytes, without trusting this page or its HTML.

Visibility is the owner's choice

Owners choose, per number, whether to show the exact value, a range like $2.5k to $5k, growth only, or nothing. A range or growth-only number never includes the exact value anywhere in the page or its snapshot.

Private products, hours, focus calls and reviews never appear on a verified page.

Demo data

The demo page at /@demo runs on generated fixture data so you can see how StatCrow works. It is labeled "Demo data, not verified" and its snapshots say so too.

Fetch any snapshot: https://statcrow.com/@handle.json