X (Twitter) Lead & Contact Extractor avatar

X (Twitter) Lead & Contact Extractor

Pricing

from $1.00 / 1,000 account profileds

Go to Apify Store
X (Twitter) Lead & Contact Extractor

X (Twitter) Lead & Contact Extractor

Turn a list of X (Twitter) accounts into a B2B lead list: business emails, including ones hidden as name (at) domain (dot) com, the real website behind the profile link, Instagram, LinkedIn, YouTube, TikTok and Telegram handles, location and audience tier. One row per account. No login needed.

Pricing

from $1.00 / 1,000 account profileds

Rating

0.0

(0)

Developer

Kawtar

Kawtar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Turn a list of X (Twitter) accounts into a working B2B lead list. Give it the accounts you care about and it returns one row per account with the business email address published on the profile — including the ones written to defeat harvesters, like booking (at) agency (dot) com — plus the real website behind the profile link, every other link the account publishes, the Instagram, LinkedIn, YouTube, TikTok and Telegram accounts named in the bio, location, audience size band and account age. No X account, no login, no browser extension.

What you can do with it

  • Build an outreach list from a niche. Feed in the accounts in your category and keep only the ones that publish an email address you can actually write to.
  • Enrich a CRM. You already have handles on your records; this fills in the email, the company site, the phone number and the other places that account lives online.
  • Qualify influencers and creators before you pitch. Audience band, account age, verification and a real booking address in one row — no more hunting through bios by hand.
  • Find reachable small businesses. Cap the audience size so household names drop out and independent operators stay in.
  • Filter a long list down to a target segment. Keep only accounts whose bio mentions "founder", "agency" or "recruiting", drop anything that says "parody", and keep only the ones based in the cities you sell to.
  • De-duplicate a messy list. Handles, @handles and profile links all work, and the same account supplied twice comes back once.

What you get

One row per account, always with the same columns. Here is a real row, shortened to the fields that matter most — the full list is in Output fields below:

{
"inputProfile": "timthetatman",
"username": "timthetatman",
"displayName": "timthetatman👑",
"profileUrl": "https://x.com/timthetatman",
"bio": "Entertainer, streamer, nerd. Business Inquiries: timthetatman@wmeagency.com",
"emails": ["timthetatman@wmeagency.com"],
"primaryEmail": "timthetatman@wmeagency.com",
"phones": [],
"website": "https://youtube.com/timthetatman",
"allLinks": ["https://youtube.com/timthetatman"],
"socialProfiles": {
"instagram": null,
"linkedin": null,
"youtube": { "handle": "timthetatman", "url": "https://www.youtube.com/timthetatman" },
"tiktok": null,
"telegram": null
},
"location": null,
"followers": 3113580,
"following": 1346,
"postCount": 61831,
"followerTier": "mega",
"accountAgeYears": 13.7,
"joinedAt": "2012-12-07T22:26:26.000Z",
"isVerified": false,
"hasSubscriptionBadge": true,
"isProtected": false,
"avatarUrl": "https://pbs.twimg.com/profile_images/1490099066776215553/wCdfis1s.jpg",
"hasContactDetails": true,
"unavailable": false,
"scrapedAt": "2026-08-05T22:13:30.092Z"
}

Input

FieldTypeDefaultWhat it does
profilesarray of textRequired. The accounts to turn into leads. An account name, an @name or a link to the profile all work.
requireEmailbooleanfalseKeep only accounts where an email address was found.
requireWebsitebooleanfalseKeep only accounts that publish a website.
minFollowersinteger0Skip accounts smaller than this. 0 means no minimum.
maxFollowersinteger0Skip accounts larger than this. 0 means no maximum.
bioKeywordsarray of textallKeep only accounts whose bio mentions at least one of these words. Not case sensitive.
excludeKeywordsarray of textnoneDrop accounts whose bio mentions any of these words. Not case sensitive.
locationsarray of textallKeep only accounts whose location line mentions one of these places. Not case sensitive.
accountsAtOnceinteger3How many accounts to work through at the same time. Raise it for long lists.
countryCodeselectusWhich country to browse from. Affects what X shows publicly in a few regions.

Output fields

