X (Twitter) Profile Scraper | $1.70/1K | 100 Posts Included avatar

X (Twitter) Profile Scraper | $1.70/1K | 100 Posts Included

Pricing

from $1.35 / 1,000 profile scrapeds

Go to Apify Store
X (Twitter) Profile Scraper | $1.70/1K | 100 Posts Included

X (Twitter) Profile Scraper | $1.70/1K | 100 Posts Included

Scrape X (Twitter) profiles and their recent tweets from handles or URLs. Bio, followers, verification, links, plus tweet text, likes, retweets, replies and views. $1.70 per 1,000 profiles, first 100 posts of each included. By FeedMiner.

Pricing

from $1.35 / 1,000 profile scrapeds

Rating

0.0

(0)

Developer

FeedMiner

FeedMiner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

💸 $1.70 per 1,000 profiles, with the first 100 posts of each included. Only deep history bills beyond that.

🛡️ Dead handles never kill a run. Suspended, renamed and deleted accounts come back as rows marked not_found or suspended instead of failing the job.

Built for speed. A profile takes about a second, whether you ask for one or a thousand.

FeedMiner · X (Twitter) suite • Posts, profiles, audiences, media, trends
X Profile Scraper
➤ You are here
X Tweet Scraper
Search, threads, lists, communities · $0.12/1K tweets

Copy to your AI assistant

