ActorStack.dev
Developer toolsAIAutomationv0.1.10updated 17 September 2026

Bulk Domain Search — Availability Checker for 1,075 TLDs

Screen a shortlist before you look at it by hand.

Built for the moment before you decide: you have 300 name ideas across 12 TLDs and you want the dead ones gone before you look at the rest by hand. The answers are deliberately asymmetric — `taken` is certain because the domain is in the registry's own zone file, while `probably_free` is a screening verdict with a measured error rate rather than a promise.

oswaldocarabano/domain-availability-screen

input.json
{
  "candidates": [
    "myawesomeapp.com",
    "myawesomeapp.net",
    "myawesomeapp.org",
    "myawesomeapp.app",
    "myawesomeapp.dev"
  ],
  "maxResults": 100
}
Version
v0.1.10
Memory
4096 MB
Browser
none
Proxy
None — the zone data is held, not fetched

Short answer

The Bulk Domain Search Actor screens up to 5,000 candidate domains in one run against the registries' own zone files, covering 1,075 gTLDs and 255,631,856 delegated domains refreshed daily. Each candidate comes back `taken` or `probably_free`, and the two answers are not equally strong: `taken` means the domain is delegated in the registry's zone file and is certain, while `probably_free` means it is absent from the zone, which is usually unregistered but misses about 1.62% of registered `.com` domains — 169,209,254 registered against 166,467,808 in the zone, checked against ICANN's monthly registry reports. Pricing is $0.001 per candidate screened, or $1 per 1,000, against $3 to $20 per 1,000 for WHOIS-based bulk checkers. Country-code TLDs including .io, .ai and .co are not covered, because ICANN's zone file service does not offer them at any price.

Key points

  • Screening 5,000 candidate names costs $5.00 here, against roughly $100 for the same work at a WHOIS-based bulk checker's $0.02 per domain, because there is no WHOIS lookup, no proxy and no rate limit behind each row.
  • A `taken` verdict is certain: the domain is delegated in the registry's own zone file, which is the registry's record rather than an inference from a lookup.
  • A `probably_free` verdict carries a measured error rate of about 1.62% in `.com`, rising to roughly 2.4% in `.net` and 3.1% in `.org`, so it is a screening pass rather than a purchase decision.
  • Coverage is 1,075 gTLDs and 255,631,856 delegated domains, but it is not evenly spread: `.com` alone is 166 million of that total and 481 of the TLDs hold fewer than a thousand domains each.
  • Country-code TLDs — `.io`, `.ai`, `.co`, `.me`, `.tv`, `.cc` and the rest — are not covered at all, because they are run outside ICANN's contracts and are not available from the zone file service at any price.
  • The `parked_for_sale` flag fires on 2.0% of domains and is exact when it does, which makes a taken domain sitting on a sale service one you might still be able to buy.
On this page11 sections

What it does

Built for the moment before you decide: you have 300 name ideas across 12 TLDs and you want the dead ones gone before you look at the rest by hand. The answers are deliberately asymmetric — `taken` is certain because the domain is in the registry's own zone file, while `probably_free` is a screening verdict with a measured error rate rather than a promise.

output — one row
{
  "candidate": "myawesomeapp.com",
  "domain": "myawesomeapp.com",
  "tld": "com",
  "status": "taken",
  "nameservers": ["ns1.dan.com", "ns2.dan.com"],
  "dns_provider": "Dan.com",
  "parked_for_sale": true
}

Why this one

The asymmetry is the product

Two verdicts that are not equally strong, said out loud. `taken` is a fact from the registry's zone file. `probably_free` is an absence, and a domain can be registered and absent — suspended, newly bought, or with no nameservers set. Publishing one word for both would have been easier to sell and would have been a lie on about 1.6% of `.com` rows.

An error rate checked against the registries, not assumed

The 1.62% figure is not an estimate. ICANN's monthly registry reports give 169,209,254 `.com` domains registered against 166,467,808 present in the zone, and the difference is the gap this Actor cannot see. The same check gives roughly 2.4% in `.net` and 3.1% in `.org`, so the verdict is a little weaker outside `.com` than inside it.

