Skip to main content
X (Twitter)

X (Twitter) Scraper API
posts, profiles and media

Send an X post or profile link and get the data back as JSON: the full text, author, six engagement counts, photos and every video file, polls, quoted posts and community notes, and the posts a profile shows to visitors.

You sendx.com/NASA
ProfilePosts1 credit
You get back (real run, trimmed)
{
"handle": "NASA",
"name": "NASA",
"followers": 92322319,
"following": 115,
"postsCount": 74438,
"joinedAt": "2007-12-19T20:20:32.000Z",
"posts": [
{
"text": "The aircraft lineup just keeps getting bigger. ✈️\n\nMAX POWER, a new ae…",
"likeCount": 1547,
"repostCount": 212,
"viewCount": 362558
},
"… 39 more"
]
}
~40 or ~100

posts per profile: the latest with a cursor, or X's popular pick

6

counts on every post: replies, reposts, quotes, likes, bookmarks, views

1 credit

per page, for a post or a profile with its posts

$0

for a page that can't be delivered

Every X link that returns data

Copy the link from the app or your browser. Spidra works out what kind of page it is.

Posts

Full text, long posts and X Articles included, with the author, every count, media, links, poll, quoted post, community note and the top replies X shows visitors.

x.com/NASA/status/2111180963661435219

Profiles

Bio, location, website, joined date, follower and post counts, verification, pinned post and the posts X shows visitors.

x.com/NASA

Older posts

When a profile comes back with its latest posts, nextPageUrl reads the next, older page.

x.com/NASA?cursor=DAAHCgABHU8t5Zw__9oL...

Highlights

The posts an account chose to highlight.

x.com/NASA/highlights

Communities

Name, description, members, topic, rules, creator, banner and the top posts.

x.com/i/communities/...

Any post link

twitter.com, mobile, /i/status and fxtwitter or vxtwitter links are read as the post they point to.

twitter.com/NASA/status/2111180963661435219

One call, every field

Point the scrape call at a X link. With JSON output and no prompt, the data comes back as it is, for 1 credit and no AI cost.

Ask for markdown instead and you get the readable page as text. The structured data still comes back, in its own structuredData field next to the markdown.

import { SpidraClient } from "spidra";
 
const spidra = new SpidraClient({
apiKey: process.env.SPIDRA_API_KEY,
});
 
const result = await spidra.scrape({
urls: [{ url: "https://x.com/NASA" }],
output: "json",
});
 
const data = result.content;
console.log(data.postsOrder);
for (const p of data.posts) console.log(p.text, p.likeCount, p.viewCount);
What you get for each post and profile
Author
Name, handle, ID, verification and its type, followers, following, post count and avatar
Text
The full text, long posts included, with language, date, hashtags, mentions and links with their full URLs
Counts
Replies, reposts, quotes, likes, bookmarks and views
Media
Full-size photos, and videos and GIFs with every variant and bitrate, preview image, size, duration and alt text
Context
Reply-to, quoted post, repost, link card, poll, community note, edit history, X Article text and the earlier posts of the thread
Replies
The top replies X shows visitors who aren't signed in, usually 3
Profile
Bio, location, website, joined date, birthday, likes, media and listed counts, banner and pinned post
Profile posts
The posts X shows visitors, postsOrder (latest or popular), nextCursor and nextPageUrl

What comes back

Real responses from Spidra, trimmed for length. Nothing here is mocked up.

