Documentation Site Scraper avatar

Documentation Site Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Documentation Site Scraper

Documentation Site Scraper

Scrape any documentation site to clean markdown. Works on Docusaurus, Mintlify, GitBook, MkDocs, ReadTheDocs and more. Preserves code blocks for RAG and LLM training.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Neil Sangwaiya

Neil Sangwaiya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Turn any documentation site into clean markdown, with code blocks intact. Built for RAG pipelines, AI coding assistants, LLM fine-tuning and docs migration.

Works on Docusaurus, Mintlify, GitBook, MkDocs, ReadTheDocs, Nextra, VuePress, Sphinx and plain HTML docs. No configuration, no framework selection. Paste the URL.

It also works on help centres, including Freshdesk, Intercom, HelpScout and Document360, which have no public API. Tested against Freshdesk (1,432 pages discovered) and Intercom (5,606 pages). If your target runs on Zendesk, use the dedicated Zendesk Help Center Scraper instead, since Zendesk's public API returns cleaner structured fields than HTML extraction can.

What you get

FieldDescription
urlPage URL
titleThe page's own heading, not the site name
descriptionMeta description
markdownFull page content as clean markdown
wordCountWords on the page
codeBlocksNumber of fenced code blocks
headingsEvery heading, in order, for chunking
siteSource site
scrapedAtISO timestamp

Why this one is different

Code blocks survive. Syntax highlighters wrap every line in its own element, and a naive text extraction glues them into one unreadable line. Most docs scrapers return npm installcd my-appnpm run dev. This one reconstructs the lines and returns a proper fenced block with the language tag. For documentation, mangled code is worse than no code.

Titles are the page's own heading. Falling back to the <title> tag gives every page the same site-wide name, which makes a dataset useless for retrieval. This reads the real h1 first, before any markup transformation destroys it.

Discovery actually works. Sitemaps come in three shapes: a plain sitemap, an index pointing at more sitemaps, or missing entirely with the real one declared in robots.txt. Docs on a subpath often have their own separate sitemap. This handles all of it, and falls back to a scoped link crawl when there is no sitemap at all.

It scopes to what you asked for. Give it example.com/docs and you get the docs, not the blog, the pricing page and every translation. Root sitemaps list the whole site; this narrows to your path automatically.

Headings are extracted separately so you can chunk by section rather than by arbitrary character count, which is the single biggest quality lever in a RAG pipeline.

Example input

{
"startUrl": "https://docs.apify.com",
"maxPages": 500,
"excludePattern": "/blog/|/changelog/"
}

Filters

  • Only URLs matching — a regular expression, e.g. /api/ for just the API reference
  • Skip URLs matching — e.g. /blog/|/es/|/fr/ to drop blogs and translations
  • Stay on the same host — on by default, and treats www. as the same site
  • Max pages — caps the run so cost is predictable

Notes

  • Strips navigation, sidebars, footers, breadcrumbs, cookie prompts and skip links before extraction.
  • Retries with backoff and respects rate limits.
  • Uses only public pages. No login, no private docs.