Test it now: replace x.com with anypost.md in any post URL.
Before
https://x.com/trq212/status/2052809885763747935
After
https://anypost.md/x.com/trq212/status/2052809885763747935?thread=full
How to convert an X post or thread to Markdown
Turn any X/Twitter post or thread into clean, portable Markdown. One URL swap gives you the full text and thread order, without scraping the X website.
Why not scrape X?
The website is a reader UI, not a clean export.
Copy-pasting from x.com or running a scraper on the page sounds simple, but you usually get layout noise, missing thread context, or numbers that do not match what you saw in the app.
| Approach | What you get |
|---|---|
| Scrape x.com | DOM clutter, partial threads, unreliable stats |
| anypost.md | Ordered Markdown with post text and metadata |
01: UI chrome
X pages ship nav, sidebars, suggested posts, login prompts, and cookie banners. Scraping the DOM means cleaning noise before you get to the content.
02: Incomplete threads
Anonymous visitors often do not see the full thread. X may show only the target post, hide earlier self-replies, or stop the chain behind a sign-in wall.
03: Stale stats
Engagement numbers scraped from the page can be wrong or stale, rounded counts, layout A/B tests, and client-rendered numbers that change after load.
Step-by-step workflow
01: Copy the X/Twitter status URL
Use the permalink for the post you care about, or any post in the thread chain.
02: Replace x.com with anypost.md
Swap the domain in the URL bar and open the page. Prefix the path with x/ (twitter.com URLs work the same way).
Before: https://x.com/jack/status/20
After: https://anypost.md/x/jack/status/20?thread=full
Add ?thread=full to include the full same-author thread. Paid API keys (apk_…) unlock thread unrolling and author metadata; free tier is single-post only (10/day).
03: Copy the Markdown output
The page returns plain Markdown (text/plain). Select all, or use your browser’s copy, no JSON to parse.
04: Use the Markdown wherever you need plain text
Drop it into a doc, note, CMS, email draft, RAG pipeline, or any workflow that works better with structured text than a live URL.
Good for
Markdown is easy to search, diff, archive, and reuse. AnyPost gives you the post body, author handle, timestamps, media links, and thread order in one copy-pasteable block.
- Save a thread in your notes app or knowledge base without copy-pasting post by post.
- Quote or cite the exact wording in a blog post, newsletter, or research doc.
- Archive a conversation before it gets deleted or buried in the timeline.
- Paste structured text into ChatGPT, Claude, Gemini, Cursor, or any editor that accepts Markdown.
For agents: fetch Markdown, not web pages
Give AnyPost to OpenClaw, Codex, Cursor agents, Claude Code, and RAG workers as their X/Twitter fetch layer. Instead of driving the original site, the agent should rewrite the URL to anypost.md or call /api/convert, then read the clean Markdown response.
That keeps agents out of brittle DOM scraping, rate-limit loops, login walls, and browser automation noise.
Agent setup
- Install the anypost-md skill, or give your agent the anypost-md agent skill file.
- Store an
apk_key from Login for Agents and send it asAuthorization: Bearer apk_live_xxxfor paid options. - Use the domain-swap URL when the agent wants a plain Markdown document; use
/api/convertwhen it needs JSON fields such asmarkdown,credits, or structured errors.
Original: https://x.com/jack/status/20
Agent: https://anypost.md/x/jack/status/20?thread=full
What you get
AnyPost normalizes each supported platform into the same Markdown shape. Output is consistent whether you use domain swap or the API.
# Nous Research (@NousResearch)
Hermes Agent v0.15.0 - "The Velocity Release"
Changelog below [pic.twitter.com/33YL6GmGyq](https://t.co/33YL6GmGyq)
[video](https://pbs.twimg.com/amplify_video_thumb/2060080166341169156/img/o3_PB2CIyewh4ADe.jpg)
---
2026-05-28 · X · [Original post](https://x.com/NousResearch/status/2060085673848193127)
Long-form X Articles use the same status permalink; AnyPost pulls the full article body when the platform supports it.
Under the hood
The domain swap is not a separate scraper, it calls the same backend as /api/convert. Next.js rebuilds https://x.com/…, forwards options, then returns only the markdown field as text/plain.
Paid options on a swapped URL
Append your key and options to the anypost URL (browser or script):
https://anypost.md/x/jack/status/20?thread=full&apikey=apk_live_xxx
Same with author metadata:
https://anypost.md/x/jack/status/20?thread=full&userinfo=author&apikey=apk_live_xxx
Scripts: catch-all (plain Markdown)
Use the swapped path when you want raw Markdown in the response body (no JSON wrapper):
# Query param auth
curl -sS "https://anypost.md/x/jack/status/20?thread=full&apikey=apk_live_xxx"
# Header auth (same route)
curl -sS -H "Authorization: Bearer apk_live_xxx" \
"https://anypost.md/x/jack/status/20?thread=full"
Local dev (frontend on :3000, backend on :8000):
curl -sS -H "Authorization: Bearer apk_live_xxx" \
"http://localhost:3000/x/jack/status/20?thread=full"
Scripts: /api/convert (JSON)
When you need credits, postCount, or other fields, pass the full x.com URL:
curl -sS -H "Authorization: Bearer apk_live_xxx" \
"https://anypost.md/api/convert?url=https%3A%2F%2Fx.com%2Fjack%2Fstatus%2F20&thread=full"
| Entry point | Response | Best for |
|---|---|---|
/x/…/status/… (swap) | text/plain Markdown | Browser, curl pipes, agents that want a document |
/api/convert?url=… | JSON + markdown | Apps that need metadata and structured errors |
See Documentation for all query params. The AI agents block at the
bottom of this page includes the installable SKILL.md (tweet.md-style).
Next
- X profile → Markdown, bio, stats, avatar, and recent posts from a profile URL.
- Feed context to AI models, paste threads into ChatGPT, Claude, and Cursor without brittle links.
- Archive posts into Obsidian,
?format=obsidianwith YAML frontmatter. - Convert any post to Markdown, same trick for Reddit, Bluesky, Threads, and more.
AI agents
Want to use AnyPost from an agent for X posts? Give it the skill below plus your API key, and it can read any tweet or thread.
The skill instructs your agent to replace any x.com URL with anypost.md. Markdown output is optimized for LLMs, saving tokens.
Skill URLs
Live on anypost.md
https://anypost.md/i/skill.mdGitHub raw (main branch)
https://raw.githubusercontent.com/AnyPostMD/anypost/main/skills/anypost-md/SKILL.mdInstall with npx skills (recommended)
Same flow as npx skills add anthropics/skills --skill …. Installs from the open AnyPostMD/anypostrepo into your agent's skills folder.
npx skills add AnyPostMD/anypost --skill anypost-md -yGlobal (all projects): npx skills add AnyPostMD/anypost --skill anypost-md -g -y
Quick install (live URL)
Downloads to skills/ — copy the folder into your agent's path below. Paste your API key at Login for Agents.
mkdir -p skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o skills/anypost-md/SKILL.mdInstall from GitHub raw
Same SKILL.md as in the public repo — useful before deploy or for pinned installs.
mkdir -p skills/anypost-md && curl -fsSL https://raw.githubusercontent.com/AnyPostMD/anypost/main/skills/anypost-md/SKILL.md -o skills/anypost-md/SKILL.mdGlobal install: mkdir -p skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o skills/anypost-md/SKILL.md
Per-agent
Cursor
mkdir -p .cursor/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .cursor/skills/anypost-md/SKILL.mdClaude Code
mkdir -p .claude/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .claude/skills/anypost-md/SKILL.mdCodex (ChatGPT)
mkdir -p .agents/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .agents/skills/anypost-md/SKILL.mdOpenCode
mkdir -p .opencode/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .opencode/skills/anypost-md/SKILL.mdOpenClaw
mkdir -p skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o skills/anypost-md/SKILL.mdWindsurf
mkdir -p .windsurf/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .windsurf/skills/anypost-md/SKILL.mdGemini CLI
mkdir -p .gemini/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .gemini/skills/anypost-md/SKILL.mdFactory
mkdir -p .factory/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .factory/skills/anypost-md/SKILL.mdKiro
mkdir -p .kiro/skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o .kiro/skills/anypost-md/SKILL.mdSkill file: anypost-md agent skill file (SKILL.md)
Agents: curl https://anypost.md/i/skill.md and install into your agent's skills directory.
Humans: run mkdir -p skills/anypost-md && curl -fsSL https://anypost.md/i/skill.md -o skills/anypost-md/SKILL.md or open /i/skill.
After install, read SKILL.md and add your apk_ key for paid options (threads, comments, author metadata).
More guides
X profile → Markdown
Turn any X/Twitter profile into structured Markdown with bio, stats, avatar, banner, and recent posts. Requires an API key.
How to convert any post to Markdown
The one-URL trick for Reddit, Bluesky, Threads, Mastodon, and more, plus when to use the X-specific guide.
Feed context to AI models
Best practices for pasting posts and threads into ChatGPT, Claude and Cursor.
Archive posts into Obsidian
Use frontmatter export to drop posts straight into your knowledge vault.