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.
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.
# 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.
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.
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.
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-dataShipping 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 salesThe 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.
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.