X Twitter Profile Scraper - Public Profile Details
Pricing
from $7.00 / 1,000 x/twitter profile scrapeds
X Twitter Profile Scraper - Public Profile Details
Scrape public X/Twitter profiles with bio, follower counts, verification, websites, images, and optional top tweets. MCP-ready. $0.007/profile.
Pricing
from $7.00 / 1,000 x/twitter profile scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
9
Monthly active users
19 days ago
Last modified
Categories
Share
This Apify Actor is for users who need public X/Twitter profile data for one or more accounts. It accepts handles or profile URLs, and it emits one dataset record per public profile, plus optional public top-tweet rows when requested. The main profile fields include username, display name, bio, follower and following counts, verification flags, website, avatar, banner, and account context, with outcome-ready rows that are easy to filter, store, or pass to downstream AI or automation workflows. It is usable through Apify MCP and through the Apify API.
Best fit and connected workflows
This Actor fits well when your workflow starts with a list of public X/Twitter accounts and you want structured profile enrichment.
Common routing patterns include:
- Creator and influencer research from handles or profile links
- Competitor or brand account tracking from known usernames
- Sales, recruiting, and partnerships enrichment from account lists
- Social media analysis where profile identity and audience metrics matter
- AI agents that need compact profile JSON with optional public tweet context
When your workflow needs profile records first, this Actor provides a focused starting point. When you also want public tweet examples for context, enable includeTweets and use the same dataset stream for both profile and tweet rows.
Input
Provide 1 to 100 public profiles as handles or URLs.
| Field | Type | Required | Description |
|---|---|---|---|
profiles | array of strings | Yes | Public X/Twitter handles or profile URLs. Examples include openai, @levelsio, and https://x.com/apify. This is the profile input field, not a tweet search field. |
includeTweets | boolean | No | Adds public top-tweet rows for each profile when enabled. Defaults to false. |
maxTweetsPerProfile | integer | No | Caps optional tweet rows per profile when includeTweets is enabled. Accepted range: 0 to 100. Defaults to 10 with tweets enabled and 0 otherwise. |
providerOrder | string | No | Provider preference for testing or fallback checks. Values: auto, scrapecreators-first, sociavault-first. Defaults to auto. |
dedupeProfiles | boolean | No | Removes duplicate profile rows when the same account appears more than once. Defaults to true. |
includeRaw | boolean | No | Adds the raw provider payload to each dataset item for debugging or provider parity checks. Defaults to false. |
Focused input example
{"profiles": ["openai", "@apify", "https://x.com/levelsio"],"includeTweets": false,"maxTweetsPerProfile": 10,"providerOrder": "auto","dedupeProfiles": true,"includeRaw": false}
Output
The dataset contains profile rows always, and tweet rows only when includeTweets is enabled. Records include the provider name and scrape timestamp, which makes it easy to trace where each row came from and when it was emitted.
| Field | Type | Description |
|---|---|---|
recordType | string | Record family emitted by the Actor: profile or tweet. |
inputProfile | string | The original handle or URL from the input that produced the record. |
userId | string or null | Numeric X/Twitter user ID when returned. |
username | string | Canonical handle without the @ symbol. |
name | string or null | Public display name. |
bio | string or null | Public profile biography text. |
profileUrl | string | Canonical x.com profile URL. |
location | string or null | Public free-text location. |
websiteUrl | string or null | Expanded public website URL. |
avatarUrl | string or null | Public profile image URL. |
bannerUrl | string or null | Public profile banner image URL. |
isVerified | boolean or null | Legacy verification state when available. |
isBlueVerified | boolean or null | Blue verification state when available. |
isProtected | boolean or null | Protected state when available. |
followersCount | integer or null | Public follower count. |
followingCount | integer or null | Public following count. |
tweetCount | integer or null | Public tweet count reported by X. |
mediaCount | integer or null | Public media post count reported by X. |
listedCount | integer or null | Number of public lists containing the profile when returned. |
likesCount | integer or null | Public likes or favourites count when returned. |
accountCreatedAt | string or null | ISO timestamp of account creation when available. |
pinnedTweetIds | array of strings | Pinned tweet IDs visible on the profile when returned. |
businessLabel | string or null | Affiliated organization or business label when exposed by X. |
tweetId | string or null | Tweet ID for optional tweet rows. |
tweetUrl | string or null | Canonical status URL for optional tweet rows. |
text | string or null | Full text for optional public top-tweet rows. |
createdAt | string or null | ISO timestamp for optional tweet rows. |
lang | string or null | Tweet language code when returned. |
isQuote | boolean or null | Whether the optional tweet row is a quote tweet. |
replyCount | integer or null | Reply count for optional tweet rows. |
repostCount | integer or null | Repost or retweet count for optional tweet rows. |
quoteCount | integer or null | Quote count for optional tweet rows. |
likeCount | integer or null | Like count for optional tweet rows. |
viewCount | integer or null | View count for optional tweet rows. |
bookmarkCount | integer or null | Bookmark count for optional tweet rows. |
hashtags | array of strings | Hashtags extracted from optional tweet rows. |
mentions | array of strings | Mentioned usernames extracted from optional tweet rows. |
urls | array of strings | Expanded URLs extracted from profile or optional tweet rows. |
mediaUrls | array of strings | Media URLs extracted from optional tweet rows. |
provider | string | Provider that returned the record: scrapecreators or sociavault. |
scrapedAt | string | ISO timestamp when the dataset row was emitted. |
raw | object | Raw provider item when includeRaw is enabled. |
Illustrative output record
{"recordType": "profile","inputProfile": "openai","userId": "4398626122","username": "openai","name": "OpenAI","bio": "Creating safe AGI that benefits all of humanity.","profileUrl": "https://x.com/openai","location": "San Francisco, CA","websiteUrl": "https://openai.com","avatarUrl": null,"bannerUrl": null,"isVerified": null,"isBlueVerified": true,"isProtected": false,"followersCount": 1000000,"followingCount": 1000,"tweetCount": 12000,"mediaCount": 250,"listedCount": 1500,"likesCount": 3000,"accountCreatedAt": "2015-12-11T20:29:15.000Z","pinnedTweetIds": ["1234567890"],"businessLabel": "OpenAI","provider": "scrapecreators","scrapedAt": "2026-06-12T12:00:00.000Z"}
How it works
This Actor uses provider-backed public data for X/Twitter profile details. According to the live contract, it is built from the ts-provider-api template, uses the Apify dataset and key-value store for output, and reads provider credentials from environment variables for ScrapeCreators and SociaVault. The dataset schema separates profile rows from optional tweet rows with recordType, and the output schema exposes dataset items plus OUTPUT and RUN_SUMMARY records in the key-value store.
Pricing
This Actor uses Pay per event pricing, and Apify platform usage is charged in addition to the event-based charges shown on the Actor's live Pricing tab.
Charged events include:
- Actor start
- One public X/Twitter profile saved
- One optional public profile tweet saved
For a simple example, if you scrape 100 profiles with profile-only output, the charged profile events are counted per saved record, and the live Pricing tab shows the current event prices and total cost guidance for the run. For a mixed run with 10 profiles and 5 optional tweets per profile, the dataset contains the profile rows plus the tweet rows, and the live Pricing tab provides the event rates used to estimate the total.
Use with AI agents (MCP)
This Actor is MCP-ready and usable through Apify MCP as a tool for public profile enrichment.
Actor identity: khadinakbar/x-twitter-profile-scraper
Tool behavior:
- Accepts a list of public X/Twitter profile handles or URLs
- Returns one dataset row per profile, plus optional public top-tweet rows when enabled
- Provides structured fields that are convenient for agent parsing, filtering, and routing
- Includes provenance via
providerandscrapedAt, and optional raw payloads viaincludeRaw
Pull public X/Twitter profile details for these accounts:
["openai","@apify","https://x.com/levelsio"]. Return profile rows only, and include tweet rows only if I ask for tweet context.
Output interpretation:
recordType = profileidentifies account-level recordsrecordType = tweetidentifies optional public top-tweet rowsprovidershows which upstream source returned the recordscrapedAtshows when the row was emittedrawappears only whenincludeRawis enabled
Scope and pagination guidance:
profilesaccepts 1 to 100 accounts per runincludeTweetsswitches on extra tweet rowsmaxTweetsPerProfilecaps tweet rows per profile from 0 to 100dedupeProfileshelps keep repeated profile inputs to one row each- The dataset is the main stream for downstream agent processing, and the key-value store records
OUTPUTandRUN_SUMMARYfor run-level context
Apify API example
JavaScript
import { ApifyClient } from "apify-client";const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor("khadinakbar/x-twitter-profile-scraper").call({profiles: ["openai", "apify"],includeTweets: false,dedupeProfiles: true,});const datasetItems = await client.dataset(run.defaultDatasetId).listItems();console.log(datasetItems.items);
Set APIFY_TOKEN in your environment before running the example. The dataset readback lets you consume the profile rows immediately after the execution finishes.
Best results and outcome guidance
Use handles or canonical profile URLs in profiles for the most direct input path. Keep includeTweets off when you only need enrichment fields such as bio, website, verification, and audience counts. Turn it on when your workflow benefits from a few public tweet examples alongside the profile record. If you are comparing upstream sources or validating field parity, providerOrder and includeRaw are useful during testing.
Continue the workflow
- Then use X Twitter Replies Scraper - No Cookies to extend X Twitter Profile Scraper - Public Profile Details research with a complementary content contract.
- Then use X Twitter Search Scraper - Tweets, People & Media to extend X Twitter Profile Scraper - Public Profile Details research with a complementary discovery contract.
Design note
I found that the dataset schema always includes recordType, inputProfile, username, profileUrl, provider, and scrapedAt as required fields, which makes each row easy to identify and trace.
FAQ
Can this Actor be used for profile enrichment from a list of handles?
Yes. The input schema is built for one or more public profiles, and each account produces a normalized dataset record.
Can it return tweet context with the profile?
Yes. Enable includeTweets to add public top-tweet rows for each profile, and use maxTweetsPerProfile to cap how many rows are emitted per profile.
How should I choose between providers?
Use providerOrder: "auto" for the default behavior. If you are validating behavior or testing fallback paths, choose scrapecreators-first or sociavault-first.
How can I remove duplicate profile rows?
Set dedupeProfiles to true. Matching uses X user ID first, then normalized username.
Where should I look for the run-level summary?
Check the key-value store records named OUTPUT and RUN_SUMMARY. The output schema also exposes links to those records.
Responsible use
This Actor is intended for lawful collection and analysis of public X/Twitter profile data. Use the exported records in line with applicable laws, platform terms, privacy obligations, and your internal policies.