Twitter Profiles Scraper

A handle in,
a profile row out.

Give it a Twitter/X handle or a profile URL and the account comes back as a row - the display name, the handle, the bio, the avatar and the canonical profile link, alongside columns for followers, following, location, website, the verified mark and the join date. One row per profile.

one-time 500 free rows$0.002 per row after12 columnsCSV · XLSX · JSON
How it works

One field,
and that is the form.

There is no limit box, no sort and no filter on this one. You name the accounts and it returns one row each.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Twitter Profiles Scraper.
  3. STEP 3Paste Twitter/X handles or profile URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Click Get Data, then download the result as CSV, XLSX or JSON.

Every row is tagged with the query it came from, so a run over a few hundred handles still reconciles against your input list.

Why teams use it

A list of handles
becomes a table.

Both input forms, one result

A bare handle and a full profile URL resolve to the same account. We have run both against one profile and every column came back identical except query, which echoes what you typed - so a spreadsheet nobody normalised works as-is.

A canonical link on every row

profile_url comes back in full twitter.com/username form even when you submitted a bare handle - so the export is joinable and linkable without you rebuilding the address yourself.

We say what we have not seen

Six of the twelve columns have never carried a value in any export we hold. Rather than list them as though they were dependable, this page names them and explains what we know and do not know about why - see the dictionary below.

Read this before you plan around a column

Six columns filled.
Six we have never seen.

The most important thing on this page, and the reason it reads differently from our other profile scrapers.

The twelve column names are solid - they are confirmed twice over, by the published column array for this service and by the header row of every export we hold. But those exports divide cleanly and identically: query, name, username, bio, avatar and profile_url carried a value on every row, and followers, following, location, website, verified and joined were empty on every row. Empty as in an empty cell - the column is always there.

We can tell you one relevant thing and we will not pretend to more. The platform's own note on this service says X needs a logged-in session for full data, along with a residential proxy. Every export we hold was made without a session, and the six empty columns are consistent with that - but we have never held a run made with one, so we cannot honestly tell you those six fill when you supply it, or what they look like when they do. Treat them as unproven rather than as promised, and let a small first run tell you where you stand.

For the same reason there are no fill percentages anywhere on this page. What we hold covers only two distinct accounts, and a percentage off a sample that size would be describing nothing at all.

Data dictionary

Twelve columns,
and which ones we have seen.

The header row of real exports, in export order. Each entry says what the column is for, and - where it matters - whether we have ever seen it carry a value.

query
The handle or profile URL you submitted, echoed on the row it produced. Written by the scraper, so it is there on every row.
name
The display name shown on the profile.
username
The handle, without the @.
bio
The profile description. This one can contain line breaks - we hold a bio that runs to four lines inside a single cell, so do not split a CSV on newlines and expect rows.
followers
How many accounts follow this profile. Empty in every export we hold - see the note below.
following
How many accounts this profile follows. Empty in every export we hold.
location
The location text on the profile, where the account sets one. Empty in every export we hold.
website
The link the account puts on its profile. Empty in every export we hold.
verified
Whether the account carries a verified mark. Empty in every export we hold, so we cannot tell you what form it takes - do not assume a boolean.
joined
The date the account joined. Empty in every export we hold, so no format is stated here.
avatar
The profile picture, on X's own image CDN.
profile_url
The canonical profile address, in twitter.com/username form whichever input form you used.

Six of these twelve have never carried a value in any export we hold - followers, following, location, website, verified and joined. They come back as empty cells rather than as missing columns, and the split is identical on every row. The platform's own note on this service says X requires a logged-in session for full data, plus a residential proxy, and every export we hold was made without one - which is consistent with what we see, but is not something we can prove from the files, so this page does not promise that supplying a session fills them. What did arrive every time is the identity of the account: name, username, bio, avatar and profile_url. Everything is a string; the JSON adds a thirteenth field, position, which is a real number and 1-based within the run, while the CSV and XLSX stop at twelve. And read the bio entry again before you write a parser - a bio with line breaks in it is the thing most likely to break your import.

What it accepts

However your list
already holds them.

Two ways to name an account and four ways to hand over the list. Both input forms resolve to the same profile, so nothing has to be normalised first.

outscraper https://twitter.com/outscraper Paste one per line CSV upload XLSX upload TXT upload Parquet upload No limit field on this one One row per profile
Common workflows

Three jobs people
most often run here.

What a table of accounts is good for once the handles stop being a list in someone's notes.

Resolution

Turn a column of handles into accounts

A list collected from talks, sign-ups or a spreadsheet is rarely normalised. Running it here returns the display name, the bio and a canonical link for each one, so the handles become records you can actually match against something else.

Ops · CRM hygiene
Research

Read a set of accounts side by side

Bios say what people say about themselves. Pulling a category's accounts into one table makes the wording comparable - which is a different exercise from reading twenty profiles in twenty tabs.

Market intel
Monitoring

Re-run the same list and diff it

The same handles on a schedule give you two comparable files. A changed display name, a rewritten bio or a new avatar is a diff rather than something somebody has to notice.

Analysis · Reporting
Pricing

Pay only for the profiles
you actually pull.

No subscription, no minimum, no recurring bill. Your first 500 rows are on us - after that, pay-as-you-go at the same flat rate as every other scraper here.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. File upload and every export format included - and enough to see for yourself which columns come back on your own handles.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

The same flat rate as every other scraper on the platform. The pre-flight estimator shows the row count and credit cost before a run starts - no surprise bills, no compute units to translate.

Most popular
Volume

Custom · high volume

Volume pricing, dedicated workers and an SLA for tracking a list on a schedule. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same people,
somewhere else.

A profile row names an account. These three carry on from there.

The legal bit

Is it legal to scrape
Twitter/X profiles?

