Die webatla API

Holen Sie sich die Domain-Datenbank direkt in Ihren eigenen Stack. Authentifizieren Sie sich mit einem Bearer-Schlüssel, laden Sie einen ganzen Datensatz oder einen einzelnen Ausschnitt als komprimiertes JSONL herunter und filtern Sie ihn lokal. Keine Abrechnung pro Zeile.

API-Schlüssel holen OpenAPI-Spezifikation
RESTüber HTTPS, JSON-Antworten
BearerToken-Authentifizierung, IP-Allowlist
JSONLmit zstd komprimierte Dateien
OpenAPImaschinenlesbare Spezifikation 3.1

So funktioniert die API

Die API liefert ganze Dateien statt eines Endpunkts für Live-Abfragen. Sie laden einen vollständigen Datensatz oder einen einzelnen Ausschnitt herunter und filtern ihn dann auf Ihrem eigenen Rechner. Das hält die Downloads schnell und begrenzt Ihre Abfragen in keiner Weise.

1. Schlüssel erstellen

Erzeugen Sie in Ihrem Konto einen Bearer-API-Schlüssel, optional beschränkt auf eine IP-Allowlist. Senden Sie ihn als Authorization-Header.

2. Dateien herunterladen

Laden Sie den vollständigen Export oder einen einzelnen Ausschnitt nach TLD, TLD-Suffix, Land oder Technologie. Unterbrochene Downloads setzen Sie mit einer Range-Anfrage fort.

3. Lokal filtern

Entpacken Sie mit zstd und fragen Sie mit jq, einem Data Warehouse oder eigenem Code ab. Eine Dimension pro Ausschnitt, den Rest verschneiden Sie selbst.

Authentifizierung

Die meisten Endpunkte erfordern einen Bearer-API-Schlüssel. Der öffentliche Katalog sowie die Vorschau- und Beispiel-Endpunkte benötigen keine Authentifizierung.

  • Schlüssel erstellen und verwalten Sie in Ihrem Konto. Der vollständige Schlüssel wird nur einmal bei der Erstellung angezeigt, bewahren Sie ihn daher sicher auf.
  • Senden Sie ihn als Authorization: Bearer wbtl_… bei jeder authentifizierten Anfrage.
  • Optional beschränken Sie einen Schlüssel auf eine IP-Allowlist. Anfragen von anderen Adressen erhalten 401.
  • Die Ratenbegrenzung gilt pro Schlüssel. Sie können einen Schlüssel jederzeit rotieren oder widerrufen.
GEThttps://webatla.com/api/v1/me Authorization: Bearer wbtl_•••••••f3a9 # 200 OK { "user": { "id": "…", "email": "you@example.com", "role": "customer" }, "apiKeyId": "…", "scopes": ["me:read"] }

Endpunkte

Den vollständigen, maschinenlesbaren Vertrag finden Sie unter /api/v1/openapi.json (OpenAPI 3.1).

Methode Endpunkt Authentifizierung Ratenlimit Zweck
GET/api/v1/datasetsÖffentlich60/minListe der veröffentlichten Datensätze mit Preis und Zeilenzahl
GET/api/v1/preview?dataset={slug}Öffentlich30/minKostenlose Stichprobe mit 10.000 Zeilen aus einem ganzen Datensatz
GET/api/v1/sample/{scope}/{key}?dataset={slug}Öffentlich30/minKostenlose Stichprobe mit 20 Zeilen für eine Entität (TLD, Suffix, Land, Technologie)
GET/api/v1/meBearer200/minBenutzer und Scopes des aktuellen Schlüssels
GET/api/v1/me/ordersBearer200/minIhre Bestellungen und deren Status
GET/api/v1/me/downloadsBearer200/minIhr Download-Verlauf (?limit= bis zu 500)
GET/api/download/{slug}Bearer240/minVollständiger Datensatz-Export als .jsonl.zst
GET/api/download/{slug}/{scope}/{key}Bearer240/minEin einzelner Scope-Ausschnitt eines Datensatzes

scope ist eines von tld, tld_suffix, country oder technology. Download-Endpunkte erfordern einen bezahlten, nicht abgelaufenen Zugang zu diesem Datensatz.

Schnellstart

