Stop the takeover, not the customer.

Passwords leak. Pro scores every login with the context a password check can't see – the device, the account's history, the network, the physics – and answers in milliseconds. Attackers hit a wall; the real owner never notices anything happened.

EU-hosted. Verdicts in milliseconds.

Impossible-travel detectionTrust dampeners for real usersSynchronous – inside the login pathNo CAPTCHAs, ever

Two sessions, one set of credentials, nine minutes apart. Physics votes no.

01How scoring works

Same password. Same trip. Two different stories.

Every login assembles its evidence in the open: each signal carries a weight, dampeners pull risk back down, and the verdict ships with the full reason list. This is why a stolen password fails while the real owner on holiday sails through.

Thresholds are knobs, not constants.

Drag the block threshold, widen the review band, override any weight, then replay your own history to see exactly what would have changed.

Review 40Block 70
ALLOW
REVIEW
BLOCK
risk 0 · trusteddrag the handlesrisk 100 · certain
02The takeover playbook

The takeover playbook, named.

Each pattern is a reason code in the response, with a default weight and severity you override per project. These are the headline plays, scored alongside many quieter signals. Not a vibe, not an opaque score.

+45
criticalImpossible travelTwo sessions too far apart, too fast. Geometry no human clears.
02Credential-stuffing fan-outOne device or IP walking through many accounts in patterns no person produces.critical+40
03Reset, then a new devicePassword reset followed minutes later by a login from hardware the account has never seen.high+35
04Unknown deviceA device this account has never logged in from – weighted by how established the account is.high+25
05Dormant account wakes upEleven quiet months, then sudden activity from a new network. Classic warm-up for a drain.medium+20
06New country, new networkGeography and infrastructure shifting together – context that raises the score without ever deciding alone.medium+20
and many moreThese are the headline plays. Dozens of quieter signals score alongside them on every login, from time-of-day shifts to network reputation to header inconsistencies.
03Fan-out

Not one loud IP. A thousand quiet ones.

A single noisy address is the easy case, and a rate limiter has handled it for thirty years. Real credential stuffing spreads across hundreds of IPs and paces itself over days, so every individual request looks clean. Pro links the attempts behind it, by device fingerprint, network reputation and the shared memory of who has been knocking, and sees the one campaign no per-IP limit can.

240 accounts · 190 IPs · one device · 4 daysThe slow, spread-out version is exactly what a memory window you set, up to 90 days, is built to catch.

Stop the next takeover before it lands.

Book a demo
04The shape of it

The wall is invisible to the one person who belongs.

Every signal Pro scores does double duty: it stops the stranger and clears the owner. The takeover hits a wall it can't see around; the real customer signs in and notices nothing, no CAPTCHA, no challenge, no friction. That asymmetry is the whole product.

05The middle answer

Review means MFA, not “no”.

Most ambiguous logins are real customers in unusual circumstances. Pro routes them to a step-up you control instead of a denial – false declines die, attackers still can't pass your second factor.

Login attemptNew device, plausible context
ReviewRisk lands in the step-up band
Your step-upMFA · magic link · manual queue
Session continuesVerified – trust recorded

The review band is opt-in and fully tunable – and a Review never overrides a real Block.

See impossible-travel scoring on your own logins.

Book a demo
06Integration

One event in the login path.

Drop the TrustSig web SDK in once to capture the device signal, then send the login event from your backend. The verdict, risk and reasons come back in the same response, fast enough to sit inline before you mint the session.

login.tsyour backend
const verdict = await pro.events.send({  kind: "login",  user_id: user.id,  ip: req.ip,  user_agent: req.headers["user-agent"],  device_token: req.body.trustsig_token,});
if (verdict.decision === "BLOCK") return deny(res);if (verdict.decision === "REVIEW") return requireMfa(res);return createSession(user);
response<150 ms
{  "decision": "REVIEW",  "risk": 64,  "reasons": [    { "code": "NEW_DEVICE", "weight": 25 },    { "code": "NEW_COUNTRY", "weight": 20 },    { "code": "TOD_SHIFT", "weight": 19 }  ]}
<150 msverdict, inside the login request
90 daysof account & device memory, your window
1web SDK snippet on the client, dropped in once
07The rest of Pro

One signal layer. Every abuse pattern.

Each detection engine reads the same account, device and network memory – turn on one, the rest are a toggle away.

08 Questions

Account takeover, answered

Every login is scored against its context. Signals like impossible travel between sessions, a never-before-seen device for that account, a new country or network, credential-stuffing fan-out where one device or IP hits many accounts, password-reset-then-new-device sequences and dormant-account reactivation each feed the score, and they are a fraction of what the model weighs. The verdict arrives synchronously, in milliseconds, at the moment of login.

09Get started

Stop account takeovers before they land.

Tell us what you are trying to protect and why now. We will reply by email to set up access for your team.

  • EU-hosted, GDPR-native
  • No CAPTCHAs, no friction for your users
  • Verdicts in milliseconds

We reply by email to set up your demo. No payment or account needed.