Skip to content
InternetData

Sell to real shoppers, in their own currency.

One lookup per visit says where a shopper is, what currency they pay in and whether the order comes through a proxy pool or a hosting server. A domain lookup says whether their email will ever answer.

Unlimited lookups, no key needed · Sign up to try every field, no card
Orders and sign-ups
Example
  • Order #48213
    203.0.113.24
    Residential ProxyReview
  • Visitor on /shop
    198.51.100.7
    Munich, GermanyEURPrices in EUR
  • Sign-up
    deals4u@tempinbox.example
    DisposableRefused
  • Order #48214
    192.0.2.140
    ISPHome broadbandApproved

The checkout problems one lookup solves.

  • Card testing

    Bots try stolen cards through proxy pools so each attempt looks like a new shopper. Hold orders from proxy exits for review.

    Answered byis_resproxyis_dcproxy
  • Local prices

    Shoppers abroad see prices in a currency they don't use. Show their own currency and timezone on the first page they open.

    Answered bylocation.currency_codelocation.timezone
  • Throwaway sign-ups

    Coupon hunters sign up again and again with disposable inboxes. Refuse a domain with no mail server or a disposable one.

    Answered byhas_mxis_disposable
  • Shipping mismatches

    An order ships to one country from a connection in another, behind a VPN. Review it when the address disagrees with the shipping country.

    Answered bylocation.countryis_vpn

One answer for the order, one for the email.

The country, currency and timezone, Tor, relays and a domain's mail records answer with no key and no daily or monthly cap. Proxy, VPN and hosting flags, the city and postal code, and the disposable flag come with every paid plan, and Pricing lists every field by plan.

  • location.country, currency_code
    The country and its currency, with the timezone beside them.Unlimited
  • location.city, postal_code
    The city and postal code, to compare with the shipping address.Paid plans
  • is_resproxy, is_mobproxy
    Residential and mobile proxy exits, with the last day each was seen.Paid plans
  • is_hosting
    A hosting or cloud server, where checkout bots run.Paid plans
  • is_vpn
    A commercial VPN's exit, with the service named.Paid plans
  • has_mx
    Whether the email's domain publishes a mail server.Unlimited
  • is_disposable
    A disposable email domain, with the providers behind it.Paid plans

Put the checks where shoppers arrive and pay.

  1. 01

    On the first page

    Read the country and currency as the page renders, so prices show in the shopper's own money. Keep their own choice once they make one.

  2. 02

    At sign-up

    Look up the email's domain before sending a confirmation. A domain with no mail server, or a disposable one, never reaches your list or your coupons.

  3. 03

    At checkout

    Look up the order's address. A proxy exit, or a country that disagrees with the shipping address, goes to review, and a home connection goes straight through.

Start free, then add every field.

The same code runs with no key and with one: without a key it answers the free fields, and an upgrade adds the rest with no change to the code.

  1. 1

    Call it with no key

    Unlimited

    Run the code on this page as it is, with no account.

  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 proxy checks and the disposable flag on real orders.

  3. 3

    Upgrade for every lookup

    From $39 a month

    Every paid plan answers every field on every lookup, and takes up to 1,000 lookups in one request.

import { InternetData } from "@internetdata/internetdata";
// No key needed. With one, every field answers.
const client = new InternetData({ apiKey: process.env.INTERNETDATA_API_KEY });
export async function checkOrder(order) {
const r = await client.lookup(order.ip);
// Proxies, VPNs and hosting answer on a paid plan.
if (r.isResproxy || r.isDcproxy || r.isVpn || (r.isHosting && !r.isRelay)
|| r.location.country !== order.shipTo.country) {
return holdForReview(order);
}
return approve(order);
}
checkout.mjsnpm install @internetdata/internetdata

Also available for Web, .NET, Ruby, Rust, Swift, Erlang, Perl and Zig. See all on GitHub →

On this page

Should every order from a proxy be refused?

Usually not. Hold it for review: a residential proxy exit is often a real household's connection that's also resold. A paid plan's resproxy object says on what share of the last 90 days the address was seen as one, so a rule can weigh it.

00 · Unlimited

Unlimited lookups, no sign-up.

Paste it into a terminal. Any address answers with its country, network, company and hostname, with no key and no daily or monthly cap. ASes and domains answer too.

curl https://api.internetdata.io/8.8.8.8
{
"ip": "8.8.8.8",
"is_bogon": false,
"is_tor": false,
"is_relay": false,
"is_anycast": true,
"is_carrier": false,
"is_satellite": false,
"is_ssh": false,
"is_smtp": false,
"is_web": true,
"is_dns_resolver": true,
"is_bittorrent": false,
"hostname": "dns.google",
"location": {
"continent": "NA",
"continent_name": "North America",
"country": "US",
"country_name": "United States",
"timezone": "America/Los_Angeles",
"currency_code": "USD",
"currency_name": "Dollar",
"currency_symbol": "$",
"flag_emoji": "🇺🇸",
"flag_unicode": "U+1F1FA U+1F1F8"
},
"asn": {
"asn": 15169,
"name": "Google LLC",
"domain": "google.com",
"type": "hosting",
"prefix": "8.8.8.0/24"
},
"company": {
"name": "Google LLC",
"domain": "google.com"
},
"tor": {},
"relay": {},
"abuse": {
"email": "network-abuse@google.com"
}
}
01 · Every field

All of the data on a paid plan.

VPN, proxy, hosting and CDN flags, each naming the operator.
Location to the city, with coordinates and an accuracy radius.
WHOIS records, the whole abuse contact and the services an address runs.
Up to 1,000 addresses, ASes and domains in one request.

A free API key answers every field for its first 100 lookups each day, with no card.