Documentation · this section

Documentation — 03

Send your saves to Notion.

Last updated · 2026-05-12

Notion is the only destination that talks to an API. Everything else is a file or a URL handler. The reason Shelf uses Notion’s internal integration token rather than OAuth is privacy: OAuth requires a server in the middle that holds a refresh token. Shelf has no server. You paste a token, your browser talks to api.notion.com directly, and nothing flows through a Shelf intermediary because there isn’t one.

This page is the one-time setup. It takes about three minutes.

What you’ll do

  1. Create an internal integration in your Notion workspace.
  2. Share at least one database with that integration.
  3. Paste the integration token into Shelf and pick the database.

That’s it.

Create the integration

Open notion.so/profile/integrations. Click New integration. Give it a name — Shelf is fine. Set Type to Internal. Pick the workspace you want Shelf to write to.

Capabilities: the only ones Shelf needs are Read content, Update content, and Insert content. Leave No user information selected — Shelf never asks who you are.

Save. Notion shows the Internal Integration Token on the next screen. It starts with secret_…. Copy it — you’ll paste it into Shelf next.

Share a database with the integration

Notion integrations have no access to your workspace by default. Each database you want Shelf to write to must be shared with the integration explicitly. This is Notion’s design, not ours, and it’s a good one.

Open the database you want Shelf to write to. Click ··· in the top right of the page → ConnectionsConnect to → pick the Shelf integration. Confirm.

Repeat for any database you want as a destination. Pro readers can configure multiple databases — one per collection.

Paste the token in Shelf

Open Shelf’s Options page → Destinations → Notion. Paste the token. Click Connect.

Shelf calls api.notion.com/v1/users/me once to verify the token is valid, then lists the databases that have been shared with the integration. Pick one. That’s the default Notion destination.

The token lives in chrome.storage.local on this device. It is never sent anywhere except api.notion.com. It is not synced. If you reinstall Shelf or move to a new machine, you’ll paste it again.

What gets written to Notion

A new page in the chosen database. Shelf inspects your database schema and maps these property types when it finds one matching by name and type — exact-name match wins, otherwise the first property of the right type is used:

Notion property typeName hints Shelf looks forWhat Shelf sends
titlename, title, article, item, pageThe page title
urlurl, link, source url, address, hrefThe URL
multi_selecttags, tag, topics, topic, labelsYour tags + AI tags merged
selectkind, type, category, mediaarticle / video / podcast / page
datesaved at, saved, date, added, createdISO 8601 timestamp
rich_text (excerpt)excerpt, summary, description, previewThe captured excerpt (≤ 2000 chars)
rich_text (hostname)source, hostname, domain, siteThe hostname

If your database doesn’t have a property of the right type, Shelf silently skips that field rather than failing the export. Add the property later and re-send to backfill. There is currently no mapping for reading time — that detail lives only in the file-based exports and the popup UI.

The page body contains, in this order: the excerpt as a quote block (when present); the AI summary as a Heading 2 followed by a bulleted list (when Pro generated one); the user highlight as Heading 3 + paragraph (when you selected text at save-time); the YouTube transcript as Heading 2 + a bulleted list of timestamped chunks (when fetched); and a final paragraph linking back to the original source.

Pro: multi-database routing

Free users have one Notion destination. Pro users can map collections to different databases — Reading lands in a literature database, Watch later lands in a video database, Inbox lands in a generic dump. Configure in Destinations → Notion → Per-collection routing.

When a save belongs to a collection with a database mapping, that mapping wins. Otherwise the default database is used. Items in multiple collections fan out to multiple databases — one Notion page per database, all linked back to the same Shelf item.

Troubleshooting

The token is rejected. Re-copy from notion.so/profile/integrations. Tokens starting with ntn_ are also valid; older secret_… are still accepted by Notion’s API.

The database list is empty. The integration has not been connected to any database. Open the database, ··· → Connections → Connect to → Shelf.

A specific save fails. The Options page shows a per-item export status. Hover the red dot for the API error message. The most common cause is a renamed property; remap in Destinations → Notion.