X (Twitter) Profile Scraper | $0.00015/Profile | Pay-Per-Result avatar

X (Twitter) Profile Scraper | $0.00015/Profile | Pay-Per-Result

Pricing

from $0.00015 / profiles

Go to Apify Store
X (Twitter) Profile Scraper | $0.00015/Profile | Pay-Per-Result

X (Twitter) Profile Scraper | $0.00015/Profile | Pay-Per-Result

Twitter profile viewer & scraper. See X profiles in bulk by handle, ID or URL, from $0.00015 per delivered row. Get the emails, phones & links each account publishes, plus posts, replies & followers. No X login. World's fastest & cheapest X (Twitter) scraper service. Not affiliated with X Corp.

Pricing

from $0.00015 / profiles

Rating

5.0

(2)

Developer

Xquik

Xquik

Maintained by Community

Actor stats

1

Bookmarked

248

Total users

53

Monthly active users

3 hours ago

Last modified

Share

English · Español · Türkçe · 简体中文 · 日本語 · 한국어 · Deutsch · Français · Italiano

Framer connects Xquik MCP to coding agents
Watch how Framer uses Xquik scrapers with Claude Code, Codex, Cursor & more, from 6:07.

Xquik is the world's fastest & cheapest X (Twitter) scraper service with the most complete X data. Xquik's X Profile Scraper collects profiles, posts, replies, media & followers for any handle. Most other Apify Actors charge before filtering or deduplicating. Xquik charges only for delivered, unique, filter-matching results.

Look up Twitter accounts in bulk & read profiles without an X account. Scrape X profiles, posts, replies, media & followers from handles, IDs or URLs. You pay $0.00015 per delivered row, & Apify bills platform usage separately. You need no X API key or login.

Xquik is an independent third-party service. Not affiliated with X Corp. "Twitter" and "X" are trademarks of X Corp.

What does X Profile Scraper do?

Xquik's X Profile Scraper returns public X (Twitter) profiles from handles, numeric user IDs or profile URLs. Each profile can add its posts, replies, media, Highlights, followers, following & verified followers. It also translates bios & checks who broadcasts live now.

Key features

  • Read many profiles in 1 run from handles, IDs or URLs.
  • Add posts, replies, media, Highlights, followers, following or verified followers as separate rows.
  • Translate each bio into a language code with translateBioTo.
  • Check whether each profile broadcasts live now with checkLiveNow.
  • Filter posts by date, language, media & engagement.
  • Filter profiles by audience size, account age & verification.
  • Filters & duplicate removal run before billing.
  • Runs keep delivered rows & progress when Apify restarts them.

Use cases

  • Enrich lead lists with bios, websites, locations & audience size.
  • Compare competitor accounts by followers, posts & verification.
  • Vet creators by audience, account age & engagement.
  • Archive an account's posts, media & Highlights.
  • Map an account's network through its followers & following.
  • Watch creators & brands for live broadcasts.
  • Read bios from other markets in your own language.

What data can X Profile Scraper extract?

Profile rows use resultType: "profile". These are the main fields.

FieldDescription
idNumeric user ID
usernameHandle without @
nameDisplay name
descriptionBio text
urlWebsite on profile rows
locationLocation the owner typed
emailFirst email the profile publishes
contactInfoEmails, phones & links the profile publishes
followersFollower count
followingFollowing count
statusesCountPost count
mediaCountMedia post count
favouritesCountLikes the account gave
listedCountPublic Lists that include the account
createdAtAccount creation time
verifiedWhether X reports verification
isBlueVerifiedWhether the account has X Blue verification
verifiedTypeVerification category, such as Government
profilePictureProfile image URL at 48 px
profilePictureOriginalThe same image at full size, to download
coverPictureBanner image URL
pinnedTweetIdsPinned post IDs
professionalProfessional category & type
accountBasedInX's best-effort country or region label
connectedViaHow the account first connected to X
usernameChangesHow often the handle changed & when it last did
birthdateBirthday parts the account made public
subscribersCountSubscriber count, when X sends it
tipJarPublic tipping links
protectedWhether the account protects its posts
redirectsToUsernameHandle X redirects the profile to
unavailableWhether the account is unavailable
sourceTargetThe handle, ID or URL you entered

The dataset schema documents every other field, such as identityVerification, isAutomated, automatedBy, withheldInCountries & verificationReason.

Optional rows keep the Xquik REST response shape.

