Notion Scraper & Knowledge Base Sync avatar

Notion Scraper & Knowledge Base Sync

Pricing

from $11.00 / 1,000 page exporteds

Go to Apify Store
Notion Scraper & Knowledge Base Sync

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

Fetch Finch

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

7 days ago

Last modified

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.