Substack hub

Substack Sitemap API

Every post URL a publication lists in its sitemap, with the last change date.

GET /v1/substack/publications/{publication}/posts/index

1 credit Failed requests are free

About this endpoint

GET /v1/substack/publications/{publication}/posts/index returns the publication's own sitemap. data.posts[] holds only /p/{slug} URLs and data.pages[] holds the other pages, such as /archive and /about; every row has kind, url, slug, lastModified and changeFrequency. The whole sitemap is one response, so there is no cursor or offset.

data.hasSitemap is false when the publication does not publish a sitemap, and posts is empty. data.publicationId names the publication. Use this route to build a complete list of post URLs before fetching individual posts.

Substack Sitemap API FAQ

Does this return post bodies?

No. It returns URLs and their last change date. Fetch post.get for a post's body or metadata.

What if hasSitemap is false?

The publication does not publish a sitemap, so posts is empty. Use the archive route to list what it serves instead.

Is the sitemap paged?

No. The route returns the publication's sitemap in one response, which is why it is separate from the paged archive.

How many credits does a sitemap lookup 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.