webatlaファイルの使い方

どのファイルもzstd圧縮のJSON Linesで、1行につき1ドメインです。ここでは、ファイルを開き、質問を投げかけ、お使いのスタックに読み込む方法を紹介します。各レシピは無料の10,000行プレビューで実行しており、表示している出力は実際の実行結果です。

形式
JSON Lines、zstd圧縮
.jsonl.zst
1行の単位
ドメイン、すべてのキーが常に存在
値はnullの場合があります
ファイル名
データセット名とエクスポート日
all-data-2026-10-16.jsonl.zst
更新頻度
毎日新しいエクスポート
カラムは毎日同じ

1 · ダウンロードするファイル

ダウンロードするファイル

webatlaのデータセットはすべてJSON Linesで、1行に1つのJSONオブジェクト、つまり1ドメインです。有料ファイルはzstdで圧縮されています。

ファイル内容形式
データセット全体データセットの全行.jsonl.zst
切り出し1つのTLD、TLDサフィックス、国(IP基準)、または技術の全行。フィールドはファイル全体と同じ.jsonl.zst
無料プレビュー(10,000行)ファイル全体の先頭10,000行.jsonl 圧縮なしのプレーンテキスト
TLD、国、技術のページにある20行プレビューそのTLD、国、技術の行で、フィールド名は有料ファイルと同じです。ランダムな行ではなく、情報が最も揃っている行の一部を表示します。ページ上に表示

ファイル全体をフィルタする代わりに切り出しをダウンロードする

必要なのが1つのゾーン、国、または技術だけなら、その切り出しはすでに絞り込み済みで、サイズもはるかに小さくなっています。

無料プレビューが示すのは形式であり、典型的な内訳ではありません

ほとんどのファイルは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"}'
無料の10,000行プレビューでの実際の出力
{"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;
無料の10,000行プレビューでの実際の出力
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 .
無料の10,000行プレビューでの実際の出力
{
  "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"])
無料の10,000行プレビューでの実際の出力
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[]'
無料の10,000行プレビューでの実際の出力
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
無料の10,000行プレビューでの実際の出力
1000

3 · 質問に答える

日次ファイルで答えが出る質問

まず答えを示し、DuckDBのクエリはワンクリックで確認できます。ダウンロードしたファイルのフォルダでターミナルを開き、duckdbと入力してクエリを貼り付けてください。

セールス Technologies

ドイツでホスティングされているWooCommerceショップはどれですか?

無料の10,000行プレビューでの実際の出力
ariana.acDE
fjak.acDE
empower.abudhabiDE

PR valueの高い順に並べ、12行のwoocommerce-de.csvとして保存しています。CRMやスプレッドシートで開けるCSVです。

クエリを表示
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

ウェブサイト数が最も多いサイトビルダーはどれですか?

無料の10,000行プレビューでの実際の出力
WordPress628 · 80.6%
Wix52 · 6.7%
Squarespace45 · 5.8%
Drupal22 · 2.8%
Webflow20 · 2.6%
Joomla12 · 1.5%

全ウェブサイトではなく、この6つのビルダーの中での割合です。国ごとの切り出しで実行すれば、1つの市場を比較できます。

クエリを表示
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

ブランド名を含む新しいドメインはどれですか?

無料の10,000行プレビューでの実際の出力(2026年10月16日に実行)
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日以内に期限が切れる、ランキング入りのウェブサイトはどれですか?

無料の10,000行プレビューでの実際の出力(2026年10月16日に実行)
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データセット →
メールとインフラ DNS

これらのドメインのDNSを運用しているのはどこですか?

無料の10,000行プレビューでの実際の出力
cloudflare.com2,277 · 25.1%
registrar-servers.com704 · 7.7%
domaincontrol.com622 · 6.8%

有効なNSレコードを持つドメインの割合を、ホスト名の末尾2ラベルごとにグループ化しています。

クエリを表示
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を使っている企業はどこですか?

無料の10,000行プレビューでの実際の出力
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 · リストを作る

ファイル全体または切り出しからのリスト作成

