Skip to main content
Thirdwatchthirdwatch
Social media

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.

Sep 16, 2026 · 3 min read · 501 words
See the scraper →

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

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

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.