Export · CSV

Export your X bookmarks to Notion

Sift hands you a nine-column CSV; Notion turns that file into a full-page database in one import, and the only real work is converting four of the columns to the property types Notion cannot guess on its own.

The file, and what Notion can do with it

The download is a single CSV, UTF-8, RFC 4180, every field quoted, ordered by when you saved each post — newest first. Notion’s importer parses quoted fields properly, which matters more here than it sounds: post text routinely contains commas, straight quotes and hard line breaks, and all three survive the trip intact. A row looks like this.

one row, wrapped for legibility
"1795432198765432198","https://x.com/rauchg/status/1795432198765432198",
"@rauchg","2026-08-14T09:12:44.000Z","2026-08-14T21:03:01.812Z",
"the only two hard problems in caching","Engineering",
"caching infra performance","A one-line note on cache invalidation."

Six of those columns are X’s: the post ID, the canonical x.com permalink, the author handle, when it was posted, when you saved it, and the post text exactly as published. The last three are ours, and they carry an ai_ prefix so that a database you later share with someone still shows at a glance which text a person wrote and which a model did.

Importing it

  1. Reorder the columns before you import — this one is irreversible

    Notion makes the leftmost column the database’s Title property, and Title cannot be reassigned to a different property afterwards. Left as-is you get a database whose every page is named after a 19-digit number. Move ai_summary (or post_text) to column A first — in a spreadsheet, or with the in-browser export converter, which reorders and rewrites columns without the file leaving your tab.
  2. Turn ai_tags into a comma-separated list

    Our tags are space-separated. Notion splits text into Multi-select options on commas, so caching infra performance arrives as one three-word option rather than three tags. Find-and-replace spaces with commas in that column only, before import.
  3. Import: sidebar → Import → CSV

    Pick the file. Notion creates a new full-page database as a subpage of wherever you were. There is no “import into this existing database” option on this path — that is the merge step below.
  4. Fix the property types

    Notion imports almost everything as Text and guesses at the rest. Click each property header → Edit property → Type, and set the four in the table below. Converting Text to Date parses the ISO 8601 timestamps we emit without any reformatting.
  5. Build the views you actually wanted

    Group a board view by ai_category to get the twelve-lane version of your saved posts, or filter a table by ai_tags contains. This is the point of the exercise; the import is just the plumbing.
  6. Adding a later export

    Open the database → ··· → Merge with CSV. It appends rows and matches columns by header name; it does not match on post_id, so a second file will duplicate anything both exports contain. Sort by the post ID column and delete the pairs, or keep one database per export.

Column to property mapping

CSV columnNotion property typeWhy
post_idText — never NumberSee the warning below.
post_urlURLMakes the permalink clickable from a table row and from the peek view.
author_handleText, or SelectSelect if you want to filter by who you save from; the option list gets long fast.
posted_atDateInclude time — ISO 8601 with a Z offset parses cleanly.
saved_atDateSort descending on this to reproduce the order the file arrived in.
post_textTextVerbatim. Do not edit it — see the note on alteration below.
ai_categorySelectOne of a fixed set, so Notion’s option list stays short and groupable.
ai_tagsMulti-selectOnly after the comma substitution in step 2.
ai_summaryTextGood candidate for the Title column.
Notion will not infer any of the right-hand column for you; all nine arrive as Text unless it guesses otherwise.

Where the post text ends up

Notion turns each CSV row into a page, but the values land in properties, not in the page body. So every post opens to a blank canvas with the text sitting in a property field above it. That is fine — Notion’s search indexes property text, so the bookmarks are findable — but it surprises people who expected a page per post with the post as its content. If you want that shape, generate one Markdown file per bookmark instead and import those; the notes on the Markdown flavour of the same export cover how to escape post text so a stray # or * does not become a heading or an italic.

Why there is no Notion integration

Notion has a perfectly good API, and writing rows into a database you nominated would be a couple of days of work. We have not built it, and the reason is not effort.

X’s developer policy restricts handing X content to third parties: what may be redistributed freely is post IDs, and the exception that lets us give you the text at all is written for “non-automated means” — a spreadsheet you download. A scheduled push into a Notion workspace is neither non-automated nor obviously covered. The compliant version of a Notion sync would carry post IDs plus our own categories and summaries and no post text, and a Notion database full of bare nineteen-digit numbers is not a product anyone wants.

  • So: export is a button you press, the file lands in your downloads folder, and what happens next is yours. Nothing about Notion is connected to your Sift account.
  • Deleted posts never make it into the file. A free nightly deletion check tombstones anything removed on X, and tombstoned rows are excluded from the export — so a Notion database built from it will not resurrect a post its author took down.

Curious where the data comes from in the first place? It is one endpoint, GET /2/users/:id/bookmarks, read with your own read-only token — and X’s policy on redistribution is the same document that sets the limit below.

Two things that are true of every export

Sort them first, then export

An export is only worth having if the categories are. Connect X read-only, let Sift import and sort your newest bookmarks, and the file you download inherits that structure — category, tags and a one-line summary already attached to every row.

Connect X