API webatla

Підключіть базу доменів напряму до власного стека. Автентифікуйтеся ключем Bearer, завантажте цілий датасет або окремий зріз у стисненому JSONL і фільтруйте його локально. Без тарифікації за кожен рядок.

Отримати ключ API Специфікація OpenAPI
RESTчерез HTTPS, відповіді у JSON
Bearerавтентифікація токеном, список дозволених IP
JSONLфайли, стиснені zstd
OpenAPIмашиночитна специфікація 3.1

Як працює API

API віддає цілі файли, а не працює як ендпоінт живих запитів. Ви завантажуєте повний датасет або окремий зріз, а далі ріжете та фільтруєте його на власній машині. Завдяки цьому завантаження лишаються швидкими, а на спосіб запитів немає жодних обмежень.

1. Створіть ключ

Згенеруйте ключ API типу Bearer у своєму акаунті, за бажанням обмеживши його списком дозволених IP. Надсилайте його у заголовку Authorization.

2. Завантажте файли

Заберіть повний експорт або один зріз за TLD, суфіксом TLD, країною чи технологією. Перервані завантаження можна продовжити запитом Range.

3. Фільтруйте локально

Розпакуйте через zstd і робіть запити за допомогою jq, сховища даних або власного коду. Один вимір на зріз, решту перетинайте самостійно.

Автентифікація

Більшість ендпоінтів вимагають ключа API типу Bearer. Публічний каталог, а також ендпоінти перегляду та зразків працюють без автентифікації.

  • Створюйте ключі та керуйте ними у вашому акаунті. Повний ключ показується лише один раз під час створення, тому збережіть його в надійному місці.
  • Надсилайте його як Authorization: Bearer wbtl_… у кожному автентифікованому запиті.
  • За бажанням обмежте ключ списком дозволених IP. Запити з інших адрес отримують 401.
  • Ліміт частоти запитів рахується окремо для кожного ключа. Ключ можна замінити або відкликати будь-коли.
GEThttps://webatla.com/api/v1/me Authorization: Bearer wbtl_•••••••f3a9 # 200 OK { "user": { "id": "…", "email": "you@example.com", "role": "customer" }, "apiKeyId": "…", "scopes": ["me:read"] }

Ендпоінти

Повний машиночитний контракт доступний за адресою /api/v1/openapi.json (OpenAPI 3.1).

Метод Ендпоінт Автентифікація Ліміт частоти Призначення
GET/api/v1/datasetsПублічний60/minСписок опублікованих датасетів із цінами та кількістю рядків
GET/api/v1/preview?dataset={slug}Публічний30/minБезкоштовний зразок на 10 000 рядків з усього датасету
GET/api/v1/sample/{scope}/{key}?dataset={slug}Публічний30/minБезкоштовний зразок на 20 рядків для однієї сутності (TLD, суфікс, країна, технологія)
GET/api/v1/meBearer200/minКористувач і області доступу поточного ключа
GET/api/v1/me/ordersBearer200/minВаші замовлення та їхній статус
GET/api/v1/me/downloadsBearer200/minІсторія ваших завантажень (?limit= до 500)
GET/api/download/{slug}Bearer240/minПовний експорт датасету у форматі .jsonl.zst
GET/api/download/{slug}/{scope}/{key}Bearer240/minОдин зріз датасету за обраною областю

scope може бути tld, tld_suffix, country або technology. Ендпоінти завантаження вимагають оплаченого та чинного доступу до цього датасету.

Швидкий старт

Кожне завантаження — це один файл. Заберіть увесь датасет або спершу звузьте вибірку до одного виміру.

Завантажити повний експорт

GEThttps://webatla.com/api/download/all-data Authorization: Bearer wbtl_•••••••f3a9 # Віддає весь датасет одним файлом .jsonl.zst

Завантажити окремий зріз

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 # Рівно один вимір на файл. Решту фільтрувати локально.

curl, відновлення та локальна фільтрація

curl -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/technologies/technology/wordpress # Відновити перерване завантаження через -C - curl -C - -OJ -H "Authorization: Bearer wbtl_•••••••f3a9" \ https://webatla.com/api/download/all-data # Розпакувати і відфільтрувати на своїй машині zstdcat webatla-technologies-WordPress-*.jsonl.zst \ | jq -c 'select(.["Country by IP"] == "DE")' > wordpress-de.jsonl

