SaaS Domain Name Generator & Availability Watcher
Pricing
from $3.00 / 1,000 registry availability scrapes
SaaS Domain Name Generator & Availability Watcher
Generate ranked SaaS domain ideas and monitor domain status with official public RDAP and WHOIS registry sources. Export shortlist changes without a domain API key.
Pricing
from $3.00 / 1,000 registry availability scrapes
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
14 hours ago
Last modified
Categories
Share
Generate ranked SaaS domain ideas, check public registry availability, and monitor changes on a schedule. This Actor is useful for founders, startup studios, naming agencies, product teams, and domain researchers who need a reusable shortlist instead of checking names one by one.
No Vercel token, registrar account, or paid domain-data API is required. The Actor discovers official registry endpoints from IANA, prefers public RDAP, and uses public WHOIS where RDAP is unavailable. Naming and ranking use deterministic rules; no paid naming model is required.
Watch-history migration: isolated shortlists
This release starts fresh isolated history for every watchlist. The first definitive observation is a baseline, not an availability-change alert. Old shared history is retained separately and is not imported because its watchlist attribution is uncertain. Existing inputs and candidate-only defaults remain valid; prices and billing identifiers are unchanged.
An optional watchKey identifies a shortlist across edits. Otherwise, a saved Task uses its Task ID; ad-hoc API runs use the normalized naming/shortlist configuration. Changing its cap or input order does not change that configuration identity. Use separate keys for independent watchlists with the same domains.
Each result may include a hashed watchId, stateSchemaVersion, baselineReason and output deliveryId. A definitive baseline advances after acknowledged output. Unknown observations retain the last definitive availability and never claim a registration opportunity. Registry not-found evidence is not a purchase or registration guarantee; verify with a registrar. IANA delegation information alone does not confirm availability.
watch_busy means the watchlist already has an active run. delivery_uncertain stops automatic paid retries after ambiguous output or charging; inspect the original dataset and run summary before requesting recovery. No schedule or notification subscription is created by running this Actor.
For an affordable exact-domain trial, set seedNames: [], provide one domain, set maxCandidates: 1, and enable checks. One candidate, one attempted registry check and minimum start unit conditionally total $0.00315 in event charges. Rows with no supported registry source do not incur a lookup event; attempted checks that remain unknown can still incur one lookup event. This is not an all-in invoice.
import osfrom decimal import Decimalfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("thescrapelab/saas-brand-domain-watcher").call(run_input={"seedNames": [], "domains": ["example.com"], "maxCandidates": 1,"checkAvailability": True, "watchKey": "agency-shortlist-01"},max_total_charge_usd=Decimal("0.01"),)if run is None:raise RuntimeError("Actor call returned no run metadata")dataset_id = run["defaultDatasetId"] if isinstance(run, dict) else run.default_dataset_idfor row in client.dataset(dataset_id).iterate_items():print(row)
What you get
- Ranked domain ideas from a brand name, product term, or exact watchlist
- Exact, compact, prefixed, and suffixed naming patterns
- Bulk domain availability checks from public registry sources
baseline,unchanged, andavailability_changedevents across scheduled runs- Dataset output for CSV, JSON, integrations, webhooks, and automations
- Conservative results that never turn an ambiguous response into an “available” claim
Quick start
Use the defaults for ideas only, or enable Check domain availability to perform registry lookups.
{"seedNames": ["North Star"],"domains": ["northstarhq.com"],"tlds": ["com", "io", "ai", "co"],"generationModes": ["exact", "prefixed", "suffixed"],"prefixes": ["get", "try"],"suffixes": ["app", "hq"],"maxCandidates": 40,"checkAvailability": true}
Inputs
| Input | What it does |
|---|---|
seedNames | Up to 10 brand names or product terms used to generate candidates. |
domains | Optional exact domains placed first in the watchlist. |
tlds | Domain suffixes to generate, such as com, io, ai, or co.uk. |
generationModes | Select exact, compact, prefixed, or suffixed patterns. |
prefixes | Words such as get, try, or use for prefixed candidates. |
suffixes | Words such as app, hq, or labs for suffixed candidates. |
maxCandidates | Maximum number of exact and generated domains, from 1 to 100. |
checkAvailability | Check official public RDAP or WHOIS for each candidate. No key is required; leave off for naming ideas only. |
watchKey | Optional reusable name for an independent watchlist. Keep the same key when repeating checks. |
Operational settings are deliberately fixed to safe values, so clients do not need to configure concurrency, retries, timeouts, storage, teams, or tokens.
Supported source coverage
| Source route | Typical suffixes | Behavior |
|---|---|---|
| Official RDAP listed by IANA | .com, .ai, .app and other participating registries | Checks the exact domain; accepts registered records or a structured registry not-found response. |
| Public WHOIS or registry web form | .io and suffixes without a usable RDAP endpoint | Uses the existing official registry source. |
| No supported source or an inconclusive response | Any affected suffix | Returns unknown, preserves prior definitive watch history and explains the result. |
Availability checks are optional and off by default. Generated names are ideas until you enable checks. A registry not-found result does not confirm price, eligibility or purchase availability.
How availability checking works
For each suffix, the Actor reads its official IANA delegation page. When IANA lists a secure RDAP endpoint, the Actor queries that registry directly. This supports RDAP-only suffixes such as .app and avoids the fragile .ai web form when RDAP is listed. No registry API key is required.
Where IANA lists no usable RDAP endpoint, the Actor retains its public WHOIS and registry web-form sources, including .io. A blocked, rate-limited, malformed or ambiguous RDAP response stays unknown; the Actor does not switch protocols to evade a rate limit.
The decision rules are intentionally strict:
available: the registry explicitly returned a not-found or free resultunavailable: the registry returned positive registration evidenceunknown: the source was unavailable, ambiguous, throttled, or no supported public registry source was foundnot_checked: availability checking was disabled or the run reached its spending limit
statusReason explains the result in a stable, machine-readable way. For example, explicit_not_found supports available, registration_record supports unavailable, and no_public_whois explains an unknown result without treating it as a scraper failure. An unknown result uses changeType: availability_unknown because no reliable comparison with a previous successful observation can be made.
RDAP and WHOIS responses can contain personal registration data. They are parsed in memory and discarded; only the availability decision and source metadata are stored.
Example output
{"domain": "getnorthstar.com","seedName": "North Star","candidateType": "prefixed","rank": 3,"priorityScore": 930,"availability": "available","statusReason": "explicit_not_found","checkedByScraping": true,"source": "registry_whois","sourceUrl": "https://www.iana.org/domains/root/db/com.html","whoisServer": "whois.verisign-grs.com","sourceHttpStatus": null,"attempts": 1,"changeType": "availability_changed","previousAvailability": "unavailable","isChanged": true,"observedAt": "2026-08-10T17:00:00.000Z","message": "The public registry returned an explicit not-found result. Confirm with a registrar before purchase."}
RUN_SUMMARY includes a plain completionStatus (complete, complete_with_unknowns, or partial_budget), requested and returned counts, charged events, IANA pages scraped, RDAP queries (rdapQueries), registry web pages scraped, WHOIS queries, circuit-breaker skips, retries, real source errors, unsupported-source counts (noPublicWhois, retained as a legacy field name), and detected changes. Reaching the spending limit after every requested result is finished does not incorrectly mark the run as partial.
Monitoring domains
Run the same input on an Apify schedule. The first successful result is stored as a baseline; later runs report unchanged or availability_changed. Connect an Apify webhook to Slack, email, Make, Zapier, or your own endpoint to act on changes.
State is saved in the Actor's named key-value store. Failed or ambiguous checks never overwrite the last successful state.
Pricing
This Actor uses pay-per-event pricing:
| Event | Price | Charged when |
|---|---|---|
| Actor start | $0.00005 | Per start at up to 1 GB; larger memory uses additional start units. |
| Domain candidate | $0.00010 | For each result written to the Dataset. |
| Registry availability scrape | $0.00300 | When an RDAP, WHOIS or registry web-form check is attempted for one domain. Retries are included in that single lookup event. No lookup event is charged when no supported source exists. |
For example, 100 candidate-only results cost about $0.01005. Checking all 100 costs about $0.31005. The Apify Console price displayed when you start a run is authoritative. A maximum run spend is respected before the next billable unit begins.
API example
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("thescrapelab/saas-brand-domain-watcher").call(run_input={"seedNames": ["North Star"],"tlds": ["com", "io", "ai"],"maxCandidates": 20,"checkAvailability": True,})if run is None:raise RuntimeError("The Actor run did not start")for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Install the current official Python client with pip install "apify-client>=3,<4". These examples use its typed run result; .iterate_items() retrieves every result page.
cURL
curl -X POST \"https://api.apify.com/v2/acts/thescrapelab~saas-brand-domain-watcher/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"seedNames":["North Star"],"tlds":["com","io","ai"],"maxCandidates":20,"checkAvailability":true}'
Keep your Apify token private. The Actor itself needs no domain-provider token.
Important limitations
- Availability is informational, not a reservation or purchase guarantee. Always confirm the final name with your registrar immediately before buying.
- A domain can be reserved, premium-priced, restricted, or unavailable for policy reasons even when its registry returns a not-found result.
- A suffix needs an official RDAP or public WHOIS source. Unsupported suffixes, source outages and access blocks return
unknown. Coverage can change as registries update their services. - Registries can throttle lookups or change their response formats. The Actor uses bounded retries and a per-source circuit breaker, then returns a safe error instead of repeating failures or guessing.
- The Actor does not provide trademark clearance. Check names with an appropriate trademark authority before launch.
Support
When reporting a problem, include the run ID, affected suffix, and whether the result was unknown or incorrect. Never include an Apify token or other secret.