Skip to main content
Send an X (or Twitter) link to Scrape or Batch scrape and you get the data X shows signed-out visitors, as JSON: a profile with its posts, or a single post with its metrics, media and replies. Each link costs 1 credit, and links that can’t be read cost nothing.

Example

The item’s result, shortened:

Fields

Profile: id, handle, name, description, bioEmail, bioLinks, location, website, joinedAt, birthdate, followers, following, postsCount, likesCount, mediaCount, listedCount, verified, isBlueVerified, verifiedType, affiliation, protected, avatar, banner, pinnedPost, posts, postCount, postsOrder, postsNote and nextCursor. Post: id, url, text (long posts in full), lang, createdAt, author, replyCount, repostCount, quoteCount, likeCount, bookmarkCount, viewCount, isReply, replyTo, isQuote, quotedPost, isRepost, repostedPost, media (full-size photos, and every video and GIF variant with its bitrate), links, hashtags, mentions, card, poll, communityNote, article (X Articles in full), isEdited, possiblySensitive. A single post also has thread (the earlier posts) and replies.

A profile’s posts

X shows signed-out visitors one of two things, and postsOrder says which:
  • "latest": the latest posts, newest first, about 40 at a time, with nextCursor. Add ?cursor=<nextCursor> to the profile link for the next batch.
  • X’s own selection of about 100 popular posts, with no cursor. This happens for many well-known accounts.

Limits

Only what X shows signed-out visitors. Search, hashtags, followers, following, likes, lists, and the media and replies tabs need a sign-in, so those links fail straight away and cost nothing. A deleted post or a wrong link fails with “X has no post at this link” and costs nothing. Your cookies are never sent to X.

Templates

Ready-made templates for X: profile stats, recent posts and post metrics.
Check X’s terms before you collect data from it. You’re responsible for how you use what you collect.