Short answer: yes for the public profile - but this export describes identifiable people, and that changes what you may do with it.

Everything collected here is shown on a public profile to any visitor: the display name, the handle, the bio, the avatar and the profile link. Nothing is inferred - if a value is in the row, the account published it - and the run goes through our proxy pool rather than your own address.

That does not make the output neutral, and we would rather say so than let you find out later. A row here identifies a person, so the GDPR and comparable regimes apply to whatever you do next: you need a lawful basis, the purpose has to be one the person would reasonably expect, and you should not keep the data longer than that purpose needs. Aggregate research, category mapping and building a shortlist to approach are ordinary uses. Monitoring an individual's activity over time, or feeding these rows into an automated decision about someone, is not - the same standard we set out on the LinkedIn profiles page applies here.

X's own terms restrict automated access, so this is a terms question as well as a legal one; if you have a contractual relationship with the platform, check it before you scale. We run no third-party trackers on the data layer, and your exports auto-delete after 30 days.

livescraper.app · principles
Public profile fields only
No logins, no accounts touched
Personal data - handle accordingly!
GDPR-aligned by default
Exports auto-delete (30 days)
Check X's own terms before scaling.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

How do I scrape Twitter/X profiles?+
Using the Twitter Profiles Scraper: sign in to the platform, open the Twitter Profiles Scraper, paste Twitter/X handles or profile URLs one per line (or upload a CSV, XLSX, TXT or Parquet file), then click Get Data and download the result as CSV, XLSX or JSON. There is no limit field on this service - you name the accounts and it returns one row each.
What can I use as input?+
Either of two forms, mixed freely in the same list: a bare handle, or a full profile URL. Both resolve to the same account - we have run both forms of one profile and every column matched except the query column, which echoes what you typed. So you do not have to normalise a messy list first.
What columns will I get?+
Twelve, in this order: query, name, username, bio, followers, following, location, website, verified, joined, avatar and profile_url. Those names are confirmed twice over - by the published column array for this service and by the header row of every export we hold. The JSON adds a thirteenth field, position; the CSV and XLSX stop at twelve.
Why does this page say six columns may not come back?+
Because in every export we hold they were empty on every row: followers, following, location, website, verified and joined. The other six - query, name, username, bio, avatar and profile_url - carried a value every time. The platform's own note on this service says X needs a logged-in session for full data, plus a residential proxy, and every export we hold was made without a session. That is consistent with what we see, but we have never held a run made with one, so we will not promise you that supplying a session fills those columns. Run a few of your own handles on the free tier and you will know where you stand.
Are the followers and following columns numbers?+
We cannot tell you, and we would rather say so than guess. Both were empty in every export we hold, so we have never seen a value in either one. Everything else in the export is a string, and the only genuine number anywhere is position, which appears in the JSON but not the CSV or XLSX.
Can the bio contain line breaks?+
Yes, and this is the thing most likely to break an import. We hold a bio that runs to four lines inside a single cell. If your loader splits a CSV on newlines rather than parsing quoted fields properly, one profile will look like several broken rows - use a real CSV parser, or take the JSON.
What form does the profile URL come back in?+
The canonical twitter.com/username form, on every row, whichever way you named the account. We have submitted a bare handle and had the full URL come back - so the export is joinable and linkable without you rebuilding the address yourself.
Does it return email addresses?+
No. There is no address column in this export and nothing here infers one. If you need to reach an account, the website column is the only off-platform link the schema carries - and we have not seen it filled - so finding a domain and running the Email & Contact Scraper against it is the honest route.
How much does it cost?+
The first 500 rows are free and one-time, with no credit card. After that it is $0.002 per row - the same flat rate as every other scraper on the platform. The estimator shows the cost of a run before it starts.

Your first 500 profiles,
on the house.

500 one-time free rows on every new account - no expiry, and enough to see exactly which columns come back on your own handles. After that it is $0.002 per row, pay-as-you-go.

Activates instantly · no card required

Scrape Twitter/X profiles into a spreadsheet

Livescraper's Twitter Profiles Scraper turns a list of handles into profile data. You submit Twitter/X handles or profile URLs - typed one per line, or uploaded as a CSV, XLSX, TXT or Parquet file - and download the result as a clean CSV, Excel or JSON file, one row per profile. Both input forms resolve to the same account, so a list nobody normalised works as it is, and every row is tagged with the query that produced it. There is no limit field on this service: the accounts you name are the rows you get.

The export carries twelve columns: the query you submitted, the display name and handle, the bio, follower and following counts, location, website, a verified mark and a join date, the avatar and the canonical profile link. Everything is a string, and the JSON adds a thirteenth field, position, that the CSV and XLSX do not.

One thing on this page is more important than the rest, and it is a limitation rather than a feature. In every export we hold, six of those twelve columns were empty on every row - followers, following, location, website, verified and joined - while query, name, username, bio, avatar and profile_url carried a value every time. The platform's own note on this service says X requires a logged-in session for full data, along with a residential proxy, and every export we hold was made without a session. That is consistent with what we see, but we have never held a run made with one, so this page does not promise that supplying a session fills those columns - it tells you what we have seen and leaves the rest to a small first run. For the same reason there are no fill percentages here at all. One practical detail worth carrying into your loader: bio can contain line breaks, and a bio spanning several lines inside one cell will break any import that splits a CSV on newlines instead of parsing quoted fields.

This export describes identifiable people, which makes it personal data under the GDPR and comparable regimes. Everything collected is shown on a public profile to any visitor and nothing is inferred, but aggregate research and building a shortlist to approach are ordinary uses in a way that monitoring an individual over time is not. X's own terms restrict automated access, so check them before you scale. Start free: your first 500 rows cost nothing and need no credit card, and after that it is $0.002 per row, flat.