Skip to main content

WhoisFreaks Python SDK: WHOIS API Client for Python

PyPI version License: MIT API status

The official Python client for the WhoisFreaks WHOIS API. Look up live WHOIS records for any domain across 1,529+ TLDs, pull WHOIS history back to 1986, search registrants with reverse WHOIS and run bulk WHOIS lookups from Python code.

The same package covers the DNS lookup API, domain availability API, typosquatting API, SSL certificate API, IP geolocation and IP reputation.

A live WHOIS lookup returns structured JSON like this (trimmed):

{
  "status": true,
  "domain_name": "whoisfreaks.com",
  "domain_registered": "yes",
  "create_date": "2019-03-19",
  "update_date": "2026-02-17",
  "expiry_date": "2027-03-19",
  "domain_registrar": {
    "iana_id": "1068",
    "registrar_name": "NAMECHEAP INC",
    "normalized_name": "namecheap, inc.",
    "website_url": "http://www.namecheap.com"
  },
  "registrant_contact": {
    "city": "Lewes",
    "state": "Delaware",
    "zip_code": "19958",
    "country_name": "United States",
    "country_code": "US"
  },
  "name_servers": ["albert.ns.cloudflare.com", "sue.ns.cloudflare.com"],
  "domain_status": ["clienttransferprohibited"]
}

Contents

Installation

pip install whoisfreaks

Get an API key

Create a free account at billing.whoisfreaks.com/signup. New accounts get 500 free credits with no credit card, usable across the live WHOIS, WHOIS history and reverse WHOIS APIs.

Keep the key out of source control. The examples read it from an environment variable:

export WHOISFREAKS_API_KEY="your_api_key"

Every example below assumes this setup:

import os
import whoisfreaks

config = whoisfreaks.Configuration()
config.api_key["ApiKeyAuth"] = os.environ["WHOISFREAKS_API_KEY"]

WHOIS lookup

Each request queries WHOIS servers and RDAP live, so you get the current record rather than a cached copy. One lookup costs 1 credit.

with whoisfreaks.ApiClient(config) as client:
    record = whoisfreaks.WHOISApi(client).whois_live("whoisfreaks.com")

    print(record.create_date, record.expiry_date)  # 2019-03-19 2027-03-19
    print(record.domain_registrar.registrar_name)  # NAMECHEAP INC
    print(record.name_servers)

Normalized registrar, address and date fields

Registries and registrars write the same facts in different formats. The API returns normalized fields so records from different TLDs line up without your own parsing code.

What you get Field Example
One registrar name, however the registry spells it domain_registrar.normalized_name namecheap, inc. for both "NAMECHEAP INC" and "NameCheap, Inc"
A parsed and geocoded contact address registrant_contact.street, city, state, zip_code, country_name, country_code Lewes, Delaware, 19958, United States, US
One date format create_date, update_date, expiry_date 2019-03-19
registrant = record.registrant_contact

print(record.domain_registrar.normalized_name)  # namecheap, inc.
print(registrant.city, registrant.state)        # Lewes Delaware
print(registrant.country_code)                  # US

Use these fields to group a domain portfolio by registrar, filter registrants by country code or sort domains by expiry date across every TLD.

Bulk WHOIS lookup

Look up to 100 domains in one call.

with whoisfreaks.ApiClient(config) as client:
    request = whoisfreaks.BulkWhoisRequest(domain_names=["example.com", "whoisfreaks.com", "github.com"])
    result = whoisfreaks.WHOISApi(client).bulk_whois(request)

For larger jobs, the Bulk WHOIS API accepts file uploads of up to 3M domains.

WHOIS history

Get every recorded ownership change for a domain in one request. A new record is stored only when the WHOIS data changed, and history goes back to 1986.

with whoisfreaks.ApiClient(config) as client:
    history = whoisfreaks.WHOISApi(client).whois_history("whoisfreaks.com")

Reverse WHOIS

Find every domain registered with a keyword, such as a company name or registrant email, across 4.5B+ WHOIS records.

with whoisfreaks.ApiClient(config) as client:
    matches = whoisfreaks.WHOISApi(client).whois_reverse("whoisfreaks", page=1)

DNS lookup

Pull live DNS records for a domain. Pass all or a comma-separated list of record types: A, AAAA, MX, NS, TXT, SOA, SPF, CNAME.

with whoisfreaks.ApiClient(config) as client:
    records = whoisfreaks.DNSApi(client).dns_live("A,MX,TXT", domain_name="whoisfreaks.com")

The same class also covers bulk DNS, historical DNS and reverse DNS lookups.

Domain availability check

Check whether a domain is registered and, with suggestions turned on, get up to 100 available alternatives on other TLDs.

with whoisfreaks.ApiClient(config) as client:
    result = whoisfreaks.DomainAvailabilityApi(client).domain_availability_v2(
        "whoisfreaks.io", sug=True, count=5
    )

Typosquatting detection