Request
https://x.com/NASA/status/2111180963661435219
Response (real run, October 18, 2026, trimmed)
{
"type": "post",
"id": "2111180963661435219",
"url": "https://x.com/NASA/status/2111180963661435219",
"text": "The aircraft lineup just keeps getting bigger. ✈️\n\nMAX POWER, a new aerospace expo, is set for Nov. 7-8 @NASAKennedy — featuring flyovers and static displays, i…",
"lang": "en",
"createdAt": "2026-10-16T19:42:20.000Z",
"author": {
"id": "11348282",
"handle": "NASA",
"name": "NASA",
"url": "https://x.com/NASA",
"verified": true,
"isBlueVerified": true,
"verifiedType": "Government",
"followers": 92322319,
"following": 115,
"postsCount": 74438,
"protected": false
},
"replyCount": 146,
"repostCount": 212,
"quoteCount": 24,
"likeCount": 1547,
"bookmarkCount": 62,
"viewCount": 362591,
"media": [
{
"type": "video",
"url": "https://video.twimg.com/amplify_video/2111180787802370048/vid/avc1/1080x1920/xLb-yr9GVdddx5sY.mp4?tag=29",
"previewUrl": "https://pbs.twimg.com/amplify_video_thumb/2111180787802370048/img/0nbyTdS0MRg5JqXk.jpg?name=orig",
"width": 1080,
"height": 1920,
"durationMs": 17751
}
],
"links": [
{
"url": "https://www.nasa.gov/maxpower/",
"displayUrl": "nasa.gov/maxpower/",
"shortUrl": "https://t.co/SPHni2YCxO"
}
],
"replies": [
{
"author": {
"id": "[redacted]",
"handle": "[redacted]",
"name": "[redacted]",
"url": "[redacted]",
"verified": true,
"isBlueVerified": true,
"followers": 5649,
"following": 2718,
"postsCount": 57297,
"protected": false
},
"likeCount": 8,
"createdAt": "2026-10-16T19:50:47.000Z"
},
{
"text": "These are beautiful aircraft. Go NASA!",
"author": {
"id": "[redacted]",
"handle": "[redacted]",
"name": "[redacted]",
"url": "[redacted]",
"verified": true,
"isBlueVerified": true,
"followers": 11521,
"following": 89,
"postsCount": 57384,
"protected": false
},
"likeCount": 5,
"createdAt": "2026-10-16T19:59:42.000Z"
},
"… 1 more"
]
}

Latest posts or popular posts, and you know which

X shows visitors who aren't signed in one of two feeds on a profile. For some accounts it is the latest posts and reposts, newest first: Spidra returns about 40, with a cursor for older ones. For many well-known accounts it is X's own pick of about 100 popular posts, with no cursor.

Every profile says which one you got in postsOrder, with a note in plain words. So a popular pick never ends up in your data looking like a timeline.

@NASA profile (real run, trimmed)
"postsOrder": "latest",
"postCount": 40,
"postsNote": "The latest posts and reposts X shows to visitors who aren't signed in, newest first. Use nextCursor (add ?cursor= to the profile link) for older posts.",
"nextCursor": "DAAHCgABHU8t5Zw__9oLAAIAAAATMjEwNzkzOTg4OTk1NDAyOTkxMwgAAwAAAAIAAA",
"nextPageUrl": "https://x.com/NASA?cursor=DAAHCgABHU8t5Zw__9oLAAIAAAATMjEwNzkzOTg4OTk1NDAyOTkxMwgAAwAAAAIAAA"

On October 18, 2026, 7 of 20 well-known accounts came back with their latest posts and 13 with X's popular pick.

Every video file, not a thumbnail

Videos and GIFs come back with every file X serves: each MP4 with its resolution and bitrate, plus the HLS playlist. Pick the quality you need, or keep them all.

Photos come back at full size, with alt text where the author wrote it.

NASA post (real run, trimmed)
"media": [{
"type": "video",
"width": 1080,
"height": 1920,
"durationMs": 17751,
"variants": [
{
"url": "https://video.twimg.com/amplify_video/2111180787802370048/vid/avc1/1080x1920/xLb-yr9GVdddx5sY.mp4?tag=29",
"bitrate": 10368000,
"contentType": "video/mp4"
},
{
"url": "https://video.twimg.com/amplify_video/2111180787802370048/vid/avc1/720x1280/LFXGIL2zQ_o-JycW.mp4?tag=29",
"bitrate": 2176000,
"contentType": "video/mp4"
},
{
"url": "https://video.twimg.com/amplify_video/2111180787802370048/pl/HWvzEhcDZtXVLLp5.m3u8?tag=29&v=aac",
"bitrate": null,
"contentType": "application/x-mpegURL"
}
]
}]

One post, with everything around it

A post is rarely just its text. Spidra returns what X shows a visitor around it, in one call for 1 credit.

  • Long posts in full, and X Articles with their title and full text.
  • The quoted post, the post it replies to and the earlier posts of the thread.
  • Polls with their choices and votes, link cards and community notes with their links.
  • The few top replies X shows visitors who aren't signed in. The full reply list is shown only to signed-in members.

Ask for the columns you want

Describe the answer as a prompt, a JSON schema or both, and it comes back in that shape. The AI reads a compact copy of the data Spidra already read, not the whole page.

