Documentation Site Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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
| Field | Description |
|---|---|
url | Page URL |
title | The page's own heading, not the site name |
description | Meta description |
markdown | Full page content as clean markdown |
wordCount | Words on the page |
codeBlocks | Number of fenced code blocks |
headings | Every heading, in order, for chunking |
site | Source site |
scrapedAt | ISO 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.