Notion Scraper - Markdown Export & RAG Sync
Pricing
from $11.00 / 1,000 page exports
Notion Scraper - Markdown Export & RAG Sync
[🔄 Incremental sync] Export public Notion pages and databases to Markdown, JSON, HTML or RAG chunks. Crawl subpages and sync only changed content. Public pages need no login; connected private pages use your read-only Notion integration token.
Pricing
from $11.00 / 1,000 page exports
Rating
0.0
(0)
Developer
Fetch Finch
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
Extract public Notion pages, wikis, and databases into clean, useful data—without a login. Add a read-only Notion integration token when you need to access connected private content.
Use the Actor to:
- export pages as Markdown, plain text, HTML, or structured block JSON;
- crawl linked pages and database row pages;
- export typed database properties for CSV, spreadsheets, and ETL workflows;
- create stable RAG-ready chunks with heading paths and source block IDs;
- optionally download images and files into private Apify storage; and
- run incremental syncs that emit only new or changed pages.
Try the examples
These public Notion pages are used in the examples below. They are third-party pages and may change or become unavailable over time.
| Example | Public task | Public source | What it demonstrates |
|---|---|---|---|
| Single page | Run the example | Getting Started | Rich text, headings, lists, todos, toggles, and links |
| Wiki crawl | Run the example | Getting Started with child pages | Nested pages and knowledge-base crawling |
| Database rows | Run the example | Snipd podcast highlights database | Database views and typed row properties |
| RAG chunks | Run the example | Getting Started with child pages | Semantic chunks, heading paths, and stable source IDs |
Quick start
For a public page, provide one URL:
{"startUrls": [{"url": "https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"}]}
Run it in the Apify Console, or locally with:
$apify run --input '{"startUrls":[{"url":"https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"}]}'
No token is required for public pages.
Four useful examples
1. Export one page
Source: Getting Started
Run it directly with the public page export task.
The default pages mode produces one dataset item with the page URL, title, hierarchy, change state, hashes, and selected content formats.
{"startUrls": [{"url": "https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"}],"outputMode": "pages","formats": ["markdown", "text", "html"]}
2. Crawl a public wiki
Source: Getting Started with child pages
Run it directly with the public wiki crawl task.
Follow child pages while retaining each page’s depth and path. Duplicate links and cycles are handled by page ID, and the limits keep large wikis bounded.
{"startUrls": [{"url": "https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"}],"crawlSubpages": true,"maxDepth": 5,"maxPages": 100,"outputMode": "pages","formats": ["markdown", "text"]}
3. Export database rows
Source: Snipd podcast highlights database
Run it directly with the public database rows task.
Use databaseRows when you need one flat record per row rather than the body of every row page. Values such as dates, checkboxes, selects, people, relations, and files are normalized into predictable fields.
{"startUrls": [{"url": "https://snipd.notion.site/Example-Synced-podcast-highlights-database-with-Snipd-s-integration-4874d50a445e49ad9af370da3dd54574"}],"outputMode": "databaseRows","maxDatabaseRows": 100,"includeRawProperties": false}
Set crawlDatabasePages to true in pages, blocks, or chunks mode when you also need the body of each row page.
4. Build a RAG-ready knowledge base
Source: Getting Started with child pages
Run it directly with the public RAG chunks task.
Use the wiki example as a source for deterministic chunks. Each chunk includes a stable ID, approximate token count, heading path, source block IDs, Markdown, and plain text.
{"startUrls": [{"url": "https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"}],"crawlSubpages": true,"crawlDatabasePages": false,"outputMode": "chunks","formats": ["markdown", "text"],"targetChunkTokens": 700,"maxChunkTokens": 1000,"overlapTokens": 80}
For recurring syncs, add "syncKey": "demo-knowledge-base" and "emitOnlyChanges": true, then run it again with the same syncKey to receive only new or changed pages. Unchanged pages are checked but omitted.
Output modes
pages
One item per page, including page identity, URL, hierarchy, change state, hashes, selected content, database summaries, and optional assets.
databaseRows
One typed item per database row. This is the most convenient mode for CSV, Excel, APIs, and data pipelines.
blocks
One item per block with its block ID, type, parent, depth, heading path, and selected formats. Use this mode when downstream systems need fine-grained citations or custom rendering.
chunks
Embedding-ready records created from semantic block boundaries. Code and table blocks remain indivisible unless they exceed the configured limit by themselves.
Content formats
Choose any combination of:
markdown— clean Notion content for documentation and exports;text— plain text for search and language-model pipelines;html— rendered HTML for downstream web views; andjson— typed block data for custom processing.
Private and connected pages
Create a read-only internal Notion integration, share the pages or databases with it, and enter its token in the secret notionToken input. The token is used only for Notion API requests and is not written to datasets, manifests, or error records.
Public URLs are attempted through the structured public-page path first. When a token is supplied, the Actor can fall back to Notion’s official API for connected content.
Assets and ZIP bundles
Set downloadAssets to true to preserve eligible images and files in private Apify key-value storage. Set createZip to true to create a per-page bundle containing Markdown, plain text, metadata, and downloaded assets.
Downloads are bounded by per-file, per-page, and total-run limits. Expiring source URLs are not a substitute for downloading assets when you need a durable backup.
Incremental sync
Set a stable syncKey to persist a manifest between scheduled runs. The Actor computes deterministic content and metadata hashes and classifies pages as:
new— not present in the previous completed run;updated— content or relevant metadata changed; orunchanged— both hashes match.
The manifest is committed only after a complete crawl. Page failures, scope limits, and pay-per-event budget limits do not replace the last good manifest.
Customer pricing
The Actor uses pay-per-event billing. Prices below are the current customer prices:
| Event | Customer price | Charged when |
|---|---|---|
| Actor start | $0.00005 minimum | The Actor starts; the exact start charge depends on allocated memory |
| Page check | $0.001 | A page or database is successfully loaded and normalized |
| Page export | $0.011 | Exported page content is emitted for one source page |
| Database row export | $0.003 | One normalized database row is emitted |
| Asset or ZIP storage | $0.002 | One downloaded asset or generated ZIP is successfully stored |
Page checks and exports are additive. A newly exported page costs $0.012 before the Actor-start charge and any assets: $0.001 for the check plus $0.011 for the export. At the minimum start charge, 100 newly exported pages cost $1.20005 before assets.
Unchanged pages in an incremental sync still incur the $0.001 page-check charge, but are not exported when emitOnlyChanges is enabled. This is substantially cheaper than exporting unchanged content again.
pages, blocks, and chunks output each incur one Page export charge per source page, regardless of whether that page produces one record or many block/chunk records. Database-row output is charged per normalized row instead.
Invalid URLs, inaccessible pages, skipped oversized assets, and error records do not trigger result events. Subpages and database row pages count as pages.
Reliability and safety
- Public requests use HTTPS and validate redirects and DNS destinations.
- Crawls have page, depth, row, asset, and byte limits.
- Pages that fail in a batch are reported as normalized error records by default.
- Set
failOnPageErrortotruewhen a run must stop at the first page error. - The Actor never writes to Notion or sends page content to an external AI service.