Priced like a file lookup, because that is what it is

$0.001 per candidate — $1 per 1,000 — against $0.003 to $0.02 per domain for WHOIS-based bulk checkers in the same Store. The difference is not a discount but a different cost structure: answering from a file already held costs almost nothing, where a WHOIS lookup needs a proxy, a rate limit and a retry path per row.

The comparison it loses, published anyway

There is a flat-rate checker at $0.035 per run with no per-domain charge, and for a single large batch it is cheaper than this Actor. That is in the README rather than left for the reader to discover. What this one offers instead is 1,075 TLDs in one pass, an answer in seconds rather than minutes, and a stated error rate instead of a promise.

No shape that could return a namespace

Every run is anchored on a candidate list you provide, and there is no input that asks for the whole zone. That is a design decision rather than a missing feature: the agreement behind the data forbids handing over a substantial portion of a zone, so the product has no shape that could do it.

Use cases

  • Reduce a 300-name naming shortlist to the handful worth checking at a registrar.
  • Run a defensive registration check across every TLD a brand might be squatted on before a launch.
  • Screen a spreadsheet of generated name candidates in bulk and keep only the ones absent from the zone.
  • Check a domain investor watchlist across the gTLD namespace in one pass rather than one lookup at a time.
  • Find which taken domains on a wishlist are parked for sale and might still be buyable.

Input

Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.

FieldDefaultWhat it does
candidatesstring[][]Candidate domainsThe domains to screen, one per line, with the TLD. Up to 5,000 per run. This list is what anchors the run — there is no way to ask for a whole namespace.
onlyFreebooleanfalseOnly show probably-freeHides candidates that are definitely taken and returns only the ones absent from the zone. Rows hidden this way are not charged.
maxResultsinteger100Max resultspersonal dataHard cap on rows returned, kept low on purpose so a first run cannot burn a free credit. The service never returns more than 50,000 rows in one run.

Output and fill rates

A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.

FieldFilledMeaning
candidatestring100%The name as it was asked about, after normalisation, so a row always joins back to the input list.
domainstringnot measuredThe domain itself, present when it exists in the zone.
tldstring100%The top-level domain, one of the 1,075 covered gTLDs.
statusstring100%`taken` when the domain is delegated in the registry's zone file, `probably_free` when it is absent. The two are not equally strong.
nameserversstring[]not measuredWhere the domain delegates, on taken rows.
dns_providerstring69.1%Who runs the DNS, inferred from the nameserver. A hosting fact rather than a technology one.
parked_for_saleboolean100%True when the nameserver belongs to a parking or domain-sale service. Fires on 2.0% of domains and is exact when it does.

Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.

Datasets

Different record types go to different datasets, so the main table never carries columns that are blank on most rows.

  • defaultOne row per candidate screened, with its verdict and, when taken, its delegation.billed

Pricing

Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.

EventPriceNotes
actor-startActor start$0.00001Effectively free. A run that finds nothing costs you nothing.
domain-screenedDomain screened$0.001One candidate checked against the registries' own zone files and returned with a verdict — $1 per 1,000. Three to twenty times cheaper than WHOIS-based bulk checkers, because there is no WHOIS lookup, no proxy and no rate limit behind each row.

Measurements

Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.

Zone coverage

255,631,856 domains across 1,075 gTLDs

Counted from the zone files themselves rather than quoted from a registry summary, and refreshed daily.

`probably_free` error rate, .com

1.62%

169,209,254 `.com` domains registered against 166,467,808 present in the zone, checked against ICANN's monthly registry reports rather than assumed.

`probably_free` error rate elsewhere

roughly 2.4% in .net, 3.1% in .org

The same comparison against ICANN's monthly registry reports, which is why the verdict is described as weaker outside `.com`.

Coverage concentration

.com is 166 million of 255 million

Counted per TLD from the zone files. 481 of the 1,075 covered TLDs hold fewer than a thousand domains each.

`dns_provider` fill rate

69.1%

