Як користуватися файлами webatla

Кожен файл є 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 · Відкрити файл

Заглянути всередину без розпакування

Усі ці інструменти читають стиснутий файл потоком. Єдина відмінність між зразком і платним файлом полягає в способі відкриття.

Перш ніж почати: оберіть інструмент

sudo apt install zstd jq        # Debian, Ubuntu
brew install zstd jq duckdb     # macOS
pip install duckdb zstandard    # Python, any OS

У Windows використовуйте WSL.

Та сама команда для зразка й платного файлу

# free preview (plain JSONL): give the file to jq directly
jq -c 'select(."Country by IP" == "BG") | {Domain, "TLD suffix", "IP address"}' \
  webatla-all-data-preview-10k.jsonl

# paid file or slice (.jsonl.zst): decompress on the fly into the same jq
zstd -dc all-data-2026-10-16.jsonl.zst \
  | jq -c 'select(."Country by IP" == "BG") | {Domain, "TLD suffix", "IP address"}'
Справжній вивід на зразку 10K рядків
{"Domain":"360.0.bg","TLD suffix":"0.bg","IP address":"31.13.236.27"}
{"Domain":"doktoranti5.0.bg","TLD suffix":"0.bg","IP address":"185.80.2.212"}
{"Domain":"edu5.0.bg","TLD suffix":"0.bg","IP address":"79.98.104.12"}
...

zstdcat читає обидва види файлів, тож один конвеєр працює і для зразка, і для платного файлу: zstdcat FILE | ...

DuckDB

brew install duckdbwinget install DuckDB.cli

SELECT Domain, TLD, "Country by IP", "HTTP status"
FROM read_json('all-data-2026-10-16.jsonl.zst',
  columns = {Domain: 'VARCHAR', TLD: 'VARCHAR',
             "Country by IP": 'VARCHAR', "HTTP status": 'INTEGER'})
LIMIT 3;
Справжній вивід на зразку 10K рядків
Domain       TLD  Country by IP  HTTP status
360.0.bg     bg   BG             200
digsys.0.bg  bg   NULL           200
dnssec.0.bg  bg   NULL           0

zstdcat + jq

brew install zstd jqapt install zstd jq

zstdcat dns-2026-10-16.jsonl.zst | head -n 1 | jq .
Справжній вивід на зразку 10K рядків
{
  "Domain": "360.0.bg",
  "TLD suffix": "0.bg",
  "TLD": "bg",
  "Domain type": "ICANN",
  ...

Python

pip install zstandard

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"])
Справжній вивід на зразку 10K рядків
edu5.0.bg
shopping.9guacu.br
ffe.a.se
...

Порахуйте рядки й перегляньте список полів

brew install zstd jqapt install zstd jq

zstd -dc all-data-2026-10-16.jsonl.zst | wc -l
zstd -dc all-data-2026-10-16.jsonl.zst | head -n 1 | jq -r 'keys_unsorted[]'
Справжній вивід на зразку 10K рядків
10000
Domain
TLD suffix
TLD
Domain type
HTTP status
...

Створіть власну випадкову вибірку

Безкоштовний зразок не випадковий. Щоб отримати репрезентативну вибірку із завантаженого файлу:

Linux: shufmacOS: gshuf (brew install coreutils)

zstd -dc all-data-2026-10-16.jsonl.zst | shuf -n 1000 > random-1000.jsonl
wc -l < random-1000.jsonl
Справжній вивід на зразку 10K рядків
1000

3 · Відповіді на запитання

На які запитання відповідає щоденний файл

Спочатку відповідь, а запит DuckDB одним кліком. Відкрийте термінал у папці із завантаженим файлом, введіть duckdb і вставте запит.

Продажі Technologies

Які магазини на 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';
Датасет Technologies →
Продуктовий маркетинг Technologies

На якому конструкторі працює найбільше сайтів?

Справжній вивід на зразку 10K рядків
WordPress628 · 80,6%
Wix52 · 6,7%
Squarespace45 · 5,8%
Drupal22 · 2,8%
Webflow20 · 2,6%
Joomla12 · 1,5%

Частка серед цих шести конструкторів, а не серед усіх сайтів. Запустіть на зрізі країни, щоб порівняти один ринок.

Показати запит
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;
Датасет Technologies →
Захист бренду RDAP & WHOIS

Які нові домени містять назву вашого бренду?

Справжній вивід на зразку 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;
Датасет RDAP & WHOIS →
Інвестиції в домени Websites + Ranking

У яких сайтів з рейтингом закінчується реєстрація протягом наступних 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;
Датасет Websites + Ranking →
Email та інфраструктура DNS

Хто обслуговує DNS цих доменів?

Справжній вивід на зразку 10K рядків
cloudflare.com2 277 · 25,1%
registrar-servers.com704 · 7,7%
domaincontrol.com622 · 6,8%

Частка доменів із робочим записом 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;
Датасет DNS →
Продажі All data

Які компанії використовують Google Workspace для пошти?

Справжній вивід на зразку 10K рядків
edu5.0.bgGoogle
shopping.9guacu.brGoogle
ffe.a.seGoogle

Доменів у безкоштовному зразку: 456, визначено за їхніми записами MX. Для Microsoft 365 перевіряйте натомість .mail.protection.outlook.com.

Показати запит
zstd -dc all-data-2026-10-16.jsonl.zst | jq -r '
  select(any(."DNS records".MX[]?.host;
             ascii_downcase | test("(^|\\.)(google|googlemail)\\.com$")))
  | .Domain' > google-workspace.txt
Датасет All data →

4 · Скласти список

Складіть список із повного файлу або зрізу

Повний файл не вміщується в таблицю, тож спершу відфільтруйте його або почніть зі зрізу: одна технологія, 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
Справжній вивід на зразку 10K рядків
de.jsonl      224 lines
2ix.de.jsonl   52 lines
ac.jsonl     5463 lines

Сайти, розміщені в одній країні, швидко

grep + jq

Сайт подано рядком з 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), щоб назви нелатинськими літерами відображалися правильно.

zstd -dc all-data-2026-10-16.jsonl.zst | jq -nr '
  ["Domain","TLD suffix","HTTP status","Technologies"],
  (inputs | [.Domain, ."TLD suffix", ."HTTP status",
             (.Technologies | if . then tojson else null end)])
  | @csv' > all-data.csv
Справжній вивід на зразку 10K рядків
"Domain","TLD suffix","HTTP status","Technologies"
"360.0.bg","0.bg",200,"{""HTTP/2"":{""version"":null},...}"
...  10,001 lines

Зі зрізу

Продажі

Потенційні клієнти одного ринку

Зріз WooCommerce, потім залиште одну країну.

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';
Справжній вивід на зразку 10K рядків
Website,Country
ariana.ac,DE
fjak.ac,DE
empower.abudhabi,DE
Агенції

Список для допродажу: сайти на 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);
Справжній вивід на зразку 10K рядків
woocommerce-by-country/Country=DE/data_0.csv
woocommerce-by-country/Country=US/data_0.csv
...
Чи вміститься в таблицю?Один аркуш Excel вміщує 1 048 576 рядків
Сайти HubSpot 375 063 Вміститься на одному аркуші
Сайти WordPress 23 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 рядків для кожного датасету.