resultTypeTurned on byOne row per
profileTweetincludeTweetsPost
profileReplyincludeRepliesPost or reply
profileMediaincludeMediaMedia post
profileHighlightincludeHighlightsHighlighted post
profileFollowerincludeFollowersFollower
profileFollowingincludeFollowingFollowed account
profileVerifiedFollowerincludeVerifiedFollowersVerified follower
profileBioTranslationtranslateBioToTranslated bio
profileLivecheckLiveNowChecked profile

Rows never include viewer-only state, such as whether you follow or block an account.

How do I use X Profile Scraper to scrape profile data?

New to Apify? Create a free account first. The free plan needs no credit card & gives $5 to spend each month. At $0.00015 per row, $5 pays for up to 33,000 rows before platform usage. Then come back here & press Try for free.

Follow these steps in Apify Console.

  1. Open a task example or the Input tab.
  2. Add handles to twitterHandles, URLs to startUrls or IDs to userIds.
  3. Turn on the resources you need, such as includeTweets.
  4. Set maxItems & any filters, then click Start.
  5. Export the dataset as JSON, CSV, Excel or HTML.

Each recipe below is a complete input.

Scrape many profiles

{ "twitterHandles": ["nasa", "OpenAI", "apify"], "maxItems": 100 }

Each handle returns 1 profile row. Handles work with or without @.

Paste profile URLs or IDs

startUrls takes each URL as a plain string or as a { "url": "..." } object. userIds takes numeric X user IDs.

{
"startUrls": ["https://x.com/nasa", { "url": "https://x.com/OpenAI" }],
"userIds": ["11348282"],
"maxItems": 100
}

The run reads a repeated handle once.

Add posts, replies & media

{
"twitterHandles": ["nasa"],
"includeTweets": true,
"includeMedia": true,
"sinceDate": "2026-01-01",
"maxItems": 500
}

includeTweets follows the profile's Posts tab. includeReplies follows its With Replies tab. includeMedia follows its Media tab. includeHighlights adds the posts on its Highlights tab, in X's order. A profile without highlights adds no rows.

{
"twitterHandles": ["nasa"],
"includeTweets": true,
"minLikes": 1000,
"mediaType": "videos",
"maxItems": 200
}

Post filters apply to optional post rows. Filtered rows never reach the dataset, so you never pay for them.

Export followers & following

{
"twitterHandles": ["apify"],
"includeFollowers": true,
"minFollowers": 1000,
"verifiedOnly": true,
"maxItems": 1000
}

includeFollowers, includeFollowing & includeVerifiedFollowers add 1 profile row per account. Profile filters apply to these rows & to the main profiles.

Translate bios

{ "twitterHandles": ["nasa", "SpaceX"], "translateBioTo": "es" }

Each translation is 1 profileBioTranslation row with text, language & sourceLanguage. A profile without a bio adds no row & no charge.

Check who is live now

{ "twitterHandles": ["nasa", "SpaceX"], "checkLiveNow": true }

Each check is 1 profileLive row with live, userId, userName & broadcast. broadcast holds the profile's latest broadcast, live or ended, or null. A missing profile adds no row.

Task examples

Choose from 50 public tasks. Each has a bounded input & a matching dataset view. Edit a task before you run it.

How much does it cost to scrape X profiles?

Xquik's X Profile Scraper costs $0.00015 per delivered row on every Apify plan. Apify bills your platform usage separately. Xquik applies one charge per delivered data row. Diagnostics are free in the diagnostics output.

For more volume, pick an Apify plan with more prepaid usage.

  • You need no Xquik subscription.
  • You pay no separate start, profile or query fee.
  • Filters & deduplication run before billing. You never pay for filtered or duplicate rows.
  • A profile without a bio adds no translation charge.
  • A missing profile adds no live check charge.
  • Apify maximum-total-charge settings cap delivered rows.

A run that hits a problem, or a large run, also writes a run-report record. A small run that goes well skips it & saves Apify usage. Turn on alwaysSaveRunRecords to write it on every run.

To cap what a run can spend, see Run options.

Empty, partial & stopped runs

Xquik's X Profile Scraper explains empty, partial & stopped runs for free. The run status says why the run stopped. It also counts charged results & targets read.

Empty results

An empty run's status says to check your targets & filters. Filtered rows never use up your result limit. A run that reads every target & gets no row back writes no record. Its status says why & what to change.

X has shown the posts an account liked only to that account since 2024. includeLikes returns no profileLike rows for other accounts.

Partial runs

