Every address a BitTorrent client runs on.
Each IPv4 and IPv6 address where a BitTorrent client was seen in the last 90 days, marked verified where a client there answered directly or several others reported it. With the days it was seen, the ports its clients used and the most on one day, which marks a VPN exit or a carrier's NAT, and the codes the clients identify themselves by. Rebuilt daily.
Schema at a glance.
See documentation →The schema and metadata are in the docs. It is published as CSVGZ.
| ip | verified | first_seen | last_seen | last_reachable | days_seen | num_ports | peak_num_ports | indexer | clients |
|---|---|---|---|---|---|---|---|---|---|
| 185.159.157.76 | true | 2026-10-20 | 2026-10-20 | 2026-10-20 | 1 | 38 | 38 | false | LT |
| 5.181.233.122 | false | 2026-10-20 | 2026-10-20 | 1 | 11 | 11 | false | ||
| 2602:fdb8:131:c001::7:1 | true | 2026-10-20 | 2026-10-20 | 2026-10-20 | 1 | 30 | 30 | false | LT |
| 148.113.176.70 | true | 2026-10-20 | 2026-10-20 | 2026-10-20 | 1 | 1 | 1 | false | LT |
| 147.135.11.133 | true | 2026-10-20 | 2026-10-20 | 1 | 278 | 278 | true |
Downloading it from code.
Database API reference →One call gets you the current BitTorrent IP build. Every official client wraps it three ways: straight to disk, a time-limited link you hand to your own runner, or bytes in memory, and checksums() returns the published digests to verify it against.
download()downloadUrl()downloadBytes()metadata()checksums()import osfrom internetdata import InternetDataclient = InternetData(os.environ["INTERNETDATA_API_KEY"])# what is in today's build, without moving the filemeta = client.database.metadata("bittorrent_ip_v1")client.database.download("bittorrent_ip_v1", "csvgz", "./bittorrent_ip_v1.csv.gz")sums = client.database.checksums("bittorrent_ip_v1", "csvgz")print(meta.updated, meta.entries, sums["sha256"])
Getting your hands on it.
Teams join BitTorrent IP against traffic they already log, inside their own infrastructure, and never send an address anywhere to get an answer.
Shared-exit detection
Many clients at one address on one day is a VPN exit, a proxy or a carrier's NAT: read it from peak_num_ports and weight that traffic as you would a VPN's.
Network policy
Find the addresses in your own ranges, or a customer's, that run BitTorrent clients, before a peer-to-peer policy is enforced on them.
Seedbox and server mapping
Join the file to Hosting IP to find the clients running in datacenter space, the seedboxes and VPN servers among them.
An official client for every major language.
All SDKs on GitHub →Twelve official clients for the languages you ship in, each wrapping the database endpoints: list what you're licensed for, poll a build, follow the download redirect and verify what landed. Install commands are in the docs.
What does verified mean?
A client at the address answered directly, or two or more other clients reported it at the same time. An address only one client reported stays in the file with verified false: most are clients behind NAT, which can't be reached from outside, so filter on verified for the strictest list.
What does peak_num_ports tell us?
About how many clients shared the address at once. Each client listens on a port of its own, so many ports at one address on one day is a VPN exit, a proxy or a carrier's NAT, and 1 is usually a single machine.
What is an indexer?
An address that indexes the BitTorrent network rather than downloading from it, with far more client identities than ports. Its row stays in the file with indexer true, so drop those when you want people's clients alone.
Does a row say what was downloaded?
No. A row says a BitTorrent client ran at the address, never which torrents it shared or downloaded.
How often is it rebuilt?
Daily over a rolling 90-day window, which first_seen and last_seen are relative to. The metadata call answers when the current build landed and how many rows it holds, before you fetch it.
Which formats does a build ship in?
Gzipped CSV. Each row is one address, so a prefix tree would not make it smaller.
How do we get it?
Under a Standard or Redistribution license, quoted per database. Get a quote names BitTorrent IP to us, and Request evaluation puts the full current build in your hands to test first. Download sample gets you rows from it now.
Is there a lookup API?
No. You download BitTorrent IP and query it in your own systems, so nothing is metered and no address leaves them; the database API delivers each build. One address at a time, its page on this site shows what BitTorrent IP holds for it.
What if a row looks wrong?
Send it to us and we'll tell you what we hold on it, when we last saw it and how. Corrections land in the next build.
Test the real build first.
An evaluation license puts a full current build in your hands, with no sampling, so you can measure it against your own traffic before anyone talks about terms.