> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/substack/directory>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/substack/directory.mdx>

---

# Substack Directory API

Publication subdomains, one file and page at a time.

`GET /v1/substack/directory` lists publication subdomains in numbered files. `file` is 1 to 24; each file is a numbered slice of the directory. `limit` is 1 to 5,000, with 1,000 as the default.

`data.entries[]` carries `subdomain`, `url` and `lastModified`. `data.file` echoes the file, `data.total` is the entry count in that file, and `data.page` reports `offset`, `limit`, `hasMore`, `nextCursor` and `nextOffset`. Pass `page.nextCursor` as `cursor` for the next page; a cursor belongs to the file that issued it. The `page` and `offset` forms still work; prefer `cursor`. `lookupStatus` is `found` or `not_found`.

## Request

- **Endpoint:** `GET /v1/substack/directory`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by file, page or cursor
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/substack/directory/get)
- **Platform page:** [/platforms/substack](https://www.socialfetch.dev/platforms/substack)

## FAQ

### What are the two file sets?

Each file is a numbered slice of the directory, not a category. The 24 files together hold the directory.

### Does the directory list every Substack publication?

No. It lists the publications the directory carries, which is a large subset rather than every publication. A publication on a custom domain can still be looked up by host or URL.

### How many entries per page?

Between 1 and 5,000, with 1,000 as the default. Pass `data.page.nextCursor` as `cursor` while `data.page.hasMore` is true. The `page` form still works; prefer `cursor`.

### How many credits does a directory page cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.
