Made by Desearch (desearch.ai).
Directory Finder is a small Python script for founders and marketers who want to list a new AI tool. Before any directory submission, it builds the list: which directories take submissions, and does each submit page still load.
The problem
Directory submission starts with research. Searching by hand brings up the same big sites for every wording, plus list articles and services that submit for you, and you still have to open every page to see if it takes submissions. What helps is one deduped list of directories with each submit page read once.
What the app does
- Runs 3 to 5 query variants for your category from
config.json. - Pages through the web results with
startand keeps one row per domain. - Picks results whose link or title looks like a submit page ("submit", "add your", "list your").
- Reads each likely submit page as text and looks for short quotes about free listings, paid options and review.
- Lets you mark each site by hand as a directory, a list or article, or a submission service, and keeps only directories.
- Writes
output/directories.csvandoutput/shortlist.md.
How it works
- Search.
GET /webwithqueryandstartfor each query variant. - Dedupe. One row per domain across all searches.
- Read.
GET /web/extractwithformat=textandjs=falsefor each likely submit page. - Sort. You classify each site in
config.json; only directories go to the output.
The code
The search loop, copied from directory_finder.py on main (lines 108 to 113). The script reads the API key from a key file (--key-file).
def fetch(cfg, key, max_extracts):
s = session(key)
searches = []
for q in cfg["queries"]:
for st in cfg.get("starts", [0, 10, 20]):
searches.append(call(s, "/web", {"query": q, "start": st}, f"web start={st}"))The folder has directory_finder.py, an example config.json, samples/raw-sample.json (a trimmed saved run you can rebuild with no key) and offline tests.
Endpoints
GET /webGET /web/extract
Example output
A run for the category "AI tools" on 2026-10-14 used four query variants, such as "submit your AI tool directory" and "add your AI product to directory". This page shows that stored run. It does not run a live demo.
| Step | Result |
|---|---|
| Searches (4 queries x 3 pages) | 12, with 20 results each |
| Unique domains | 93 |
| Likely submit pages read | 25 |
| A directory's own submit page | 10 |
| Lists or articles about directories | 8 |
| Services that submit for you | 6 |
| Directory submit pages that loaded with text | 9 |
Most of the directory pages mention a review step, and several mention both a free and a paid option. The shortlist marks only whether a word appears on the page; read each page yourself before you submit.
Run it yourself
git clone https://github.com/Desearch-ai/desearch-py-examples && cd desearch-py-examples/directory-finder
pip install -r requirements.txt
printf '%s' 'YOUR_KEY' > ~/.desearch_api_key && chmod 600 ~/.desearch_api_key # key from console.desearch.ai
python directory_finder.py config.json --key-file ~/.desearch_api_keyEdit config.json for your category, query variants and starts; steps of 20 (0, 20, 40) brought new domains in testing, since each page held 20 results. To try it with no key and no cost: python directory_finder.py --from-raw samples/raw-sample.json.
What it costs
On 2026-10-14 a web search cost $0.001 and a page read cost $0.0005, read from the X-Desearch-Cost-Usd header. See pricing.
Ideas to extend it
- Re-run every few weeks and compare the CSVs to see which submit pages changed.
- Try other categories by editing the query variants.
- Add a column for the date you submitted to each directory.