Перегляньте минулі завантаження через GET https://webatla.com/api/v1/me/downloads. Спробуйте безкоштовний зразок без ключа: GET https://webatla.com/api/v1/preview?dataset=all-data.

Формат даних

Файли мають формат JSON Lines (один об'єкт JSON на рядок) і стиснені zstd. Схема спільна для всіх датасетів, тому сигнали збігаються за одним і тим самим ключем домену.

  • Кожен рядок — це один домен. Розпакуйте його командою zstd -d або читайте потоком через zstdcat.
  • Назви колонок можуть містити пробіли, тому звертайтеся до них у jq через квадратні дужки, наприклад .["Country by IP"].
  • Поля можуть бути відсутні або мати значення null. Задайте для них значення за замовчуванням, наприклад .Registrar // "".
  • Дати подані рядками у форматі ISO 8601, наприклад "2026-11-18T04:47:13.573" або "2026-04-22".

Довідник колонок

КолонкаТипПрикладДатасети
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*

Датасети: d1 All active domains · d2 Websites + Ranking · d3 Technologies · d4 DNS · d5 RDAP & WHOIS · d6 All data · d7 Domain Investor.
* У датасеті All data (d6) поля RDAP/WHOIS присутні лише для доменів, які мають запис про реєстрацію.

Структура вкладених полів

  • Technologies може бути або масивом назв, або об'єктом, що зіставляє назву з версією.
  • DNS Status — це рядок "TRUE" або "FALSE", а не булеве значення.
  • DNS records зіставляє тип запису з його значеннями: A, AAAA, NS, SOA, TXT, MX, CNAME, CAA, HTTPS, DNSKEY, DS, SRV, PTR…. MX має вигляд [{"host", "priority"}].
  • Social networks зіставляє платформу з посиланнями на профілі: facebook, instagram, x-twitter, linkedin, youtube, whatsapp, telegram, tiktok, github…. Це власні публічні посилання сайту, а не контакти конкретної людини.
  • RDAP/WHOIS Record містить необроблений запис про реєстрацію, з якого вилучено персональні поля згідно з правилами ICANN.

Рецепти

Перевірено на справжніх файлах експорту. Усе виконується локально після того, як ви завантажите файл.

Підрахунок, вибірка та експорт у CSV

# Порахувати рядки у зрізі zstdcat webatla-all-data-com-*.jsonl.zst | wc -l # Один домен на рядок zstdcat webatla-all-data-com-*.jsonl.zst | jq -r '.Domain' > domains.txt # Вибрані колонки у CSV zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r '[.Domain, .["Country by IP"] // "", .Registrar // ""] | @csv' > out.csv

Фільтрація за технологією

# Technologies буває масивом АБО об'єктом, обробляти обидва 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 і терміни дії

# Припарковані або мертві домени zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r 'select(.["DNS Status"] == "FALSE") | .Domain' > parked.txt # Унікальні A records zstdcat webatla-dns-com-*.jsonl.zst \ | jq -r '.["DNS records"].A[]?' | sort -u > ips.txt # Домени, що спливають у червні 2026 zstdcat webatla-all-data-com-*.jsonl.zst \ | jq -r 'select((.["Domain expiration date"] // "") | startswith("2026-06")) | .Domain'

Python

# Спочатку розпакувати zstd -d webatla-all-data-com-*.jsonl.zst # Потім читати рядок за рядком 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"])

Коди відповідей і ліміти

Помилки повертають тіло JSON у вигляді {"error": "…"}. Заголовки з лімітами частоти повертаються на кожен запит.

КодЗначення
200 / 206Успіх. 206 означає часткове (відновлене) завантаження.
302На маршруті завантаження немає сесії браузера. Для ключів API натомість повертається 401.
401Ключ API відсутній, недійсний або заблокований за IP.
403Немає активного оплаченого доступу до цього датасету.
404Невідомий датасет чи сутність, або файл ще не завантажено на сервер.
416Некоректний або багаточастинний запит Range.
429Перевищено ліміт частоти запитів. Зачекайте та повторіть спробу.

Публічні ендпоінти обмежені за IP. Автентифіковані ендпоінти обмежені за ключем або за користувачем, як зазначено вище.

Почніть розробку

Створіть ключ у своєму акаунті або спершу перегляньте датасети та заберіть безкоштовний зразок. Питання щодо індивідуального зрізу? Напишіть на support@webatla.com.