Interrupted extraction writes a free partial diagnostic. Delivered rows stay in the dataset. Read availableResults, failedTargets, retryable & nextAction before you retry. A successful Actor exit confirms delivery, not complete extraction.

Stop causes

The run status names every cause of an early stop. stopCauses lists each cause with its own message, retryable & nextAction. The causes are target_not_found, target_suspended, target_failed, pagination_safety_limit & deadline_reached. target_suspended names the accounts X suspended. A missing or suspended target joins the list only when another cause stopped the run. The run is retryable when any cause is.

Input

The Input tab lists every option. Give at least 1 of twitterHandles, startUrls or userIds. Every other field is optional.

FieldWhat it does
twitterHandlesHandles, with or without @
startUrlsProfile URLs on x.com or twitter.com
userIdsNumeric X user IDs
maxItemsCap on delivered rows across the whole run
maxItemsPerTargetCap on rows for each profile or resource
includeTweetsAdd the Posts tab
includeRepliesAdd the With Replies tab
includeMediaAdd the Media tab
includeHighlightsAdd the Highlights tab
includeLikesAdd liked posts, which X hides from other accounts
includeFollowersAdd followers
includeFollowingAdd followed accounts
includeVerifiedFollowersAdd verified followers
translateBioToTranslate each bio into a language code, such as es
checkLiveNowCheck whether each profile broadcasts live now
sinceDate, untilDateKeep posts inside a date window
languageKeep posts in 1 language code
mediaTypeKeep posts with images, videos, GIFs, links or none
minViews, minLikesKeep posts above a view or like count
minReplies, minRetweetsKeep posts above a reply or repost count
nativeRetweetsKeep only native reposts
verifiedOnlyKeep verified authors or profiles
blueVerifiedOnlyKeep authors or profiles X marks as blue verified
verifiedTypeKeep profiles with 1 verification type
minFollowers, maxFollowersKeep profiles inside an audience range
minAccountAgeDaysKeep profiles at least this many days old
minFollowing, maxFollowingKeep profiles inside a following range
minStatuses, maxStatusesKeep profiles inside a post count range
hasWebsite, hasLocationKeep profiles that list a website or a location
hasEmailKeep profiles that publish an email
businessEmailOnlyKeep profiles with an email outside free mail
emailDomainsKeep profiles with an email at these domains
bioContainsKeep profiles whose bio has 1 of these words
locationContainsKeep profiles whose location has this text
usernameContainsKeep profiles whose username has this text
dedupeAcrossTargetsDrop rows repeated across profiles before billing

Migrate from another profile Actor

Paste the input you already use. Xquik's X Profile Scraper reads these field names of other profile Actors. Each line names their fields, then the field they map to.

  • profiles, userNames, usernames, handles, screenNames map to twitterHandles.
  • urls, profileUrls map to startUrls.
  • maxProfiles, maxResults map to maxItems.
  • shouldScrapeFollowers, shouldScrapeFollowings map to includeFollowers, includeFollowing.
  • requireEmail maps to hasEmail.
  • requireWebsite maps to hasWebsite. It keeps a profile with any link in its website field, & the run status says so.
  • filterByBlueVerified maps to blueVerifiedOnly. false stops the run before any read or charge.
  • bioKeywords maps to bioContains. Any 1 of its terms may match.
  • locationKeywords with 1 value maps to locationContains. More values stop the run before any read or charge.
  • emailDomains as a list maps to emailDomains.
  • outputEmail, resolveShortLinks need no field. Every row carries its emails & X's full links.
  • findEmails, extractEmails need no field. Rows carry the emails a profile publishes on X. The run status says the Actor reads no linked site.
  • validateEmails needs no field. The run status says emails come as published, since the Actor checks no mailbox.

category set to user_info changes nothing. A category that is another Actor's job, such as tweets or followers, stops the run. It reads & charges nothing. The message names the Actor to use. When you set an alias & its canonical field, the canonical value wins. The run log names the alias that lost.

Pick the right inputs

  • For a profile card alone, give handles & leave every include option off.
  • For an account archive, turn on includeTweets, includeMedia & includeHighlights, & set sinceDate.
  • For top content, add minLikes or minViews to includeTweets.
  • For lead lists, turn on includeFollowers with minFollowers & minAccountAgeDays.
  • For audience overlap, give 2 handles, turn on includeFollowers & set dedupeAcrossTargets: false. A shared follower then appears under each handle.

Output

