Skip to content
VPNDetection

Know when a patient's location is masked

A clinician may only treat patients where they're licensed, and a VPN hides where the patient is. Look up the address at intake, and confirm the location with the patient when it's masked.

Unlimited lookups, no key needed · Sign up to try every field, no card
Visit intake
Example
  • Visit, patient P-2041
    198.51.100.18
    ISPHome broadbandVisit starts
  • Visit, patient P-2042
    203.0.113.70
    VPNNordVPNConfirm location
  • Portal log-in
    192.0.2.88
    Residential ProxyExtra verification
  • Booking
    192.0.2.150
    HostingLinodeBlocked

What it stops

  • Out-of-area visits

    A patient on a VPN who appears to be somewhere your clinicians are licensed.

    Caught byis_vpnis_relay
  • Portal takeover

    Stolen patient log-ins tried from proxy pools.

    Caught byis_resproxyis_tor
  • Pharmacy orders

    Prescriptions ordered through a VPN from places you can't ship or prescribe to.

    Caught byis_vpnlocation.country
  • Booking bots

    Appointment slots grabbed by scripts on hosting servers.

    Caught byis_hostingis_dcproxy

The fields that decide it

The four a rule here reads most, each marked with the plan that answers it.

  • is_vpn
    A commercial VPN, whose location isn't the patient's.Unlimited
  • is_relay
    A privacy relay such as iCloud Private Relay, which keeps only an approximate location.Unlimited
  • location.country
    The address's country. For a state, ask the patient.Unlimited
  • is_resproxy
    A home connection resold as a proxy, used to try stolen log-ins.Paid plans

Where to check

  1. 01

    At intake

    Look up the address before the visit starts. When it's a VPN or a relay, ask the patient to confirm where they are, since the clinician's license depends on it.

  2. 02

    At log-in

    Check log-ins to the patient portal. One from a residential proxy or Tor gets a second factor, since stolen patient log-ins are tried through proxy pools.

  3. 03

    At pharmacy checkout

    Look up the address before a prescription ships. An order through a VPN from outside the places you ship or prescribe to goes to a pharmacist first.

Start free, then add every field

The same rule runs with no key and with one. Without a key the paid fields are left out of the answer, so the second check waits for your upgrade.

  1. 1

    Call it with no key

    Unlimited

    The snippet runs as it is: the VPN, Tor and relay flags, the location and the network, with no daily or monthly cap.

  2. 2

    Sign up for a key

    No card

    Your account's first 100 lookups each day answer every field, so you can try the paid half of the rule on real traffic.

  3. 3

    Upgrade for every lookup

    From $19 a month

    Every paid plan answers every field on every lookup, proxies, hosting and the operator behind each flag, and up to 1,000 addresses a batch.

import { VPNDetection } from "vpndetection";
// No key needed. With one, every field answers.
const client = new VPNDetection({ apiKey: process.env.VPNDETECTION_API_KEY });
export async function beforeVisit(visit) {
const r = await client.lookup(visit.ip);
if (r.isVpn || r.isRelay || r.isTor) {
return confirmLocation(visit);
}
// Proxies and hosting answer on a paid plan.
if (r.isResproxy) {
return requireSecondFactor(visit);
}
}
intake.mjsnpm install vpndetection
On this page

Does it tell us which state a patient is in?

No. Our location is the country. It tells you when an address hides where the patient is, so you know to ask.

00 · Unlimited

Unlimited lookups, no sign-up.

Paste it into a terminal. Any address answers its VPN, Tor and relay flags, where it is and which network announces it, with no daily or monthly cap.

curl "https://api.vpndetection.io/146.70.116.130"
{
"ip": "146.70.116.130",
"is_vpn": true,
"is_relay": false,
"is_tor": false,
"location": {
"country": "AT", ...
},
"asn": { "asn": 9009, ... }
}
01 · Sign up

Try every field, free.

Your first 100 lookups each day answer every field, the evidence behind each flag included.
The rest answer as Unlimited, with no cap.
No card and no sales call: the key is issued on signup.
A paid plan answers every field on every lookup.