AI-powered domain name generator and availability checker
Project description
domainai
AI-powered domain name generator and availability checker. Describe what you want in plain English, and domainai generates creative domain names, checks their availability, and shows results in a beautiful terminal UI.
Features
- AI-Powered — Uses LLMs to brainstorm creative, brandable domain names
- Provider-Agnostic — Supports OpenAI, Anthropic, Google Gemini, and Groq (BYOK)
- Dual Availability Check — Domainr API + WHOIS for accurate results
- Smart Search —
--batchand--untilmodes for flexible searching - Watch Mode — Continuous background scanning with configurable intervals
- History — SQLite database prevents rechecking the same domains
- Beautiful Output — Rich terminal UI with colored results
- CSV Export — Append-mode CSV for tracking all results
Quick Start
# Install (Groq is included by default — free tier!)
pip install domainai
# First-time setup (interactive)
domainai setup
# Search for domains
domainai search "url shortener, short, energetic" --tlds com,io
Requirements
- Python 3.9 or higher
- An API key from at least one supported AI provider
Installation
# Default install — includes Groq (free tier, recommended)
pip install domainai
# Add another provider on top of the default
pip install "domainai[openai]" # OpenAI / ChatGPT
pip install "domainai[anthropic]" # Anthropic / Claude
pip install "domainai[gemini]" # Google Gemini
pip install "domainai[all]" # All providers at once
Note (macOS/zsh): Only the optional extras (
[openai],[all], etc.) need quoting on zsh. The defaultpip install domainaiworks without any brackets.
Setup
Run the interactive setup wizard:
domainai setup
This will:
- Ask which AI provider you want to use
- Show where to get an API key
- Test the connection
- Save config to
~/.domainai/config.json
Manual Configuration
You can also configure via .env file:
AI_PROVIDER=groq
AI_API_KEY=gsk_your_key_here
AI_MODEL=llama-3.3-70b-versatile # optional
Or via CLI flags:
domainai search "my idea" --provider groq --api-key gsk_xxx
Priority order: CLI flags > .env file > ~/.domainai/config.json
Usage
Search (Batch Mode)
Generate names, check them, done:
# Generate 20 names (default), check with .com TLD
domainai search "url shortener, short, energetic"
# Specify TLDs and batch size
domainai search "url shortener, short" --tlds com,io,link --batch 30
Search (Until Mode)
Keep searching until N available domains are found:
# Search until 5 available domains are found
domainai search "url shortener, short" --tlds com,io --until 5
# Combine: generate up to 50 names, but stop at 3 available
domainai search "url shortener" --tlds com,io --batch 50 --until 3
Watch Mode
Continuous background scanning:
# Check every 30 seconds, stop at 5 available
domainai watch "url shortener, short" --tlds com,io --interval 30 --until 5
Press Ctrl+C to stop gracefully.
History & Results
# View check history from SQLite
domainai history
# View saved CSV results
domainai results
Output
Terminal
Real example — finding domains for an AI personal trainer app:
$ domainai search "AI personal trainer app, energetic, motivating, modern" \
--tlds com,io,ai --until 5
🔍 Searching domains...
Prompt: "AI personal trainer app, energetic, motivating, modern"
TLDs: com, io, ai | Batch: 15 | Until: 5 available
❌ fitzone.com → taken
❌ fitzone.io → taken
❌ fitzone.ai → taken
❌ motivo.com → taken
❌ paxter.com → taken
❌ elevat.com → taken
❌ fitmax.com → taken
❌ zinga.com → taken
❌ coreio.com → taken
✅ coreio.io → available → namecheap.com/...?domain=coreio.io
✅ coreio.ai → available → namecheap.com/...?domain=coreio.ai
❌ vitali.com → taken
❌ pulso.com → taken
✅ fitbita.com → available → namecheap.com/...?domain=fitbita.com
✅ fitbita.io → available → namecheap.com/...?domain=fitbita.io
✅ fitbita.ai → available → namecheap.com/...?domain=fitbita.ai
Done! Checked 33 domains, 5 available.
CSV (results.csv)
domain,tld,available,checked_at,buy_url
coreio.io,io,true,2026-05-16 14:32,https://www.namecheap.com/domains/registration/results/?domain=coreio.io
fitzone.com,com,false,2026-05-16 14:32,
Results are appended — old data is never overwritten.
Supported Providers
| Provider | Default Model | Free Tier | Setup Link |
|---|---|---|---|
| Groq (recommended) | llama-3.3-70b-versatile |
✅ Yes | console.groq.com |
| OpenAI | gpt-4o |
❌ Paid | platform.openai.com |
| Google Gemini | gemini-2.5-flash |
✅ Yes | aistudio.google.com |
| Anthropic | claude-sonnet-4-5 |
❌ Paid | console.anthropic.com |
See all recommended models per provider:
domainai models
Docker
1. Create your .env file
cp .env.example .env
# Edit .env and set your API key:
# AI_PROVIDER=groq
# AI_API_KEY=gsk_xxxxx
2a. Docker Compose (recommended)
# Build and run the default search command
docker compose up --build
# Run any command interactively
docker compose run --rm domainai search "url shortener, short" --tlds com,io
docker compose run --rm domainai setup
docker compose run --rm domainai history
docker compose run --rm domainai watch "crypto names" --interval 60
2b. Docker (manual)
# Build the image
docker build -t domainai .
# Run a search
docker run --rm --env-file .env domainai search "AI startup names" --tlds com,io
# Persist history and results with volumes
docker run --rm --env-file .env \
-v domainai-data:/root/.domainai \
-v "$(pwd)/results.csv:/app/results.csv" \
domainai search "short brandable names" --tlds com,ai --batch 30
Volumes
| Volume | Purpose |
|---|---|
domainai-data:/root/.domainai |
SQLite history persists across container restarts |
./results.csv:/app/results.csv |
CSV results written directly to your host machine |
Project Structure
domainai/
├── src/domainai/ # Main package
│ ├── providers/ # AI provider adapters (Groq, OpenAI, Anthropic, Gemini)
│ ├── checker.py # Domain availability checking (WHOIS + Domainr)
│ ├── generator.py # Provider factory and name generation
│ ├── scheduler.py # Batch/until/watch orchestration
│ ├── storage.py # SQLite history database
│ ├── exporter.py # CSV export
│ └── cli.py # CLI entry point
├── tests/ # Test suite
├── .github/workflows/ # CI/CD
├── Dockerfile # Container support
└── pyproject.toml # Package configuration
Development
git clone https://github.com/domainai/domainai.git
cd domainai
pip install -e ".[all,dev]"
python -m pytest tests/ -v
Contributing
See CONTRIBUTING.md for guidelines.
License
MIT — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file domainai-0.1.0.tar.gz.
File metadata
- Download URL: domainai-0.1.0.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f29298edcd7f6932f4cfb7fdf1140e9ff3fc052b86adc0e329a1ddd9a46563ec
|
|
| MD5 |
1957542420bf8a608b5133fecf1a29e3
|
|
| BLAKE2b-256 |
e1ded0194887578e03e495ac7ea0f2c7213e77d682bb4f8ba5a4567972927a4a
|
File details
Details for the file domainai-0.1.0-py3-none-any.whl.
File metadata
- Download URL: domainai-0.1.0-py3-none-any.whl
- Upload date:
- Size: 32.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82d7f2b4f09b509aad385fe6d0323c74f10f7119eb86a305b0905ceabc2a5393
|
|
| MD5 |
9ea6fc20b97b02c6a6f1d72f0f1bb2bf
|
|
| BLAKE2b-256 |
0996f8dcc823d96c35c11055985d509986f03e45622468d414d386d1f9a554e0
|