Find registered domains that look like typo variants of a brand name. Search by a brand keyword, or by a wildcard pattern such as whois* (up to 3 asterisks). Results come 100 domains per page with registration date, expiry date and drop status, across 1,529+ TLDs.

with whoisfreaks.ApiClient(config) as client:
    typos = whoisfreaks.TyposquattingApi(client).typosquatting(keyword="whoisfreaks")

To get the next page, pass the nextPageToken value from the response as page_token, along with the same keyword or pattern.

Error handling

Failed requests raise ApiException with the HTTP status code and response body.

from whoisfreaks.rest import ApiException

with whoisfreaks.ApiClient(config) as client:
    try:
        record = whoisfreaks.WHOISApi(client).whois_live("whoisfreaks.com")
    except ApiException as e:
        print(e.status, e.body)

Live API uptime and incident history are on the status page.

All endpoints

All URIs are relative to https://api.whoisfreaks.com. Each method links to its parameters and response model.

WHOIS

Class Method HTTP request Description
WHOISApi bulk_whois POST /v2.0/bulkwhois/live Bulk WHOIS Lookup
WHOISApi whois_history GET /v2.0/whois/history Historical WHOIS records for a domain
WHOISApi whois_live GET /v2.0/whois/live Live WHOIS Lookup
WHOISApi whois_reverse GET /v2.0/whois/reverse Reverse WHOIS lookup by keyword
ASNWHOISApi asn_whois GET /v2.0/asn-whois ASN WHOIS Lookup
IPWHOISApi ip_whois GET /v1.0/ip-whois IP WHOIS Lookup

DNS, SSL and subdomains

Class Method HTTP request Description
DNSApi dns_bulk POST /v2.0/dns/bulk/live Bulk DNS Lookup
DNSApi dns_historical GET /v2.0/dns/historical Historical DNS Lookup
DNSApi dns_live GET /v2.0/dns/live Live DNS Lookup
DNSApi dns_reverse GET /v2.1/dns/reverse Reverse DNS Lookup
SSLApi ssl_lookup GET /v1.0/ssl/live SSL Certificate Lookup
SubdomainsApi subdomains GET /v1.0/subdomains Subdomains Lookup

Domain availability, typosquatting and reputation

Class Method HTTP request Description
DomainAvailabilityApi bulk_domain_availability_v2 POST /v2.0/domain/availability Bulk Domain Availability Check
DomainAvailabilityApi domain_availability_v2 GET /v2.0/domain/availability Domain Availability Check with Suggestions
TyposquattingApi typosquatting GET /v3.0/domain/typos Typosquatting Lookup
DomainReputationApi domain_reputation GET /v1/domain/security Domain Reputation Lookup

IP geolocation and reputation

Class Method HTTP request Description
GeolocationApi bulk_geolocation POST /v1.0/geolocation Bulk IP Geolocation
GeolocationApi geolocation GET /v1.0/geolocation IP Geolocation Lookup
IPReputationApi bulk_ip_reputation POST /v1.0/security Bulk IP Reputation
IPReputationApi ip_reputation GET /v1.0/security IP Reputation Lookup

Account

Class Method HTTP request Description
AccountApi account_usage GET /v1.0/whoisapi/usage Account Usage
AccountApi database_file_status GET /v3.4/status Database File Status (Public)
AccountApi rotate_api_key GET /v1.0/api-key/rotate Rotate API Key

Database downloads

WHOIS, DNS, subdomain, IP, newly registered, expiring and dropped domain databases, plus the phishing, malware and spam threat feeds, are available through the Databases* classes. See the full method list for every download and status endpoint.

Requirements

Python 3.8 or later.

Support

License

MIT. See LICENSE.

Metadata

Release files for whoisfreaks 0.23.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for whoisfreaks 0.23.0
File Size Uploaded
whoisfreaks-0.23.0.tar.gz 92.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for whoisfreaks 0.23.0
File Interpreter ABI Platform
whoisfreaks-0.23.0-py3-none-any.whl Python 3 none any Details

Total release size: 320.1 kB

Release files / whoisfreaks-0.23.0.tar.gz

Download URL whoisfreaks-0.23.0.tar.gz
Size 92.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9ad707e3df63ee87134cae5268dc43d015794b6c4c27a9b2ae5aafb619b461f4
BLAKE2b-256 checksum
How to use checksums
ed68e6d2f1c968af7e9627a07be89810e2aacb51542f8f431556f9247946fae1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release files / whoisfreaks-0.23.0-py3-none-any.whl

Download URL whoisfreaks-0.23.0-py3-none-any.whl
Size 227.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ddfae2464d853ac4d58dd81fa836afe3802bb0a1e21c9ea1c6099ac5282aade9
BLAKE2b-256 checksum
How to use checksums
818e411c4292e299895c150499d634304d76ff092677f3de2cc9a97797a2d1fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release history Release notifications | RSS feed

0.23.2

2 release files

0.23.1

2 release files

This release

0.23.0 This release

2 release files

0.21.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.0.48

2 release files

0.0.47

2 release files

0.0.46

2 release files

0.0.45

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page