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
| Field | Meaning |
|---|---|
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.