ファイル全体はスプレッドシートに収まらないため、まずフィルタするか、切り出しから始めてください。1つの技術、TLD、TLDサフィックス、または国を単独のファイルにしたもので、webatlaの各ページまたはAPIから取得できます。TechnologiesまたはAll dataへのアクセスがあれば、すべての技術ページに切り出し用のダウンロードボックスが表示されます。

ファイル全体から

1つのTLDまたは1つのサフィックス

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
無料の10,000行プレビューでの実際の出力
de.jsonl      224 lines
2ix.de.jsonl   52 lines
ac.jsonl     5463 lines

1か国でホスティングされているウェブサイトを素早く抽出

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
無料の10,000行プレビューでの実際の出力
de-websites.jsonl: 595 lines, the same as jq alone

ExcelやGoogle Sheets用にCSVへエクスポート

jq

Excelで表示できるのは最大1,048,576行までなので、先にフィルタしてください。ラテン文字以外の名前が正しく表示されるよう、CSVはUTF-8で取り込んでください(データ、テキストまたは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
無料の10,000行プレビューでの実際の出力
"Domain","TLD suffix","HTTP status","Technologies"
"360.0.bg","0.bg",200,"{""HTTP/2"":{""version"":null},...}"
...  10,001 lines

切り出しから

セールス

1つの市場の見込み客

WooCommerceの切り出しを取得し、1か国だけ残します。

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';
無料の10,000行プレビューでの実際の出力
Website,Country
ariana.ac,DE
fjak.ac,DE
empower.abudhabi,DE
エージェンシー

アップセルリスト:WordPressも使うHubSpotサイト

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';
無料の10,000行プレビューでの実際の出力
Website,Country
ateliercrescendo.ac,US
セールスオペレーション

担当エリアごとに1ファイル

切り出しをサーバーの国ごとに1つの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);
無料の10,000行プレビューでの実際の出力
woocommerce-by-country/Country=DE/data_0.csv
woocommerce-by-country/Country=US/data_0.csv
...
スプレッドシートに収まりますか?Excelの1シートは1,048,576行まで
HubSpotのサイト 375,063 1シートに収まります
WordPressのサイト 23,798,524 フィルタまたは分割
All data、ファイル全体 420,933,308 どのスプレッドシートにも収まりません

5 · 読み込む

Postgres、Parquet、または手持ちのリストとの結合

PostgreSQL

psql

各行が1つのjsonbの行になり、TechnologiesにはGINインデックスが付きます。

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"
無料の10,000行プレビューでの実際の出力
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);
無料の10,000行プレビューでの実際の出力
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;
無料の10,000行プレビューでの実際の出力
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 · 毎日の更新

一晩で変わった点を確認する

新しいエクスポートが毎日届きます。2日分をDomainで比較し、変更分だけを下流に送ってください。2つのファイルを入れ替えれば、ファイルから消えたドメインを一覧にできます。

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です。マップはキーを、リストは要素を読めば、どちらの場合も1つのリストになります。

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フレームがあり、最初の1つで止まる呼び出しで読み込まれています。Pythonのレシピのように、stream_readerにread_across_frames=Trueを指定してください。
.TLD suffixでjq: syntax errorスペースを含む名前は引用符で囲んでください:."TLD suffix"
エラーが出ないのにSQLが0行を返すシングルクォートで囲んだ'Country by IP'は、カラムではなく文字列です。カラム名にはダブルクォートを使ってください。
DuckDBが途中でExpected OBJECT, but got ARRAYを出して止まるスキーマの自動検出は最初の数行しか見ません。カラムを明示的に宣言し、ネストしたフィールドはJSONとして指定してください。
ダウンロードは完全ですか?ファイルを最後まで完全に展開できると、zstd -tq FILE && echo OKがOKと表示します。

どのレシピもフルの日次ファイルで実行できます

月額または年額のアクセスで、毎日新しいエクスポートを入手でき、切り出し取得用のAPIも付属します。すべてのアカウントで、各データセットの無料10,000行プレビューもダウンロードできます。