Кожен файл є JSON Lines, стисненим zstd, з одним доменом на рядок. Нижче показано, як його відкрити, поставити йому запитання й завантажити у ваш стек. Кожен рецепт запущено на безкоштовному зразку 10K рядків, а на сторінці показано саме той вивід, який він дав.
Формат
JSON Lines, стиснення zstd
.jsonl.zst
Один рядок на
Домен, усі ключі завжди присутні
значення можуть бути null
Назва файлу
Датасет і дата експорту
all-data-2026-10-16.jsonl.zst
Свіжість
Новий експорт щодня
ті самі колонки щодня
1 · Що ви завантажуєте
Що ви завантажуєте
Кожен датасет webatla є файлом JSON Lines: один домен на рядок, один JSON-об'єкт на рядок. Платні файли стиснуто zstd.
Файл
Що всередині
Формат
Повний датасет
Усі рядки датасету
.jsonl.zst
Зріз
Усі рядки для одного TLD, TLD-суфікса, країни (за IP) або технології, з тими самими полями, що й у повному файлі
.jsonl.zst
Безкоштовний зразок (10K рядків)
Перші 10 000 рядків повного файлу
.jsonl звичайний, без стиснення
Зразок на 20 рядків на сторінках TLD, країн і технологій
Рядки цього TLD, країни чи технології з тими самими назвами полів, що й у платному файлі. Показано одні з найповніших рядків, а не випадкові.
на сторінці
Завантажте зріз замість фільтрування повного файлу
Якщо вам потрібна одна зона, країна чи технологія, її зріз уже відфільтровано, і він у багато разів менший.
Безкоштовний зразок показує формат, а не типовий склад даних
Більшість файлів відсортовано за TLD-суфіксом, тож перші 10 000 рядків охоплюють лише кілька суфіксів з початку алфавіту, і .com серед них немає. Фільтр, який на зразку нічого не повертає, на повному файлі може повернути мільйони рядків. Використовуйте зразок, щоб складати й перевіряти свої команди. На платному файлі вони працюють без змін.
2 · Відкрити файл
Заглянути всередину без розпакування
Усі ці інструменти читають стиснутий файл потоком. Єдина відмінність між зразком і платним файлом полягає в способі відкриття.
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"])
Які магазини на WooCommerce розміщені на серверах у Німеччині?
Справжній вивід на зразку 10K рядків
ariana.acDE
fjak.acDE
empower.abudhabiDE
Відсортовано за PR value, збережено як woocommerce-de.csv, рядків: 12. Це CSV, який відкриє ваша CRM або електронна таблиця.
Показати запит
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';
Частка серед цих шести конструкторів, а не серед усіх сайтів. Запустіть на зрізі країни, щоб порівняти один ринок.
Показати запит
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;
Справжній вивід на зразку 10K рядків, запуск 16 жовт. 2026 р.
kayorashop.store2026-10-11
moonovaactivewearshop.com2026-10-10
shopcastava.com2026-10-01
Зареєстровані за останні 30 днів, із зазначенням реєстратора. Замініть shop на назву вашого бренду.
Показати запит
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;
У яких сайтів з рейтингом закінчується реєстрація протягом наступних 30 днів?
Справжній вивід на зразку 10K рядків, запуск 16 жовт. 2026 р.
adamcadre.ac2026-10-24
ama.ab.ca2026-10-31
psychologistsassociation.ab.ca2026-11-09
Відсортовано за PR value. Багато реєстрів продовжують реєстрацію автоматично, тож це список для спостереження, а не прогноз, які домени звільняться.
Показати запит
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;
Частка доменів із робочим записом NS, згрупована за двома останніми мітками імені хоста.
Показати запит
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;
Повний файл не вміщується в таблицю, тож спершу відфільтруйте його або почніть зі зрізу: одна технологія, TLD, TLD-суфікс чи країна окремим файлом, зі сторінки webatla або через API. З доступом до Technologies або All data кожна сторінка технології має блок завантаження свого зрізу.
З повного файлу
Один TLD або один суфікс
jq
TLD є останньою міткою домену. TLD-суфікс є точним публічним суфіксом.
# 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
Сайт подано рядком з IP-адресою, а його країною вважається країна, де розміщено сервер (ISO-код великими літерами). grep відкидає рядки, які не можуть збігтися, а jq точно перевіряє решту.
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
Справжній вивід на зразку 10K рядків
de-websites.jsonl: 595 lines, the same as jq alone
Експорт у CSV для Excel або Google Sheets
jq
Excel показує щонайбільше 1 048 576 рядків, тож спершу відфільтруйте. Імпортуйте CSV як UTF-8 (Data, From Text/CSV), щоб назви нелатинськими літерами відображалися правильно.
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';
Список для допродажу: сайти на HubSpot, що також працюють на WordPress
Зріз HubSpot, потім залиште стеки з 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';
Справжній вивід на зразку 10K рядків
Website,Country
ateliercrescendo.ac,US
Операції продажів
Один файл на територію
Розбийте зріз на окремі CSV за країною сервера.
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);
Чи вміститься в таблицю?Один аркуш Excel вміщує 1 048 576 рядків
Сайти HubSpot375 063Вміститься на одному аркуші
Сайти WordPress23 798 524Відфільтруйте або розділіть
All data, повний файл420 933 308Завеликий для будь-якої таблиці
5 · Завантажити
Postgres, Parquet або поєднання з вашим списком
PostgreSQL
psql
Кожен рядок стає одним рядком jsonb, з індексом GIN на 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"
Справжній вивід на зразку 10K рядків
COPY 10000
country | sites
---------+-------
US | 300
DE | 110
CA | 29
Parquet
DuckDB
Типізовані колонки, а Technologies як список назв. Завантажується в BigQuery, Snowflake, Spark або 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);
Справжній вивід на зразку 10K рядків
technologies.parquet: 10000 rows
domain · country · pr_value · technologies (list of names)
Збагатіть власний список
DuckDB
Ваш CSV з одного боку, експорт з іншого, зіставлення за 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;
Справжній вивід на зразку 10K рядків
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 · Щоденні оновлення
Що змінилося за ніч
Свіжий експорт надходить щодня. Порівняйте два дні за Domain і передавайте далі лише зміни. Поміняйте два файли місцями, щоб побачити домени, що випали.
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 · Типові пастки
На чому найчастіше спотикаються
Назви полів містять пробіли
Беріть їх у лапки і в SQL, і в jq.
jq: ."TLD suffix"SQL: "TLD suffix" = 'com.sa'
DNS Status зберігається як текст
Він містить текст "TRUE" або "FALSE", а не булеве значення, тож порівнюйте його як рядок.
select(."DNS Status" == "TRUE")
Technologies має кілька форм
Словник назв і версій (або назв і об'єктів із версією), список назв або null. Читайте ключі словника й елементи списку, і в обох випадках отримаєте один список.
jq: (.Technologies // []) | if type == "object" then keys else . end
Ніколи не розпаковуйте повний файл на диск
Повний файл All data у стисненому вигляді важить близько 34 GB, а розпакований займає кілька сотень GB. Читайте його потоком, як це роблять усі рецепти тут.
Перевірте перші рядки
У DuckDB колонка з помилкою в назві повертає NULL, а не помилку.
8 · Усунення проблем
Коли щось іде не так
Симптом
Причина і рішення
zstd: … unsupported format на безкоштовному зразку
Зразок є звичайним JSONL без стиснення. Передайте його в jq напряму або скористайтеся zstdcat, який читає обидва види.
Python повертає набагато менше рядків, ніж zstd -dc FILE | wc -l
Файл складається з багатьох фреймів zstd, а його прочитано викликом, який зупиняється після першого. Використовуйте stream_reader з read_across_frames=True, як у рецепті для Python.
jq: syntax error на .TLD suffix
Беріть у лапки назви, що містять пробіли: ."TLD suffix"
SQL повертає 0 рядків без помилки
'Country by IP' в одинарних лапках є рядком, а не колонкою. Для назв колонок використовуйте подвійні лапки.
DuckDB зупиняється на півдорозі з Expected OBJECT, but got ARRAY
Автоматичне визначення схеми дивиться лише на перші рядки. Вкажіть колонки явно, а вкладені поля оголосіть як JSON.
Чи повністю завантажено мій файл?
zstd -tq FILE && echo OK виводить OK, якщо файл розпаковується повністю.
Кожен рецепт працює на повному щоденному файлі
Доступ на місяць або рік, свіжий експорт щодня й API для зрізів. Кожен акаунт також може завантажити безкоштовний зразок 10K рядків для кожного датасету.
Ми використовуємо cookies
Необхідні cookies забезпечують роботу сайту, а аналітичні допомагають зрозуміти, що для вас корисно.
Перегляньте нашу політику конфіденційності.