Each row is a JSON object. The dataset schema gives each field a title & description, so AI agents can read rows without guessing.

Examples use sample values. Results reflect live data. A profile row looks like this.

{
"resultType": "profile",
"sourceTarget": "sample_user",
"id": "1234567890",
"username": "sample_user",
"name": "Sample User",
"description": "Building tools for researchers.",
"url": "https://example.com",
"location": "Lisbon",
"followers": 1200,
"following": 310,
"statusesCount": 4200,
"verified": false,
"createdAt": "Tue Mar 21 20:50:14 +0000 2017",
"accountBasedInUnavailable": true
}

X infers accountBasedIn from aggregated account-access IPs. The label does not state nationality, residence, identity, signup, post or exact location. observedAt records retrieval time. accountBasedIn is null when X shows no label. When X withholds it, the row has accountBasedInUnavailable: true instead.

Export the dataset as JSON, CSV, Excel or HTML.

Output columns

8 inputs shape each row after the run reads it. They run no code & change no price.

FieldWhat it does
fieldsKeep only these fields, in the order & spelling you write
omitFieldsDrop these fields & keep the rest
renameFieldsMove a field to a column with a new name
flattenTurn each nested object into top-level columns
fillMissingFieldsFill a kept field a row lacks with null. On by default
joinFieldsTurn each of these lists into 1 text value
joinSeparatorText between joined items. The default is a comma & a space
constantFieldsAdd a column with the same text on every row
  • Use a dot for a field inside an object, such as accountBasedIn.value. Case & underscores do not matter.
  • Every row keeps its id.
  • With fields, a field a row lacks arrives as null. Every row then has the same columns.
  • A wrong field name stops the run before it reads & charges nothing.
  • If names cannot be checked, the run reads on & lists unseen names last.
  • The run ignores a map function or jq filter written for another Actor.

Name a computed column in fields or renameFields to add it.

ColumnFormula
totalEngagementlikeCount + replyCount + retweetCount + quoteCount. A missing count adds 0
engagementRatetotalEngagement × 100 ÷ the author's followers, to 4 decimals
engagementPerViewtotalEngagement × 100 ÷ viewCount, to 4 decimals

totalEngagement is null for a row without those counts. A rate is null when its divisor is missing or 0.

Run options

  • Set Apify's max total charge to cap run cost. Leave maxItems high to get the most rows that budget allows.
  • Set maxTotalChargeUsd in the Apify API, or Max cost per run in Console.
  • Put all your profiles in 1 run. Each run pays Apify the same start cost.
  • maxConcurrency sets how many profiles run at once. The default is the fastest safe setting.
  • Use Xquik account monitors for 1-second checks & signed webhooks. Active monitors check every second.

Select latest for every run to get every published fix. Saved tasks & schedules keep their own build choice, so keep it on latest.

