Jede Datei ist zstd-komprimiertes JSON Lines mit einer Domain pro Zeile. Hier erfahren Sie, wie Sie sie öffnen, befragen und in Ihren Stack laden. Jedes Rezept lief auf der kostenlosen Vorschau mit 10.000 Zeilen, und die gezeigte Ausgabe ist das, was es tatsächlich ausgegeben hat.
Format
JSON Lines, zstd-komprimiert
.jsonl.zst
Eine Zeile pro
Domain, jeder Schlüssel immer vorhanden
Werte können null sein
Dateiname
Datensatz und Exportdatum
all-data-2026-10-16.jsonl.zst
Aktualität
Jeden Tag ein neuer Export
jeden Tag dieselben Spalten
1 · Was Sie herunterladen
Was Sie herunterladen
Jeder webatla-Datensatz ist JSON Lines: eine Domain pro Zeile, ein JSON-Objekt pro Zeile. Kostenpflichtige Dateien sind mit zstd komprimiert.
Datei
Inhalt
Format
Kompletter Datensatz
Alle Zeilen des Datensatzes
.jsonl.zst
Ausschnitt
Alle Zeilen zu einer TLD, einem TLD-Suffix, einem Land (nach IP) oder einer Technologie, mit denselben Feldern wie die komplette Datei
.jsonl.zst
Kostenlose Vorschau (10.000 Zeilen)
Die ersten 10.000 Zeilen der kompletten Datei
.jsonl Klartext, nicht komprimiert
Vorschau mit 20 Zeilen auf den Seiten für TLD, Land und Technologie
Zeilen des jeweiligen Eintrags, mit denselben Feldnamen wie in der kostenpflichtigen Datei. Gezeigt werden einige der vollständigsten Zeilen, keine zufälligen.
auf der Seite
Laden Sie einen Ausschnitt herunter, statt die komplette Datei zu filtern
Brauchen Sie nur eine Zone, ein Land oder eine Technologie, ist der Ausschnitt bereits gefiltert und um ein Vielfaches kleiner.
Die kostenlose Vorschau zeigt das Format, keine typische Mischung
Die meisten Dateien sind nach TLD-Suffix sortiert. Die ersten 10.000 Zeilen decken daher nur wenige Suffixe vom Anfang des Alphabets ab, und .com gehört nicht dazu. Ein Filter, der in der Vorschau nichts findet, kann in der kompletten Datei Millionen Zeilen liefern. Nutzen Sie die Vorschau, um Ihre Befehle zu entwickeln und zu testen. Sie laufen unverändert auf der kostenpflichtigen Datei.
2 · Datei öffnen
Hineinschauen, ohne auszupacken
Jedes Tool hier liest die komprimierte Datei als Stream. Der einzige Unterschied zwischen der Vorschau und der kostenpflichtigen Datei ist, wie Sie sie öffnen.
import io, json, zstandard
with open("dns-2026-10-16.jsonl.zst", "rb") as fh:
stream = zstandard.ZstdDecompressor().stream_reader(fh, read_across_frames=True)
for line in io.TextIOWrapper(stream, encoding="utf-8"):
row = json.loads(line)
mx = (row["DNS records"] or {}).get("MX") or []
if any((m.get("host") or "").lower().endswith(".google.com") for m in mx):
print(row["Domain"])
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
1000
3 · Fragen beantworten
Fragen, die die tägliche Datei beantwortet
Erst die Antwort, die DuckDB-Abfrage einen Klick entfernt. Öffnen Sie ein Terminal im Ordner mit Ihrem Download, geben Sie duckdb ein und fügen Sie die Abfrage ein.
Welche WooCommerce-Shops werden in Deutschland gehostet?
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
ariana.acDE
fjak.acDE
empower.abudhabiDE
Nach PR value sortiert und als woocommerce-de.csv mit 12 Zeilen gespeichert. Eine CSV, die Ihr CRM oder Ihre Tabellenkalkulation öffnet.
Abfrage anzeigen
COPY (SELECT Domain, "PR value" FROM read_json('technologies-2026-10-16.jsonl.zst',
columns = {Domain: 'VARCHAR', "Country by IP": 'VARCHAR',
Technologies: 'JSON', "PR value": 'DOUBLE'})
WHERE "Country by IP" = 'DE' AND list_contains(CASE json_type(Technologies)
WHEN 'OBJECT' THEN json_keys(Technologies)
WHEN 'ARRAY' THEN from_json(Technologies, '["VARCHAR"]') END, 'WooCommerce')
ORDER BY "PR value" DESC
) TO 'woocommerce-de.csv';
Welcher Website-Baukasten betreibt die meisten Websites?
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
WordPress628 · 80,6 %
Wix52 · 6,7 %
Squarespace45 · 5,8 %
Drupal22 · 2,8 %
Webflow20 · 2,6 %
Joomla12 · 1,5 %
Anteil unter diesen sechs Baukästen, nicht unter allen Websites. Führen Sie die Abfrage auf dem Ausschnitt eines Landes aus, um einen Markt zu vergleichen.
Abfrage anzeigen
SELECT tech, count(*) AS sites,
round(100 * count(*) / sum(count(*)) OVER (), 1) AS pct
FROM (SELECT unnest(CASE json_type(Technologies)
WHEN 'OBJECT' THEN json_keys(Technologies)
WHEN 'ARRAY' THEN from_json(Technologies, '["VARCHAR"]') END) AS tech
FROM read_json('technologies-2026-10-16.jsonl.zst', columns = {Technologies: 'JSON'}))
WHERE tech IN ('WordPress', 'Wix', 'Squarespace', 'Webflow', 'Drupal', 'Joomla')
GROUP BY tech ORDER BY sites DESC;
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen, ausgeführt am 16. Okt. 2026
kayorashop.store2026-10-11
moonovaactivewearshop.com2026-10-10
shopcastava.com2026-10-01
In den letzten 30 Tagen registriert, mit Registrar. Ersetzen Sie shop durch Ihren Markennamen.
Abfrage anzeigen
SELECT "Domain creation date"[:10] AS created, Domain, Registrar
FROM read_json('rdap-whois-2026-10-16.jsonl.zst', columns = {Domain: 'VARCHAR',
"Domain creation date": 'VARCHAR', Registrar: 'VARCHAR'})
WHERE Domain LIKE '%shop%'
AND "Domain creation date" >= CAST(current_date - 30 AS VARCHAR)
ORDER BY created DESC;
Welche Websites mit Ranking laufen in den nächsten 30 Tagen ab?
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen, ausgeführt am 16. Okt. 2026
adamcadre.ac2026-10-24
ama.ab.ca2026-10-31
psychologistsassociation.ab.ca2026-11-09
Nach PR value sortiert. Viele Registries verlängern automatisch. Verstehen Sie die Liste daher als Beobachtungsliste, nicht als Drop-Liste.
Abfrage anzeigen
SELECT Domain, "Domain expiration date"[:10] AS expires
FROM read_json('websites-ranking-2026-10-16.jsonl.zst', columns = {Domain: 'VARCHAR',
"Domain expiration date": 'VARCHAR', "PR value": 'DOUBLE'})
WHERE "Domain expiration date"
BETWEEN CAST(current_date AS VARCHAR) AND CAST(current_date + 30 AS VARCHAR)
ORDER BY "PR value" DESC LIMIT 3;
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
cloudflare.com2.277 · 25,1 %
registrar-servers.com704 · 7,7 %
domaincontrol.com622 · 6,8 %
Anteil der Domains mit einem verwendbaren NS-Record, gruppiert nach den letzten zwei Labels des Hostnamens.
Abfrage anzeigen
CREATE OR REPLACE MACRO provider(h) AS
array_to_string(string_split(lower(rtrim(h, '.')), '.')[-2:], '.');
SELECT provider(json_extract_string("DNS records", '$.NS[0]')) AS dns,
count(*) AS domains, round(100 * count(*) / sum(count(*)) OVER (), 1) AS pct
FROM read_json('dns-2026-10-16.jsonl.zst', columns = {"DNS records": 'JSON'})
WHERE dns <> '' GROUP BY dns ORDER BY domains DESC, dns LIMIT 3;
Eine Liste aus der kompletten Datei oder einem Ausschnitt erstellen
Die komplette Datei passt nicht in eine Tabellenkalkulation. Filtern Sie sie daher zuerst oder beginnen Sie mit einem Ausschnitt: eine Technologie, eine TLD, ein TLD-Suffix oder ein Land als eigene Datei, von der jeweiligen webatla-Seite oder über die API. Mit Zugang zu Technologies oder All data hat jede Technologie-Seite eine Download-Box für ihren Ausschnitt.
Aus der kompletten Datei
Eine TLD oder ein Suffix
jq
Die TLD ist das letzte Label der Domain. Das TLD-Suffix ist das genaue Public Suffix.
# every domain under one TLD (de covers every suffix that ends in .de)
zstd -dc all-data-2026-10-16.jsonl.zst | jq -c 'select(.TLD == "de")' > de.jsonl
# exactly one suffix
zstd -dc all-data-2026-10-16.jsonl.zst | jq -c 'select(."TLD suffix" == "2ix.de")' > 2ix.de.jsonl
# a suffix that equals its TLD (com, de, ac) has no file of its own:
# filter the TLD slice instead
zstd -dc webatla-all-data-ac-2026-10-16.jsonl.zst | jq -c 'select(."TLD suffix" == "ac")' > ac.jsonl
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
In einem Land gehostete Websites, schnell gefunden
grep + jq
Eine Website ist eine Zeile mit einer IP-Adresse, und ihr Land ist der Ort, an dem der Server gehostet wird (ein ISO-Code in Großbuchstaben). grep verwirft die Zeilen, die nicht passen können, danach prüft jq den Rest exakt.
zstd -dc all-data-2026-10-16.jsonl.zst \
| grep -F '"Country by IP":"DE"' \
| jq -c 'select(."IP address" != null and ."Country by IP" == "DE")' > de-websites.jsonl
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
de-websites.jsonl: 595 lines, the same as jq alone
Als CSV für Excel oder Google Sheets exportieren
jq
Excel zeigt höchstens 1.048.576 Zeilen an. Filtern Sie daher zuerst. Importieren Sie die CSV als UTF-8 (Daten, Aus Text/CSV), damit nicht lateinische Namen korrekt angezeigt werden.
Der WooCommerce-Ausschnitt, danach nur ein Land behalten.
COPY (
SELECT Domain AS Website, "Country by IP" AS Country
FROM read_json('webatla-technologies-WooCommerce-2026-10-16.jsonl.zst',
columns = {'Domain': 'VARCHAR', 'Country by IP': 'VARCHAR', 'PR value': 'DOUBLE'})
WHERE "Country by IP" = 'DE'
ORDER BY "PR value" DESC
) TO 'woocommerce-germany.csv';
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
Upsell-Liste: HubSpot-Websites, die auch WordPress nutzen
Der HubSpot-Ausschnitt, danach nur die Stacks mit WordPress behalten.
COPY (
SELECT Domain AS Website, "Country by IP" AS Country
FROM read_json('webatla-technologies-HubSpot-2026-10-16.jsonl.zst', columns = {
'Domain': 'VARCHAR', 'Country by IP': 'VARCHAR', 'Technologies': 'JSON'})
WHERE list_contains(CASE json_type(Technologies) WHEN 'OBJECT' THEN json_keys(Technologies)
ELSE json_extract_string(Technologies, '$[*]') END, 'WordPress')
) TO 'hubspot-on-wordpress.csv';
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
Website,Country
ateliercrescendo.ac,US
Sales Ops
Eine Datei pro Vertriebsgebiet
Einen Ausschnitt in je eine CSV pro Serverland aufteilen.
COPY (
SELECT Domain AS Website, coalesce("Country by IP", 'unknown') AS Country
FROM read_json('webatla-technologies-WooCommerce-2026-10-16.jsonl.zst',
columns = {'Domain': 'VARCHAR', 'Country by IP': 'VARCHAR'})
) TO 'woocommerce-by-country'
(FORMAT csv, PARTITION_BY (Country), WRITE_PARTITION_COLUMNS true, OVERWRITE);
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
Passt es in eine Tabellenkalkulation?Ein Excel-Tabellenblatt fasst 1.048.576 Zeilen
Websites mit HubSpot375.063Passt in ein Blatt
Websites mit WordPress23.798.524Filtern oder aufteilen
All data, die komplette Datei420.933.308Zu groß für jede Tabellenkalkulation
5 · Laden
Postgres, Parquet oder ein Join mit Ihrer eigenen Liste
PostgreSQL
psql
Jede Zeile wird zu einer jsonb-Zeile, mit einem GIN-Index auf Technologies.
psql -c 'CREATE TABLE domains (doc jsonb)'
zstdcat technologies-2026-10-16.jsonl.zst \
| psql -c "\copy domains FROM STDIN WITH (FORMAT csv, QUOTE e'\x01', DELIMITER e'\x02')"
psql -c "CREATE INDEX ON domains USING gin ((doc->'Technologies'))"
psql -c "SELECT doc->>'Country by IP' AS country, count(*) AS sites FROM domains
WHERE doc->'Technologies' ? 'WordPress' GROUP BY 1 ORDER BY 2 DESC, 1 LIMIT 5"
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
COPY 10000
country | sites
---------+-------
US | 300
DE | 110
CA | 29
Parquet
DuckDB
Typisierte Spalten, mit Technologies als Liste von Namen. Lässt sich in BigQuery, Snowflake, Spark oder pandas laden.
CREATE OR REPLACE MACRO techs(t) AS CASE json_type(t) WHEN 'OBJECT'
THEN json_keys(t) WHEN 'ARRAY' THEN t->>'$[*]' ELSE []::VARCHAR[] END;
COPY (SELECT "Domain" AS domain, "Country by IP" AS country,
"PR value" AS pr_value, techs("Technologies") AS technologies
FROM read_json('technologies-2026-10-16.jsonl.zst', columns = {
'Domain': 'VARCHAR', 'Country by IP': 'VARCHAR',
'PR value': 'DOUBLE', 'Technologies': 'JSON'}))
TO 'technologies.parquet' (FORMAT parquet);
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
technologies.parquet: 10000 rows
domain · country · pr_value · technologies (list of names)
Reichern Sie Ihre eigene Liste an
DuckDB
Ihre CSV auf der einen Seite, der Export auf der anderen, verknüpft über Domain.
SELECT c.domain, w."Country by IP" AS country, w."Registrar" AS registrar,
w."HTTP status" AS http, w."Domain creation date"[:10] AS created
FROM read_csv('my-domains.csv') c
LEFT JOIN read_json('all-data-2026-10-16.jsonl.zst', columns = {
'Domain': 'VARCHAR', 'Country by IP': 'VARCHAR', 'Registrar': 'VARCHAR',
'HTTP status': 'INTEGER', 'Domain creation date': 'VARCHAR'}) w
ON w."Domain" = lower(trim(c.domain))
ORDER BY 1;
Echte Ausgabe der kostenlosen Vorschau mit 10.000 Zeilen
domain country registrar http created
Tamm.AbuDhabi AE ADSIC Registry Operator 200 2018-07-09
easy.ac US MarkMonitor Inc. 200 2014-02-27
global.abb US CSC Corporate Domains, Inc. 301 2019-10-03
6 · Tägliche Updates
Sehen, was sich über Nacht geändert hat
Jeden Tag steht ein frischer Export bereit. Vergleichen Sie zwei Tage über Domain und geben Sie nur die Änderungen an nachgelagerte Systeme weiter. Tauschen Sie die beiden Dateien, um die Domains aufzulisten, die weggefallen sind.
COPY (
SELECT "Domain" FROM read_json('all-active-domains-2026-10-16.jsonl.zst',
columns = {'Domain': 'VARCHAR'})
EXCEPT
SELECT "Domain" FROM read_json('all-active-domains-2026-10-15.jsonl.zst',
columns = {'Domain': 'VARCHAR'})
) TO 'new-since-yesterday.csv' (HEADER false);
7 · Häufige Stolperfallen
Typische Stolperfallen
Feldnamen enthalten Leerzeichen
Setzen Sie sie in SQL und in jq in Anführungszeichen.
jq: ."TLD suffix"SQL: "TLD suffix" = 'com.sa'
DNS Status ist Text
Das Feld enthält den Text "TRUE" oder "FALSE" und keinen booleschen Wert. Vergleichen Sie es daher als String.
select(."DNS Status" == "TRUE")
Technologies gibt es in mehreren Formen
Eine Zuordnung von Namen zu Versionen (oder zu Objekten mit einer Version), eine Liste von Namen oder null. Lesen Sie bei einer Zuordnung die Schlüssel und bei einer Liste die Einträge, dann erhalten Sie in beiden Fällen eine Liste.
jq: (.Technologies // []) | if type == "object" then keys else . end
Entpacken Sie eine komplette Datei nie auf die Festplatte
Die komplette Datei „All data“ ist komprimiert etwa 34 GB groß und entpackt mehrere hundert GB. Lesen Sie sie als Stream, wie es jedes Rezept hier tut.
Prüfen Sie die ersten Zeilen
In DuckDB liefert ein falsch geschriebener Spaltenname NULL statt eines Fehlers.
8 · Fehlersuche
Wenn etwas schiefgeht
Symptom
Ursache und Lösung
zstd: … unsupported format bei der kostenlosen Vorschau
Die Vorschau ist unkomprimiertes JSONL. Geben Sie sie direkt an jq, oder nutzen Sie zstdcat, das beides liest.
Python liefert weit weniger Zeilen als zstd -dc FILE | wc -l
Die Datei enthält viele zstd-Frames und wurde mit einem Aufruf gelesen, der nach dem ersten aufhört. Nutzen Sie stream_reader mit read_across_frames=True, wie im Python-Rezept.
jq: syntax error bei .TLD suffix
Setzen Sie Namen mit Leerzeichen in Anführungszeichen: ."TLD suffix"
SQL liefert 0 Zeilen ohne Fehler
'Country by IP' in einfachen Anführungszeichen ist ein String, keine Spalte. Verwenden Sie für Spaltennamen doppelte Anführungszeichen.
DuckDB bricht mittendrin ab mit Expected OBJECT, but got ARRAY
Die automatische Schemaerkennung betrachtet nur die ersten Zeilen. Deklarieren Sie die Spalten und geben Sie verschachtelte Felder als JSON an.
Ist mein Download vollständig?
zstd -tq FILE && echo OK gibt OK aus, wenn sich die Datei vollständig dekomprimieren lässt.
Jedes Rezept läuft auf der kompletten Tagesdatei
Monats- oder Jahreszugang, jeden Tag ein frischer Export und eine API für Ausschnitte. Jedes Konto kann außerdem von jedem Datensatz eine kostenlose Vorschau mit 10.000 Zeilen herunterladen.
Wir verwenden Cookies
Wir verwenden notwendige Cookies, damit die Seite funktioniert, und optionale Analyse-Cookies, um zu erfahren, was nützlich ist.
Mehr dazu in unserer Datenschutzerklärung.