feedminer/x-profile-scraper on Apify. Scrapes X (Twitter) profiles from handles or profile URLs. One row per profile with bio, follower and following counts, verification, join date and their posts nested in tweets[], as deep as X paginates, around 1,100 on a large account, each with likes, reposts, replies, quotes, bookmarks and views. Call ApifyClient("TOKEN").actor("feedminer/x-profile-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Requires handles (string[]); includeTweets (bool), maxTweetsPerProfile (int, first 100 included in the profile price) and onlyPostsNewerThan (YYYY-MM-DD) control the posts. Full spec: GET https://api.apify.com/v2/acts/feedminer~x-profile-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations

How to scrape X (Twitter) profiles

Paste handles or profile URLs, press Start. jack, @jack and https://x.com/jack all work, mixed lists too, duplicates removed for you.

Basic: check one account

{ "handles": ["nasa"], "includeTweets": false }

Profile only, no posts. The cheapest and fastest way to get follower counts.

Enrich a prospect list

{ "handles": ["stripe", "vercel", "supabase", "linear"], "includeTweets": false }

Drop a column of handles from your CRM in, get bios, links and audience sizes back.

Benchmark competitors on a month of posts

{
"handles": ["openai", "anthropicai", "googledeepmind"],
"maxTweetsPerProfile": 3200,
"onlyPostsNewerThan": "2026-06-01",
"excludeRetweets": true
}

The run stops at your date instead of walking the whole timeline, so it stays fast and cheap.

Full history of one account

{ "handles": ["nasa"], "maxTweetsPerProfile": 3200 }

As deep as X paginates, newest first, in one dataset. Measured on a large account: around 1,100 posts. X's documented ceiling for any tool, its own API included, is 3,200.


Input parameters

ParameterTypeDefaultDescription
handlesarrayrequiredHandles or profile URLs, any format, mixed
includeTweetsbooleantrueAlso scrape posts. Off is faster and ideal for pure audience data
maxTweetsPerProfileinteger20Posts per profile, newest first. Ask for 3,200 and the run goes as deep as X paginates
onlyPostsNewerThanstringStop at this date, for example 2026-01-31
excludeRetweetsbooleanfalseKeep only what the account actually wrote
debugModebooleanfalseExtra logging for troubleshooting

What data can you extract from an X (Twitter) profile?

FieldTypeDescription
handle, name, userIdstringHandle, display name, and the stable numeric ID that survives renames
bio, location, websitestringProfile content, website unwrapped to its real destination
followers, followingintegerAudience counts
tweetsCount, likesCount, listedCount, mediaCountintegerActivity counts
verified, blueVerified, protectedbooleanBadges and privacy
accountTypestringpersonal, business, or the creator category
profileImage, bannerImagestringAvatar at full resolution, header image
createdAtstringJoin date, ISO format
pinnedTweetIdsarrayWhat the account chose to pin
statusstringok, not_found, suspended, or error
tweetsarrayThe posts, nested inside their author

Each nested post carries: text, date, likes, retweets, replies, quotes, bookmarks, views, media with playable MP4 links, hashtags, mentions, unwrapped links, language, and type flags (isRetweet, isReply, isQuote, isPinned).

Example row

{
"handle": "openai",
"name": "OpenAI",
"userId": "4398626122",
"url": "https://x.com/openai",
"bio": "OpenAI's mission is to ensure that artificial general intelligence benefits all of humanity.",
"website": "https://openai.com",
"followers": 5030803,
"following": 4,
"tweetsCount": 1994,
"listedCount": 39051,
"verified": false,
"blueVerified": true,
"accountType": "business",
"createdAt": "2015-12-06T22:51:08Z",
"pinnedTweetIds": ["2077446718728425686"],
"status": "ok",
"tweets": [
{
"id": "2077446718728425686",
"url": "https://x.com/openai/status/2077446718728425686",
"text": "Introducing GPT-Red\n\nAn internal automated red teamer on a mission to break our own models.",
"createdAt": "2026-07-15T17:34:29Z",
"likes": 7959,
"retweets": 751,
"replies": 402,
"quotes": 118,
"bookmarks": 1204,
"views": 1437188,
"isPinned": true,
"authorHandle": "openai"
}
]
}

Pricing: Pay Per Event (PPE)

EventPricePer 1,000
Profile scraped, first 100 posts included$0.0017$1.70
Each post beyond those 100$0.00012$0.12
Run start$0.002

A run with the default 20 posts per profile only ever pays the profile price plus the start. Only deep history runs touch the per-post line. The profile and post prices step down on their own for the larger Apify plans, to $1.50 and then $1.35 per 1,000 profiles.

RunCost
Vet an influencer on their last 100 postsunder half a cent
Benchmark 4 competitors on a month of postsabout 3 cents
One account's whole available timeline, around 1,100 posts$0.13
A daily 10 account monitor, for a whole month$0.57
Enrich 1,000 handles with audience data$1.70

For comparison, the market leader charges $16 per 1,000 profiles with 40 posts included, then $0.40 per 1,000 posts beyond. The same profile costs 9 times less here and brings 2.5 times more posts with it.

Free tier

The Apify free plan includes $5 of usage every month, which is almost 3,000 profiles here. No card required.


Advanced usage

Track follower growth over time

Schedule a daily run with includeTweets off and append the dataset to a sheet. Each run stamps scrapedAt, so a simple line chart gives follower growth per competitor with no extra tooling.

Stop at a date instead of paying for history you throw away

Set onlyPostsNewerThan and the run stops there rather than pulling everything and filtering afterwards. Cheaper and faster.

Keep engagement averages honest

Some accounts are more than half reposts. excludeRetweets: true keeps only what the account wrote. And when you do keep reposts, filter on isRetweet before averaging: a repost's likes live on the original, so the repost row shows 0.

Use the right join key

userId, not handle. People rename their accounts and the handle follows them; the numeric ID never changes.

Built to survive X changes

X reshapes its site constantly, which is why so many X scrapers go dark for days. This one is built to absorb those changes without a pause, so a run keeps returning profiles instead of an empty dataset.


Integrate profiles into your stack

Results flow through the Apify API into Python, JavaScript, Google Sheets, Make, Zapier, n8n or Slack. Runs can be scheduled daily, monitored and chained with other Actors.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("feedminer/x-profile-scraper").call(run_input={
"handles": ["jack", "openai", "nasa"],
"includeTweets": True,
"maxTweetsPerProfile": 50,
})
for profile in client.dataset(run["defaultDatasetId"]).iterate_items():
tweets = profile.get("tweets", [])
avg_views = sum(t["views"] for t in tweets) / len(tweets) if tweets else 0
print(f"@{profile['handle']:15} {profile['followers']:>10,} followers {avg_views:>10,.0f} avg views")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('feedminer/x-profile-scraper').call({
handles: ['jack', 'https://x.com/openai'],
maxTweetsPerProfile: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const profile of items) {
const best = (profile.tweets ?? []).sort((a, b) => b.views - a.views)[0];
if (best) console.log(`@${profile.handle}: ${best.views.toLocaleString()} views`);
}

Performance

MeasureValue
SpeedAbout one second per profile
Posts per profileAs deep as X paginates, around 1,100 measured on a large account. X's own ceiling is 3,200
Dead handlesReturned as rows marked not_found or suspended, the run keeps going
Partial resultsKept and delivered when a limit is reached, never discarded

FAQ

Do I need an X account, a login, or an API key? No. Paste handles and press Start. You never connect an account of your own.

How many posts can I get per profile? Up to 3,200, as deep as X lets anyone go on a timeline, including the official API. The default is 20 to keep quick runs cheap, and the first 100 are included in the profile price.

Can I get follower lists or the replies an account wrote? Not with this Actor: it works from handles and returns profiles with their posts. You get every count, and posts that are replies are flagged isReply.

What happens with private, suspended or deleted accounts? They come back as rows with a status of suspended or not_found, and the run finishes normally. Private accounts return their public profile without posts.

Does it work for accounts in other languages? Yes. Bios and posts come back in the original language and script, emoji intact, with a detected lang on each post.

Are view counts included? Yes, on every post that has them. Posts from before X published view counts return 0.

Can I search X by keyword with this Actor? Not with this one, it works from handles and URLs you already have. Keyword search is what the FeedMiner Tweet Scraper does.


Support

  • Found an account that does not scrape correctly, or need a field that is missing? Open the Issues tab on this Actor's page with the handle and the field. Issues are read daily.
  • Need a custom variant of this scraper for your pipeline? Ask in the Issues tab, FeedMiner builds on request.

This scraper collects only public data, the same information any visitor sees on x.com without logging in. Profiles can contain personal data: processing information about people in the EU, the UK or California requires a lawful basis under GDPR or CCPA, and deletion and access requests must be honoured. Use the data for research, analytics and business intelligence, not for spam lists or harassment.


FeedMiner · Fast, honestly priced scrapers, kept alive when platforms change.

X Tweet Scraper · X Profile Scraper · All FeedMiner Actors