Jeder Download ist eine einzige Datei. Holen Sie den ganzen Datensatz oder grenzen Sie ihn vorher auf eine einzelne Dimension ein.

Vollständigen Export herunterladen

GEThttps://webatla.com/api/download/all-data Authorization: Bearer wbtl_•••••••f3a9 # Streamt den ganzen Datensatz als eine .jsonl.zst-Datei

Einen einzelnen Ausschnitt herunterladen

GEThttps://webatla.com/api/download/all-data/tld/com https://webatla.com/api/download/all-data/tld_suffix/com.ua https://webatla.com/api/download/websites-ranking/country/DE https://webatla.com/api/download/technologies/technology/wordpress Authorization: Bearer wbtl_•••••••f3a9 # Genau eine Dimension pro Datei. Den Rest lokal filtern.

curl, Fortsetzen und lokales Filtern

curl -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/technologies/technology/wordpress # Abgebrochenen Download mit -C - fortsetzen curl -C - -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/all-data # Lokal entpacken und filtern zstdcat webatla-technologies-WordPress-*.jsonl.zst \ | jq -c 'select(.["Country by IP"] == "DE")' > wordpress-de.jsonl

Frühere Downloads listen Sie mit GET https://webatla.com/api/v1/me/downloads. Testen Sie eine kostenlose Vorschau ohne Schlüssel: GET https://webatla.com/api/v1/preview?dataset=all-data.

Datenformat

Die Dateien sind JSON Lines (ein JSON-Objekt pro Zeile) und mit zstd komprimiert. Das Schema ist über alle Datensätze hinweg gleich, sodass die Signale am selben Domain-Schlüssel zusammenpassen.

  • Jede Zeile ist eine Domain. Entpacken Sie sie mit zstd -d oder streamen Sie mit zstdcat.
  • Spaltennamen können Leerzeichen enthalten, greifen Sie in jq daher mit Klammer-Schlüsseln darauf zu, zum Beispiel .["Country by IP"].
  • Felder können fehlen oder null sein. Setzen Sie einen Standardwert, zum Beispiel .Registrar // "".
  • Datumsangaben sind ISO-8601-Zeichenketten, zum Beispiel "2026-11-18T04:47:13.573" oder "2026-04-22".

Spaltenreferenz

SpalteTypBeispielDatensätze
Domain string "arriva.com.hr" d1–d7
TLD suffix string "com.hr" d1–d7
TLD string "hr" d1–d7
Domain type string: "ICANN" | "PRIVATE" "ICANN" d1–d4, d6, d7
HTTP status integer | null 200 d3, d6, d7
IP address string | null "31.13.236.27" d3, d6, d7
Country by IP string (ISO-2) | null "DE" d2, d3, d6, d7
Social networks object | null {"facebook": ["https://…"]} d3, d6, d7
Technologies last data checked string (date) | null "2026-04-22" d3, d6, d7
Technologies array | object | null ["WordPress"] / {"PHP": "4.4.9"} d3, d6, d7
DNS last data checked string (date) "2026-06-03" d4, d6, d7
DNS Status string: "TRUE" | "FALSE" "TRUE" d4, d6, d7
DNS records object | null {"A": ["31.13.236.27"], "MX": [{"host": "…", "priority": 0}]} d4, d6, d7
PR value number 4.808574e-9 / 0 d2, d3, d6, d7
Harmonic value number 10305265 / 0 d2, d3, d6, d7
RDAP/WHOIS last date checked string (date) "2026-01-04" d5, d7, d6*
RDAP/WHOIS method string: "rdap" | "whois" "whois" d5, d7, d6*
Domain creation date string (ISO 8601) | null "2024-12-12T14:04:04" d2, d3, d5, d6, d7
Domain expiration date string (ISO 8601) | null "2026-12-12T14:04:04" d2, d3, d5, d6, d7
Domain last changed string (ISO 8601) | null "2026-01-04T04:43:01" d5, d7, d6*
Registrar string | null "REGRU-RU" d5, d6, d7
RDAP/WHOIS Record object | null {"raw_response": "% TCI Whois…"} d5, d6*
Response Status RDAP/WHOIS string "Domain is active" d5, d6*

