X (Twitter) Profile & Post Scraper
Pricing
from $0.20 / 1,000 results
X (Twitter) Profile & Post Scraper
Collect public X (Twitter) profiles and posts by link. Profiles come with exact follower, following and post counts, bio, website, verification and join date, plus latest posts. Posts come with text, media and exact likes, reposts, replies, quotes, bookmarks and views. Pay only for rows delivered.
Pricing
from $0.20 / 1,000 results
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn X (Twitter) usernames, profile links and post links into clean, structured rows. Every profile comes with its exact follower, following and post counts, bio, location, website, verification type, join date, avatar and banner, plus its latest posts. Every post comes with its text, author, posting time, photos and videos, and exact likes, reposts, replies, quotes, bookmarks and views. No X account or login is needed.
Paste as many profiles and posts as you like in one run. Profiles bring their latest posts (up to 5, pinned post included), and post links bring the top replies X shows under them. A total row cap keeps big lists from running away. Profiles and posts that cannot be read are listed in the run summary and are not charged.
What it covers
- Profiles by username or link: the profile itself and the latest posts X shows on it to visitors (up to 5).
- Posts by link or id: the post with every public counter, plus the top replies X shows under it (usually 2 to 5).
- Not covered: X search, hashtag pages, a profile's full post history beyond its latest posts, the replies tab, likes, and follower or following lists. X shows these only to signed-in visitors, so links to them are rejected with a clear message.
Use cases
- Influencer and creator vetting: exact follower counts, verification type, join date and how well the latest posts perform.
- Brand and competitor tracking: re-run the same accounts on a schedule and compare followers and engagement over time.
- Campaign reporting: likes, reposts, replies, quotes, bookmarks and views for a list of post links in one table.
- Lead and account enrichment: bio, location and website for a list of X handles.
- Research and AI datasets: post text, media and top replies as clean rows.
Quick Start
{"startUrls": ["NASA", "https://x.com/jack/status/20"],"maxItems": 100}
The first line gives NASA's profile and its latest posts; the second gives the post and its top replies.
Input
| Input | Type | Default | Meaning |
|---|---|---|---|
startUrls | array | — | One per line: a username (NASA or @NASA), a profile link (https://x.com/NASA), a post link (https://x.com/NASA/status/2112553116390269175) or a post id. twitter.com links work too. |
includeLatestPosts | boolean | true | Also collect the latest posts each profile shows to visitors, with their exact counts. |
maxPostsPerProfile | integer | 5 | How many of each profile's latest posts to keep, 1 to 5. |
includeReplies | boolean | true | Also collect the top replies X shows under each post link. Each reply is one row. |
maxItems | integer | 1000 | Total cap on rows (profiles plus posts) across every input line, up to 100,000. |
Give at least one username, profile link or post link.
Example queries
{"startUrls": ["NASA", "SpaceX", "ESA"], "includeLatestPosts": false}: three profiles, one row each.{"startUrls": ["https://x.com/nike", "https://x.com/adidas", "https://x.com/PUMA"], "maxPostsPerProfile": 3}: competitor profiles with their 3 latest posts.{"startUrls": ["https://x.com/NASA/status/2112553116390269175", "https://x.com/jack/status/20"], "includeReplies": false}: counters for a list of posts.{"startUrls": ["2112553116390269175"]}: a post by its id, with its top replies.{"startUrls": ["@BarackObama", "@taylorswift13", "@elonmusk"], "maxItems": 50}
What it returns
The dataset has one row per profile and one row per post. The type field tells them apart, and origin says why a row is there: requested (from your input), latest (a profile's latest post) or reply (a top reply under a post link).
Profiles ("type": "profile"):
| Field | Meaning |
|---|---|
id | X's numeric account id. |
username, name | Handle without @, and display name. |
url | The profile on X. |
bio, location, website | As shown on the profile, with links expanded. |
createdAt | Join date (UTC, ISO 8601). |
followers, following, postsCount | Exact counts. |
isBlueVerified, verifiedType | Blue check, and Business or Government for organisation badges. |
isProtected | true for protected accounts (their posts are hidden). |
avatarUrl, bannerUrl | Profile picture (400 x 400) and header image. |
professionalType, affiliatesCount, subscribersCount | Creator or business label, affiliated accounts and subscribers, when shown. |
latestPostIds | Ids of the latest posts delivered for this profile. |
Posts ("type": "post"):
| Field | Meaning |
|---|---|
id, url | X's post id and the post link. |
text | Full post text (long posts included) with links expanded. |
lang, createdAt | Language code and posting time (UTC, ISO 8601). |
authorId, authorUsername, authorName, authorFollowers, authorIsBlueVerified, authorVerifiedType, authorAvatarUrl | Who posted it. |
likes, reposts, replies, quotes, bookmarks | Exact counts. |
views | Exact view count; null for older posts that X shows without one. |
media | Photos, videos and GIFs: type, url, width, height, altText, and for videos videoUrl (best quality MP4) and durationMs. |
hashtags, mentions, links | Hashtags, mentioned usernames and expanded links. |
isReply, inReplyToId, inReplyToUsername | Reply details. |
isQuote, quotedPost | The quoted post with its text, author and counts. |
isPinned | true for a profile's pinned post. |
possiblySensitive | X's sensitive-content flag. |
countsPartial | true on the rare post where X showed only its likes and reply count (the other counters are null). |
Every row also has source (the input line it came from) and scrapedAt (collection time, UTC).
The run summary (OUTPUT) reports profiles, posts, replies, and any profile or post that could not be read in sourceErrors, each with a short code and message (for example NOT_FOUND for a misspelled handle or a deleted post, SUSPENDED, or UNAVAILABLE). A post that appears twice (say as a profile's latest post and as a post link) is delivered and charged once.
Output example
{"type": "profile", "id": "11348282", "username": "NASA", "name": "NASA", "url": "https://x.com/NASA", "bio": "Making the seemingly impossible, possible. ✨", "location": "Pale Blue Dot", "website": "http://www.nasa.gov/", "createdAt": "2007-12-19T20:20:32Z", "followers": 92317762, "following": 115, "postsCount": 74443, "isBlueVerified": true, "verifiedType": "Government", "isProtected": false, "avatarUrl": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_400x400.jpg", "bannerUrl": "https://pbs.twimg.com/profile_banners/11348282/1788992290", "professionalType": null, "affiliatesCount": 85, "subscribersCount": 0, "latestPostIds": ["2112604875452223824"], "origin": "requested", "source": "NASA", "scrapedAt": "2026-10-20T18:40:12.345Z"}{"type": "post", "id": "2112604875452223824", "url": "https://x.com/NASA/status/2112604875452223824", "text": "LIVE: Get a preview of two upcoming spacewalks set for Oct. 29 and Nov. 5. @astro_anil and CSA (Canadian Space Agency) astronaut Joshua Kutryk will use both spacewalks to finish installing solar arrays. https://x.com/i/broadcasts/1jxXgBNWypPJZ", "lang": "en", "createdAt": "2026-10-20T18:00:27Z", "authorId": "11348282", "authorUsername": "NASA", "authorName": "NASA", "authorFollowers": 92317762, "authorIsBlueVerified": true, "authorVerifiedType": "Government", "authorAvatarUrl": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_400x400.jpg", "likes": 151, "reposts": 25, "replies": 13, "quotes": 0, "bookmarks": 5, "views": 78493, "media": [], "hashtags": [], "mentions": ["astro_anil"], "links": ["https://x.com/i/broadcasts/1jxXgBNWypPJZ"], "possiblySensitive": false, "isReply": false, "inReplyToId": null, "inReplyToUsername": null, "isQuote": false, "quotedPost": null, "isPinned": false, "origin": "latest", "source": "NASA", "scrapedAt": "2026-10-20T18:40:12.345Z"}{"type": "post", "id": "20", "url": "https://x.com/jack/status/20", "text": "just setting up my twttr", "lang": "en", "createdAt": "2006-03-21T20:50:14Z", "authorId": "12", "authorUsername": "jack", "authorName": "jack", "authorFollowers": 12533196, "authorIsBlueVerified": true, "authorVerifiedType": null, "authorAvatarUrl": "https://pbs.twimg.com/profile_images/1661201415899951105/azNjKOSH_400x400.jpg", "likes": 309156, "reposts": 124596, "replies": 18107, "quotes": 7325, "bookmarks": 21982, "views": null, "media": [], "hashtags": [], "mentions": [], "links": [], "possiblySensitive": null, "isReply": false, "inReplyToId": null, "inReplyToUsername": null, "isQuote": false, "quotedPost": null, "origin": "requested", "source": "https://x.com/jack/status/20", "scrapedAt": "2026-10-20T18:40:12.345Z"}{"type": "post", "id": "1770888775830262034", "url": "https://x.com/derbederdusler/status/1770888775830262034", "text": "@jack", "lang": "qme", "createdAt": "2024-03-21T19:02:40Z", "authorId": "1420469290369789958", "authorUsername": "derbederdusler", "authorName": "𝕯𝖊𝖗𝖇𝖊𝖉𝖊𝖗", "authorFollowers": 3922, "authorIsBlueVerified": true, "authorVerifiedType": null, "authorAvatarUrl": "https://pbs.twimg.com/profile_images/2068802435938689025/Iqb-7nQc_400x400.jpg", "likes": 8012, "reposts": 139, "replies": 22, "quotes": 7, "bookmarks": 95, "views": 462713, "media": [{"type": "photo", "url": "https://pbs.twimg.com/media/GJN19MHXQAAeNDq.jpg", "width": 1080, "height": 786}], "hashtags": [], "mentions": ["jack"], "links": [], "possiblySensitive": false, "isReply": true, "inReplyToId": "20", "inReplyToUsername": "jack", "isQuote": false, "quotedPost": null, "origin": "reply", "source": "https://x.com/jack/status/20", "scrapedAt": "2026-10-20T18:40:12.345Z"}
How fast
About 250 profiles or post links a minute. A profile with its 5 latest posts is 6 rows, so a list of 100 profiles gives about 600 rows in under a minute.
Price
$0.0002 per row delivered (one profile or one post), that is $0.20 per 1,000 rows, plus $0.005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Profiles and posts that could not be read are not charged. Platform usage is included in these prices.
Good to know
- Counts are a snapshot at collection time.
- A profile shows visitors only its latest posts (up to 5, including a pinned post). For more posts from one account, add their post links.
- Reposts made by a profile are not part of its latest posts; its own posts and quote posts are.
- Protected accounts give their profile row; their posts are hidden. Suspended accounts and deleted posts are reported in
OUTPUT.sourceErrorsand are not charged. - Older posts (before X started counting views) have
views: null. - If X temporarily refuses requests, the run retries with growing pauses. Rows already collected are kept. If nothing at all can be read, the run fails with a clear message.