x-grok-to-obsidian
// Export Grok conversations from X (x.com) via browser-network capture and convert them into Obsidian-ready Markdown files. Use when a user wants to back up Grok chat history, preserve User vs Grok turns, and generate Markdown notes with YAML frontmatter (URL, created) from captured JSON.
$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namex-grok-to-obsidian
descriptionExport Grok conversations from X (x.com) via browser-network capture and convert them into Obsidian-ready Markdown files. Use when a user wants to back up Grok chat history, preserve User vs Grok turns, and generate Markdown notes with YAML frontmatter (URL, created) from captured JSON.
Export Grok conversations in two stages.
Stage 1 — Capture conversation JSON from X/Grok
Run the browser script in Chrome DevTools Console on https://x.com/i/grok while logged in.
Use script: scripts/export_grok_items_capture.js
Behavior:
- Intercept only
GrokConversationItemsByRestIdresponses (fetch+XHR) - Load chat history with multi-pass scrolling
- Open each discovered conversation to trigger backend responses
- Save one JSON file with conversation metadata + ordered item payload
Quick settings (edit at top of script before run):
INDEX_PASSES(default3)CAPTURE_PASSES(default3)MAX_CHATS(null= all, or number for test)
Output:
grok-network-capture-<timestamp>.jsondownloaded by browser
Stage 2 — Convert JSON to Obsidian Markdown
Run Python converter locally:
python3 scripts/convert_grok_capture_to_md.py \
--input /path/to/grok-network-capture-*.json \
--out /path/to/output-folder
Converter defaults:
- Frontmatter fields:
URL,created - Body starts immediately with
# <title>(no blank line before header) - Turn headings:
## User/## Grok(no numbering) - Turn separator:
--- - Turn order: reverse API item order (API is newest-first)
- Reasoning/deepsearch omitted by default
Useful flags:
--include-reasoningincludethinking_traceblocks--separator "---"customize turn separator--overwriteoverwrite same-title files instead of creatingTitle 2.md
Notes
- Prefer several index/capture passes because X history rendering is lazy and inconsistent.
- If discovered chat count is unexpectedly low, re-run Stage 1 with higher pass counts.
- Keep scripts generic; avoid user-specific absolute paths.