Export · CSV

Export your X bookmarks to a spreadsheet

The download is an RFC 4180 CSV in UTF-8 with CRLF line endings and every field quoted, which every spreadsheet on earth can open — and which two of them will quietly damage unless you import it rather than double-click it.

The file

Nine columns, ordered newest-saved-first, named bookmarks-2026-09-07.csv after the UTC day you asked for it. Every cell is quoted unconditionally, because post text contains commas, straight quotes and hard line breaks as a matter of routine and a writer that only quotes when it thinks it needs to eventually meets a post that proves it wrong. Embedded quotes are doubled, per the standard. Line endings are CRLF, again per the standard, and because Excel is the primary consumer.

ColumnContentsForce this type
post_idThe X post ID. A 19-digit integer.Text. This is the important one.
post_urlCanonical x.com permalink for the post.Text, or a hyperlink
author_handleThe author's handle, @ included.Text
posted_atWhen the post was published. ISO 8601, UTC.Date-time, or Text
saved_atWhen you bookmarked it. ISO 8601, UTC.Date-time, or Text
post_textThe post, verbatim. May contain newlines.Text
ai_categoryOur category for it, one of a fixed set.Text
ai_tagsOur tags, space-separated.Text
ai_summaryOur one-line summary.Text
The three ai_ columns are ours, not X's. The prefix exists so that a sheet you forward to a colleague still distinguishes generated text from what the author actually wrote.

Excel: import it, do not open it

Double-clicking the file works and produces something that looks correct, which is the problem. Two things go wrong on that path, both silently.

Encoding. The file is UTF-8 with no byte-order mark. Excel on Windows, handed a CSV with no BOM, falls back to the system code page — so emoji, accented characters and any CJK in a post turn into mojibake, and you find out weeks later when you search for a post you know you saved.

Numeric precision. Excel carries 15 significant digits. A post ID has 19. Opened as a number, 1795432198765432198 becomes 1.79543E+18 and the last four digits are gone — not hidden, gone. Formatting the column as text afterwards recovers a rounded number, not the ID. Every join, every deduplication and every attempt to reconstruct a permalink from that column is then subtly wrong.

  1. Data → Get Data → From Text/CSV

    Pick the file. Do not open it from Explorer or from the recent-files list.
  2. Set File Origin to 65001: Unicode (UTF-8)

    Check the preview pane for a post you know contains an emoji or an accent before going further. This is the whole encoding fix.
  3. Transform Data, not Load

    In Power Query, click the post_id header, then Transform → Data Type → Text. If a “Change column type” step already appeared, replace it rather than adding another. Do the same for anything else you want kept literally.
  4. Close & Load

    You get a real table with a refreshable query attached, which is convenient later: point it at next week’s export file and refresh instead of repeating all of this.

Google Sheets, Numbers and LibreOffice

AppRouteThe setting that matters
Google SheetsFile → Import → UploadUntick Convert text to numbers, dates and formulas. Left on, it does the same thing to post IDs that Excel does, and reinterprets the timestamps into your local timezone.
Apple NumbersOpen the file directlyNumbers reads UTF-8 correctly, but still coerces the ID column. Select it and set Data Format → Text, then check the last digits survived.
LibreOffice CalcOpen the file; the import dialog appearsThe least painful of the four: set Character set to UTF-8 and click the post_id column header in the preview, then choose Text — before the data is ever parsed.

One security note worth two sentences

A post can begin with =, +, - or @. Quoting the field in the file, which we do, does not stop a spreadsheet from treating the cell as a formula once it has been parsed — the standard defines the file, not what Excel does with it afterwards. Importing as text, as above, is also what defuses this; it is a good reason not to turn formula conversion back on for convenience.

Things worth doing once the file is in

A pivot table on ai_category answers “what do I actually save” in about ten seconds, and it is usually not what people expect. Counting by author_handle answers a blunter question: which five accounts are producing most of your reading list.

The tags column is space-separated, which is deliberate — commas inside a CSV cell are survivable but tiresome. To fan it out, TEXTSPLIT in current Excel or SPLIT in Sheets will do it in one formula. If you would rather have the whole file arrive in a different shape altogether, the converter re-emits it as JSON or Markdown without uploading anything.

a header row and one record, as written
"post_id","post_url","author_handle","posted_at","saved_at","post_text","ai_category","ai_tags","ai_summary"
"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."

Appending a second export

Each download starts from your most recently saved bookmark and works backwards, so two exports taken on different days overlap wherever your library did not change. Paste the second file below the first, select the post_id column and use Remove Duplicates — that column is the only field in the file guaranteed unique per row, which is the other reason not to let it become a float.

If enforced field types and an actual merge key sound better than a column of strings you have to remember to protect, that is more or less the argument for loading the same file into Airtable, where the import can upsert on the post ID. And if you would rather read your saved posts than tabulate them, one note per bookmark in a vault is the other end of the same spectrum.

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