An AI-agent-powered pipeline to submit your product/startup to 100+ directories — AI tool listings, startup databases, SaaS aggregators, and general web directories.
Built to work with AI coding agents (Claude Code, Cursor, Gemini, Windsurf, etc.) as an interactive submission assistant. The agent collects your product info, generates copy variations, discovers submission forms, auto-submits where possible, and guides you through manual submissions via browser automation.
- Database of 100+ directories — Pre-catalogued with auth type, captcha detection, pricing signals, and site status
- Automated analysis pipeline — HTTP-level scanning, browser verification, form field discovery
- 30 unique copy variations — Generated per product to avoid duplicate content across directories
- Auto-submission engine — Heuristic field matching fills and submits forms across hundreds of sites
- Manual browser assistance — Playwright MCP integration for captcha solving, Google login, complex forms
- GitHub PR submissions — Automated fork + PR creation for awesome-lists and curated repos
- Progress tracking —
checkpoint.mdtracks every submission with status and confirmation
- Python 3.10+
- An AI coding agent (see Supported Agents)
ghCLI (for GitHub PR submissions) — Install
# Clone the repo
git clone https://github.com/man0l/ai-directories.git
cd ai-directories
# Create virtual environment and install dependencies
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Install Playwright browsers
playwright install chromiumPlace these files in the project root:
logo.png— Your product logo (used for directory uploads)site-image.png— A screenshot of your product (used for directory uploads)
Open the project in your AI IDE and tell the agent:
"I want to submit my product to AI directories"
The agent will walk you through the process interactively. See the agent-specific instructions below.
The agent reads AGENTS.md for instructions. It requires the Playwright MCP server for browser-based submissions.
Cursor setup:
- Open the project in Cursor
- Ensure the Playwright MCP server is configured (for browser submissions)
- The agent will read
AGENTS.mdand.cursor/skills/add-directories/SKILL.mdautomatically - Start a conversation: "I want to submit my product to directories"
Playwright MCP for Cursor:
Add to your Cursor MCP settings (.cursor/mcp.json or IDE settings):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@anthropic/mcp-playwright"]
}
}
}The agent reads CLAUDE.md for instructions.
Claude Code setup:
- Open the project directory in Claude Code
- Claude reads
CLAUDE.mdautomatically for project context - Start: "I want to submit my product to directories"
- For browser-based submissions, Claude Code uses shell commands with Playwright
Claude Cowork setup:
- Open the project in Claude Cowork
- Ensure Playwright MCP is available in the environment
- The browser tools (
browser_navigate,browser_snapshot, etc.) are used for manual submissions
The agent reads GEMINI.md for instructions.
- Open the project in your Gemini-powered IDE
- Gemini reads
GEMINI.mdfor project context - Start: "I want to submit my product to directories"
[1] Collect Product Info → User provides URL, name, description, credentials
↓
[2] Generate 30 Copies → Unique title/description pairs for SEO diversity
↓
[3] Analyze Directories → HTTP scan: auth type, captcha, pricing, dead domains
↓
[4] Browser Verify → Playwright confirms active sites, detects JS-rendered forms
↓
[5] Discover Forms → Playwright extracts form fields (name, type, label)
↓
[6] Auto-Submit → Heuristic field matching fills + submits forms
↓
[7] Manual Submit → Agent guides you through captcha/OAuth/complex forms
↓
[8] GitHub PRs → Fork + PR to awesome-lists and curated repos
↓
[9] Track Progress → checkpoint.md updated after each phase
directories.json contains 100+ directories, each with:
{
"name": "FutureTools",
"url": "https://www.futuretools.io",
"submission_url": "https://www.futuretools.io/submit-a-tool",
"site_status": "active",
"auth_type": "none",
"captcha_type": "none",
"pricing_type": "free",
"categories": ["AI Tools"]
}Auth types: none (open form), email_password, google_only, google_and_email, facebook, unknown
Site statuses: active, not_found, domain_dead, timeout, cloudflare_blocked, error, invalid_url, facebook_group, domain_parked
submission_plan.json contains per-directory submission targets:
{
"directory_name": "FutureTools",
"submission_url": "https://www.futuretools.io/submit-a-tool",
"status": "pending",
"copy": {
"title": "Your Product — One-line tagline",
"description": "2-3 sentence description for this specific directory."
},
"discovered_fields": [...],
"credentials": {
"email": "YOUR_EMAIL",
"name": "YOUR_NAME",
"username": "YOUR_USERNAME",
"password": "YOUR_PASSWORD"
}
}Status values: pending, discovered, submitted, skipped, skipped_paid, skipped_login_required, timeout, no_form_found, no_fields_matched, captcha, cloudflare_blocked, domain_parked, submit_timeout, deferred
| Script | Purpose | Workers | Method |
|---|---|---|---|
analyze_directories.py |
HTTP-level analysis (auth, captcha, pricing) | ThreadPool | urllib |
cleanup_and_categorize.py |
Error triage + build browser check list | Single | JSON processing |
browser_verify.py |
Browser verification of active sites | 10 async | Playwright |
discover_forms.py |
Extract form fields from submission pages | 10 async | Playwright |
submit_directories.py |
Auto-fill and submit forms | 5 async | Playwright |
add_new_directories.py |
Parse and add new directories from text | Single | Text parsing |
# Activate the virtual environment
source .venv/bin/activate
# Full pipeline
python analyze_directories.py
python cleanup_and_categorize.py
python browser_verify.py
python browser_verify.py --recheck-unknown
python discover_forms.py
python submit_directories.pyTell the agent: "Add directories from https://example.com/directory-list"
The agent follows the skill at .cursor/skills/add-directories/SKILL.md to:
- Fetch and parse the page for directory links
- Deduplicate against existing entries
- Append new entries to
directories.json - Run the analysis pipeline on new entries
Paste a list of directories in any format:
Name - https://url.com[Name](https://url.com)(Markdown)- Plain URLs (one per line)
- CSV/TSV with Name and URL columns
Tell the agent: "Add directories from https://github.com/owner/repo"
The agent clones the repo, parses its directory listing, and adds new entries.
Before running submissions, replace YOUR_* placeholders in:
submit_directories.py— thePRODUCTdictsubmission_plan.json— thecredentialsblocks
Security warning: Credentials are stored in plaintext. Use throwaway passwords, never your real ones. Always strip personal data before pushing to git (search for your email/name/password).
The agent will ask about these during onboarding:
- Google login directories — Enable to access ~150 additional directories
- Paid directories — Skip or flag for manual review
- Captcha directories — Skip or attempt with manual captcha solving
| Issue | Cause | Fix |
|---|---|---|
playwright not found |
Missing dependency | pip install playwright && playwright install chromium |
| Cloudflare blocks | Bot detection | Use manual browser submission via Playwright MCP |
| Google login popup closes | Cross-origin policy | Switch to the Google tab with browser_tabs before interacting |
| Form fields not matched | Unusual field names | Use manual browser submission for these directories |
| Business email required | Directory rejects gmail/yahoo | Use a custom domain email or skip |
| Reciprocal link required | Old web directory policy | Skip unless you want to add a backlink |
| "Invalid site key" on captcha | Directory's captcha is misconfigured | Skip — this is the directory's bug |
ai-directories/
├── AGENTS.md # Cursor / Windsurf agent instructions
├── CLAUDE.md # Claude Code / Cowork instructions
├── GEMINI.md # Gemini instructions
├── README.md # This file
├── checkpoint.md # Progress tracking (updated by agent)
├── directories.json # Master directory database (100+ entries)
├── submission_plan.json # Per-directory submission targets
├── browser_check_list.json # Intermediate: browser verification queue
├── analyze_directories.py # HTTP analysis pipeline
├── cleanup_and_categorize.py # Error triage + browser check builder
├── browser_verify.py # Playwright browser verification
├── discover_forms.py # Playwright form field discovery
├── submit_directories.py # Playwright auto-submission engine
├── add_new_directories.py # Parse/add new directories
├── requirements.txt # Python dependencies
├── logo.png # Your product logo (gitignored)
├── site-image.png # Your product screenshot (gitignored)
├── .gitignore # Excludes .venv, logs, screenshots
└── .cursor/
└── skills/
└── add-directories/
└── SKILL.md # Cursor skill for adding directories
MIT