Notion Scraper & Knowledge Base Sync
Pricing
from $11.00 / 1,000 page exporteds
Notion Scraper & Knowledge Base Sync
Export public or private Notion pages, wikis, and databases as Markdown, JSON, HTML, typed rows, assets, or RAG-ready chunks—with recursive crawling and incremental sync.
Pricing
from $11.00 / 1,000 page exporteds
Rating
0.0
(0)
Developer
Fetch Finch
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Notion Scraper & Knowledge Base Sync
Turn Notion pages, wikis, and databases into clean data you can actually use.
This Actor extracts public Notion content without a login. For private content, add a read-only Notion integration token. It produces a predictable dataset for exports, backups, search indexes, AI assistants, RAG pipelines, automations, and scheduled knowledge-base syncs.
Why use this Actor?
- No token required for public pages. Paste a notion.site, notion.so, or Notion custom-domain URL.
- Real structured extraction. Public pages are read from Notion's record data, not flattened from a browser screenshot or fragile page text.
- Four purpose-built output modes. Export whole pages, typed database rows, individual blocks, or semantic RAG chunks.
- Useful formats. Choose Markdown, plain text, HTML, typed block JSON, or any combination.
- Recursive wiki crawling. Follow child pages and, optionally, the body of every database row page with cycle and depth protection.
- Typed database values. Dates, numbers, checkboxes, selects, people, relations, files, and generated metadata are normalized while raw values remain optional.
- Incremental sync. Stable hashes identify new, updated, and unchanged pages. Scheduled runs can emit changes only.
- Portable assets. Optionally preserve images/files in private run storage and build a ZIP bundle per page.
- Honest partial failures. One inaccessible page does not have to fail a batch. Errors are normalized and never attached to a paid result event.
Quick start
The default input is enough for a public page:
{
"startUrls": [
{
"url": "https://darshgupta.notion.site/Getting-Started-1236ce47943c43fd8bbe8a236a25b9a6"
}
]
}
For an embedding-ready knowledge base:
{
"startUrls": [{ "url": "https://your-team.notion.site/Handbook-..." }],
"crawlSubpages": true,
"crawlDatabasePages": true,
"outputMode": "chunks",
"formats": ["markdown", "text"],
"targetChunkTokens": 700,
"maxChunkTokens": 1000,
"overlapTokens": 80,
"syncKey": "production-handbook",
"emitOnlyChanges": true
}
For a database export:
{
"startUrls": [{ "url": "https://your-team.notion.site/Database-..." }],
"outputMode": "databaseRows",
"maxDatabaseRows": 5000,
"includeRawProperties": false
}
Output modes
pages
One dataset item per page. Each record includes page identity, URL, hierarchy, change state, hashes, source/fidelity metadata, selected content formats, database summaries, and optional stored assets.
databaseRows
One item per database row. Properties use a stable shape:
{
"recordType": "databaseRow",
"databaseId": "12dd2044-a388-43db-8b6d-55bb7883b71f",
"rowPageId": "0a5f0f62-694e-4f6b-9f37-1c48ab3bbfea",
"title": "Example Brainstorm",
"properties": {
"Tags": {
"id": "notion://docs/doc_tags_property",
"name": "Tags",
"type": "multi_select",
"value": ["Product"]
}
}
}
blocks
One item per Notion block with its type, parent, depth, heading path, and selected formats. This is useful when downstream logic needs fine-grained citations or its own renderer.
chunks
Embedding-ready records with stable chunk IDs, approximate token counts, heading paths, source block IDs, and Markdown/text. The chunker respects semantic and heading boundaries and keeps code/table blocks indivisible.
Private pages and databases
Create an internal Notion integration, grant it read access only to the pages you want to export, and enter the token in the secret notionToken field. The Actor uses Notion's official API for connected content. The token is not written to logs, datasets, manifests, or errors.
Public URLs use the faster structured public-page path first. Supplying a token also provides a fallback for connected pages that are not publicly published.
Incremental sync
Set syncKey to persist a private manifest between scheduled runs. Content and metadata are hashed deterministically: - new: the page was not in the preceding complete run;
- updated: content or relevant metadata changed;
- unchanged: both hashes match.
Enable emitOnlyChanges to omit unchanged pages. A manifest is committed only after a complete run; page failures, scope truncation, or a PPE budget limit leave the last good manifest intact. The run's committed manifest is also linked from the Actor output.
Assets and ZIP bundles
Enable downloadAssets to copy eligible images and files into the default key-value store. Enable createZip to add page.md, page.txt, metadata, and downloaded assets to a portable per-page archive.
Downloads are streamed through per-file, per-page-count, and total-run limits. Redirects and custom-domain DNS are checked to prevent access to private network addresses. Stored records expose storage keys rather than leaking authenticated public URLs.
Pay-per-event pricing
The Actor is designed for transparent pay-per-event pricing:
| | | |
|-|-|-|
| Event | Suggested price | Charged when |
| page-checked | $0.001 | A page/database is successfully loaded and normalized |
| page-exported | $0.011 | A page's page, block, or chunk output is emitted (once per page) |
| database-row-exported | $0.003 | One normalized database row is emitted |
| asset-stored | $0.002 | A downloaded asset or generated ZIP is successfully stored |
Invalid URLs, inaccessible pages, skipped oversized assets, and error records do not trigger those result events. Apify run budgets are honored before additional paid output is produced.
Local development
npm install
npm test
npm run check
npm run build
apify run --input '{"startUrls":[{"url":"https://..."}]}'
Node.js 22 is used in the Actor image. Tests cover input rules, Notion record unboxing, rich text, rendering, database normalization, semantic chunking, IDs, hashes, and URL safety.