Export · CSV

Import your X bookmarks into Readwise

Readwise takes a CSV of highlights, so a Sift export becomes a Readwise source once the column headers are renamed to the ones its importer expects — but check whether you already have Readwise pulling from X, because two sources of the same posts is the usual outcome.

First: are you already syncing X to Readwise?

Readwise has had its own path for capturing posts from X for years. If you have it enabled, importing this export on top of it gives you the same posts twice, attributed to two different sources, and spaced repetition will happily show you both. Worth deciding which one is the source of truth before you upload anything.

They capture different things, which is the argument for choosing rather than merging. Readwise’s own integration gets the posts you deliberately send it. A Sift export is your bookmark list — everything you tapped save on, including the several hundred you have no memory of — with a category, a set of tags and a one-line summary attached to each. If your bookmarks are a to-read pile rather than a curated collection, that difference is the reason to import them here at all: the categories are what make an unsorted pile reviewable.

Classic Readwise or Reader — they want different columns

TargetWhat it ingestsWhich column to feed it
Readwise (highlights)Highlights grouped into sources, each with a title and author, reviewable and syncable onward to Notion, Obsidian and the rest.post_text as the highlight, with ai_summary in the note field.
Readwise ReaderDocuments. Give it a URL and it fetches and renders the page for reading and annotating.post_url, one per line, through Reader’s add-by-URL flow.
The Reader route depends on what x.com serves an unauthenticated fetcher, which changes and is not something we control. The CSV route does not depend on that at all, because the post text is already in the file.

Uploading the CSV

  1. Export from Sift and open the file

    You get bookmarks-YYYY-MM-DD.csv, newest saved first. The full column reference covers what each field holds; the only thing that matters here is that the headers are ours, and Readwise keys on its own.
  2. Rename the headers to Readwise's

    Readwise’s CSV importer matches on column names. At minimum it needs a highlight column; it also understands a title, an author, a source URL, a note and a date. Their import page lists the current set and it is theirs to change, so read it before you upload rather than after. The export converter will rename and drop columns for you without the file leaving your browser.
  3. Decide what a source is

    Everything in one upload lands as one source. Splitting the file by ai_category and uploading each part with its own title — X bookmarks: Engineering, X bookmarks: Business — costs a few minutes and makes the library navigable afterwards. Twelve sources of forty highlights beat one source of five hundred.
  4. Prefix the note field

    Put ai_summary in the note, but write Sift summary: … rather than the bare sentence. Readwise notes render directly beneath the highlight, and an unlabelled generated line sitting under a quoted post reads as part of it.
  5. Upload, then check one highlight

    Open a highlight you recognise and confirm the source URL resolves to the right post and the text was not truncated at the first line break. Posts with hard newlines are where CSV imports most often go wrong.

Field mapping

Sift columnReadwise fieldNote
post_textHighlightThe required field. Verbatim, so do not trim it to fit.
post_urlSource URLKeeps every highlight one click from the original. Non-negotiable — attribution is a display requirement.
author_handleAuthorReadwise groups and displays by author, so this is what makes the library browsable.
ai_categorySource title suffix, or a tagBetter as a title suffix if you split the upload per category.
ai_tagsTagsSpace-separated in our file; convert to commas first or you get one long tag.
ai_summaryNotePrefixed, per the step above.
posted_atDateThe publication date, not the date you saved it — that is usually the one you want in review.
saved_atDrop itNo natural home. Keep it in the CSV if you want to reconstruct the order later.
post_idDrop itReadwise has no use for it, but keep your own copy of the file: it is the only unique key you have.
Right-hand column is intent, not a guarantee about Readwise's current header names. Confirm those on their import page — the mapping is stable, the spelling is not ours to promise.

Two consequences people meet later

Review will start showing you posts. Readwise’s daily review draws from every source, so a few hundred saved posts change the character of it noticeably. If you want the archive without the drip, exclude the source from review — it is a per-source setting, and much easier than deciding later that the import was a mistake.

A copy in Readwise is outside our reach. When a post is deleted on X we are obliged to remove it here, and a nightly deletion check is how that happens — which also means the export never contains a post that has already gone. But a highlight you uploaded last month is in your Readwise account, not ours; nothing we do reaches it. That is not a warning, just the honest shape of exporting anything to anywhere.

Why we do not push to Readwise directly

Readwise has a documented API that accepts highlights, and this is the destination where a direct integration would be most obviously useful. We have not built one.

The X developer policy restricts providing X content to third parties, permitting the redistribution of post IDs and granting a narrow exception for up to 500 post objects per person per day by non-automated means. A scheduled server-to-server push of post text into another product is not that exception, and reading it as though it were would be optimistic. If we ever did build it, the compliant shape would send post IDs plus our categories and summaries and leave the text behind — which for a highlights app is the one field that matters. Until that changes, the file is the boundary; the bookmarks endpoint reference covers what we read and under whose token.

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