Domain Investment Automation

Autonomous Domain
Squatter Agent

Register valuable domains before anyone else. Build an AI agent that monitors trends, predicts high-value names, checks availability in bulk, and registers the best ones automatically — faster than any human can.


Monitor, predict, register.

Domain squatting — also called domaining — is the practice of registering valuable names early and reselling them at a premium. Good domains sell for 10x to 1,000x their registration cost. Automate every step.

📊
Monitor Trends
Google Trends, Hacker News, crypto feeds
🧠
Generate Names
Word lists + TLD combos
🔎
Score & Filter
Length, keywords, TLD value
🔗
Check Availability
Purple Flea Domains API
Register
Pay with USDC instantly
💰
Sell or Park
Aftermarket + ad revenue
🌇

Approximately 150,000

Domain names expire every single day. Most are junk — but a small percentage are genuinely valuable names your agent can acquire at registration cost.

📈

10x to 1,000x returns

A .ai domain registered for $60 commonly sells for $500–$5,000. Short one-word .com names routinely reach five to six figures.

First-mover advantage

Domain registration is instant. An agent that spots a trending keyword 30 minutes before a human checks is guaranteed to win the name.


What domains to target.

Three high-yield categories your agent should hunt continuously. Each has different economics and a different pipeline.

🤖

AI Company Name Variants

New AI companies launch daily. Register plausible name variants before they do. Focus on compound names that match the startup naming pattern.

  • openai-agent.com, openai-agent.io
  • anthropic-tools.com, claude-api.ai
  • gemini-agent.io, mistral-tools.dev
  • Any <brand>-api, <brand>-tools combos
🔥

Trending Keywords + Premium TLDs

Monitor Google Trends, Hacker News, and crypto Twitter for rising terms. Register those terms in .ai, .io, and .com immediately.

  • agentic.ai, vibe-code.io
  • depin.ai, zkproof.io
  • reasoning.ai, inference.ai
  • Any hot term + .ai / .io / .com
📅

Expiring Domains with Traffic

Domains that expire after years of use carry backlink authority and real traffic. These command premium resale prices and can be monetized immediately.

  • Pull from DropCatch and GoDaddy Auctions
  • Score by Moz DA / Ahrefs DR
  • Check backlink count via APIs
  • Redirect traffic to parked pages

Three endpoints. Full control.

Search availability, register instantly with crypto, manage your whole portfolio. No credit card, no billing address — USDC from your Purple Flea wallet.

Method Endpoint Description
GET /v1/domains/search?query=openai-agent Check availability & price. Returns {available: true, price: 15.99}
POST /v1/domains/register Register a domain. Body: {domain: "openai-agent.ai"}{domain_id, registered_at}
GET /v1/domains/list List all registered domains with expiry dates and renewal status
POST /v1/dns/add Add DNS records to a registered domain. Point to parking page or ad server
api_examples.py
import requests BASE = "https://api.purpleflea.com" HEADERS = {"Authorization": "Bearer pf_sk_..."} # 1. Check availability — GET /v1/domains/search resp = requests.get( f"{BASE}/v1/domains/search", params={"query": "openai-agent"}, headers=HEADERS ) # → {"domain": "openai-agent.ai", "available": true, "price": 59.99} # 2. Register a domain — POST /v1/domains/register resp = requests.post( f"{BASE}/v1/domains/register", json={"domain": "openai-agent.ai", "years": 1}, headers=HEADERS ) # → {"domain_id": "dom_9xZ", "domain": "openai-agent.ai", "registered_at": "2026-02-27T12:00:00Z"} # 3. List portfolio — GET /v1/domains/list resp = requests.get(f"{BASE}/v1/domains/list", headers=HEADERS) # → {"domains": [{"domain": "openai-agent.ai", "expires_at": "2027-02-27", ...}]} # 4. Add DNS record — POST /v1/dns/add (point to parking page) resp = requests.post( f"{BASE}/v1/dns/add", json={ "domain": "openai-agent.ai", "type": "A", "name": "@", "value": "203.0.113.42" # your parking page IP }, headers=HEADERS )

