Skip to content
InternetData

Stream what's licensed where each viewer is.

Rights are sold by country, and live sport is blacked out by local market. One lookup says where a viewer is, down to the city and US TV market, and whether they watch through a VPN, a proxy or a hosting server.

Unlimited lookups, no key needed · Sign up to try every field, no card
Playback requests
Example
  • Play: Season 2
    198.51.100.7
    London, United KingdomUK catalog
  • Play: live game
    203.0.113.24
    Boston, MassachusettsDMA 506Blacked out
  • Play: film
    192.0.2.140
    VPNExpressVPNNot licensed
  • Play: Season 2
    203.0.113.91
    RelayiCloud Private RelayPlaying

Keep every stream inside its license.

  • Territory rights

    A title is licensed in some countries and not others. Serve each viewer the catalog for the country they're in.

    Answered bylocation.countryis_vpn
  • Local blackouts

    Live sport is blacked out in the home team's market. Black out by US TV market or by region, not the whole country.

    Answered bylocation.dma_codelocation.region_code
  • VPN and proxy viewers

    Viewers route through VPNs and residential proxies to reach another country's catalog. Ask them to switch off, or show what's licensed everywhere.

    Answered byis_vpnis_resproxy
  • Restreams and scrapers

    Pirate restreams and catalog scrapers run from hosting servers. Refuse playback to datacenter addresses.

    Answered byis_hostingis_dcproxy

Place and anonymity, down to the market.

The country, Tor and privacy relays answer with no key and no daily or monthly cap. VPN, proxy and hosting flags, the region and the DMA code come with every paid plan, and Pricing lists every field by plan.

  • location.country
    The country, which decides the catalog.Unlimited
  • location.region_code
    The state or province, with its ISO 3166-2 code.Paid plans
  • location.dma_code
    The US TV market (DMA) code, for blackouts.Paid plans
  • is_relay
    A privacy relay, such as iCloud Private Relay: usually a real subscriber.Unlimited
  • is_vpn
    A commercial VPN's exit, with the service named.Paid plans
  • is_resproxy
    A residential proxy exit, with the last day it was seen.Paid plans
  • is_hosting
    A hosting or cloud server, where restreams run.Paid plans

Check where playback starts.

  1. 01

    At playback

    Look up the viewer's address when a stream starts, and serve the catalog licensed for its country. A VPN or a proxy gets a message, not a stream it isn't licensed for.

  2. 02

    For live events

    Compare the address's DMA code or region with the event's blackout list before the stream opens. Viewers outside it watch as usual.

  3. 03

    At sign-up

    Price each plan for the country it's bought from. Ask a subscriber on a VPN where they live before you do.

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 VPN check and the DMA code on real viewers.

  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 canPlay(req, title) {
const r = await client.lookup(req.ip);
// VPNs, proxies and hosting answer on a paid plan.
if (r.isVpn || r.isResproxy || (r.isHosting && !r.isRelay)) {
return { play: false, reason: "vpn" };
}
// The DMA code is a paid plan's, and the US's alone.
if (title.blackouts.includes(r.location.dma_code)) {
return { play: false, reason: "blackout" };
}
return { play: title.territories.includes(r.location.country) };
}
playback.mjsnpm install @internetdata/internetdata

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

On this page

Can it black out a game by TV market?

Yes, on a paid plan: location.dma_code is the US TV market an address is in, and region_code its state. Outside the US, black out by region.

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.