For data and ML teams

Enrich anything with a domain in it, from one JSONL file

406M active domains with DNS, WHOIS, technology and ranking signals, one row each, rebuilt daily. Pay €599 once, no subscription. Train models, score records, and ship your own data product on top.

Get the free 10K sample See all-data, €599

Can I build a product on this? Read the license →

406M+active domains, one row each
€1.47per 1M full records
32.1 GBone JSONL file per export
Dailyexports rebuilt, same schema

Your pipeline, our file

Four recipes on the real schema. Every key below is exactly what ships in the export. Run any of them against the free 10,000-row sample first.

DomainTLDDomain typeHTTP statusIP addressCountry by IPTechnologiesDNS recordsPR valueHarmonic valueRegistrarDomain creation dateDomain expiration dateRDAP/WHOIS Record

A lead list, straight off the file

Every WordPress site with a live MX record, streamed straight out of the export. Nothing lands on disk.

bash + jq
# Technologies ships as a list of names, or a name-to-version map.
# One line normalizes both shapes.
zstdcat webatla-all-data-2026-07-10.jsonl.zst |
jq -c 'def techs: (.Technologies // []) | if type == "object" then keys else . end;
   select(techs | index("WordPress"))
   | select((."DNS records" // {}) | has("MX"))
   | {domain: .Domain, tld: .TLD, rank: ."PR value"}' \
  > wordpress-with-mail.jsonl

Technology adoption by TLD

Aggregate across 1,435 TLDs directly on the file, no load step. DuckDB reads the technology field as JSON, so ask it for the type first.

duckdb
SELECT "TLD", count(*) AS domains
FROM read_json('webatla-all-data-2026-07-10.jsonl.zst',
       format='newline_delimited', compression='zstd',
       columns={'TLD':'VARCHAR', 'Technologies':'JSON'})
WHERE list_contains(
        CASE json_type("Technologies")
          WHEN 'ARRAY'  THEN json_extract_string("Technologies", '$[*]')
          WHEN 'OBJECT' THEN json_keys("Technologies")
          ELSE []::VARCHAR[] END, 'WordPress')
GROUP BY "TLD" ORDER BY domains DESC LIMIT 20;

Enrich your CRM on the domain key

Left join your own records onto the export. Country, rank and stack arrive beside every row you already had.

duckdb
SELECT c.*, w."Country by IP", w."PR value", w."Registrar"
FROM 'crm.csv' c
LEFT JOIN (
  SELECT "Domain", "Country by IP", "PR value", "Registrar"
  FROM read_json('webatla-all-data-2026-07-10.jsonl.zst',
         format='newline_delimited', compression='zstd',
         columns={'Domain':'VARCHAR', 'Country by IP':'VARCHAR',
                  'PR value':'DOUBLE', 'Registrar':'VARCHAR'})
) w ON lower(c.domain) = w."Domain";

Constant-memory pass on a laptop

Stream all 406,809,239 rows without holding the file in RAM. Build features, score them, write them out.

python
import io, json, zstandard as zstd

with open("webatla-all-data-2026-07-10.jsonl.zst", "rb") as f:
    for line in io.TextIOWrapper(zstd.ZstdDecompressor().stream_reader(f)):
        r = json.loads(line)
        t = r.get("Technologies") or []
        names = list(t) if isinstance(t, dict) else t
        if "WordPress" in names and (r.get("DNS records") or {}).get("MX"):
            print(r["Domain"], r.get("Registrar"))

Recipe one and recipe four are the same query in two engines, and on the same export they return the same rows. Cross-checking one filter in two tools is how you should validate any pipeline you build on this.

Can you build a product on it? Yes.

The honest split. Build on the data and sell what you build. Shipping the raw rows onward is a different business, and we price it as one.

Allowed out of the box

  • Enrich your own records and your customers' records
  • Train models and sell the scores, classifications and verdicts
  • Power lookups and features inside your product
  • Publish aggregated insights, research and reports

You own what you build. Buying a dataset gives you the license, not the underlying database.

Start with all-data

Shipping raw rows needs an agreement

  • Reselling or redistributing the raw datasets, whole or in substantial part
  • Sublicensing the export to third parties

Raw redistribution is a different business and we price it as one. That is exactly what keeps the file itself this cheap for everyone else. Custom redistribution rights are negotiable.

Talk to sales

The one-question test: are you selling our rows, or selling what you made from them? The second one needs no permission. Full wording lives in the terms.

What this does to your COGS

Metered enrichment pricing grows with your usage, so your margin shrinks exactly as you succeed. A flat file does not.

all-data, one payment€599
records in the export406,809,239
re-downloads for a monthunlimited
per-request meteringnone
406,809,239 ÷ €599 €1.47 / 1M records

Your data line rounds to zero

At €1.47 per million full records, the cost of the underlying data stops being a line item worth optimizing.

Cost stops tracking usage

Your margin no longer shrinks when the product grows. The file costs the same whether you query it once or a billion times.

Start smaller if you like

all-active-domains is €29 for the full namespace. Prove the pipeline, then take every column.

It fits where your data already lives

One newline-delimited JSON file in standard compression. No SDK, no proprietary format, no vendor client.

jq and shell

Stream the file and filter it. You never have to write the whole thing to disk.

DuckDB and ClickHouse

Both read newline-delimited JSON directly, compression included. Declare columns to skip type inference on the wide rows.

Spark and pandas

Standard JSONL readers. Chunk it or stream it, the schema is the same on every line.

BigQuery

BigQuery loads plain NDJSON, so decompress on the way in or land the file in storage first.

Polars and Arrow

Scan the file lazily and filter before anything materializes. Hand the result straight to Arrow.

Snowflake and Databricks

Both ingest newline-delimited JSON from object storage. Land the file once, then point a stage or a volume at it.

The questions engineers actually ask

Answered without hedging.

Is the schema stable across exports?

Yes, the keys and their meaning stay put across daily rebuilds, and they are documented. Two shapes are worth knowing before you write the parser. Technologies arrives as a list of names, or as a name-to-version map when we detected versions. Sparse fields arrive as null rather than being dropped, so every line has the same keys.

How fresh is it?

Every dataset is rebuilt daily. One payment gives you a calendar month of re-downloads, so you can pull the newest export as often as your pipeline wants.

Can I put this in a product I sell?

Yes. Enrichment, scores, classifications, lookups and aggregated insights are all yours to sell. Shipping the raw rows onward needs a written redistribution agreement. See the license split above.

What is in the records, and what is not

Public registration, DNS and technology records. No contact PII, so no registrant names, no emails, no phone numbers. That is a deliberate design decision, and it is what makes the file safe to put inside a product you sell.

Do I have to download 30 GB to test it?

No. Every dataset has a free 10,000-row sample with no account. The included bearer API also serves one TLD, country or technology slice at a time, at 240 requests per minute.

Run a recipe on 10,000 real rows

No account, no email. If the sample parses cleanly in your pipeline, the full export is €599 and the schema does not change.