Snapshot a Post's Engagement Alongside Its Markdown
Archive a post's text plus its reply, repost, and like counts — a point-in-time record for research and reporting.

The text isn't the whole record — the counts matter for anything analytical. Thirdwatch's Tweet to Markdown converts public X posts — including long-form articles — to clean Markdown with author and engagement metadata, through a guest path that needs no login.
Skip the setup: Run this as a ready-to-go task on Apify — pre-loaded with the configuration from this guide.
Why archive engagement too
For research or reporting you need the post and its traction: a screenshot captures vibes, a row captures numbers.
replyCount, retweetCount, and favoriteCount come back on the same row as the Markdown — the archive is one run.
The converter resolves each status URL through X's guest API and renders the body as Markdown, so the archive path is a URL list in and Markdown rows out.
How does this compare to the alternatives?
| Approach | Cost model | Output | Effort |
|---|---|---|---|
| Copy-paste into a doc | Free | Unformatted text | One post at a time |
| X API v2 | Paid tiers, auth | JSON you must convert yourself | App approval + keys |
| Thirdwatch Tweet to Markdown | Pay per post | Clean Markdown + engagement | Paste a URL, run |
Why this Actor
- Long-form support — note tweets and X articles, not just 280-character posts.
- Clean Markdown output: links, headings, and media references preserved.
- No login or cookies — the guest path is used.
- Engagement counts (replies, reposts, likes) land on every row.
- Batch input converts a reading list in one run.
How to do it in 3 steps
Step 1: Configure the input
Set the inputs as shown below — urls takes the targets, each entry is an x.com or twitter.com status URL.
Step 2: Run the Actor
Run it from the console, the API, or the linked saved task. One dataset row is written per post.
Step 3: Use the output
Each row carries the post body as markdown, the author handle and display name, timestamp, engagement counts, and an isArticle flag for long-form posts.
{
"urls": [
"https://x.com/jack/status/20"
]
}Each dataset row looks like:
{
"id": "20",
"url": "https://x.com/jack/status/20",
"author": "jack",
"authorName": "jack",
"createdAt": "2006-03-21T20:50:14.000Z",
"isArticle": false,
"markdown": "just setting up my twttr",
"replyCount": 12000,
"retweetCount": 95000,
"favoriteCount": 180000
}What to watch for
Public posts only — protected accounts and deleted tweets return error rows. The guest path occasionally rate-limits; retry error rows rather than treating them as permanent failures.
Related use cases
- Convert an X Post to Clean Markdown
- Export an X Long-Form Article as Markdown
- Convert a Batch of X Posts to Markdown in One Run
- Feed X Posts to an LLM as Clean Markdown
- All Thirdwatch use-case guides
Run the Tweet to Markdown on Apify Store — pay per result, free to try, no credit card to test.
Frequently asked questions
Does it handle long-form X articles?
Yes — long-form posts and note tweets convert fully, and `isArticle` flags them on the row.
Do I need an X account or API key?
No — the Actor uses the public guest path, so there is no auth to manage.
What about protected or deleted posts?
They return `error` rows — public posts only.
Are links and media preserved?
Links become Markdown links and media attachments are referenced in the body; the row is meant for text-first pipelines.
Why did a post fail once but work on retry?
The guest path is occasionally rate-limited; transient failures come back as `error` rows worth a retry.
Can I convert a whole thread?
Pass each status URL in the thread — each becomes its own Markdown row, ordered by your input list.
Related
100 free credits, no credit card.
About 30 real searches. Add the MCP to Claude or Cursor in two minutes.