Loading...

Notion Feed

The Notion feed mirrors your Notion pages and database rows into your search, automatically. Connect it once and everything you’ve shared with it becomes searchable — new pages appear, edits update in place, unshared or deleted pages drop out — with no export, no upload, and no code.

This page covers what’s specific to Notion: the one-time token setup, how you choose what’s included, and the fields each record gets. For how feeds work in general — syncing, binding a list, deleting — see the Feeds reference.

Connect your workspace
  1. Go to Feeds (under Sources in the sidebar), click Connect feed and choose Notion.
  2. Give the feed a name and paste your Notion integration token — the step-by-step guide below shows exactly where it comes from (about two minutes, one-time). Choose which media store the synced file should live in (your built-in store by default).
  3. Click Connect. The token is checked against Notion there and then, so a wrong token — or a token that hasn’t been given access to any pages yet — is caught immediately rather than failing quietly later, and the first sync starts right away.

From here the feed keeps feeds/<name>.ndjson up to date in your media store; point a list at that file with keep-in-sync switched on and your Notion content is searchable — the Feeds page walks through that step.

Getting your Notion integration token

Your pages are read using a connection of your own inside Notion — Notion’s name for a private integration. You create it once, in about two minutes; give it Read content only, and it can see nothing until you explicitly share pages with it. You can remove it at any time.

  1. Go to notion.so/my-integrations (it opens the Notion Developers dashboard) and sign in. You can also reach it from Notion via SettingsConnectionsDevelop or manage integrations.
  2. Click New connection. Give it a name — SearchStack works — and choose the workspace it can be installed in.
  3. Under Capabilities, keep Read content ticked and leave the rest off. The feed only reads — it never writes to your workspace.
  4. Save, then open the connection’s Configuration tab. Under Integration token, copy the Access token (it starts with ntn_). Keep it secret — anyone with it can read whatever you’ve shared.
  5. Paste it into the Connect feed dialog’s Integration Token field.
Choose what’s searchable — share pages with the connection

A fresh connection can see nothing. You decide what’s included by sharing pages with it — there’s no picker in Search Stack to keep in step with, because Notion’s own sharing is the setting:

  1. Open a page or database in Notion, click the (more) menu at the top-right, and scroll to Connections.
  2. Click Add connections and choose your connection, then Confirm.

Sharing a page includes that page and everything beneath it — sub-pages and, for a database, its rows — so sharing a top-level page or a whole database is usually all you need. Share more later and it’s picked up on the next sync; unshare (or delete) and those records drop out of your search automatically. If you connect a token that hasn’t been shared with anything yet, Search Stack tells you so at connect time rather than syncing an empty file.

What ends up in each record

Long pages are split into section records — one for the text before the first heading, then one per heading — so a search result lands the reader on the right section rather than the top of a long page. Database rows each become one record. The feed describes its own fields, so these are created for you with sensible roles — nothing to map:

FieldWhat it holds
nameThe page or row title — and, for a section, the heading it falls under (“Page — Heading”).
contentThe section’s text (paragraphs, lists, to-dos, quotes, callouts, tables, code), used for matching and ranking.
urlA link straight to that page — and to the exact heading for a section.
parentThe parent page or database title — handy as a filter (shown when the parent is shared too).
last_editedWhen the page last changed.

For database rows, your columns come across as filters automatically: select, multi-select, status, checkbox, number and date properties become facets (named after the column). Free-text columns are folded into the record’s content so they’re still searchable. People, relations, rollups and formulas are left out for now — they point at other things rather than describing the row itself.

A note on freshness: syncing is periodic (as often as every 5 minutes), so a just-edited page becomes searchable within minutes rather than instantly.

A worked example

Say your team keeps its product docs in a Notion teamspace. You create a connection with Read content, paste its token into a Notion feed, and share the docs’ top-level page with the connection. The feed mirrors every page beneath it into feeds/docs.ndjson in your built-in media store, split into section records. You create a docs list, import from that file with keep-in-sync on, and now your docs are searchable — ask a question and the result links to the exact heading that answers it. Edit a page in Notion and your docs search updates itself; archive one and it drops out — with no export, no upload, and no code.

Top