La API de webatla

Traiga la base de datos de dominios directamente a su propio stack. Autentíquese con una clave Bearer, descargue un dataset completo o un segmento como JSONL comprimido, y fíltrelo localmente. Sin medición por fila.

Obtener una clave API Especificación OpenAPI
RESTsobre HTTPS, respuestas JSON
Bearerautenticación mediante token, lista blanca de IP
JSONLarchivos comprimidos con zstd
OpenAPIespecificación 3.1 legible por máquina

Cómo funciona la API

La API entrega archivos completos, no un endpoint de consulta en vivo. Usted descarga un dataset completo o un único segmento, y después lo segmenta y filtra en su propia máquina. Esto mantiene las descargas rápidas y no impone ningún límite a sus consultas.

1. Crear una clave

Genere una clave de API Bearer en su cuenta, opcionalmente restringida a una lista blanca de IP. Envíela como encabezado Authorization.

2. Descargar archivos

Obtenga la exportación completa, o un segmento por TLD, sufijo de TLD, país o tecnología. Reanude las descargas interrumpidas con una solicitud Range.

3. Filtrar localmente

Descomprima con zstd y consulte con jq, un data warehouse o su propio código. Una dimensión por segmento, cruce el resto usted mismo.

Autenticación

La mayoría de los endpoints requieren una clave API Bearer. El catálogo público y los endpoints de preview y sample no necesitan autenticación.

  • Cree y gestione sus claves en su cuenta. La clave completa se muestra una sola vez, en el momento de la creación, guárdela por tanto en un lugar seguro.
  • Envíela como Authorization: Bearer wbtl_… en cada solicitud autenticada.
  • Puede restringir opcionalmente una clave a una lista blanca de IP. Las solicitudes de otras direcciones reciben 401.
  • El límite de solicitudes se aplica por clave. Puede rotar o revocar una clave en cualquier momento.
GEThttps://webatla.com/api/v1/me Authorization: Bearer wbtl_•••••••f3a9 # 200 OK { "user": { "id": "…", "email": "you@example.com", "role": "customer" }, "apiKeyId": "…", "scopes": ["me:read"] }

Endpoints

El contrato completo, legible por máquina, está disponible en /api/v1/openapi.json (especificación OpenAPI 3.1).

Método Endpoint Autenticación Límite de tasa Propósito
GET/api/v1/datasetsPúblico60/minLista de datasets publicados con precio y número de filas
GET/api/v1/preview?dataset={slug}Público30/minMuestra gratuita de 10.000 filas de un dataset completo
GET/api/v1/sample/{scope}/{key}?dataset={slug}Público30/minMuestra gratuita de 20 filas para una entidad (TLD, sufijo, país, tecnología)
GET/api/v1/meBearer200/minEl usuario y los scopes de la clave actual
GET/api/v1/me/ordersBearer200/minSus pedidos y su estado
GET/api/v1/me/downloadsBearer200/minSu historial de descargas (?limit= hasta 500)
GET/api/download/{slug}Bearer240/minExportación completa del dataset en formato .jsonl.zst
GET/api/download/{slug}/{scope}/{key}Bearer240/minUn segmento de dataset por scope

scope es uno de tld, tld_suffix, country o technology. Los endpoints de descarga requieren un acceso de pago vigente a ese dataset.

Inicio rápido

Cada descarga es un único archivo. Descargue el dataset completo o límitelo primero a una sola dimensión.

Descargar la exportación completa

GEThttps://webatla.com/api/download/all-data Authorization: Bearer wbtl_•••••••f3a9 # Transmite todo el dataset como un único archivo .jsonl.zst

Descargar un único segmento

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 # Exactamente una dimensión por archivo. Cruce el resto en local.

curl, reanudación y filtrado local

curl -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/technologies/technology/wordpress # Reanudar una descarga interrumpida con -C - curl -C - -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/all-data # Descomprima y filtre en su máquina zstdcat webatla-technologies-WordPress-*.jsonl.zst \ | jq -c 'select(.["Country by IP"] == "DE")' > wordpress-de.jsonl

