# AI Domain Finder - Confirmed Available Domains (`marielise.dev/ai-domain-finder`) Actor

Describe your idea in plain English. Get up to 50 brandable domain names confirmed available via RDAP and WHOIS, scored on TLD fit, typo-resistance, and multi-language safety, each tagged register / consider / monitor / skip.

- **URL**: https://apify.com/marielise.dev/ai-domain-finder.md
- **Developed by:** [Marielise](https://apify.com/marielise.dev) (community)
- **Categories:** AI, Developer tools, Other
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 confirmed available domains

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## AI Domain Finder

**Describe your product in plain English. Get a shortlist of brandable, confirmed-available domains with a clear `register / consider / monitor / skip` recommendation per result.**

Built for founders, indie hackers, agencies, product teams, and LLM agents (via MCP) who need to move from vague idea to a registerable shortlist in one run — without manually pasting names into a registrar search bar.

---

### Who this is for

- **Founders & solo builders** naming a new startup, SaaS, marketplace, or app
- **Agencies** presenting naming options to clients across multiple verticals
- **Product teams** validating brand directions before design work begins
- **LLM agents (via MCP)** that need a structured, decision-ready domain pipeline as a tool call
- **Growth teams** sourcing fresh microsite or campaign domains

---

### What it actually does

Most domain tools assume you already know the name. They make you type words in and click search. This Actor flips that: you describe your idea, and it returns 5-10 names that **passed every quality gate** and are **confirmed available right now via authoritative sources**.

#### The full pipeline (11 quality gates)

````

1. AI classifies your idea into one of 11 business types
   → marketplace, saas-b2b, saas-b2c, dev-tool, ai-product,
   consumer-app, content-site, agency, portfolio, ecommerce

2. AI generates candidates biased to your idea-type
   → 40-candidate pool, distributed across naming strategies
   (portmanteau / compound / made-up / metaphor / verb-first / minimal)
   → Targets best-fit TLDs first (e.g. .com for marketplace, .dev for dev-tool)

3. Hard substring denylist (zero-AI-cost gate)
   → blocks names with scatological/sexual/slur substrings

4. Awkward-suffix filter (zero-AI-cost gate)
   → drops -dept, -corp, -ltd, -gov, -official, etc. for non-agency types

5. DNS validity check
   → enforces RFC 1035 (lowercase alphanumeric + internal hyphens, ≤63 chars)

6. RDAP + native whois availability check (FREE, no API key)
   → modern RDAP protocol + TCP whois on port 43
   → multi-source consensus: high/medium/low confidence per result
   → Domainr + Porkbun supported as optional enrichers (price + premium flag)

7. AI relevance scoring (0-10)
   → drops names below your relevance floor (default 5.0)

8. AI typo-resistance check (NEW!)
   → catches names that LOOK LIKE typos of real words
   → "dogstrid" reads as botched "stride" → flagged
   → "walkoos" reads as genuine invented brand → passes

9. AI multi-language safety check
   → flags negative connotations across EN/ES/FR/IT/DE/NL/PT
   → catches phonetic matches the substring list misses

10. AI brand-clash check
    → flags collisions with famous existing brands (Zoom, Google, Stripe, etc.)
    → severity: high/medium drops, low noted but kept

11. Final scoring + ranking
    → totalScore = relevance × 0.6 + memorability × 0.10 + tld-fit × 0.30
    → ranked output with `recommendedAction` decision signal

````

#### Retry loop until count is met

If the first batch doesn't yield enough names, the Actor runs **up to 5 retry batches** with growing pool sizes and seen-name exclusion. The final 1-2 retries enter **rescue mode** (relaxed relevance floor + skipped brand-clash) to honor your `count` request when filters are aggressive.

---

### Key features

| Feature | Detail |
|---|---|
| **Plain-English input** | Just describe your idea — no need to invent names yourself |
| **11 quality gates** | Substring, suffix, DNS, RDAP, whois, relevance, typo, safety, brand-clash, scoring, TLD-fit |
| **Free authoritative availability** | RDAP + native whois — no API key required for the default check |
| **Optional API enrichers** | Domainr (aftermarket signal) + Porkbun (price + premium flag) |
| **Multi-AI provider** | Use OpenAI or Anthropic; works with both |
| **Idea-type classification** | Auto-classifies your idea so TLDs and prompts adapt (marketplace gets .com priority, dev-tool gets .dev/.io, etc.) |
| **Decision-ready output** | `recommendedAction`: register / consider / monitor / skip |
| **Per-result rationale** | `pickReason` + `risksAndCaveats` explain every recommendation |
| **Drop transparency** | Every filtered-out name listed in `droppedCandidates` with reason |
| **Per-TLD diagnostics** | See exactly how many candidates were generated/available/returned per TLD |
| **Token + cost tracking** | Every run reports its own token usage + estimated USD spend |
| **MCP-ready output** | Single decision field per result, predictable schema, structured for LLM consumption |

---

### Input example

Minimum viable input — just `idea` and `aiApiKey`:

```json
{
  "idea": "a marketplace for freelance dog walkers in Europe",
  "aiApiKey": "sk-ant-..."
}
````

Full input with all tuning options:

```json
{
  "idea": "a marketplace for freelance dog walkers in Europe",
  "ideaType": "marketplace",
  "keywords": ["walk", "paw", "dog"],
  "tlds": [".com", ".io", ".co", ".ai", ".app"],
  "count": 10,
  "candidatePoolSize": 40,
  "style": "creative",
  "avoidWords": ["pup"],
  "maxLength": 12,
  "aiProvider": "openai",
  "aiApiKey": "sk-...",
  "domainrApiKey": "optional-domainr-key",
  "porkbunApiKey": "optional-porkbun-key",
  "porkbunSecretKey": "optional-porkbun-secret",
  "excludePremium": true,
  "relevanceFloor": 5,
  "runTypoCheck": true,
  "runSafetyCheck": true,
  "runBrandClashCheck": true
}
```

***

### Output example

Each row in the dataset is one confirmed-available domain with a full decision package:

```json
{
  "domain": "pawmile.com",
  "name": "pawmile",
  "tld": ".com",
  "available": true,
  "confidence": "high",
  "premium": false,
  "checkedVia": "rdap+whois",
  "ideaType": "marketplace",

  "relevanceScore": 8.8,
  "memorabilityScore": 8.5,
  "tldScore": 10,
  "totalScore": 9.1,

  "namingStrategy": "compound",
  "aiRationale": "Suggests a walking distance for dogs.",
  "pickReason": "Compound of two real words — Suggests a walking distance for dogs. .com is the strongest TLD for a marketplace. Directly evokes the concept.",
  "risksAndCaveats": [],
  "recommendedAction": "register",

  "registrarUrl": "https://dash.cloudflare.com/?to=/:account/domains/register/pawmile.com",
  "estimatedPrice": null,
  "generatedAt": "2026-05-14T18:27:34.961Z"
}
```

#### How to use the output

| Field | What to do with it |
|---|---|
| `recommendedAction = "register"` | Score ≥ 8.0, high confidence, no critical risks. Buy now. |
| `recommendedAction = "consider"` | Score ≥ 7.0 but with caveats — read `risksAndCaveats` first |
| `recommendedAction = "monitor"` | Borderline. Worth watching if higher picks are taken. |
| `recommendedAction = "skip"` | Premium-priced or quality issues. Pass. |
| `confidence = "high"` | RDAP + whois both confirmed available |
| `confidence = "medium"` | Only one source decisive (often on .app/.dev — Google strips public whois) |
| `confidence = "low"` | Sources disagreed — verify manually before buying |
| `premium = true` | Registry holds at marked-up pricing ($100s–$1000s, not standard rate) |
| `pickReason` | One-sentence rationale combining naming strategy + TLD fit + relevance |
| `risksAndCaveats` | Empty = clean. Non-empty = read each line before deciding. |
| `registrarUrl` | Direct deep-link to Cloudflare Registrar (at-cost) or Porkbun if configured |

***

### OUTPUT.json — full run summary

The key-value store gets a complete run report:

```json
{
  "input": { /* echoed input */ },
  "stats": {
    "generatedCount": 113,
    "filteredOutCount": 0,
    "checkedCount": 113,
    "availableCount": 14,
    "returnedCount": 10,
    "requestedCount": 10,
    "metRequestedCount": true,
    "retryBatchesRun": 5,
    "rescueModeUsed": true,
    "recommendedActions": { "register": 6, "consider": 2, "monitor": 2, "skip": 0 },
    "processingMs": 103456,
    "checkedVia": "rdap+whois",
    "scorer": {
      "inputCount": 14,
      "hardDenylistDrops": 0,
      "awkwardSuffixDrops": 0,
      "relevanceFloorDrops": 1,
      "typoDrops": 1,
      "safetyDrops": 0,
      "clashDrops": 5,
      "survived": 10
    },
    "bestFitTldsForIdea": [".com", ".co", ".market", ".shop", ".store"],
    "bestFitReturned": 7,
    "tldBreakdown": [
      { "tld": ".com", "requested": true, "generated": 113, "available": 10, "returned": 7 },
      { "tld": ".io",  "requested": true, "generated": 8,   "available": 4,  "returned": 2 },
      { "tld": ".co",  "requested": true, "generated": 54,  "available": 0,  "returned": 0, "note": "Candidates generated but none passed availability check" },
      { "tld": ".ai",  "requested": true, "generated": 0,   "available": 0,  "returned": 0, "note": "No candidates generated for this TLD — AI ignored or rejected it" }
    ],
    "tokenUsage": {
      "totalCalls": 28,
      "inputTokens": 14788,
      "outputTokens": 7727,
      "estimatedCostUsd": 0.114,
      "byCall": {
        "classify-idea":         { "callCount": 1, "inputTokens": 322,  "outputTokens": 8,    "estimatedCostUsd": 0.0009 },
        "generate-candidates":   { "callCount": 6, "inputTokens": 8273, "outputTokens": 7052, "estimatedCostUsd": 0.0912 },
        "score-relevance":       { "callCount": 6, "inputTokens": 1303, "outputTokens": 274,  "estimatedCostUsd": 0.0058 },
        "check-typo":            { "callCount": 6, "inputTokens": 2925, "outputTokens": 71,   "estimatedCostUsd": 0.0080 },
        "check-safety":          { "callCount": 5, "inputTokens": 1165, "outputTokens": 246,  "estimatedCostUsd": 0.0054 },
        "check-brand-clash":     { "callCount": 4, "inputTokens": 800,  "outputTokens": 95,   "estimatedCostUsd": 0.0030 }
      },
      "pricingAsOf": "2026-05"
    }
  },
  "droppedCandidates": [
    { "domain": "walkglow.com",  "gate": "relevance-floor", "reason": "relevance 4.5 below floor 5.0", "score": 4.5 },
    { "domain": "dogbyrd.com",   "gate": "typo-check",      "reason": "looks like typo of 'dog bird'" },
    { "domain": "walkzoom.com",  "gate": "brand-clash",     "reason": "medium clash with Zoom" },
    { "domain": "dogwhizz.com",  "gate": "safety-check",    "reason": "sounds like 'whiz', slang for urination" }
  ],
  "domains": [ /* full ranked results */ ]
}
```

***

### Cost transparency

The Actor reports its own token spend per run. Typical numbers (using `gpt-4o`):

| Scenario | AI calls | Estimated cost |
|---|---|---|
| **Typical** (no retries needed) | 6 | **$0.022** |
| Single retry triggered | 12 | $0.045 |
| 3 retries (full quality) | 21 | $0.084 |
| **Worst case** (5 retries + rescue mode) | 28 | **$0.13** |

Disable optional AI checks via input flags (`runTypoCheck`, `runSafetyCheck`, `runBrandClashCheck`) for cheap mode — saves ~30-40%.

Anthropic Claude Sonnet runs ~30% more expensive than OpenAI gpt-4o for the same call pattern.

***

### Input parameters

#### Required

| Parameter | Type | Description |
|---|---|---|
| `idea` | string | Plain English description of your business / product / project |
| `aiApiKey` | string (secret) | API key for the chosen AI provider |

#### Common tuning

| Parameter | Type | Default | Description |
|---|---|---|---|
| `keywords` | string\[] | `[]` | Anchor words the AI should bias toward |
| `tlds` | string\[] | `[".com", ".io", ".co", ".ai", ".app"]` | TLDs to generate + check |
| `count` | integer | `10` | Number of confirmed-available domains to return (1-50) |
| `style` | enum | `creative` | `creative` / `professional` / `playful` / `minimal` |
| `maxLength` | integer | `15` | Max characters in name part (4-30) |
| `avoidWords` | string\[] | `[]` | Words/fragments to exclude from suggestions |
| `aiProvider` | enum | `anthropic` | `anthropic` or `openai` |

#### Advanced quality controls

| Parameter | Type | Default | Description |
|---|---|---|---|
| `ideaType` | enum | auto-classify | Skip AI classification by setting manually: `marketplace` / `saas-b2b` / `saas-b2c` / `dev-tool` / `ai-product` / `consumer-app` / `content-site` / `agency` / `portfolio` / `ecommerce` / `unknown` |
| `relevanceFloor` | integer | `5` | Drop candidates below this relevance score (0-10) |
| `candidatePoolSize` | integer | adaptive | Override the per-batch generation size (10-60) |
| `excludePremium` | boolean | `true` | Filter out registry-premium-priced domains |
| `runTypoCheck` | boolean | `true` | Enable AI typo-resistance check (~1 AI call) |
| `runSafetyCheck` | boolean | `true` | Enable AI multi-language safety check (~1 AI call) |
| `runBrandClashCheck` | boolean | `true` | Enable AI brand-collision check (~1 AI call) |

#### Optional availability enrichers

| Parameter | Type | Description |
|---|---|---|
| `domainrApiKey` | string (secret) | Adds aftermarket / marketed-for-sale signal |
| `porkbunApiKey` | string (secret) | Adds price quotes + premium flag |
| `porkbunSecretKey` | string (secret) | Required with Porkbun API key |

The default RDAP + whois availability check works **without any of these keys**.

***

### Using via MCP (LLM agents)

This Actor is designed for LLM agent consumption via the [Apify MCP server](https://apify.com/apify/actors-mcp-server). The output schema is deliberately flat + decision-ready:

**For LLM consumers, the key fields are:**

- `recommendedAction` — single signal (`register` / `consider` / `monitor` / `skip`)
- `risksAndCaveats` — array of caveat strings (empty = clean)
- `pickReason` — pre-synthesized 1-line explanation
- `confidence` — availability check confidence

**Suggested LLM filter:**

```js
// Pick the strongest result with no caveats
const winner = results.find(r =>
    r.recommendedAction === "register"
    && r.risksAndCaveats.length === 0
    && r.confidence === "high"
);
```

If the LLM consumer needs full reasoning, the `OUTPUT.json` blob includes all stats, drops, and TLD breakdown.

***

### What the Actor will NEVER do

- Return a name that contains vulgar / scatological / sexual / slur substrings
- Return a name that "looks like a typo" of a real English word (e.g. `dogstrid`)
- Return a name with high or medium severity collision with a famous brand
- Return a name where the AI's safety check flags negative connotations across EN/ES/FR/IT/DE/NL/PT
- Return a name flagged as registry-premium (unless you explicitly set `excludePremium: false`)
- Return a name marked as unavailable by RDAP+whois (fail-closed on disagreement)

If a result makes it through these gates, it's safe to put on a business card.

***

### What it WON'T guarantee

- **Trademark clearance.** The brand-clash check catches well-known brands but doesn't replace USPTO / EUIPO / local TM searches. Always verify TM before launching.
- **Cultural appropriateness in every market.** Safety covers 7 major languages. If you're launching in Mandarin/Hindi/Arabic markets, run a native-speaker review.
- **Pronunciation in every accent.** Memorability scoring is English-phonetic. Multi-region brands may need spoken-aloud testing.
- **Pricing on premium domains.** Premium domains are filtered by default; if you set `excludePremium: false`, pricing comes from Porkbun (if configured) or is `null`.

***

### Troubleshooting

| Problem | Likely cause | Fix |
|---|---|---|
| `metRequestedCount: false` in OUTPUT.json | Your idea + TLD list is saturated, or filters too strict | Lower `relevanceFloor`, add more TLDs, broaden `style`, relax `maxLength` |
| All results are `.io` / `.app` not `.com` | All `.com` names for your idea are registered | Try a more specific idea description, or adjust `keywords` |
| `confidence: medium` on .app/.dev results | Google strips public whois for these TLDs | RDAP is still authoritative. Add a Porkbun key for second-source verification. |
| High `clashDrops` count | AI keeps generating brand-adjacent names | Add famous-brand stems to `avoidWords` |
| Cost higher than expected | Multiple retries fired (saturated namespace) | Check `stats.retryBatchesRun` and `rescueModeUsed`. Adjust `relevanceFloor` to keep typical runs cheap. |
| `0 candidates generated` for a TLD | AI judged TLD a poor fit for your idea type | This is intentional. Remove the TLD from input, or accept the breakdown's transparency. |

***

### License

MIT

# Actor input Schema

## `idea` (type: `string`):

Describe the business, product, niche, customer, or positioning in plain English. Example: 'a marketplace for freelance dog walkers in Europe'.

## `keywords` (type: `array`):

Optional anchor words the AI should incorporate or riff on when inventing names.

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

Domain extensions to include when generating and checking names.

## `count` (type: `integer`):

How many confirmed available domains to return.

## `candidatePoolSize` (type: `integer`):

How many AI-generated domain candidates to create before availability checks. Leave empty to use an adaptive default. Larger pools surface more distinct quality names.

## `style` (type: `string`):

Branding tone to bias the AI toward.

## `avoidWords` (type: `array`):

Words or fragments the AI should not use in generated names.

## `maxLength` (type: `integer`):

Maximum number of characters for the domain name part only, excluding the TLD.

## `aiProvider` (type: `string`):

Which AI provider to use for domain generation and relevance scoring.

## `aiApiKey` (type: `string`):

API key for the selected AI provider. This field is encrypted by Apify.

## `domainrApiKey` (type: `string`):

Optional. Default checks use RDAP + native whois (no key needed, free, authoritative). Supplying a Domainr key adds aftermarket/marketed signal alongside the default check.

## `porkbunApiKey` (type: `string`):

Optional. When provided alongside the secret key, adds Porkbun price quotes and a premium-domain flag to results.

## `porkbunSecretKey` (type: `string`):

Optional. Required together with the Porkbun API key.

## `excludePremium` (type: `boolean`):

When true, domains flagged as 'premium' by registries (sold at marked-up prices) are filtered out of results. Defaults to true.

## `ideaType` (type: `string`):

Skip the AI auto-classification step by providing the business type directly. Leave blank to auto-classify. Affects TLD scoring + generator prompt.

## `relevanceFloor` (type: `integer`):

Drop any candidate whose AI relevance score (0-10) falls below this floor. Higher = stricter. Default 5.5.

## `runSafetyCheck` (type: `boolean`):

When true, runs an AI pass that flags names with negative phonetic/sexual/scatological/cultural connotations across English, Spanish, French, Italian, German, Dutch, and Portuguese. Adds ~1 AI call per run. Defaults to true.

## `runBrandClashCheck` (type: `boolean`):

When true, runs an AI pass that flags names confusingly similar to famous existing brands. Adds ~1 AI call per run. Defaults to true.

## `runTypoCheck` (type: `boolean`):

When true, runs an AI pass that flags names which LOOK LIKE typos or mangled real words (e.g. 'dogstrid' reading as botched 'stride'). Genuine invented brand names like 'walkoos' or 'spotify' pass through. Adds ~1 AI call per run. Defaults to true.

## Actor input object example

```json
{
  "idea": "a marketplace for freelance dog walkers in Europe",
  "keywords": [
    "walk",
    "paw",
    "dog"
  ],
  "tlds": [
    ".com",
    ".io",
    ".co",
    ".ai",
    ".app"
  ],
  "count": 10,
  "style": "creative",
  "maxLength": 15,
  "aiProvider": "anthropic",
  "excludePremium": true,
  "relevanceFloor": 5,
  "runSafetyCheck": true,
  "runBrandClashCheck": true,
  "runTypoCheck": true
}
```

# Actor output Schema

## `availableDomains` (type: `string`):

Ranked domains that were generated by AI and confirmed available

## `top10Domains` (type: `string`):

Highest-scoring confirmed available domains

## `keyValueStore` (type: `string`):

Run storage containing OUTPUT.json with run stats and returned domains

# 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 = {
    "idea": "a marketplace for freelance dog walkers in Europe",
    "keywords": [
        "walk",
        "paw",
        "dog"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("marielise.dev/ai-domain-finder").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 = {
    "idea": "a marketplace for freelance dog walkers in Europe",
    "keywords": [
        "walk",
        "paw",
        "dog",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("marielise.dev/ai-domain-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "idea": "a marketplace for freelance dog walkers in Europe",
  "keywords": [
    "walk",
    "paw",
    "dog"
  ]
}' |
apify call marielise.dev/ai-domain-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=marielise.dev/ai-domain-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AI Domain Finder - Confirmed Available Domains",
        "description": "Describe your idea in plain English. Get up to 50 brandable domain names confirmed available via RDAP and WHOIS, scored on TLD fit, typo-resistance, and multi-language safety, each tagged register / consider / monitor / skip.",
        "version": "0.0",
        "x-build-id": "B08aaE28ZUbB1k3Pc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/marielise.dev~ai-domain-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-marielise.dev-ai-domain-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/marielise.dev~ai-domain-finder/runs": {
            "post": {
                "operationId": "runs-sync-marielise.dev-ai-domain-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/marielise.dev~ai-domain-finder/run-sync": {
            "post": {
                "operationId": "run-sync-marielise.dev-ai-domain-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "idea",
                    "aiApiKey"
                ],
                "properties": {
                    "idea": {
                        "title": "Idea Description",
                        "type": "string",
                        "description": "Describe the business, product, niche, customer, or positioning in plain English. Example: 'a marketplace for freelance dog walkers in Europe'."
                    },
                    "keywords": {
                        "title": "Seed Keywords",
                        "type": "array",
                        "description": "Optional anchor words the AI should incorporate or riff on when inventing names."
                    },
                    "tlds": {
                        "title": "TLDs to Check",
                        "type": "array",
                        "description": "Domain extensions to include when generating and checking names.",
                        "default": [
                            ".com",
                            ".io",
                            ".co",
                            ".ai",
                            ".app"
                        ]
                    },
                    "count": {
                        "title": "Results to Return",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many confirmed available domains to return.",
                        "default": 10
                    },
                    "candidatePoolSize": {
                        "title": "Candidate Pool Size",
                        "minimum": 10,
                        "maximum": 60,
                        "type": "integer",
                        "description": "How many AI-generated domain candidates to create before availability checks. Leave empty to use an adaptive default. Larger pools surface more distinct quality names."
                    },
                    "style": {
                        "title": "Naming Style",
                        "enum": [
                            "creative",
                            "professional",
                            "playful",
                            "minimal"
                        ],
                        "type": "string",
                        "description": "Branding tone to bias the AI toward.",
                        "default": "creative"
                    },
                    "avoidWords": {
                        "title": "Avoid Words",
                        "type": "array",
                        "description": "Words or fragments the AI should not use in generated names."
                    },
                    "maxLength": {
                        "title": "Max Name Length",
                        "minimum": 4,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Maximum number of characters for the domain name part only, excluding the TLD.",
                        "default": 15
                    },
                    "aiProvider": {
                        "title": "AI Provider",
                        "enum": [
                            "anthropic",
                            "openai"
                        ],
                        "type": "string",
                        "description": "Which AI provider to use for domain generation and relevance scoring.",
                        "default": "anthropic"
                    },
                    "aiApiKey": {
                        "title": "AI API Key",
                        "type": "string",
                        "description": "API key for the selected AI provider. This field is encrypted by Apify."
                    },
                    "domainrApiKey": {
                        "title": "Domainr API Key (optional enricher)",
                        "type": "string",
                        "description": "Optional. Default checks use RDAP + native whois (no key needed, free, authoritative). Supplying a Domainr key adds aftermarket/marketed signal alongside the default check."
                    },
                    "porkbunApiKey": {
                        "title": "Porkbun API Key (optional enricher)",
                        "type": "string",
                        "description": "Optional. When provided alongside the secret key, adds Porkbun price quotes and a premium-domain flag to results."
                    },
                    "porkbunSecretKey": {
                        "title": "Porkbun Secret Key (optional enricher)",
                        "type": "string",
                        "description": "Optional. Required together with the Porkbun API key."
                    },
                    "excludePremium": {
                        "title": "Exclude Premium Domains",
                        "type": "boolean",
                        "description": "When true, domains flagged as 'premium' by registries (sold at marked-up prices) are filtered out of results. Defaults to true.",
                        "default": true
                    },
                    "ideaType": {
                        "title": "Idea Type (Optional)",
                        "enum": [
                            "marketplace",
                            "saas-b2b",
                            "saas-b2c",
                            "dev-tool",
                            "ai-product",
                            "consumer-app",
                            "content-site",
                            "agency",
                            "portfolio",
                            "ecommerce",
                            "unknown"
                        ],
                        "type": "string",
                        "description": "Skip the AI auto-classification step by providing the business type directly. Leave blank to auto-classify. Affects TLD scoring + generator prompt."
                    },
                    "relevanceFloor": {
                        "title": "Relevance Floor",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Drop any candidate whose AI relevance score (0-10) falls below this floor. Higher = stricter. Default 5.5.",
                        "default": 5
                    },
                    "runSafetyCheck": {
                        "title": "Run Multi-Language Safety Check",
                        "type": "boolean",
                        "description": "When true, runs an AI pass that flags names with negative phonetic/sexual/scatological/cultural connotations across English, Spanish, French, Italian, German, Dutch, and Portuguese. Adds ~1 AI call per run. Defaults to true.",
                        "default": true
                    },
                    "runBrandClashCheck": {
                        "title": "Run Brand Clash Check",
                        "type": "boolean",
                        "description": "When true, runs an AI pass that flags names confusingly similar to famous existing brands. Adds ~1 AI call per run. Defaults to true.",
                        "default": true
                    },
                    "runTypoCheck": {
                        "title": "Run Typo-Resistance Check",
                        "type": "boolean",
                        "description": "When true, runs an AI pass that flags names which LOOK LIKE typos or mangled real words (e.g. 'dogstrid' reading as botched 'stride'). Genuine invented brand names like 'walkoos' or 'spotify' pass through. Adds ~1 AI call per run. Defaults to true.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
