Skip to content
ScrapeField

X (Twitter) scraper API

Profiles, posts, replies, reposters, followers, communities and X’s own search, with the field names X’s API v2 uses. No X developer account, and nothing to prepay with X. Blocks handled; nothing for you to unblock.

Endpoints
8
From
3 credits a call
Returns
user, post, community
x.com/bluedoorcoffee/status/1930652241230168143
BBluedoorcoffee@bluedoorcoffee

Everything I learned about this in one minute. #filmphoto

5:15 AM · Jun 11, 2026 · 131.8K Views

19673.4K

Extracted data

  1. 1author.name "Bluedoorcoffee"author.username "bluedoorcoffee"
  2. 2text "Everything I learned about this in one minu…
  3. 3created_at "2026-06-11T05:15:18.000Z"
  4. 4public_metrics.impression_count 131781
  5. 5public_metrics.reply_count 19
  6. 6public_metrics.retweet_count 67
  7. 7public_metrics.like_count 3379
  8. public_metrics.bookmark_count 181
  9. lang "en"
  10. hashtags ["filmphoto"]

Try it now

Every X endpoint, as an MCP tool, as a REST call, or as a question in plain English. Each one runs against the live API in demo mode — no key, no account. For an agent: the X MCP server.

POSThttps://scrapefield.com/mcp
8 tools
Transport
HTTP, JSON-RPC 2.0
Methods
initialize · tools/list · tools/call
Auth
Bearer key (or none for demo mode)
claude mcp add --transport http scrapefield https://scrapefield.com/mcp

What people build with it

Three worked examples, each with the calls it makes and what a run costs — multiplied out from the published price of every call.

01

Hear what people say about a brand

Search the brand’s name once a day, leave out its own posts and the reposts, and rank what is left by views. The posts at the top are the ones people actually saw.

GET x/search× 30390 cr
a month, one search daily390 cr

≈ $0.232 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

const query = '"blue door coffee" -from:bluedoorcoffee since:2026-10-01';
const { data } = await sf('x/search', { query });

const seen = data
  .filter((p) => !p.referenced_tweets.some((r) => r.type === 'retweeted'))
  .map((p) => ({
    url: p.url,
    by: p.author.username,
    views: p.public_metrics.impression_count ?? 0,
  }))
  .sort((a, b) => b.views - a.views);

console.table(seen.slice(0, 10));
02

Size an account by its reach, not its followers

Followers can be bought; views are harder to fake. Read the profile and its newest posts, and compare the median views a post gets with the followers the profile claims.

GET x/profile× 13 cr
GET x/posts× 113 cr
per account16 cr

≈ $0.01 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

const { data: user } = await sf('x/profile', { username });
const { data: posts } = await sf('x/posts', { username });

const median = (xs) => xs.sort((a, b) => a - b)[Math.floor(xs.length / 2)];
const m = posts.map((p) => p.public_metrics);

console.log({
  followers: user.public_metrics.followers_count,
  medianViews: median(m.map((x) => x.impression_count ?? 0)),
  medianLikes: median(m.map((x) => x.like_count ?? 0)),
});
03

Find who carried a post

A post travels on the accounts that repost it. Read who reposted a launch, sort them by followers, and you have the short list of people whose audience it reached.

GET x/retweeters× 565 cr
per post, about 100 reposters65 cr

≈ $0.039 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

const people = [];
let cursor;

do {
  const page = await sf('x/retweeters', { url: launchPost, ...(cursor && { cursor }) });
  people.push(...page.data);
  cursor = page.meta.next_cursor;
} while (cursor && people.length < 100);

const loudest = people
  .map((u) => ({ username: u.username, followers: u.public_metrics.followers_count }))
  .sort((a, b) => (b.followers ?? 0) - (a.followers ?? 0));

Everything that comes back

The complete response behind the X view at the top of this page, from GET /v1/x/post — every field, including the ones that are null. Fields are named after X's API v2, so if you have read those docs you already know them. Every field of x_user, x_post and x_community is documented.

{
  "data": {
    "id": "1930652241230168143",
    "url": "https://x.com/bluedoorcoffee/status/1930652241230168143",
    "text": "Everything I learned about this in one minute. #filmphoto",
    "created_at": "2026-06-11T05:15:18.000Z",
    "lang": "en",
    "author": {
      "id": "408132165273813673",
      "username": "bluedoorcoffee",
      "name": "Bluedoorcoffee",
      "profile_url": "https://x.com/bluedoorcoffee",
      "profile_image_url": "https://cdn.example/x/lzv0Ah-rfBmv.jpg",
      "verified": false
    },
    "conversation_id": "1930652241230168143",
    "referenced_tweets": [],
    "public_metrics": {
      "retweet_count": 67,
      "reply_count": 19,
      "like_count": 3379,
      "quote_count": 26,
      "bookmark_count": 181,
      "impression_count": 131781
    },
    "media": [
      {
        "type": "photo",
        "url": "https://cdn.example/x/media/OXrJYewQLh2uLc.jpg"
      }
    ],
    "hashtags": [
      "filmphoto"
    ],
    "mentions": []
  },
  "meta": {
    "request_id": "req_7f3ac1e94b2d40f8a1c6e5d2",
    "credits_charged": 3,
    "credits_remaining": 74218,
    "cached": false,
    "fetched_at": "2026-09-20T09:12:03Z",
    "next_cursor": null
  }
}

Endpoints and prices

One published credit cost per endpoint, charged per call and refunded automatically when a call fails. See what a credit costs.

Coming from Apify’s Tweet Scraper V2

Tweet Scraper V2 costs $0.40 per 1,000 posts, at least 50 a query; no API on Apify’s free plan. Here, about 20 posts come back a call, so 1,000 cost about $0.51 on our smallest pack and $0.29 on our largest, with no run to start or poll. Its fields, and ours. Apify’s price was read on 9 October 2026; the full comparison has where Apify wins.

Tweet Scraper V2ScrapeField
texttext
createdAtcreated_at, in ISO 8601
likeCountpublic_metrics.like_count
retweetCountpublic_metrics.retweet_count
replyCountpublic_metrics.reply_count
quoteCountpublic_metrics.quote_count
bookmarkCountpublic_metrics.bookmark_count
author.userNameauthor.username
isReplyreferenced_tweets, type replied_to
langlang
urlurl

X, specifically

The questions people ask about this platform before they call it. And how this compares with the platform’s own API: ScrapeField vs the X API.

Do I need an X developer account?
No. You need a key from us, nothing from X, and there is no monthly tier to buy before the first call. You pay per call, at the price on the pricing page.
Are the fields the ones X’s API uses?
Yes, where X’s API v2 has a name for them: username, description, public_metrics with followers_count and like_count, referenced_tweets, conversation_id. A response from us reads like one from X’s own API, without the expansions and field parameters.
Can I use X’s search operators?
Yes. x/search takes the query as X’s own search box does, so from:, to:, since:, until:, lang: and quoted phrases all work. type=user searches for accounts instead of posts.
Why does an account’s posts cost more than a community’s?
The price follows what each call costs us, and the two are made differently. A community’s posts cost 3 credits a call; an account’s newest posts cost 13. Both prices are on the pricing page and in every response.
Does it need my X login?
No. We never take a login, a cookie or a session for any platform, at any price.

The same key, four more platforms

One key, one balance and one invoice across all five — and each platform’s data in its own shape, because they are five different systems.

Your first X call, in a minute

Get a key