Liste sus descargas anteriores con GET https://webatla.com/api/v1/me/downloads. Pruebe una vista previa gratuita sin clave: GET https://webatla.com/api/v1/preview?dataset=all-data.

Formato de datos

Los archivos son JSON Lines (un objeto JSON por línea), comprimidos con zstd. El esquema es común a todos los datasets, por lo que las señales se alinean en la misma clave de dominio.

  • Cada línea es un dominio. Descomprima con zstd -d o transmita en flujo con zstdcat.
  • Los nombres de columna pueden contener espacios, así que léalos con claves entre corchetes en jq, por ejemplo .["Country by IP"].
  • Los campos pueden faltar o ser null. Asígneles un valor por defecto, por ejemplo .Registrar // "".
  • Las fechas son cadenas ISO 8601, por ejemplo "2026-11-18T04:47:13.573" o "2026-04-22".

Referencia de columnas

ColumnaTipoEjemploDatasets
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*

Datasets: d1 All active domains · d2 Websites + Ranking · d3 Technologies · d4 DNS · d5 RDAP & WHOIS · d6 All data · d7 Domain Investor.
* En el dataset All data (d6) los campos RDAP/WHOIS solo están presentes en los dominios que cuentan con una ficha de registro.

Formas de los campos anidados

  • Technologies es una lista de nombres o un objeto que asocia cada nombre con su versión.
  • DNS Status es la cadena "TRUE" o "FALSE", no un booleano.
  • DNS records asocia un tipo de record a sus valores: A, AAAA, NS, SOA, TXT, MX, CNAME, CAA, HTTPS, DNSKEY, DS, SRV, PTR…. MX es [{"host", "priority"}].
  • Social networks asocia una plataforma a enlaces de perfil: facebook, instagram, x-twitter, linkedin, youtube, whatsapp, telegram, tiktok, github…. Son los enlaces públicos propios del sitio, no el contacto de una persona.
  • RDAP/WHOIS Record contiene el registro de inscripción en bruto, con los campos personales redactados según las normas de la ICANN.

Recetas

Verificado con archivos de exportación reales. Todo se ejecuta localmente después de descargar un archivo.

Contar, extraer y exportar a CSV

# Contar filas en un segmento zstdcat webatla-all-data-com-*.jsonl.zst | wc -l # Un dominio por línea zstdcat webatla-all-data-com-*.jsonl.zst | jq -r '.Domain' > domains.txt # Columnas seleccionadas a CSV zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r '[.Domain, .["Country by IP"] // "", .Registrar // ""] | @csv' > out.csv

Filtrar por tecnología

# Technologies es un array o un objeto, gestione ambos casos 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 y caducidad

# Dominios aparcados o muertos zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r 'select(.["DNS Status"] == "FALSE") | .Domain' > parked.txt # A records únicos zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r '.["DNS records"].A[]?' | sort -u > ips.txt # Dominios que caducan en junio de 2026 zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r 'select((.["Domain expiration date"] // "") | startswith("2026-06")) | .Domain'

Python

# Descomprimir primero zstd -d webatla-all-data-com-*.jsonl.zst # Después léalo en flujo, línea a línea 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"])

Códigos de respuesta y límites

Los errores devuelven un cuerpo JSON con la forma {"error": "…"}. Las cabeceras de límite de solicitudes se devuelven en cada petición.

CódigoSignificado
200 / 206Éxito. 206 corresponde a una descarga parcial (reanudada).
302Falta una sesión de navegador en una ruta de descarga. Las claves API reciben 401 en su lugar.
401Clave API ausente, no válida o bloqueada por IP.
403Sin acceso de pago activo a este dataset.
404Dataset o entidad desconocidos, o el archivo aún no está subido.
416Solicitud Range mal formada o multipart.
429Límite de solicitudes superado. Espere un momento y vuelva a intentarlo.

Los endpoints públicos están limitados por IP. Los endpoints autenticados están limitados por clave o por usuario, como se indica arriba.

Empiece a construir

Cree una clave en su cuenta, o explore los datasets y consiga antes una muestra gratuita. ¿Preguntas sobre un extracto a medida? Escriba a support@webatla.com.