Full domain squatter bot.

A self-contained Python bot that generates candidate domains from trending word lists, checks availability in bulk, and registers anything available under $20.

domain_squatter.py
#!/usr/bin/env python3 """ Autonomous Domain Squatter Bot Checks trending-keyword domains and registers any available under $20. Run on a cron: 0 * * * * python domain_squatter.py """ import requests, json, time from datetime import datetime API_KEY = "pf_sk_YOUR_KEY_HERE" BASE = "https://api.purpleflea.com" HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"} MAX_PRICE_USD = 20.00 MIN_SCORE = 35 PORTFOLIO_DB = "portfolio.json" # ── Word lists from trending topics ───────────────────────────────────────── AI_PREFIXES = ["agent", "agentic", "inference", "reasoning", "rag", "vibe", "mcp", "copilot", "assistant", "autonomy"] CRYPTO_WORDS = ["depin", "restake", "zkproof", "intents", "modular", "sequencer", "blob", "eigenlayer", "omni", "mesh"] BRAND_COMBOS = ["openai-agent", "anthropic-tools", "claude-api", "gemini-agent", "mistral-tools", "grok-agent"] PREMIUM_TLDS = ["ai", "io", "com", "dev", "app"] def score_domain(domain: str) -> float: """Return 0–100 score. Higher = more likely to resell at profit.""" name, *rest = domain.split(".") tld = ".".join(rest) score = 0 # Length scoring length_pts = {4: 40, 5: 30, 6: 20, 7: 12, 8: 6, 9: 3} for max_len, pts in length_pts.items(): if len(name) <= max_len: score += pts break # TLD premium tld_pts = {"ai": 25, "com": 20, "io": 15, "dev": 12, "app": 10, "co": 8} score += tld_pts.get(tld, 0) # Keyword value hot_terms = ["agent", "ai", "gpt", "llm", "rag", "mcp", "defi", "pay", "swap", "vault", "yield", "depin"] for kw in hot_terms: if kw in name.lower(): score += 18 # Penalise hyphens and digits if "-" in name: score -= 15 if any(c.isdigit() for c in name): score -= 10 # Pronounceability — penalise 4+ consecutive consonants run = 0 for ch in name.lower(): run = 0 if ch in "aeiou" else run + 1 if run >= 4: score -= 15; break return max(0, min(100, score)) def build_candidates() -> list: """Generate domain candidates from word lists × TLD matrix.""" candidates = [] all_words = AI_PREFIXES + CRYPTO_WORDS for word in all_words: for tld in PREMIUM_TLDS: candidates.append(f"{word}.{tld}") for combo in BRAND_COMBOS: for tld in ["ai", "io", "com"]: candidates.append(f"{combo}.{tld}") return [d for d in candidates if score_domain(d) >= MIN_SCORE] def check_availability(domain: str) -> dict: """GET /v1/domains/search — returns availability and price.""" r = requests.get(f"{BASE}/v1/domains/search", params={"query": domain}, headers=HEADERS, timeout=10) r.raise_for_status() return r.json() def register_domain(domain: str) -> dict: """POST /v1/domains/register — pays with USDC from Purple Flea wallet.""" r = requests.post(f"{BASE}/v1/domains/register", json={"domain": domain, "years": 1, "auto_renew": False}, headers=HEADERS, timeout=15) r.raise_for_status() return r.json() def load_portfolio() -> dict: try: with open(PORTFOLIO_DB) as f: return json.load(f) except FileNotFoundError: return {"domains": [], "total_spent": 0.0} def save_portfolio(portfolio: dict): with open(PORTFOLIO_DB, "w") as f: json.dump(portfolio, f, indent=2) def run(): portfolio = load_portfolio() owned = {d["domain"] for d in portfolio["domains"]} candidates = [d for d in build_candidates() if d not in owned] print(f"[{datetime.utcnow():%Y-%m-%d %H:%M}] Checking {len(candidates)} candidates...") registered_this_run = [] for domain in candidates: try: info = check_availability(domain) price = info.get("price", 999) if not info.get("available") or price > MAX_PRICE_USD: continue score = score_domain(domain) print(f" AVAILABLE {domain:35s} score={score:3.0f} ${price:.2f}") result = register_domain(domain) entry = { "domain": domain, "score": score, "cost_usd": price, "domain_id": result.get("domain_id"), "registered": result.get("registered_at"), "status": "active" } portfolio["domains"].append(entry) portfolio["total_spent"] += price registered_this_run.append(domain) print(f" REGISTERED {domain}") time.sleep(0.5) # rate-limit courtesy delay except Exception as e: print(f" ERROR {domain}: {e}") save_portfolio(portfolio) print(f"Done. Registered {len(registered_this_run)} new domains.") print(f"Portfolio: {len(portfolio['domains'])} total, ${portfolio['total_spent']:.2f} invested.") if __name__ == "__main__": run()

