Fair question, and it deserves a real answer rather than a paragraph I improvise differently every time someone asks. So here is the whole policy, including the parts that are inconvenient for me.
The short version. I score behavior on the server and give you back a number. I do not publish which signals matter or how they are weighted, for the same reason a fraud team does not publish its rules: the day it is public, it stops working for you.
The people I am detecting read this site too. A published weight is not a technical disclosure, it is a configuration change for whoever is trying to get past it. That is not a hypothetical with AI agents, where a new release of a browser automation framework ships most weeks.
So the line is drawn there, and it is drawn in one direction only. Everything that affects you is public. The recipe is not. If a fact could change whether buying this is a good decision, it belongs on the site, and if it only helps someone evade detection, it does not.
I would rather publish the list than get asked one item at a time, so both halves are below.
If any of this turns out to be wrong or missing, tell me and I will fix it.
This list exists so the answer is a stated policy rather than a no I improvised when asked.
The API computes a per-signal contribution map for every verification. It is kept for support and tuning and it is deliberately never returned in the response. The comment sitting next to that decision in the source says why:
I would rather show you the policy in the code than ask you to trust the marketing page describing it.
You do not evaluate the algorithm. You evaluate the output on your own traffic. Run it in shadow mode for two weeks: call verify, log the confidence, act on nothing. Then go look at the signups you already know were fake and see where they landed. That tells you more than any whitepaper I could write about myself. The free trial is 14 days, so email me and I will extend it rather than have you rush the evaluation.
Two things make that cheap to try. Every response returns the threshold your verdict was compared against, so you are never guessing which number decided it. And the integration is meant to fail open: you wrap the call in a timeout and let the request through if it fails, which keeps an outage on my side from becoming an outage on yours. If I disappear tomorrow your signups keep working and you are back to your old baseline, not down.
If something you need to make a decision is not on the public list, that is a gap in the list and not a policy. Write to me and I will either answer it or add it here.
See what it does not catch →