X / Twitter Post Scraper avatar

X / Twitter Post Scraper

Pricing

from $0.50 / 1,000 tweets

Go to Apify Store
X / Twitter Post Scraper

X / Twitter Post Scraper

Scrape public X (Twitter) posts and profiles by URL, no login or API key. Get tweet text, likes, reposts, replies, quotes, views, photos, videos (MP4), quoted posts, top replies, and author followers. Profiles include bio, counts and latest posts. Export JSON, CSV, Excel.

Pricing

from $0.50 / 1,000 tweets

Rating

0.0

(0)

Developer

Coder

Coder

Maintained by Community

Actor stats

0

Bookmarked

60

Total users

24

Monthly active users

16 days ago

Last modified

Share

Scrape public X (Twitter) posts and profiles into clean JSON, CSV or Excel. Paste tweet links or profile handles and get the full post text, likes, reposts, replies, quotes, bookmarks, views, photos and videos (with direct MP4 links), quoted posts, top replies and author details. No X account, no login and no API key needed.

Use it for social listening, brand and competitor monitoring, influencer research, academic research, content archiving and analytics pipelines.


What you get

InputYou get
Post URLThe post, plus (optionally) the top replies X shows publicly under it
Profile URL or @handleOne result: the full public profile, with the pinned post and the latest posts X shows publicly (usually about 5) included as recent_posts

Every post includes:

SectionFields
PostID, URL, type (tweet, reply, quote, media, link), full text (long posts are not cut off), language, date
metricsLikes, reposts, replies, quotes, bookmarks, views
authorID, handle, name, avatar, verified, badge, followers, following, post count, protected
mediaPhotos, videos and GIFs with size, duration, alt text and a direct video_url (best-quality MP4)
quoted_postThe quoted post's text, author, metrics and media
reply_toThe post and account this is replying to
entitiesHashtags, mentions, expanded links
contextReply, quote, edited, edit history, sensitive-media flags
authorProfileOptional: bio, website, location, join date, banner, full counts (not added to replies)

Every row has a type (post or profile), and each post has a relation: post (a link you entered) or reply. source is the input link the row came from. Profile rows carry recent_posts, each with text, date, metrics, media and is_pinned.

Results stream into the dataset while the run is going.


Input

FieldDescription
Post URLsx.com / twitter.com / mobile.twitter.com status links, x.com/i/web/status/... links, or bare post IDs
Profile URLshttps://x.com/username, @username or username
Include top repliesAlso save the top replies under each post (off by default)
Flatten outputOn: compact records. Off: detailed records with every video quality, display text and link card details
Include full author profileAttach the author's full profile (bio, website, location, join date, banner) to every post. Each author is looked up once per run

Example input

{
"postUrls": [
{ "url": "https://x.com/elonmusk/status/2067438979667140620" },
{ "url": "https://x.com/hackernoon/status/2066573502832906644" }
],
"profileUrls": ["@nasa"],
"includeReplies": true,
"flattenOutput": true,
"includeAuthorProfile": false
}

Example output (post)

{
"type": "post",
"relation": "post",
"source": "https://x.com/jack/status/20",
"id": "20",
"url": "https://x.com/jack/status/20",
"post_type": "tweet",
"text": "just setting up my twttr",
"lang": "en",
"created_at": "Tue Mar 21 20:50:14 +0000 2006",
"author": {
"id": "12",
"username": "jack",
"name": "jack",
"verified": true,
"followers": 12313353,
"following": 3,
"posts_count": 30997,
"protected": false
},
"metrics": {
"likes": 308385,
"retweets": 124617,
"replies": 18062,
"bookmarks": 21707,
"quotes": 7224,
"views": null
},
"media": [],
"quoted_post": null,
"reply_to": null
}

Example output (profile)

{
"type": "profile",
"source": "@nasa",
"id": "11348282",
"username": "NASA",
"name": "NASA",
"url": "https://x.com/NASA",
"bio": "Making the seemingly impossible, possible. ✨",
"location": "Pale Blue Dot",
"created_at": "Wed Dec 19 20:20:32 +0000 2007",
"verified": true,
"website": {
"expanded": "http://www.nasa.gov/",
"display": "nasa.gov"
},
"counts": {
"followers": 92375072,
"following": 115,
"posts": 74334
},
"recent_posts": [
{
"id": "2103610284464316469",
"url": "https://x.com/NASA/status/2103610284464316469",
"is_pinned": false,
"post_type": "media",
"text": "With @BoeingSpace, we’ll provide an update on Starliner development and plans for regular crew flights to and from the @Space_Station. Watch live Monday, Sept. 28 at 3pm ET: https://t.co/bxg2gpZzog https://t.co/OJaD49OyHh",
"created_at": "Fri Sep 25 22:19:09 +0000 2026",
"metrics": {
"likes": 2463,
"retweets": 312,
"replies": 119,
"bookmarks": 103,
"quotes": 44,
"views": 559374
}
}
]
}

recent_posts holds the pinned post and the latest posts X shows publicly (usually about 5); one is shown here. Each also has media, entities, link_preview, quoted_post and reply_to.

The Overview tab shows the main columns (type, link, text, date, author, likes, reposts, replies, views); All fields shows everything.


Pricing

Pay-per-event. You pay only for results saved to your dataset:

EventWhen
ResultEach post or profile row saved to the dataset. A profile's recent_posts are included in its one result
Author profileEach unique author whose full profile is attached, only when Include full author profile is on and only once per author per run

Links that fail (deleted posts, wrong links, private accounts) are never charged. They are named in the run log instead. The run also stops cleanly when it reaches your maximum charge limit, so you never pay for more than you allowed.

See the Pricing tab for current rates.

Free plan

Free Apify plans can scrape up to 5 links per run (post and profile links combined), with every feature available. Paid plans have no cap.


Limits

  • Public data only: what X shows to a visitor who is not logged in. Protected accounts and deleted posts are skipped.
  • Replies: only the top replies X shows publicly under a post (usually up to 3), not the full thread.
  • Profile posts: only the pinned post and latest posts X shows publicly on the profile (usually about 5), not the full history. Need a profile post as its own row with replies? Add its link to Post URLs.
  • Views are missing on very old posts, because X did not count them back then.
  • Counts change constantly. Schedule the Actor to track them over time.

You are responsible for using collected data in line with applicable laws and X's terms of service.


FAQ

Do I need an X account or API key? No.

Can I scrape a whole profile or search results? This Actor returns what X shows publicly without logging in: a profile with its pinned and latest posts, and a post with its top replies.

Why did a link fail? The post was deleted, the account is private or suspended, or the link is not a post or profile link. The run log names each failed link, and failed links are not charged.

Will one post be saved twice? No. A post that is both a reply and an input link is saved once, under your input link.

Can I get the video file? Yes: media[].video_url is the best-quality MP4. Turn Flatten output off to get every quality.