# Brand & Domain Name Availability Checker (`luke-main/brand-domain-availability-checker`) Actor

Check brand names in bulk: domain registration across .com, .com.au, .io, .ai, .co, .net via RDAP and DNS, Apple App Store name clashes, and live US trademarks, with a simple risk rating per name. Free public sources only.

- **URL**: https://apify.com/luke-main/brand-domain-availability-checker.md
- **Developed by:** [Luke Main](https://apify.com/luke-main) (community)
- **Categories:** Developer tools, Business, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 name checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Brand & Domain Name Availability Checker

Check a list of brand, startup, product or app names in one run. For every name you get:

- **Domain status** across `.com`, `.com.au`, `.io`, `.ai`, `.co`, `.net` (or any extensions you choose), from official RDAP registry data plus a DNS check
- **Apple App Store clashes**: apps with the same or a similar name, with developer and link
- **US trademarks**: how many live USPTO trademarks use the exact wording or contain the name, with the top marks, owners and classes
- **A simple risk rating** (LOW / MEDIUM / HIGH) with plain-English reasons
- One-click links to check **Australian trade marks** (IP Australia) and **Google Play** yourself

Use it to shortlist names before you buy a domain, brief a designer, or pay a trade mark attorney. Typical users: founders naming a startup, agencies pitching name options, app developers, Shopify and e-commerce brands, domain investors, and AI naming tools that need a fast "is this name taken?" check.

### Why this checker

- **Bulk:** paste 5 or 5,000 names. One clean row per name, ready for Google Sheets or your app.
- **Honest results:** a domain with no registry record is reported as `NO_RECORD_FOUND` ("likely unregistered"), never as guaranteed available. Premium, reserved or just-dropped names can still be unavailable, so confirm at a registrar before you rely on it.
- **Free public sources only**, used within their terms. No scraping of sites that forbid it.
- **Australia-friendly:** `.com.au` by default, App Store storefronts for any country, and an IP Australia search link for every name.

### How to use it

1. Enter your names under **Brand names** (one per line).
2. Optional: change the domain extensions, App Store countries (`us`, `au`, `gb`...), or turn checks off.
3. Click **Start**. Results appear in the **Overview** table; the **Domains** view shows registrar, registration and expiry dates where the registry publishes them.

Spaces and punctuation are removed for the domain part, so "Blue Fox Roasters" checks `bluefoxroasters.com`.

#### Input example

```json
{
  "names": ["Zentrailo", "Koalafy", "Blue Fox Roasters"],
  "tlds": [".com", ".com.au", ".io", ".ai", ".co", ".net"],
  "checkAppStore": true,
  "appStoreCountries": ["us", "au"],
  "checkUsTrademarks": true
}
```

#### Output example (one row, shortened)

```json
{
  "name": "Zentrailo",
  "riskLevel": "LOW",
  "riskReasons": ["No conflicts found in the sources checked", "No registration record: zentrailo.com, zentrailo.com.au, zentrailo.io, zentrailo.ai, zentrailo.co, zentrailo.net"],
  "domainSummary": ".com no record | .com.au no record | .io no record | .ai no record | .co no record | .net no record",
  "domainsRegistered": [],
  "domainsNoRecord": ["zentrailo.com", "zentrailo.com.au", "zentrailo.io", "zentrailo.ai", "zentrailo.co", "zentrailo.net"],
  "domains": [{"domain": "zentrailo.com", "status": "NO_RECORD_FOUND", "evidence": "No RDAP record and no nameservers. Likely unregistered, not guaranteed...", "rdapHttpStatus": 404, "dnsResult": "NXDOMAIN"}],
  "appStoreExactMatches": 0,
  "appStore": {"checked": true, "countries": ["us"], "exactMatches": 0, "similarMatches": 0, "apps": []},
  "usTrademarkExactMatches": 0,
  "usTrademarksContainingName": 0,
  "usTrademarks": {"checked": true, "liveMarksContainingName": 0, "liveExactMatches": 0, "topMarks": []},
  "auTrademarks": {"checked": false, "searchUrl": "https://search.ipaustralia.gov.au/trademarks/search/quick?q=Zentrailo"},
  "googlePlay": {"checked": false, "searchUrl": "https://play.google.com/store/search?q=Zentrailo&c=apps"},
  "checkedAt": "2026-11-13T00:00:00+00:00"
}
```

A registered domain also carries `registrar`, `registeredOn`, `expiresOn` and the registry status codes when the registry publishes them in RDAP.

### Domain status values

| Status | Meaning |
|---|---|
| `REGISTERED` | The registry has an RDAP record, or the domain has nameservers in DNS. It is taken. |
| `NO_RECORD_FOUND` | No RDAP record and no DNS delegation. Likely unregistered, **not guaranteed**. |
| `UNKNOWN` | A source timed out or rate-limited us and DNS could not settle it. Re-run later. |

Some extensions (for example `.io` and `.co`) have no public RDAP service, so they are checked by DNS only; the `evidence` field says so.

### Risk rating

Points are added for: live US trademarks with the exact wording (3), live US trademarks containing the name (1), `.com` registered (1), half or more of the checked domains registered (1), an App Store app with the exact name (2) or a similar name (1). 0-1 = LOW, 2-3 = MEDIUM, 4+ = HIGH. It is a quick screening signal, not a clearance opinion.

### Pricing

Pay per event: **US$3.00 per 1,000 names checked** (US$0.003 per name), whatever number of domains, countries and checks you choose. No subscription. You can cap spend with the run's maximum charge setting; the Actor stops cleanly when it is reached.

### Speed

About 2-4 seconds per name with default settings. Apple asks API users to stay around 20 calls a minute, so each extra App Store country adds roughly 3 seconds per name. Turn the App Store check off for the fastest domain + trade mark screening. The default run timeout is 2 hours (about 2,000 names with one App Store country); for bigger lists raise the timeout in Run options or split the list.

### Integrations: send results anywhere

- **Google Sheets.** Add the Google Sheets integration on the Integrations tab to append every checked name, with its risk and free domains, to a shortlist sheet.
- **Zapier and Make.** Use the Apify app with the trigger "Actor run finished", then "Get dataset items" to push results into Airtable, Notion, Slack or a CRM. A form submission (for example a "check my brand name" form on your site) can start a run.
- **API.** Call the Actor from any language with the Apify API or the `apify-client` package and read the dataset as JSON or CSV.
- **AI agents and LLM tools.** Give a naming assistant a real availability check: generate 50 candidate names with your LLM, run them here, and keep only the LOW-risk names with a free `.com`. Works with LangChain (`ApifyWrapper` / `ApifyDatasetLoader`), LlamaIndex, Flowise, and the Apify MCP server for Claude and other agents.
- **Webhooks.** Add a webhook for `ACTOR.RUN.SUCCEEDED` to call your own endpoint when results are ready.

### Data sources and limits

| Check | Source | Notes |
|---|---|---|
| Domains | RDAP via the IANA bootstrap registry, plus DNS NS lookups (Cloudflare and Google public DNS-over-HTTPS) | `.io`, `.co` and some others have no public RDAP, so DNS only |
| App Store | Apple iTunes Search API | Top 10 results per country, matched by name |
| US trademarks | USPTO Trademark Search (tmsearch.uspto.gov), public US government records | Live marks only; one small query per name, throttled. Wordmark text only, no design or sound-alike search |
| AU trademarks | Not queried automatically | IP Australia's search API requires an approved application; a free search link is included |
| Google Play | Not queried | No free public search API and Google's terms bar automated access; a search link is included |

Trade mark search here is a first screen. It does not catch similar-sounding or misspelt marks, state or common-law rights, business names, or marks in other countries.

### FAQ

**Does "NO_RECORD_FOUND" mean I can register the domain?** Usually, but not always. Registries reserve and premium-price some names, and a name can be registered between our check and your purchase. Check at a registrar.

**Is this legal advice?** No. This tool is a screening aid and **not legal advice**. Speak to a registered trade mark attorney before you commit to a brand.

**Why no EU, UK or WIPO trademarks?** The free EU and WIPO search tools do not allow automated searching in their terms, and we only use sources that permit it.

### About

Built with AI and owned by **Luke Main** (Cessnock, NSW, Australia). Feedback and feature requests are welcome through the Issues tab.

Disclaimer: results come from third-party public sources that can be incomplete, delayed or wrong. Provided "as is" without warranty. Not legal advice.

# Actor input Schema

## `names` (type: `array`):

Names to check, one per line, e.g. 'Koalafy' or 'Blue Fox'. Spaces and punctuation are removed for the domain part (Blue Fox -> bluefox.com). You pay per name checked.

## `tlds` (type: `array`):

Extensions to check for each name. Up to 20, e.g. .com, .com.au, .io, .ai, .co, .net, .app, .dev, .co.uk, .co.nz.

## `checkAppStore` (type: `boolean`):

Look for iPhone/iPad apps with the same or a similar name (Apple's public iTunes Search API). Adds about 3 seconds per name per country.

## `appStoreCountries` (type: `array`):

Two-letter country codes of the App Store storefronts to search (max 5), e.g. us, au, gb, ca, nz.

## `checkUsTrademarks` (type: `boolean`):

Count live US federal trademarks with the exact wording or containing the name, from the USPTO's public trademark search. One small query per name.

## `maxConcurrency` (type: `integer`):

How many names to work on at once (1-10). Public sources are rate-limited politely either way.

## Actor input object example

```json
{
  "names": [
    "Zentrailo",
    "Koalafy",
    "Notion"
  ],
  "tlds": [
    ".com",
    ".com.au",
    ".io",
    ".ai",
    ".co",
    ".net"
  ],
  "checkAppStore": true,
  "appStoreCountries": [
    "us"
  ],
  "checkUsTrademarks": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

One row per name with risk level, domain status, App Store and US trademark hits.

## `summary` (type: `string`):

Counts per risk level.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "names": [
        "Zentrailo",
        "Koalafy",
        "Notion"
    ],
    "tlds": [
        ".com",
        ".com.au",
        ".io",
        ".ai",
        ".co",
        ".net"
    ],
    "appStoreCountries": [
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("luke-main/brand-domain-availability-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "names": [
        "Zentrailo",
        "Koalafy",
        "Notion",
    ],
    "tlds": [
        ".com",
        ".com.au",
        ".io",
        ".ai",
        ".co",
        ".net",
    ],
    "appStoreCountries": ["us"],
}

# Run the Actor and wait for it to finish
run = client.actor("luke-main/brand-domain-availability-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "names": [
    "Zentrailo",
    "Koalafy",
    "Notion"
  ],
  "tlds": [
    ".com",
    ".com.au",
    ".io",
    ".ai",
    ".co",
    ".net"
  ],
  "appStoreCountries": [
    "us"
  ]
}' |
apify call luke-main/brand-domain-availability-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luke-main/brand-domain-availability-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IyZO9SVH0ww4hYarf/builds/2aZ7OwVVC56gW44gw/openapi.json
