Tor detection API

Flag Tor exit nodes instantly.

Match IPs against the Tor Project's public exit list. Tor carries the highest risk weight in GeoQ — but plenty of legitimate users rely on it, so handle it thoughtfully.

How it works

01

GeoQ checks IPs against the Tor Project's public exit list and returns is_tor: true for current exit nodes.

02

A Tor hit contributes +45 — the highest single weight — because exit nodes provide strong anonymisation.

03

Tor protects journalists, activists and privacy-conscious users. Use the signal for step-up verification, not silent denial, and never as the sole basis of a decision about a person.

What you get back

FieldMeaning
is_tor Boolean — IP is a current Tor exit node.
risk.score Includes +45 when Tor is detected (highest weight).
is_datacenter Most exit nodes are hosted — often paired with this signal.
geo.* Location of the exit node (not the real user).

In your code

const r = await geoq.check(req.ip);

if (r.signals.is_tor) {
  // allow, but require extra verification for sensitive actions
  requireStepUp(session);
}

FAQ

Frequently asked questions

How current is the exit list?
We refresh against the Tor Project's published exit list regularly. As with all signals it's probabilistic — a node can leave the list between refreshes.
Should I block Tor?
Often not. Tor has many legitimate uses. Prefer step-up verification, and never make a sole-basis automated decision about a person. See our AUP.

Related signals

Start with the free tier. No card.

1,000 lookups a day, every signal, the same transparent risk score. Upgrade only when you outgrow it.