Twitter Lead Scraper
Pricing
from $0.90 / 1,000 lead profiles
Twitter Lead Scraper
Collect public X profiles from handles, profile URLs, or one keyword or niche query. Get structured lead fields such as bios, audience counts, public emails, websites, and links, or collect follower and following account identifiers. No X login or API key is needed.
Pricing
from $0.90 / 1,000 lead profiles
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
🎯 Turn public X profiles into useful lead rows
Sales teams, lead researchers, and developers can turn public X handles, @handles, and profile URLs into structured lead data. Each saved lead profile has its public identity and can include a bio, audience counts, public contact fields, a website, published links, and first-match trace data when available. You can also find profiles with one keyword or niche query, or collect follower and following account identifiers.
- Collect follower usernames for a public X account with Twitter Followers Scraper.
- Collect the accounts a public X account follows with Twitter Following Scraper.
- Find public email addresses in X profiles with Twitter Email Scraper.
- Build a lead list from public X account references with Twitter Lead Scraper.
- Enrich one public X profile with Twitter Profile Scraper.
📇 Public X lead profiles and relationship accounts
Use lead profile mode for account handles, @handles, profile URLs, or one keyword or niche query. Lead rows keep the canonical identity and, when available, the submitted reference or discovery query. They can also include the public bio and location, follower and following counts, posts, follower tier, public emails, primary email, public phone, website, published links, verification, protection, account creation time, and profile image when available. Use relationship account mode to save follower or following usernames or numeric public user IDs with the target and relationship type.
Each eligible account is saved at its first match. If the same account appears again from another handle, URL, query, ID, or submitted value, the later match is ignored. Trace fields describe only the first saved match.
▶️ Choose a profile or relationship run
- Choose
leadProfilesto collect enriched public profiles, orrelationshipAccountsto collect follower or following identifiers. - For lead profiles, choose account references or one keyword or niche query.
- For relationship accounts, choose followers or following, add one or more targets, and choose usernames or numeric user IDs.
- Add lead filters or set a work limit when you need a smaller collection.
- Run the Actor and open the default dataset.
Leave maxCandidates empty to return all available results until the source is exhausted. Leave maxRelationshipAccounts empty to return all available results until the source is exhausted.
⚙️ Input
Choose leadProfiles or relationshipAccounts. profileSearch fields are used for lead profiles, and relationshipSearch fields are used for relationship accounts. Fields for the other mode are ignored. The filters apply only to lead profiles.
Input fields
| Field | Type | What it does |
|---|---|---|
resultType | string | Selects leadProfiles for enriched profiles or relationshipAccounts for follower and following identifiers. |
profileSearch | object | Groups the source settings for lead profile collection. |
profileSearch.findProfilesBy | string | Chooses submitted account references or one keyword or niche query. |
profileSearch.accountReferences | string[] | Adds public X handles, @handles, or profile URLs to enrich. |
profileSearch.keywordQuery | string | Finds public X accounts or influencers from one keyword or niche query. |
profileSearch.maxCandidates | integer | Sets an optional cap for the one query. Leave it empty to return all available results until the source is exhausted. |
relationshipSearch | object | Groups the settings for follower or following collection. |
relationshipSearch.collectAccountsBy | string | Selects public accounts that follow the target or public accounts that the target follows. |
relationshipSearch.relationshipTargets | string[] | Adds public X usernames or numeric public user IDs as relationship targets. Usernames may include or omit @. |
relationshipSearch.maxRelationshipAccounts | integer | Sets an optional cap for each target. Leave it empty to return all available results until the source is exhausted. |
relationshipSearch.relationshipResultFormat | string | Chooses usernames or numeric public user IDs for accountIdentifier. |
requireEmail | boolean | For lead profiles, keeps only accounts that publish an email address. |
requireWebsite | boolean | For lead profiles, keeps only accounts that publish a website. |
minFollowers | integer | For lead profiles, keeps accounts with at least this many followers. |
maxFollowers | integer | For lead profiles, keeps accounts with no more than this many followers. |
bioIncludeTerms | string[] | For lead profiles, keeps accounts whose bio mentions at least one chosen term. |
bioExcludeTerms | string[] | For lead profiles, removes accounts whose bio mentions at least one chosen term. |
locationContains | string | For lead profiles, keeps accounts whose public location contains this text. |
Example input
This input is copied from a successful current-beta default-input run:
{"resultType": "leadProfiles","profileSearch": {"findProfilesBy": "accountReferences","accountReferences": ["@apify"]},"requireEmail": false,"requireWebsite": false,"relationshipSearch": {"collectAccountsBy": "followers","relationshipResultFormat": "username"}}
🧾 Output
The default dataset contains one of two shapes, selected by resultType. Optional lead fields can be missing when the public source does not provide them.
Lead profile
| Field | Type | What it does |
|---|---|---|
recordType | string | Is always leadProfile for this shape. |
userId | string | Gives the canonical public X account identifier. |
username | string | Gives the account username. |
displayName | string | Gives the public display name. |
profileUrl | string (URL) | Gives the canonical public X profile URL. |
submittedReference | string (optional) | Keeps the handle or profile URL that first caused this row to be saved. |
discoveryQuery | string (optional) | Keeps the keyword or niche query that first caused this row to be saved. |
bio | string (optional) | Gives the public profile bio. |
location | string (optional) | Gives the public profile location. |
followersCount | integer (optional) | Gives the reported follower count. |
followingCount | integer (optional) | Gives the number of accounts followed by this account. |
postsCount | integer (optional) | Gives the reported public post or activity count. |
followerTier | string (optional) | Gives the reported follower-size tier. |
emails | array of strings (optional) | Lists public email addresses published by the account. |
primaryEmail | string (email, optional) | Gives the primary public email address when present. |
phoneNumber | string (optional) | Gives a phone number publicly published by the account. |
websiteUrl | string (URL, optional) | Gives the resolved website URL published on the profile. |
publishedLinks | array of strings (URLs, optional) | Lists other links published by the account. |
isVerified | boolean (optional) | Says whether the source reports the account as publicly verified. |
isProtected | boolean (optional) | Says whether the source reports the account as protected. |
createdAt | string (date-time, optional) | Gives the account creation time reported by the source. |
profileImageUrl | string (URL, optional) | Gives the public profile image URL. |
This complete lead row came from a successful current-beta run:
{"recordType": "leadProfile","userId": "1534392378890637314","username": "jones_deakon","displayName": "Deakon “showtime” jones","profileUrl": "https://x.com/jones_deakon","submittedReference": "https://x.com/jones_deakon","bio": "Stillwater highschool, 6’2 190 Wr/CB coach: @chadcawood Email:deakonjones128@gmail.com co/2027 phone: 405-657-9283, ncaa id: 2403234469","location": "Stillwater, OK","followersCount": 1000,"followingCount": 2058,"postsCount": 393,"followerTier": "nano","emails": ["deakonjones128@gmail.com"],"primaryEmail": "deakonjones128@gmail.com","phoneNumber": "405-657-9283","websiteUrl": "https://t.co/dzHV0zWTlY","publishedLinks": ["https://t.co/dzHV0zWTlY"],"isVerified": true,"isProtected": false,"createdAt": "2022-06-08T04:30:36.000Z","profileImageUrl": "https://pbs.twimg.com/profile_images/1967446812081455104/WFvhmDqx_normal.jpg"}
Relationship account
| Field | Type | What it does |
|---|---|---|
recordType | string | Is always relationshipAccount for this shape. |
relationshipType | string | Says whether the account is a follower or a following account. |
relationshipTarget | string | Gives the public username or numeric user ID used as the target. |
identifierType | string | Says whether accountIdentifier contains a username or a numeric user ID. |
accountIdentifier | string | Gives the collected public account username or numeric user ID. |
This complete relationship row came from a successful current-beta run:
{"recordType": "relationshipAccount","relationshipType": "followers","relationshipTarget": "@apify","identifierType": "username","accountIdentifier": "FilipHorky"}
💳 Pricing
Pricing uses pay-per-event. The Store shows the current price for each event. An event is created only for its matching saved row.
Lead profile
One public X profile is saved to your dataset.
Contact route
A saved lead profile includes a public email address or website.
Relationship account
One public follower or following account identifier is saved to your dataset.
A run with no matching saved row does not create one of these row events.
🔌 Integrations
Read the default dataset in Apify Console, use the Apify API, or export your rows for further work.
❓ FAQ
Can one run collect both profiles and relationships?
No. Choose one resultType for each run. Fields for the other mode are ignored, so run the Actor again when you need the other shape.
What happens when I leave a candidate or relationship limit empty?
The Actor returns all available results until the source is exhausted. This is not a promise that the source has more results or that every account can be returned.
What happens when the same account appears more than once?
The first eligible occurrence is saved. Later matches from another handle, URL, query, ID, or similar submitted value are ignored. The saved trace field describes only the first match.
Do relationship rows include full profile details?
No. A relationship row contains the relationship type, target, identifier type, and selected account identifier. Use lead profile mode when you need the enriched profile fields.
Are contact details guessed?
No. Email addresses, websites, and phone numbers come from public profile data. A value that the profile does not publish is left empty.
Can I use one keyword or niche query?
Yes. Choose keywordQuery in lead profile mode and enter one query. Profiles found by that query receive the same lead enrichment as profiles submitted directly.
Do I need an X login or API key?
No. The Actor reads publicly reachable X data and does not ask for an X login, password, or API key.
Why did my run return fewer rows than expected?
Filters and the available public source data can reduce the number of saved rows. A work limit is a cap, not a promise of a fixed number of rows.
📝 Changelog
v0.0 (17-09-2026)
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Twitter Scraper to collect public X posts, profiles, and network members.
- Twitter Organization Affiliates Scraper to map public accounts shown for X organizations.
- Social Media Stats Checker to compare public X profile stats with other social platforms.
- YouTube Lead Scraper to find public creator email leads from YouTube.
- Website Email Scraper to find public emails on linked websites.
Made with ❤️ by Maxime Dupré