Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Submission Site Discovery

Discover product-submission directories from public alternatives pages such as SaaSHub.

submission-site-discovery is a lightweight discovery tool for finding sites similar to Product Hunt, BetaList, Uneed, and other launch / directory platforms. It is designed to start from known seed products, crawl public alternatives pages, extract real external destination URLs, and merge those findings into a shortlist of candidate submission sites.

This repository is intentionally scoped as a lightweight public-page discovery implementation, not a full universal graph crawler.

Why this repo exists

Product marketing teams often know a few obvious launch sites, but the long tail of smaller directories is fragmented and hard to discover systematically. This repo exists to make that first discovery layer reproducible:

  • start from known seed products or launch platforms
  • follow public alternatives relations
  • extract real outbound websites
  • merge repeated discoveries into a stronger shortlist

The current implementation is meant to support the discovery stage only. It does not yet validate submission flows or automate actual submissions.

Current scope

Today, the implemented path is centered on SaaSHub-style public alternatives pages.

The crawler currently:

  1. starts from /<slug>-alternatives pages such as /product-hunt-alternatives
  2. finds external website links from product cards (title="Visit Website")
  3. increments ?page=N to continue discovery page by page
  4. normalizes URLs and merges repeated discoveries across seeds
  5. writes structured outputs such as candidates.jsonl, shortlist.csv, and review_notes.md

What this is not

This repository should not be read as a claim that general topology crawling is solved.

More complex sources such as AlternativeTo often require more advanced tooling or capabilities, for example:

  • browser automation / JS execution
  • more complex pagination and state handling
  • stronger anti-bot handling
  • richer relation extraction and graph traversal

So the current implementation is best understood as:

a practical discovery tool built around SaaSHub and similar public alternatives pages, not a general-purpose submission-site graph engine.

Runtime dependencies

Direct dependencies are intentionally light:

  • Python stdlib: urllib, ssl, re, csv, json
  • optional certifi for SSL compatibility on some macOS setups

Install the optional dependency with:

pip install certifi

Important operational dependency

There is also an implicit runtime dependency on the current behavior of SaaSHub's public pages.

SaaSHub is behind Cloudflare, but the public alternatives pages currently appear to be on a relatively basic protection mode:

  • bare requests may return 403 Forbidden
  • standard HTTP requests with a Chrome-like User-Agent may still return 200 OK

That means the current script works because the public alternatives HTML is still directly obtainable under that protection level.

It does not mean Cloudflare is generally bypassed.

If SaaSHub upgrades those pages to stronger defenses such as:

  • JS challenge
  • Turnstile
  • CAPTCHA

then this implementation will stop working and require a more advanced fallback strategy.

The current repo does not rely on:

  • Playwright
  • Selenium
  • proxy pools
  • third-party unlocking services

Repository layout

submission-site-discovery/
├─ README.md
├─ LICENSE
├─ .gitignore
├─ config/
│  └─ seeds.json
├─ demo/
│  └─ demo-products.txt
└─ scripts/
   └─ discover_submission_sites.py

Quick start

Single product

python3 scripts/discover_submission_sites.py discover \
  --config config/seeds.json \
  --product "Product Hunt" \
  --output-root outputs

Product list file

python3 scripts/discover_submission_sites.py discover \
  --config config/seeds.json \
  --products-file demo/demo-products.txt \
  --output-root outputs

Other commands

# validate config
python3 scripts/discover_submission_sites.py validate --config config/seeds.json

# print execution plan
python3 scripts/discover_submission_sites.py plan --config config/seeds.json --product "BetaList"

# initialize run scaffold only
python3 scripts/discover_submission_sites.py init-run --config config/seeds.json --product "BetaList"

Outputs

Each run writes artifacts under outputs/runs/<timestamp>/.

File Purpose
manifest.json run metadata and overall status
seed_inputs.jsonl normalized seed inputs
frontier.jsonl source-task execution records
candidates.jsonl full candidate rows with evidence
shortlist.csv simplified ranked shortlist
review_notes.md run summary, caveats, and crawl notes

Config

The default config lives at config/seeds.json.

Key fields:

  • graph_sources: declared source sites (currently includes SaaSHub and scaffold entries such as AlternativeTo)
  • anchor_sites: known seed platforms / canonical examples
  • query_seeds: descriptive phrases used to orient the discovery project
  • limits: crawl-related guardrails

The optional saashub_slug field can be added when the seed name's normal slug does not match SaaSHub's real path.

Example:

{
  "name": "Uneed",
  "saashub_slug": "uneed-best"
}

Known limitations

  • The current implementation is optimized for public SaaSHub alternatives pages.
  • AlternativeTo is still listed as a graph source scaffold, not a fully implemented adapter.
  • Live requests may still be blocked depending on Cloudflare behavior.
  • This repo only finds candidate sites; it does not verify actual submission forms or automate submissions.

Roadmap

Short-term:

  • improve fail-fast diagnostics when SaaSHub protection tightens
  • expand parser coverage for edge-case card layouts
  • improve scoring and evidence aggregation

Medium-term:

  • add more source adapters where static HTML access is realistic
  • separate source reliability scoring from candidate scoring
  • add better output summaries for manual review

Long-term:

  • support richer topology discovery with browser-assisted or hybrid crawling
  • validate submission paths as a separate downstream workflow
  • turn discovery outputs into reusable submission operations

About Seele

This repository is published by SeeleAI as part of its open-source product growth tooling.

Seele is building Seele01 Game Model, with current product capabilities centered on generating Three.js and Unity games from natural language. Related API and workflow capabilities are being opened up over time.

License

MIT.

About

Discover product submission sites from public alternatives pages such as SaaSHub.

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages