webatla 파일 사용법

모든 파일은 zstd로 압축된 JSON Lines 형식이며, 한 줄에 도메인 하나가 들어 있습니다. 파일을 열고, 질문을 던지고, 사용 중인 스택에 적재하는 방법을 안내합니다. 각 레시피는 무료 10,000행 미리보기에서 실행했으며, 표시된 결과는 실제 출력입니다.

형식
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
무료 미리보기 (10,000행)전체 파일의 처음 10,000줄.jsonl 일반 텍스트, 압축 없음
TLD, 국가, 기술 페이지의 20행 미리보기해당 항목의 행이며, 필드 이름은 유료 파일과 같습니다. 무작위 행이 아니라 정보가 가장 풍부한 행 중 일부를 보여 줍니다.페이지에 표시

전체 파일을 필터링하는 대신 일부 데이터를 받으세요

하나의 존, 국가 또는 기술이 필요하다면 해당 일부 데이터는 이미 필터링되어 있고 크기도 몇 배나 작습니다.

무료 미리보기는 형식을 보여 줄 뿐, 전형적인 구성이 아닙니다

대부분의 파일은 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%

전체 웹사이트가 아니라 이 여섯 개 빌더 사이의 비중입니다. 국가별 일부 데이터에 실행하면 한 시장을 비교할 수 있습니다.

쿼리 보기
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 레코드가 있는 도메인의 비율이며, 호스트 이름의 마지막 두 레이블 기준으로 묶었습니다.

쿼리 보기
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 · 목록 만들기

전체 파일 또는 일부 데이터로 목록 만들기

전체 파일은 스프레드시트에 들어가지 않으므로 먼저 필터링하거나 일부 데이터에서 시작하세요. 기술, TLD, TLD 접미사, 국가 중 하나를 별도 파일로 받는 방식이며, webatla 페이지나 API에서 받을 수 있습니다. Technologies 또는 All data 이용권이 있으면 모든 기술 페이지에 해당 일부 데이터를 받는 다운로드 상자가 표시됩니다.

전체 파일에서

TLD 하나 또는 접미사 하나

jq

TLD는 도메인의 마지막 레이블입니다. TLD 접미사는 정확한 공개 접미사(public suffix)입니다.

# 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

한 국가에서 호스팅되는 웹사이트를 빠르게

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

일부 데이터에서

영업

한 시장의 잠재 고객

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';
무료 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
영업 운영

담당 지역별 파일

일부 데이터를 서버 국가별 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,048,576행이 들어갑니다
HubSpot 사이트 375,063 시트 하나에 들어갑니다
WordPress 사이트 23,798,524 필터링 또는 분할
All data 전체 파일 420,933,308 어떤 스프레드시트에도 너무 큽니다

5 · 적재하기

Postgres, Parquet 또는 보유한 목록과의 조인

PostgreSQL

psql

각 줄이 하나의 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 · 일일 업데이트

밤사이 달라진 내용 확인하기

새로운 내보내기가 매일 제공됩니다. 이틀치 파일을 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 프레임이 여러 개 있는데 첫 번째 프레임에서 멈추는 호출로 읽었기 때문입니다. Python 레시피처럼 read_across_frames=True와 함께 stream_reader를 사용하세요.
.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행 미리보기도 다운로드할 수 있습니다.