Every Xquik Actor shares the same extraction engine, filter-first billing & diagnostics. Pick the one that matches the data you need.

  • X Tweet Scraper scrapes tweets from searches, profile timelines, Lists & tweet IDs with 50+ filters & flat exports. Use it when you need tweet data without analysis. From $0.00015 per row.
  • X Reply Scraper scrapes replies, comments & whole conversations under posts with 25+ filters. Use it when you need the discussion beneath tweets. From $0.00015 per row.
  • X Engagement Scraper scrapes replies, quotes, retweeters & threads for post URLs or IDs in bulk. Use it when you measure who engaged with posts. From $0.00015 per row.
  • X Quote Tweets Scraper scrapes the quote tweets of posts with text, media, counts, authors & 11 filters. Use it when you study who quoted posts & what they said. From $0.00015 per tweet.
  • X Follower Scraper scrapes followers, following, List members, subscribers & Community members as profile rows. Use it when you need audience or member lists. From $0.00015 per profile.
  • X User Search Scraper searches users by handle, bio & location with follower, verification, age & location filters. Use it when you build account lists from search. From $0.00015 per profile.
  • X Account Location Scraper checks where accounts are based with X's "Account based in" label, "connected via" & username changes. Use it when you vet where accounts are based. From $0.00015 per account.
  • X Email Scraper gets the emails, phones & links accounts publish on their profiles, from handles, followers or user searches. Use it when you need the emails profiles publish. From $0.00015 per profile.
  • X List Scraper scrapes List posts, members & followers from List URLs or IDs. Use it when a curated List defines your sources. From $0.00015 per row.
  • X Community Scraper scrapes Community info, posts, searches, members & moderators. Use it when your sources are X Communities. From $0.00015 per row.
  • X Space Scraper finds Spaces by keyword & reads their titles, states, times, listener counts, hosts & speakers. It also reads broadcasts by URL or ID. Use it when you track live audio & video on X. From $0.00015 per Space or broadcast.
  • X Trends Scraper scrapes real-time trends by location with rank, volume, query & WOEID. Use it when you track what is trending where. From $0.00015 per trend.
  • X Jobs Scraper scrapes X job listings by keyword, place, workplace, seniority & company, with salaries & apply links. Use it when you collect job openings posted on X. From $0.00015 per job.
  • X Article Scraper scrapes long-form X Articles as Markdown & text with covers, authors, dates & metrics. Use it when you need article bodies, not tweets. From $0.00015 per article.
  • X Media Downloader extracts or stores photos, videos & GIFs from posts or profiles with MP4 & metadata options. Use it when you need the media files themselves. From $0.00015 per media row.
  • X (Twitter) Brand Monitoring with AI Analysis tracks brand mentions with AI relevance, sentiment & customer-experience answers & compares runs. Use it when you watch a brand over time. From $0.0003 per analyzed tweet.
  • X Tweet Sentiment Analysis with AI labels attitude, intensity & sarcasm probability for every tweet with AI. Use it when you need general sentiment on any topic. From $0.0003 per analyzed tweet.
  • X (Twitter) Stock & Crypto AI Trading Signals labels bullish, bearish, neutral or mixed stance, content type, conviction & asset relevance with AI. Use it when you follow stocks, crypto or trading talk. From $0.0003 per analyzed tweet.
  • X (Twitter) News Monitor with AI Analysis labels news posts by format, source attribution & topic relevance with AI. Use it when you separate reporting from commentary. From $0.0003 per analyzed tweet.
  • X Tweet Classifier with AI Analysis answers your own category, score & yes/no questions for every tweet with AI. Use it when the preset analyses do not fit your labels. From $0.0003 per analyzed tweet.
  • X Tweet Viral Score Analyzer with AI estimates a Viral Score from 0 to 100 & a verdict for every tweet from 8 AI trait answers. Use it when you study why tweets spread or flop. From $0.0003 per analyzed tweet.

FAQ

Answers to common questions, then where to get help.

Do I need an X API key or login?

No. Xquik's X Profile Scraper needs no X API key, login or credentials.

How many profiles can I scrape in 1 run?

As many as you list. maxItems & your Apify spend limit cap the rows.

Can I export X profiles to CSV or Excel?

Yes. Export the dataset as JSON, CSV, Excel or HTML from the Storage tab.

Can I scrape a Twitter user's followers?

Yes. Turn on includeFollowers, includeFollowing or includeVerifiedFollowers. Each account is 1 row.

Does it get a profile's website & location?

Yes. url holds the website & location holds the text the owner typed. Set hasWebsite & hasLocation to keep only profiles that list them.

Can I scrape protected accounts?

You get the public profile row, with protected: true. X shows a protected account's posts & followers only to its approved followers.

How do I know if an account is live now?

Set checkLiveNow: true. Each profile gets a profileLive row with live & its latest broadcast.

Can it translate bios?

Yes. Set translateBioTo to a language code, such as es or pt-br. A profile without a bio adds no row.

Why does includeLikes return nothing?

X has shown the posts an account liked only to that account since 2024. Other accounts, this Actor included, can't read them.

Xquik's X Profile Scraper requests public X fields. Results can contain personal data. Confirm a lawful purpose & follow applicable privacy rules. Ask qualified counsel when uncertain.

Why did my run return no results?

Read the run status first. An empty run's status says to check your targets & filters. The free diagnostics output appears when something needs attention. Its stopCauses gives each cause a nextAction to follow. The run lists each input it cannot read & says how to fix it.

Can I use the API, schedules & integrations?

Yes. Choose from 50 public tasks or the Xquik REST API. The API tab has Python, JavaScript & cURL examples. Apify schedules run Xquik's X Profile Scraper on a cron. Agents use Apify MCP. Use latest unless you need an older build.

Can I get a custom solution?

Yes. Describe what you need in the Issues tab. Xquik also offers a dashboard, a REST API, an MCP server & webhooks. Find Xquik's website on its Apify profile.

Where do I get help?

Open an issue in the Issues tab with the run ID. Free diagnostics in the key-value store explain runs that need attention. A run that gets no row back says why in its status.