X(Twitter) Post Quotes Scraper avatar

X(Twitter) Post Quotes Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
X(Twitter) Post Quotes Scraper

X(Twitter) Post Quotes Scraper

Collect quote posts that reference a given X post—full tweet payloads with authors, text, and nested quoted context.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

PowerAI

PowerAI

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

15 days ago

Last modified

Share

X Post Quotes Scraper

Gather quote posts that reference a specific original X post—the same kind of items people see when they open the “Quotes” view for a post. Each dataset row is one quote tweet (the new post that embeds the original), including text, author, engagement, optional location, and—when present—a large nested quoted_status_result subtree for the embedded original post.

Who it’s for

  • Social & comms teams tracking commentary on a flagship post.
  • Researchers & analysts who need structured exports instead of scrolling the quote list.
  • Data workflows that join quote posts with your own content or campaign ids.

What you can do with it

  • Target one original post by its numeric id (from the post URL).
  • Collect many quote posts in one run until you reach the limit you set or the list ends.
  • Match every row to that original post via requestedSourcePostId, plus scrapedAt on each row.

How it works (in plain terms)

You enter the original post’s numeric id (not the @handle). The tool loads quote posts in successive batches until your maximum is reached or there are no more to load—you do not need to manage paging yourself.

Input

FieldRequiredWhat it means
Original post ID (tweetId)YesWhich post’s quote posts you want to export.
Maximum results (maxResults)NoUpper limit on how many quote-post rows to collect (default 50).

Output

  • One row per quote post (until your cap). Rows are often very large because the embedded original post is included in full.
  • Post identity & stats: __typename (Tweet), rest_id, posting source, views (count and state when shown), edit_control, grok_analysis_button, is_translatable, unmention_data.
  • Author: core.user_results.result is a User with avatar, core (name/handle), legacy profile fields, optional professional (creator categories), dm_permissions, media_permissions, relationship_perspectives, verification, tipjar_settings, etc.
  • Quote post body: legacy includes full_text, created_at, conversation_id_str, display_text_range, entities, bookmark_count, engagement counters, lang, is_quote_status, quoted_status_id_str, quoted_status_permalink, user_id_str, and optionally place (geo polygon, name, country) when the quote post is geotagged.
  • Embedded original: quoted_status_result.result is typically another full Tweet (same general shape—core, legacy, media in extended_entities, views, etc.). This block alone can be hundreds of lines.
  • Export metadata: requestedSourcePostId repeats the original post id you asked for; scrapedAt is when that row was saved.

Optional fields vary by post. Details may change as X updates its product.

Sample output (one dataset row, heavily trimmed)

The JSON below keeps real ids and text from a typical row but omits most of quoted_status_result (the embedded original) and shortens core.user_results.

{
"__typename": "Tweet",
"core": {
"user_results": {
"result": {
"__typename": "User",
"rest_id": "285493427",
"core": {
"name": "Makhareezy",
"screen_name": "Makharanga"
},
"legacy": {
"description": "Success is power through God••…"
},
"professional": {
"professional_type": "Creator",
"category": [{ "name": "Podcast", "id": 979 }]
}
}
}
},
"edit_control": {
"edit_tweet_ids": ["1623502970271801350"],
"is_edit_eligible": true,
"edits_remaining": "5"
},
"legacy": {
"full_text": "History made ... What's crazy is about 10% of the world does watch his videos",
"created_at": "Thu Feb 09 02:04:05 +0000 2023",
"conversation_id_str": "1623502970271801350",
"is_quote_status": true,
"quoted_status_id_str": "1552735248026411010",
"quoted_status_permalink": {
"display": "x.com/MrBeast/status…",
"expanded": "https://twitter.com/MrBeast/status/1552735248026411010",
"url": "https://t.co/PkizCMdfCk"
},
"favorite_count": 0,
"retweet_count": 0,
"reply_count": 0,
"quote_count": 0
},
"quoted_status_result": {
"result": {
"__typename": "Tweet",
"rest_id": "1552735248026411010",
"legacy": {
"full_text": "Over a million people celebrated 100,000,000 subscribers with me 🥹…"
}
}
},
"rest_id": "1623502970271801350",
"source": "<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
"views": {
"count": "36",
"state": "EnabledWithCount"
},
"requestedSourcePostId": "1552735248026411010",
"scrapedAt": "2026-03-26T02:23:32.336Z"
}

Good to know

  • Private, deleted, or limited posts may return few or no quote rows.
  • Respect X’s rules and applicable laws when using exported data.