FieldDescription
username, displayName, profileUrl, userIdWho the row is about.
inputProfileExactly what you supplied, so the row joins back to your list.
emailsEvery email address published on the profile, lower-cased, in the order written. Hidden forms are read out in full.
primaryEmailThe first address found — the one to use when you only want one.
phonesTelephone numbers published on the profile. Empty on almost every account — see the limits below.
websiteThe real destination behind the profile link, never the shortened form.
allLinksEvery link the account publishes, profile link and bio links together.
bioLinksJust the links written inside the bio text.
socialProfilesThe Instagram, LinkedIn, YouTube, TikTok and Telegram accounts named on the profile, each as a handle and a ready-made link.
bio, location, joinedAtThe profile text as published.
followers, following, postCount, mediaPostCount, likesGivenAudience and activity.
followerTiernano (under 10k), micro (10k–100k), mid (100k–500k), macro (500k–1M), mega (1M+).
accountAgeYearsHow long the account has existed, to one decimal place.
hasContactDetailstrue when an email address or a website was found.
isVerified, verifiedType, hasSubscriptionBadge, isProtected, possiblySensitiveBadges, privacy and content status.
avatarUrl, bannerUrlFull-resolution profile images.
pinnedPostId, professionalCategory, birthdateExtra context on the accounts that publish it, empty on the rest.
unavailable, unavailableReasonOn every row: false for an account that was read, true plus the reason for one that no longer exists or cannot be viewed.
scrapedAtWhen the row was collected.

Every row carries every column, including the rows for accounts that could not be read, so a CSV or Excel export lands in your CRM with a stable set of columns.

Pricing

This actor is pay per result, in two parts:

  • $1.00 per 1,000 accounts you get a row for.
  • $4.00 per 1,000 of those rows where a real way to reach the account — an email address or a website — was actually found.

Nothing else is billed: no time-based charge, and no charge for accounts your filters removed before they reached the dataset.

Worked example. A list of 1,000 accounts, of which 700 turn out to publish an email address or a website, costs $1.00 + $2.80 = $3.80. Turn on Only accounts with an email address and the accounts with nothing to find are dropped before they are billed at all, so you pay for leads rather than for lookups.

Limits & what this actor cannot do

  • This actor reports what an account publishes on its own profile. It never guesses, generates or "verifies" an address that is not written there — a fabricated address is worse than no address.
  • Some accounts hide their address in ways that are deliberately not decoded, because doing so would invent addresses that do not exist. "Engineer at acme.com" is a job, not a mailbox, and it is treated as one.
  • Telephone numbers are almost never published on X profiles. The phones column exists for the rare account that does publish one, but across the accounts checked while building this actor it was empty every time. Treat it as a bonus, never as a reason to buy — email and website are what this actor reliably delivers.
  • Keyword search across all of X is not part of what X publishes openly, so this actor works from the list of accounts you supply rather than from a search term.
  • The lists of who follows an account are not publicly available. Follower and following counts are included.
  • Protected (private) accounts still publish their bio, links, location and counts, so they still produce a usable lead row.
  • Accounts that were renamed, suspended or deleted are reported with unavailable: true and the reason X gives, rather than silently dropped — unless you asked for accounts with contact details only, in which case they are left out entirely.
  • Follower counts, bios and links are a snapshot at the moment of collection and keep changing afterwards.
  • Where X publishes no value for a field it is left empty rather than filled with a zero that would be wrong.
  • Speed depends on the size of the job and on X's own response times.
  • X's terms govern automated access, and the contact details this actor collects are personal data. You are responsible for using them lawfully, in line with the source site's terms and with applicable privacy and marketing law (including GDPR and CAN-SPAM where they apply to you).

FAQ

Do I need an X account? No. Nothing is needed from you beyond the list of accounts you want.

Does it need my login, password or a paid X subscription? No. None of those are used at any point.

Do you guess or generate email addresses? Never. Every address in a row was written on that profile by its owner. Addresses disguised as name (at) domain (dot) com, name[at]domain.com or name -at- domain -dot- com are read back out in full, but nothing is invented.

Why do some accounts come back with no email? Because they publish none. Most accounts on X publish a website but no address; that is why hasContactDetails and the Only accounts with an email address switch exist — so you can see, and pay for, exactly the rows that are useful.

Can I schedule it? Yes. Schedule it on Apify to run daily or weekly over a watchlist and pick up accounts as they add or change their contact details.

How do I get the results into my tools? Export from Apify as CSV, Excel, JSON, XML or an HTML table, push into Google Sheets, or pull them into your own system.