What to keep, what to drop.

A domain not renewed is a domain lost. Use GET /v1/domains/list daily and apply this decision matrix.

Domain Score Cost Listed For Action
reasoning.ai 82 $59.99 3 months Renew — high conviction hold
agentic.io 71 $39.99 6 months Raise ask price — strong name
depin.dev 54 $14.99 9 months Keep listed — moderate upside
openai-agent.com 48 $12.99 14 months Drop — trademark risk, no sales
modular.app 27 $9.99 18 months Drop — low score, no interest
🔒

Score 60+ — Renew always

High-conviction names. Set auto_renew: true and ask 30–50x cost on aftermarket. These are your long-term portfolio anchors.

📋

Score 35–59 — Monitor

Renew once and actively list on Sedo and Afternic. If no sale after 12 months, reassess. Lower the ask before dropping.

🗑

Score under 35 — Drop

Let expire after one year if there's been no buyer interest. Holding bad names is dead capital. Your agent should auto-drop these without prompting.


Earn while you wait for a sale.

Point your domains to parked pages the day you register them. Use POST /v1/dns/add to set DNS records immediately after registration.

💶

Parked Pages with Ads

DNS-park your domain at a service like Sedo Parking or ParkingCrew. They serve contextually relevant ads and split revenue with you. High-traffic expired domains can generate meaningful passive income while you wait for a buyer.

🔗

Purple Flea Referral Links

Build a minimal landing page that says "This domain is for sale — also, build your own domain agent with Purple Flea" and include your referral link. Every signup earns 15% of platform fees, forever.

dns_park.py
def park_domain(domain: str, parking_ip: str = "198.54.120.10"): """Point domain to parking page immediately after registration.""" # Set A record to parking service IP r = requests.post( f"{BASE}/v1/dns/add", json={ "domain": domain, "records": [ {"type": "A", "name": "@", "value": parking_ip, "ttl": 3600}, {"type": "A", "name": "www", "value": parking_ip, "ttl": 3600}, {"type": "TXT", "name": "@", "value": "v=parked", "ttl": 3600} ] }, headers=HEADERS ) r.raise_for_status() print(f"Parked {domain} → {parking_ip}") # Call immediately after register_domain() for domain in registered_this_run: park_domain(domain) time.sleep(0.3)

Legal considerations

Domain investing is legal. Cybersquatting — registering a domain that's confusingly similar to an established trademark with intent to profit from that trademark's goodwill — is not. The ACPA in the US and equivalent laws globally carry statutory damages up to $100,000 per domain.

Rule of thumb: register generic words, coined brandable names, and keyword combinations. Never register obvious misspellings of major brands or direct brand names in any TLD. Add a trademark blocklist to your scoring function that rejects known brand names before any registration call fires.

Generic domains are safe. reasoning.ai, agentic.io, depin.dev — these are generic terms with no trademark holder. They're the targets your agent should focus on.

15%

Referral Commission on Every Domain Registered

Every domain registration made through your agent's referral link earns you 15% of the platform fee — automatically, on every transaction, forever. Build a portfolio of agents and multiply your commissions.


More agent strategies.

Start your domain
investing agent today.

500+ TLDs. Crypto payments. 15% referral commission on every registration. Free to start.