Zero-cost backlink & directory submission engine for indie hackers.
1,123 vetted directories · AI-tailored submission copy · Playwright browser automation · proof-of-submission reports — no SaaS, no credits, no $79 upsell.
TL;DR — Submitator, ListingBott, BoringLaunch charge $29–499 to do what BacklinkFlow does for free: a curated directory list, AI-generated per-directory copy, browser automation, and a status report. The only thing you bring is your own AI endpoint (OmniRoute, OpenAI, or any OpenAI-compatible API). Live-verified. MIT licensed.
The what:
| What it does | How | |
|---|---|---|
| Database | 1,123 directories across 9 categories (SaaS, AI, travel, startup, general, community, reddit, etc.) | Merged from 11 open-source lists, deduped, live-verified |
| AI copy | Per-directory tagline + description matching your site's voice | Your AI endpoint (OpenAI-compatible) |
| Automation | Real browser submissions via Playwright (--go) |
Headless Chromium + smart field detection |
| Proof | Screenshots + per-directory markdown report | .linkflow/report.md + .linkflow/proofs/*.png |
| Curation | db:review flags dead links / homepage-as-submit |
Idempotent regeneration from sources |
| Cost | $0 (you provide the AI endpoint, typically free) | No paid APIs, no SaaS subscription |
Every paid directory-submission service is the same three things wrapped in a dashboard:
- A list of where to submit — this is open data
- Per-directory copy — this is a 5-line AI call
- A status report — this is a JSON file + a markdown table
BacklinkFlow gives you all three, plus actual browser automation for sites with open forms. The moat is honesty: 876 directories live-verified, 221 marked dead with reason, 26 marked paid. No padding with self-owned link farms. No "AI" that means "Army of Indians."
vs competitors:
| BacklinkFlow | Submitator | ListingBott | BoringLaunch | |
|---|---|---|---|---|
| Directories | 1,123 (876 alive) | ~150 | ~250 | ~200 |
| Cost | $0 | $29–79 | $499 | $249 |
| Time to submit | 24–48h (with --go) |
24–48h | 1 month | 7 days |
| Your AI endpoint | ✅ | ❌ | ❌ | ❌ |
| Self-hostable | ✅ | ❌ | ❌ | ❌ |
| Source list | ✅ CREDITS.md | ❌ proprietary | ❌ | ❌ |
| Badges handled | manual (v0.3) | ✅ | ✅ | ❌ |
| Open source | ✅ MIT | ❌ | ❌ | ❌ |
# from source
git clone https://github.com/imsankz/backlinkflow.git
cd linkflow && npm install && npm run build
# or (when published)
npm install -g linkflow# 1. Create config
backlinkflow init
# 2. Edit linkflow.config.json + .env.local (AI endpoint)
# AI_BASE_URL=http://192.168.0.254:20128/v1 (OmniRoute)
# AI_API_KEY=... AI_MODEL=auto/best-free
# 3. Explore the database
backlinkflow stats
backlinkflow list --category startup --limit 10
backlinkflow search "product hunt"
# 4. Generate AI-tailored submission copy (no submission)
backlinkflow payload https://yoursite.com --directory "Future Tools"
# 5. Plan submissions (dry-run — nothing recorded)
backlinkflow submit https://yoursite.com --dry-run --limit 10
# 6. Real automation — Playwright browser submits for you
backlinkflow submit https://yoursite.com --go --limit 10
# 7. Track + report
backlinkflow status
backlinkflow report # → .linkflow/report.md (Submitator-style proof)BacklinkFlow is generic — bring your own site config. Each product = one config file:
# SaaS product
backlinkflow submit https://kreatorlane.com --config examples/linkflow.config.kreatorlane.json --category startup --go --limit 5
# Travel blog
backlinkflow submit https://chasingwhereabouts.com --config examples/linkflow.config.chasingwhereabouts.json --category travel --go --limit 5No hardcoded sites. Examples in examples/.
| Command | Description |
|---|---|
backlinkflow list [--category X] [--limit N] |
List directories in the database |
backlinkflow search <query> |
Search directories by name/notes/URL |
backlinkflow submit <url> [--dry-run] [--limit N] [--category X] [--go] [--config file.json] |
Generate payloads + submit. --go = real Playwright automation |
backlinkflow payload <url> [--directory X] |
AI-tailored submission copy only |
backlinkflow status |
Tracker summary (submitted/pending/failed) |
backlinkflow report |
Regenerate proof-of-submission report |
backlinkflow stats |
Database stats (counts by category, alive/dead) |
backlinkflow indexnow <url> |
Ping IndexNow (Bing/Yandex/Naver/Seznam) + Google for instant indexing |
backlinkflow awesome <repo> --dry-run |
Generate awesome-list PR snippet (never opens PRs) |
backlinkflow measure <url> |
Measure backlinks via free Common Crawl index |
backlinkflow badge [list|show <name>|install] |
Badge registry + install instructions (the high-DR moat) |
backlinkflow db:review |
Flag DB quality issues (dead links, homepage-as-submit) |
backlinkflow db:regenerate |
Rebuild DB from source lists |
backlinkflow init |
Write config template |
ai: 331 startup: 612 general: 80 travel: 26
ai-zh: 33 general-zh: 14 community: 13 reddit: 10 awesome: 4
TOTAL: 1,123 · auto-submittable: 183 · alive: 876 · dead: 221 · paid: 26
Every URL was live-verified via concurrent HTTP + DNS resolution — 76 truly dead (DNS), 79 with dead submit paths (HTTP 404), 6 connection refused, 29 timeout-confirmed. Soft-errors (402/500/526) are flagged but not killed (may be transient).
Source coverage (11 lists, all credited in CREDITS.md):
| Source | Stars | Type |
|---|---|---|
| s87343472/backlink-pilot | ⭐348 | Base target set (rich metadata) |
| mmccaff/PlacesToPostYourStartup | ⭐6,881 | Canonical "Ask HN" directory list |
| theshubh77/awesome-saas-directories | ⭐56 | SaaS launch platforms |
| best-of-ai/ai-directories | ⭐868 | AI tool directories |
| volodstaimi/Startup-Launch-List | ⭐8 | 580+ startup directories |
| BossChow/ultimate-submit-list | ⭐151 | Top-100 directory table |
| rushout09/directory-submission-sites | ⭐12 | 250+ free sites |
| submitdirectories/submitdirectories | ⭐9 | AI/SaaS/Tool/Startup lists |
| nilandev/startup-directories | ⭐26 | Subreddits + directories |
| mahseema/awesome-saas-directories | ⭐242 | SaaS directories |
| DirectorySurf/awesome-launch-platforms | ⭐252 | Launch platforms |
Per-entry provenance is in the data itself: notes: [from <source>] in the YAML.
linkflow.config.json:
{
"siteName": "My Product",
"siteUrl": "https://example.com",
"siteDescription": "A short, honest description.",
"tags": ["saas", "devtools"],
"contentDomain": "SaaS product",
"writingSample": "2-3 sentences in your site voice",
"ai": {
"provider": "openai",
"baseUrl": "http://192.168.0.254:20128/v1",
"apiKey": "your-omniroute-key",
"model": "auto/best-free",
"maxCallsPerRun": 20
},
"pacing": { "minSeconds": 60, "perDay": 10 }
}.env.local (overrides config):
AI_PROVIDER=openai
AI_BASE_URL=http://192.168.0.254:20128/v1
AI_API_KEY=sk-...
AI_MODEL=auto/best-freeWorks with any OpenAI-compatible endpoint:
- OmniRoute (free, local)
- OpenAI, Anthropic, Groq, OpenRouter
- LM Studio, Ollama, vLLM (local)
- Any custom server
The AI client is SSE-tolerant — works with providers that stream even when stream: false is requested (OmniRoute).
The directory database is the product's moat. scripts/regenerate-db.py rebuilds it idempotently from the 11 source lists (annotated [from <source>]). backlinkflow db:review flags quality issues.
Review verdict:
- 1,123 entries, 9 categories — full coverage from all 11 sources
- 876 verified alive — every URL live-checked via
scripts/check-urls.py(concurrent HTTP + DNS verification) - 221 verified dead — marked
status: deadwith reason - 26 paid — carry explicit
status: paid - 183 auto-submittable (real form adapters via Playwright)
- ~420 "homepage-as-submit" flags are alive directories whose real submit pages need discovery — ongoing curation task
Curation workflow:
python3 scripts/check-urls.py /tmp/linkflow-urls.txt # live-check all URLs
python3 scripts/apply-urlcheck.py # mark verified-dead in DB
backlinkflow db:review # see remaining flags
backlinkflow db:regenerate # rebuild from sources (idempotent)
backlinkflow stats # confirm countsBacklinkFlow is the third in a series of zero-cost CLI tools, all MIT, all npm-published:
| Tool | Job | Engines | npm |
|---|---|---|---|
| SECflow | Security scanning for AI-driven repos | gitleaks, trivy, npm audit, custom regex | secflow |
| SeoFlow | AI-powered SEO pipeline (audit, internal links, content gen, GSC) | GSC, PSI, Pexels, Ubersuggest, 6 LLMs | seoflow |
| BacklinkFlow | Backlink & directory submission automation | Your AI endpoint + Playwright | backlinkflow (this repo) |
Same DNA across all three: free engines + your own AI agent as the "smart" layer + npm-published + zero-cost.
backlinkflow submit <url> --go
↓
config loader (linkflow.config.json + .env.local)
↓
payload generator (AI + template fallback)
↓
database (1,123 directories, 9 categories)
↓
for each target:
↓
preflight HTTP check ── dead ──→ mark failed
↓
launch Chromium ──→ navigate submit URL
↓
detect fields (name/url/email/description)
↓
site adapter (generic | saashub | ph)
↓
fill + submit
↓
verify (success message, redirect)
↓
screenshot → .linkflow/proofs/
↓
record → .linkflow/tracker.json
↓
report → .linkflow/report.md
↓
pacing → next directory (per-day limit)
src/
index.ts # CLI entry
config.ts # config + .env loader
database.ts # YAML loader + search
payload.ts # AI + template payload gen
ai.ts # OpenAI-compat client (SSE-tolerant)
tracker.ts # submission history
report.ts # proof-of-submission markdown
types.ts # shared interfaces
engine/
browser.ts # Playwright wrapper
fields.ts # smart field detection
adapters.ts # site-specific + generic adapter
submit.ts # orchestration: preflight → fill → verify
data/directories.yaml # 1,123 vetted directories
scripts/
regenerate-db.py # idempotent DB rebuild
review-db.py # quality flagger
check-urls.py # live URL checker
apply-urlcheck.py # mark verified-dead
sources/ # 18 vendored source files
examples/ # 2 example site configs
- v0.1 — directory DB, AI payloads, tracker, reports
- v0.2 — Playwright automation engine (
--go), site adapters, pacing, proof screenshots - v0.3 — IndexNow pinger, awesome-list PR generator
- v0.4 — Common Crawl backlink measurement
- v0.5 — Badge handling (registry + install instructions — the high-DR moat)
- v0.6 — Automated badge install (inject into site footer via config path)
The highest-DR directories are badge-gated: they only accept your listing if you display their badge. Submitator's "never paste a badge again" is their killer feature. BacklinkFlow does it open-source:
backlinkflow badge list # 10 badge-requiring dirs (7 required)
backlinkflow badge show "StartupFame" # HTML + JSX snippet for one badge
backlinkflow badge install --framework nextjs # full install instructions + all snippets
backlinkflow badge install --framework html # plain HTML variantBadges open DR 80+ directories (StartupFame DR83, Dang.ai DR81, Turbo0 DR80) and jump submission queues. Registry lives in data/badges.yaml — add yours with a PR. Badge URLs are best-effort; verify they load before submitting.
MIT (see LICENSE). Source data compiled from 11 open-source projects — see CREDITS.md for per-source licenses and provenance.
BacklinkFlow is free forever. If it saves you $79 (or 40 hours), buy me a coffee — it funds more free tools.