Cada archivo es JSON Lines comprimido con zstd, con un dominio por línea. Aquí verá cómo abrirlo, hacerle preguntas y cargarlo en su stack. Cada receta se ejecutó con la muestra gratuita de 10.000 filas y la salida que ve es la que se imprimió.
Formato
JSON Lines, comprimido con zstd
.jsonl.zst
Una fila por
Dominio, todas las claves siempre presentes
los valores pueden ser null
Nombre del archivo
Dataset y fecha de exportación
all-data-2026-10-16.jsonl.zst
Actualización
Una exportación nueva cada día
las mismas columnas cada día
1 · Qué descarga
Qué descarga
Cada dataset de webatla es JSON Lines: un dominio por línea, un objeto JSON por línea. Los archivos de pago se comprimen con zstd.
Archivo
Qué contiene
Formato
Dataset completo
Todas las filas del dataset
.jsonl.zst
Corte
Todas las filas de un TLD, un sufijo de TLD, un país (por IP) o una tecnología, con los mismos campos que el archivo completo
.jsonl.zst
Muestra gratuita (10.000 filas)
Las primeras 10.000 líneas del archivo completo
.jsonl texto plano, sin comprimir
Vista previa de 20 filas en las páginas de TLD, país y tecnología
Filas de ese TLD, país o tecnología, con los mismos nombres de campo que el archivo de pago. Muestra algunas de las filas más completas, no filas aleatorias.
en la página
Descargue un corte en lugar de filtrar el archivo completo
Si necesita una zona, un país o una tecnología, su corte ya está filtrado y es muchas veces más pequeño.
La muestra gratuita enseña el formato, no una mezcla típica
La mayoría de los archivos están ordenados por sufijo de TLD, así que las primeras 10.000 líneas cubren solo unos pocos sufijos del principio del alfabeto, y .com no está entre ellos. Un filtro que no devuelve nada en la muestra gratuita puede devolver millones de filas en el archivo completo. Use la muestra gratuita para crear y probar sus comandos. Se ejecutan sin cambios en el archivo de pago.
2 · Abrir el archivo
Mire dentro sin descomprimirlo
Todas estas herramientas leen el archivo comprimido como un flujo. La única diferencia entre la muestra gratuita y el archivo de pago es cómo se abre.
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"])
Salida real con la muestra gratuita de 10.000 filas
¿Qué tiendas WooCommerce están alojadas en Alemania?
Salida real con la muestra gratuita de 10.000 filas
ariana.acDE
fjak.acDE
empower.abudhabiDE
Ordenadas por PR value y guardadas como woocommerce-de.csv con 12 filas. Un CSV que abre su CRM o su hoja de cálculo.
Mostrar la consulta
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';
Salida real con la muestra gratuita de 10.000 filas
WordPress628 · 80,6 %
Wix52 · 6,7 %
Squarespace45 · 5,8 %
Drupal22 · 2,8 %
Webflow20 · 2,6 %
Joomla12 · 1,5 %
Proporción entre estos seis creadores de sitios web, no entre todos los sitios web. Ejecútelo sobre un corte por país para comparar un mercado.
Mostrar la consulta
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;
¿Qué dominios nuevos contienen el nombre de su marca?
Salida real con la muestra gratuita de 10.000 filas, ejecutada el 16 oct 2026
kayorashop.store2026-10-11
moonovaactivewearshop.com2026-10-10
shopcastava.com2026-10-01
Registrados en los últimos 30 días, con el registrador. Cambie shop por el nombre de su marca.
Mostrar la consulta
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;
¿Qué sitios web con ranking caducan en los próximos 30 días?
Salida real con la muestra gratuita de 10.000 filas, ejecutada el 16 oct 2026
adamcadre.ac2026-10-24
ama.ab.ca2026-10-31
psychologistsassociation.ab.ca2026-11-09
Ordenados por PR value. Muchos registros renuevan automáticamente, así que trátelo como una lista de seguimiento y no como una lista de dominios que se liberan.
Mostrar la consulta
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;
Salida real con la muestra gratuita de 10.000 filas
cloudflare.com2277 · 25,1 %
registrar-servers.com704 · 7,7 %
domaincontrol.com622 · 6,8 %
Proporción de dominios con un registro NS utilizable, agrupados por las dos últimas etiquetas del nombre de host.
Mostrar la consulta
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;
Cree una lista a partir del archivo completo o de un corte
El archivo completo no cabe en una hoja de cálculo, así que fíltrelo primero o parta de un corte: una tecnología, un TLD, un sufijo de TLD o un país como archivo propio, desde su página de webatla o desde la API. Con acceso a Technologies o a All data, cada página de tecnología tiene un cuadro de descarga para su corte.
Desde el archivo completo
Un TLD o un sufijo
jq
El TLD es la última etiqueta del dominio. El sufijo de TLD es el sufijo público exacto.
# 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
Salida real con la muestra gratuita de 10.000 filas
Un sitio web es una fila con una dirección IP, y su país es donde está alojado el servidor (un código ISO en mayúsculas). grep descarta las líneas que no pueden coincidir y después jq comprueba el resto con exactitud.
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
Salida real con la muestra gratuita de 10.000 filas
de-websites.jsonl: 595 lines, the same as jq alone
Exportar a CSV para Excel o Google Sheets
jq
Excel muestra como máximo 1.048.576 filas, así que filtre primero. Importe el CSV como UTF-8 (Data, From Text/CSV) para que los nombres con caracteres no latinos se vean bien.
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';
Salida real con la muestra gratuita de 10.000 filas
Lista de venta adicional: sitios HubSpot que también usan WordPress
El corte de HubSpot y, después, los stacks que incluyen 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';
Salida real con la muestra gratuita de 10.000 filas
Website,Country
ateliercrescendo.ac,US
Operaciones de ventas
Un archivo por territorio
Divida un corte en un CSV por cada país del servidor.
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);
Salida real con la muestra gratuita de 10.000 filas
¿Cabrá en una hoja de cálculo?Una hoja de Excel admite 1.048.576 filas
Sitios HubSpot375.063Cabe en una hoja
Sitios WordPress23.798.524Filtrar o dividir
All data, el archivo completo420.933.308Demasiado grande para cualquier hoja de cálculo
5 · Cargarlo
Postgres, Parquet o un cruce con su propia lista
PostgreSQL
psql
Cada línea se convierte en una fila jsonb, con un índice GIN sobre 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"
Salida real con la muestra gratuita de 10.000 filas
COPY 10000
country | sites
---------+-------
US | 300
DE | 110
CA | 29
Parquet
DuckDB
Columnas tipadas, con Technologies como lista de nombres. Se carga en BigQuery, Snowflake, Spark o 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);
Salida real con la muestra gratuita de 10.000 filas
technologies.parquet: 10000 rows
domain · country · pr_value · technologies (list of names)
Enriquezca su propia lista
DuckDB
Su CSV a un lado, la exportación al otro, cruzados por 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;
Salida real con la muestra gratuita de 10.000 filas
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 · Actualizaciones diarias
Vea qué cambió durante la noche
Cada día llega una exportación nueva. Compare dos días por Domain y envíe solo los cambios a los sistemas posteriores. Intercambie los dos archivos para listar los dominios que desaparecieron.
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 · Errores frecuentes
Cosas que suelen dar problemas
Los nombres de campo tienen espacios
Póngalos entre comillas, tanto en SQL como en jq.
jq: ."TLD suffix"SQL: "TLD suffix" = 'com.sa'
DNS Status es texto
Contiene el texto "TRUE" o "FALSE", no un booleano, así que compárelo como cadena de texto.
select(."DNS Status" == "TRUE")
Technologies tiene varias formas
Un mapa de nombres a versiones (o a objetos con una versión), una lista de nombres o null. Lea las claves de un mapa y los elementos de una lista, y obtendrá una lista en ambos casos.
jq: (.Technologies // []) | if type == "object" then keys else . end
No descomprima nunca un archivo completo en el disco
El archivo completo de All data ocupa unos 34 GB comprimido y varios cientos de GB descomprimido. Léalo como un flujo, como hace cada receta de esta página.
Revise las primeras filas
En DuckDB, un nombre de columna mal escrito devuelve NULL, no un error.
8 · Solución de problemas
Cuando algo sale mal
Síntoma
Causa y solución
zstd: … unsupported format con la muestra gratuita
La muestra gratuita es JSONL plano, sin comprimir. Pásela a jq directamente o use zstdcat, que lee ambos tipos.
Python devuelve muchas menos filas que zstd -dc FILE | wc -l
El archivo tiene muchos frames de zstd y se leyó con una llamada que se detiene tras el primero. Use stream_reader con read_across_frames=True, como en la receta de Python.
jq: syntax error con .TLD suffix
Ponga entre comillas los nombres que contienen espacios: ."TLD suffix"
SQL devuelve 0 filas sin ningún error
'Country by IP' entre comillas simples es una cadena de texto, no una columna. Use comillas dobles para los nombres de columna.
DuckDB se detiene a mitad con Expected OBJECT, but got ARRAY
La detección automática del esquema solo mira las primeras filas. Declare las columnas, con los campos anidados como JSON.
¿Mi descarga está completa?
zstd -tq FILE && echo OK imprime OK cuando el archivo se descomprime por completo.
Cada receta funciona con el archivo diario completo
Acceso mensual o anual, una exportación nueva cada día y una API para cortes. Cada cuenta puede además descargar una muestra gratuita de 10.000 filas de cada dataset.
Usamos cookies
Utilizamos cookies esenciales para que el sitio funcione y cookies de análisis opcionales para saber qué es útil.
Consulte nuestra política de privacidad.