Request
const result = await spidra.scrape({
urls: [{ url: "https://x.com/NASA" }],
prompt: "Summarise the account and its 3 most liked posts on the page.",
schema: {
type: "object",
properties: {
followers: {
type: "integer"
},
topPosts: {
type: "array",
items: {
type: "object",
properties: {
text: {
type: "string"
},
likes: {
type: "integer"
}
}
}
}
}
},
});
What came back (real run)
{
"followers": 92322324,
"topPosts": [
{
"text": "While observing the universe, @NASAHubble caught a galaxy cluster smiling for the camera. 😊\n\nThe smile lines are arcs caused by an effect known as gravitational…",
"likes": 20460
},
{
"text": "Join us on Oct. 23 for an update on our plans to return American astronauts to the Moon by 2028. NASA leadership will also give details on the upcoming Artemis…",
"likes": 6289
},
{
"text": "Welcome home!\n\nCrew-12 splashed down in the Pacific on Thursday, Oct. 8. Their 237-day mission aboard the @Space_Station included research into medicine, quantu…",
"likes": 6459
}
]
}

This request cost 7 credits on October 18, 2026: 1 for the page plus the AI tokens. For the data as it is, use JSON output with no prompt for 1 credit.

What teams build with it

X data feeds media tracking, research and account analysis.

Brand and media tracking

Read the accounts and posts that matter to you and track replies, reposts, likes and views as they grow.

Research datasets

Collect posts with their text, language, counts, media and community notes from a list of links or accounts.

Account analysis

Compare followers, posting rate and engagement per post across accounts in your market.

See the use case

How Spidra compares

X has an official paid API and many scrapers. Some cover search and followers, which X shows only to signed-in members. Here is how they differ.

X API (pay per use)Apify (apidojo)Bright DataSpidra
Price$5 per 1,000 post reads, $10 per 1,000 user reads, up to 3M post reads a month$0.40 per 1,000 posts, at least 50 per query$1.50 per 1,000 records, $1.30 on the $499 a month plan1 credit per page: $3.80 down to $1.99 per 1,000. A profile page includes about 40 or 100 posts
Single postsYesNot in tweet-scraper V2Yes, by URLYes, with media, thread and top replies
SearchRecent search (7 days) and full archiveYes, its main inputThrough its discovery scrapersNo, X shows search only to signed-in members
FollowersYes, $10 per 1,000Separate actor, $16 per 1,000 follower eventsSeparate followers scraperNo, signed-in members only
AccessDeveloper app keys, with X's permissionNo X login from youNo X login from youLogged out, no accounts or cookies
Beyond XX onlyThousands of other actorsOther scrapers and datasetsAny website, crawl, search, PDFs, MCP

Choose the X API or Apify if

You need search, followers, full reply threads or a full timeline for any account. The X API is the only route with X's permission.

Choose Spidra if

You want posts and profiles as clean records with every count and media file, only what visitors can see, and X plus any other website through one API.

Competitor prices are as published on their own pages on October 18, 2026 and may have changed. Spidra prices use 1 credit per page on each plan. Sources: X API, Apify, Bright Data.

What to know before you build

We would rather you hear the limits from us than find them in production.

  • Spidra reads X as a visitor who isn't signed in. Search, hashtags, Explore, followers, following, likes, lists, notifications and the media and replies tabs need a signed-in member. Those requests fail straight away and aren't charged.
  • A profile returns the posts X shows visitors: for some accounts the latest posts (about 40, with a cursor for more), for many well-known accounts X's own pick of about 100 popular posts with no cursor. postsOrder says which.
  • A post includes only the few top replies X shows visitors, usually 3.
  • Protected accounts show their posts only to approved followers, and age-restricted posts aren't shown to visitors, so neither is available.
  • Spaces and broadcast pages are read as a general web page, without structured X fields.
  • Posts, profiles and replies are personal data. Handle personal data according to the privacy laws that apply to you.

What it costs

1 credit per page. Pages that can't be delivered are free. Work out your monthly volume below.

Monthly credits
6,000
Fits the Builder plan ($79/mo)

Example: reading 200 profiles a day is about 6,000 credits a month, with about 40 to 100 posts on each. Plain JSON output uses no AI tokens.

PlanPriceX pages a month
Free$0up to 300 (one time)
Starter$19/moup to 5,000
BuilderPopular$79/moup to 25,000
Pro$249/moup to 125,000

Credits are shared across everything Spidra does, so the same plan covers X and any other site.

Related scrapers

Same API key, same credits. See every scraper.

FAQ

Questions, answered

X

Yes. Since February 2026 the X API is pay per use: $5 per 1,000 post reads and $10 per 1,000 user reads, capped at 3 million post reads a month, and it covers search and followers. Spidra reads the public post and profile pages instead, for 1 credit per page, without search or followers.

Send an X link and see what comes back.

Get 300 free credits, no card, and read your first X post or profile from the dashboard or the API.

Spidra is not affiliated with, endorsed by, or sponsored by X Corp. X and Twitter are trademarks of X Corp. Check X's terms of service and the laws that apply to you before you collect data, and use the data responsibly.