Datensätze: d1 All active domains · d2 Websites + Ranking · d3 Technologies · d4 DNS · d5 RDAP & WHOIS · d6 All data · d7 Domain Investor.
* Im Datensatz All data (d6) sind die RDAP/WHOIS-Felder nur bei Domains vorhanden, die einen Registrierungseintrag besitzen.

Struktur verschachtelter Felder

  • Technologies ist entweder ein Array von Namen oder ein Objekt, das Namen auf Versionen abbildet.
  • DNS Status ist die Zeichenkette "TRUE" oder "FALSE", kein Boolean.
  • DNS records bildet einen Record-Typ auf seine Werte ab: A, AAAA, NS, SOA, TXT, MX, CNAME, CAA, HTTPS, DNSKEY, DS, SRV, PTR…. MX hat die Form [{"host", "priority"}].
  • Social networks bildet eine Plattform auf Profil-Links ab: facebook, instagram, x-twitter, linkedin, youtube, whatsapp, telegram, tiktok, github…. Dies sind die eigenen öffentlichen Links der Website, keine Kontaktdaten einer Person.
  • RDAP/WHOIS Record enthält den rohen Registrierungseintrag, aus dem personenbezogene Felder gemäß den ICANN-Regeln entfernt wurden.

Rezepte

An echten Exportdateien überprüft. Alles läuft lokal, sobald Sie eine Datei heruntergeladen haben.

Zählen, extrahieren und nach CSV exportieren

# Zeilen im Ausschnitt zählen zstdcat webatla-all-data-com-*.jsonl.zst | wc -l # Eine Domain pro Zeile zstdcat webatla-all-data-com-*.jsonl.zst | jq -r '.Domain' > domains.txt # Ausgewählte Spalten nach CSV zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r '[.Domain, .["Country by IP"] // "", .Registrar // ""] | @csv' > out.csv

Nach Technologie filtern

# Technologies ist ein Array ODER ein Objekt, beides abfangen zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -c 'select(.Technologies | if type=="array" then index("WordPress") elif type=="object" then has("WordPress") else false end)' > wordpress.jsonl

DNS und Ablaufdaten

# Geparkte oder tote Domains zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r 'select(.["DNS Status"] == "FALSE") | .Domain' > parked.txt # Eindeutige A records zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r '.["DNS records"].A[]?' | sort -u > ips.txt # Domains, die im Juni 2026 ablaufen zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r 'select((.["Domain expiration date"] // "") | startswith("2026-06")) | .Domain'

Python

# Zuerst entpacken zstd -d webatla-all-data-com-*.jsonl.zst # Dann Zeile für Zeile lesen import json with open("webatla-all-data-com-2026-06-09.jsonl", encoding="utf-8") as f: for line in f: row = json.loads(line) t = row.get("Technologies") names = t if isinstance(t, list) else list(t) if isinstance(t, dict) else [] if "WordPress" in names and row.get("Country by IP") == "DE": print(row["Domain"])

Antwortcodes und Limits

Fehler liefern einen JSON-Body der Form {"error": "…"}. Header zur Ratenbegrenzung werden bei jeder Anfrage zurückgegeben.

CodeBedeutung
200 / 206Erfolg. 206 steht für einen teilweisen (fortgesetzten) Download.
302Auf einer Download-Route fehlt eine Browser-Sitzung. API-Schlüssel erhalten stattdessen 401.
401API-Schlüssel fehlt, ist ungültig oder per IP gesperrt.
403Kein aktiver bezahlter Zugang zu diesem Datensatz.
404Unbekannter Datensatz oder unbekannte Entität, oder die Datei ist noch nicht hochgeladen.
416Fehlerhafte oder mehrteilige Range-Anfrage.
429Ratenlimit überschritten. Warten Sie kurz und versuchen Sie es erneut.

Öffentliche Endpunkte sind pro IP begrenzt. Authentifizierte Endpunkte sind pro Schlüssel oder pro Benutzer begrenzt, wie oben aufgeführt.

Legen Sie los

Erstellen Sie einen Schlüssel in Ihrem Konto oder sehen Sie sich zuerst die Datensätze an und holen Sie sich eine kostenlose Stichprobe. Fragen zu einem individuellen Ausschnitt? Schreiben Sie an support@webatla.com.