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.
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.
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 | Öffentlich | 60/min | Liste der veröffentlichten Datensätze mit Preis und Zeilenzahl |
| GET | /api/v1/preview?dataset={slug} | Öffentlich | 30/min | Kostenlose Stichprobe mit 10.000 Zeilen aus einem ganzen Datensatz |
| GET | /api/v1/sample/{scope}/{key}?dataset={slug} | Öffentlich | 30/min | Kostenlose Stichprobe mit 20 Zeilen für eine Entität (TLD, Suffix, Land, Technologie) |
| GET | /api/v1/me | Bearer | 200/min | Benutzer und Scopes des aktuellen Schlüssels |
| GET | /api/v1/me/orders | Bearer | 200/min | Ihre Bestellungen und deren Status |
| GET | /api/v1/me/downloads | Bearer | 200/min | Ihr Download-Verlauf (?limit= bis zu 500) |
| GET | /api/download/{slug} | Bearer | 240/min | Vollständiger Datensatz-Export als .jsonl.zst |
| GET | /api/download/{slug}/{scope}/{key} | Bearer | 240/min | Ein 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
Einen einzelnen Ausschnitt herunterladen
curl, Fortsetzen und lokales Filtern
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 -doder streamen Sie mitzstdcat. - 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
| Spalte | Typ | Beispiel | Datensä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
Technologiesist entweder ein Array von Namen oder ein Objekt, das Namen auf Versionen abbildet.DNS Statusist die Zeichenkette"TRUE"oder"FALSE", kein Boolean.DNS recordsbildet einen Record-Typ auf seine Werte ab:A, AAAA, NS, SOA, TXT, MX, CNAME, CAA, HTTPS, DNSKEY, DS, SRV, PTR….MXhat die Form[{"host", "priority"}].Social networksbildet 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 Recordenthä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
Nach Technologie filtern
DNS und Ablaufdaten
Python
Antwortcodes und Limits
Fehler liefern einen JSON-Body der Form {"error": "…"}. Header zur Ratenbegrenzung werden bei jeder Anfrage zurückgegeben.
| Code | Bedeutung |
|---|---|
| 200 / 206 | Erfolg. 206 steht für einen teilweisen (fortgesetzten) Download. |
| 302 | Auf einer Download-Route fehlt eine Browser-Sitzung. API-Schlüssel erhalten stattdessen 401. |
| 401 | API-Schlüssel fehlt, ist ungültig oder per IP gesperrt. |
| 403 | Kein aktiver bezahlter Zugang zu diesem Datensatz. |
| 404 | Unbekannter Datensatz oder unbekannte Entität, oder die Datei ist noch nicht hochgeladen. |
| 416 | Fehlerhafte oder mehrteilige Range-Anfrage. |
| 429 | Ratenlimit ü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.