Chaque fichier est au format JSON Lines compressé en zstd, avec un domaine par ligne. Voici comment l’ouvrir, l’interroger et le charger dans votre stack. Chaque recette a été exécutée sur l’aperçu gratuit de 10 000 lignes, et le résultat affiché est celui qu’elle a produit.
Format
JSON Lines, compressé en zstd
.jsonl.zst
Une ligne par
Domaine, chaque clé toujours présente
les valeurs peuvent être null
Nom du fichier
Dataset et date d’export
all-data-2026-10-16.jsonl.zst
Fraîcheur
Un nouvel export chaque jour
mêmes colonnes chaque jour
1 · Ce que vous téléchargez
Ce que vous téléchargez
Chaque dataset webatla est au format JSON Lines : un domaine par ligne, un objet JSON par ligne. Les fichiers payants sont compressés en zstd.
Fichier
Contenu
Format
Dataset complet
Toutes les lignes du dataset
.jsonl.zst
Tranche
Toutes les lignes d’un TLD, d’un suffixe de TLD, d’un pays (selon l’IP) ou d’une technologie, avec les mêmes champs que le fichier complet
.jsonl.zst
Aperçu gratuit (10 000 lignes)
Les 10 000 premières lignes du fichier complet
.jsonl brut, non compressé
Aperçu de 20 lignes sur les pages de TLD, de pays et de technologie
Des lignes du TLD, du pays ou de la technologie concernés, avec les mêmes noms de champs que le fichier payant. Il montre certaines des lignes les plus complètes, pas des lignes au hasard.
sur la page
Téléchargez une tranche plutôt que de filtrer le fichier complet
Si vous n’avez besoin que d’une zone, d’un pays ou d’une technologie, sa tranche est déjà filtrée et bien plus petite.
L’aperçu gratuit montre le format, pas un mélange typique
La plupart des fichiers sont triés par suffixe de TLD, donc les 10 000 premières lignes ne couvrent que quelques suffixes du début de l’alphabet, et .com n’en fait pas partie. Un filtre qui ne renvoie rien sur l’aperçu peut renvoyer des millions de lignes sur le fichier complet. Utilisez l’aperçu pour construire et tester vos commandes. Elles s’exécutent à l’identique sur le fichier payant.
2 · Ouvrir le fichier
Regarder à l’intérieur sans décompresser
Tous les outils présentés ici lisent le fichier compressé en flux. La seule différence entre l’aperçu et le fichier payant est la façon de l’ouvrir.
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"])
Résultat réel sur l’aperçu gratuit de 10 000 lignes
Quelles boutiques WooCommerce sont hébergées en Allemagne ?
Résultat réel sur l’aperçu gratuit de 10 000 lignes
ariana.acDE
fjak.acDE
empower.abudhabiDE
Classées par PR value, enregistrées dans woocommerce-de.csv avec 12 lignes. Un CSV que votre CRM ou votre tableur sait ouvrir.
Afficher la requête
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';
Quel outil de création de sites propulse le plus de sites web ?
Résultat réel sur l’aperçu gratuit de 10 000 lignes
WordPress628 · 80,6 %
Wix52 · 6,7 %
Squarespace45 · 5,8 %
Drupal22 · 2,8 %
Webflow20 · 2,6 %
Joomla12 · 1,5 %
Part parmi ces six outils, pas parmi tous les sites web. Exécutez la requête sur la tranche d’un pays pour comparer un seul marché.
Afficher la requête
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;
Quels nouveaux domaines contiennent le nom de votre marque ?
Résultat réel sur l’aperçu gratuit de 10 000 lignes, exécuté le 16 oct. 2026
kayorashop.store2026-10-11
moonovaactivewearshop.com2026-10-10
shopcastava.com2026-10-01
Enregistrés au cours des 30 derniers jours, avec le registrar. Remplacez shop par le nom de votre marque.
Afficher la requête
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;
Quels sites web classés expirent dans les 30 prochains jours ?
Résultat réel sur l’aperçu gratuit de 10 000 lignes, exécuté le 16 oct. 2026
adamcadre.ac2026-10-24
ama.ab.ca2026-10-31
psychologistsassociation.ab.ca2026-11-09
Triés par PR value. De nombreux registres renouvellent automatiquement, alors voyez-y une liste de surveillance, pas une liste de domaines qui vont se libérer.
Afficher la requête
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;
Résultat réel sur l’aperçu gratuit de 10 000 lignes
cloudflare.com2 277 · 25,1 %
registrar-servers.com704 · 7,7 %
domaincontrol.com622 · 6,8 %
Part des domaines avec un enregistrement NS exploitable, regroupée selon les deux derniers segments du nom d’hôte.
Afficher la requête
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;
Créer une liste à partir du fichier complet ou d’une tranche
Le fichier complet ne tient pas dans un tableur, alors filtrez-le d’abord, ou partez d’une tranche : une technologie, un TLD, un suffixe de TLD ou un pays en fichier à part, depuis sa page webatla ou l’API. Avec un accès à Technologies ou à All data, chaque page de technologie propose un bloc de téléchargement pour sa tranche.
À partir du fichier complet
Un TLD ou un suffixe
jq
Le TLD est le dernier segment du nom de domaine. Le suffixe de TLD est le suffixe public exact.
# 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
Résultat réel sur l’aperçu gratuit de 10 000 lignes
Un site web est une ligne avec une adresse IP, et son pays est celui où le serveur est hébergé (un code ISO en majuscules). grep écarte les lignes qui ne peuvent pas correspondre, puis jq vérifie le reste avec exactitude.
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
Résultat réel sur l’aperçu gratuit de 10 000 lignes
de-websites.jsonl: 595 lines, the same as jq alone
Exporter en CSV pour Excel ou Google Sheets
jq
Excel n’affiche que 1 048 576 lignes au maximum, alors filtrez d’abord. Importez le CSV en UTF-8 (Data, From Text/CSV) pour que les noms non latins s’affichent correctement.
La tranche WooCommerce, puis on garde un seul pays.
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';
Résultat réel sur l’aperçu gratuit de 10 000 lignes
Liste d’upsell : sites HubSpot qui utilisent aussi WordPress
La tranche HubSpot, puis on garde les stacks qui incluent WordPress.
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';
Résultat réel sur l’aperçu gratuit de 10 000 lignes
Website,Country
ateliercrescendo.ac,US
Opérations commerciales
Un fichier par territoire
Découpez une tranche en un CSV par pays de serveur.
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);
Résultat réel sur l’aperçu gratuit de 10 000 lignes
Cela tient-il dans un tableur ?Une feuille Excel contient 1 048 576 lignes
Sites HubSpot375 063Tient dans une feuille
Sites WordPress23 798 524À filtrer ou à découper
All data, le fichier complet420 933 308Trop volumineux pour n’importe quel tableur
5 · Le charger
Postgres, Parquet ou une jointure avec votre propre liste
PostgreSQL
psql
Chaque ligne devient un enregistrement jsonb, avec un index GIN sur 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"
Résultat réel sur l’aperçu gratuit de 10 000 lignes
COPY 10000
country | sites
---------+-------
US | 300
DE | 110
CA | 29
Parquet
DuckDB
Des colonnes typées, avec Technologies sous forme de liste de noms. Se charge dans BigQuery, Snowflake, Spark ou pandas.
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);
Résultat réel sur l’aperçu gratuit de 10 000 lignes
technologies.parquet: 10000 rows
domain · country · pr_value · technologies (list of names)
Enrichissez votre propre liste
DuckDB
Votre CSV d’un côté, l’export de l’autre, mis en correspondance sur 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;
Résultat réel sur l’aperçu gratuit de 10 000 lignes
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 · Mises à jour quotidiennes
Voir ce qui a changé pendant la nuit
Un nouvel export arrive chaque jour. Comparez deux jours sur Domain et n’envoyez en aval que les changements. Inversez les deux fichiers pour lister les domaines qui ont disparu.
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 · Pièges courants
Les pièges classiques
Les noms de champs contiennent des espaces
Mettez-les entre guillemets, en SQL comme en jq.
jq: ."TLD suffix"SQL: "TLD suffix" = 'com.sa'
DNS Status est du texte
Il contient le texte "TRUE" ou "FALSE", pas un booléen, alors comparez-le comme une chaîne de caractères.
select(."DNS Status" == "TRUE")
Technologies existe sous plusieurs formes
Un objet qui associe des noms à des versions (ou à des objets contenant une version), une liste de noms, ou null. Lisez les clés d’un objet et les éléments d’une liste, et vous obtenez une seule liste dans les deux cas.
jq: (.Technologies // []) | if type == "object" then keys else . end
Ne décompressez jamais un fichier complet sur le disque
Le fichier All data complet fait environ 34 Go une fois compressé et plusieurs centaines de Go une fois décompressé. Lisez-le en flux, comme le fait chaque recette ici.
Vérifiez les premières lignes
Dans DuckDB, un nom de colonne mal orthographié renvoie NULL, et non une erreur.
8 · Dépannage
Quand quelque chose ne va pas
Symptôme
Cause et solution
zstd: … unsupported format sur l’aperçu gratuit
L’aperçu est du JSONL brut, non compressé. Donnez-le directement à jq, ou utilisez zstdcat, qui lit les deux.
Python renvoie beaucoup moins de lignes que zstd -dc FILE | wc -l
Le fichier contient de nombreuses trames zstd et a été lu avec un appel qui s’arrête après la première. Utilisez stream_reader avec read_across_frames=True, comme dans la recette Python.
Erreur jq (syntax error) sur .TLD suffix
Mettez entre guillemets les noms qui contiennent des espaces : ."TLD suffix"
Le SQL renvoie 0 ligne sans erreur
'Country by IP' entre guillemets simples est une chaîne, pas une colonne. Utilisez des guillemets doubles pour les noms de colonnes.
DuckDB s’arrête en cours de route avec Expected OBJECT, but got ARRAY
La détection automatique du schéma n’examine que les premières lignes. Déclarez les colonnes, avec les champs imbriqués en JSON.
Mon téléchargement est-il complet ?
zstd -tq FILE && echo OK affiche OK lorsque le fichier se décompresse entièrement.
Chaque recette fonctionne sur le fichier quotidien complet
Un accès mensuel ou annuel, un export frais chaque jour et une API pour les tranches. Chaque compte peut aussi télécharger un aperçu gratuit de 10 000 lignes de chaque dataset.
Nous utilisons des cookies
Nous utilisons des cookies essentiels pour que le site fonctionne, et des cookies d’analyse facultatifs pour savoir ce qui est utile.
Consultez notre politique de confidentialité.