Measured across every domain in the zone. The remaining 30.9% delegate to nameservers that identify no known operator.

`parked_for_sale` rate

2.0% of domains

Measured across the whole zone by matching nameservers against known parking and domain-sale services. Exact when it fires.

Cost against WHOIS-based checkers

$5.00 against about $100 for 5,000 names

$0.001 per candidate here against the $0.02 per domain charged by WHOIS-based bulk checkers in the Apify Store; the cheapest of those is $0.003, which is still three times this.

What it will not do

Stated plainly so you can judge fit before spending anything.

  • `probably_free` is a screening verdict, not a purchase decision: about 1.62% of registered `.com` domains are absent from the zone at any time, and roughly 2.4% in `.net` and 3.1% in `.org`.
  • Country-code TLDs are not covered — `.io`, `.ai`, `.co`, `.me`, `.tv`, `.cc` and every other ccTLD are run outside ICANN's contracts and are not available at any price.
  • A zone file contains no registrant, no email, no registrar, no registration or expiry date and none of the domain's own A, MX or TXT records. No run will ever return them.
  • Zone data is refreshed once a day, so a domain delegated this morning may not appear until tomorrow's snapshot.
  • Up to 5,000 candidates per run, and the service never returns more than 50,000 rows in one run.
  • Coverage is uneven by design of the namespace rather than of the tool: 481 of the 1,075 TLDs hold fewer than a thousand domains each.
  • `dns_provider` is filled on 69.1% of rows and identifies who runs the DNS, not what the site is built with.

Privacy

  • Zone files contain delegation records, not people: there is no registrant, no email address and no registrar in the source at all.
  • The data is obtained through ICANN's Centralized Zone Data Service under agreement with the Registry Operators, and ICANN does not endorse, sponsor or review this Actor.
  • No WHOIS or RDAP query is made, at any point. Querying registries at scale is prohibited by the agreement that provides this data.
  • No run can return a substantial portion of a zone, which is why every run is anchored on a list the operator supplies.
  • Removal requests: privacy@actorstack.dev

See also the data removal process.

Frequently asked questions

What does `probably_free` actually mean?
A `probably_free` verdict means the domain is not present in the registry's zone file, which usually means it is unregistered. A domain can be registered and absent — suspended, newly bought, or with no nameservers set — and that happens to about 1.62% of registered `.com` domains at any given time.
Is `taken` ever wrong?
No. A `taken` verdict means the domain is delegated in the registry's own zone file, which is the registry's record of what exists rather than an inference from a lookup. The asymmetry runs the other way: absence is uncertain, presence is not.
Can I check .io, .ai or .co domains?
No, and no run will ever return them. Country-code TLDs are run outside ICANN's contracts and are not available from the zone file service at any price. They are also exactly the TLDs a startup expects, which is why the limit is stated up front rather than left to be discovered from an empty result.
Why is this cheaper than a WHOIS-based bulk checker?
Because answering from a file already held costs almost nothing, where a WHOIS lookup needs a proxy, a rate limit and a retry path for every single row. Screening 5,000 names is $5.00 here and roughly $100 against a checker charging $0.02 per domain.
Does it tell me who owns a domain, or when it expires?
Never. A zone file contains delegation records and nothing else: no registrant, no email address, no registrar, no registration date, no expiry date and none of the domain's own A, MX or TXT records. Any tool promising those is using a different source.
How fresh is the data?
Zone data is refreshed once a day, because the registries publish once a day. A domain delegated this morning may not appear until tomorrow's snapshot, and there is no faster path available from this source at any price.
Should I buy a domain based on this result?
Treat it as a screening pass that removes the vast majority of dead candidates cheaply, then confirm the handful you actually want at a registrar. Saying so costs a sale occasionally and is better than letting somebody find out at checkout.
What does `parked_for_sale` tell me?
A true value means the domain's nameserver belongs to a parking or domain-sale service, which fires on 2.0% of domains and is exact when it does. On a `taken` row it is worth reading: a taken domain sitting on a sale service is one you might still be able to buy.

Guides for this Actor