WEIR

Export Twitter List Members to CSV with Python (2026)

X has no button to export Twitter list members. Take the List id from its URL, pull 100 members per call into a CSV, and see what a full List costs.


Published · Updated · 7 min read

Cover image: From List URL to CSV

To export Twitter list members, page through the List with an API and save each member as a row in a CSV file.

X (Twitter) has no export button for Lists. This guide is for you if a List's accounts need to go into a spreadsheet.

You get the no-code options, then a short Python script. We run Weir, the API in the script. This returns up to 100 members of a List:

curl -s "https://api.weirapp.io/v1/x/lists/84839422/members?limit=100" \
  -H "Authorization: Bearer $WEIR_API_KEY"

You need Python 3, a free Weir key and a public List. The job in four steps:

  1. Find the List idCopy the digits after /i/lists/ in the List's URL.
  2. Check the ListGET /v1/x/lists/{id} shows its size.
  3. Page through the membersGET /v1/x/lists/{id}/members, 100 a call.
  4. Write the CSVOne row per member, ids kept as text.

How to export a Twitter List: which tool fits?

A no-code tool suits a one-off export of your own List. An API suits other people's Lists and repeat jobs.

Whatever you pick, a List holds at most 5,000 members, according to X's Help Center. Here is how the options compare:

Tool You need Price, as listed Best for
Circleboom Your X account Tokens per member Your own Lists
TwListExport A Chrome extension In-app purchases One-off, no code
Official X API Developer credits $0.010 per user read X's own terms
TwitterAPI.io An API key $0.0015 per call of 20 Lowest price
Weir API (ours) An API key 1 credit per member Any public List

Each price comes from the vendor's own page, checked on 22 October 2026. Circleboom's guide gives no token rate, and TwListExport's store page names no prices.

Circleboom also needs your X login and exports Lists from your own account. An API needs only the List id.

Every option hands you a list of people. Keep only what you need, and follow X's terms and the privacy law that applies to you. This isn't legal advice.

Step 1: Find the Twitter List id in its URL

Open the List on x.com and read the id off the address bar. It's the number after /i/lists/:

https://x.com/i/lists/84839422
                      └── the List id

That example comes from X's own API quickstart. It's "Official Twitter Accounts", a public List owned by @X, and we use it in this guide.

Lists you don't own work the same way, as long as they're public.

Step 2: Check the List's size first

One lookup gives you the List's name, owner and size for 3 credits. You learn the bill before the export starts.

curl -s https://api.weirapp.io/v1/x/lists/84839422 \
  -H "Authorization: Bearer $WEIR_API_KEY"

We ran it on 22 October 2026 through Weir's MCP tools, then asked for three members. Trimmed:

→ get_x_list {"id": "84839422"}
← 3 credits · Official Twitter Accounts · owner @X · 81 members
→ get_x_list_members {"id": "84839422", "limit": 3}
← 3 members · 4 credits · meta.nextCursor set
  username          followersCount   protected
  CommunityNotes    1192136          false
  TwitterThailand   37803            true
  TwitterAble       9419             true

Two of the three are protected. You still get a protected member's profile, but not its posts.

memberCount sets your bill. This List fits in a single call, for about 82 credits.

Step 3: Export Twitter list members with Python

GET /v1/x/lists/{id}/members returns up to 100 accounts a call, in X's order. Ask for all 100, since every call adds a credit. X may send fewer, so follow meta.nextCursor until it is null.

Run pip install requests, set WEIR_API_KEY, and keep the key in one header:

import csv, os, time, requests
HEADERS = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"}

This generator yields one page of members at a time:

def member_pages(list_id, max_pages=50):
    url, params = f"https://api.weirapp.io/v1/x/lists/{list_id}/members", {"limit": 100}
    for _ in range(max_pages):
        r = requests.get(url, headers=HEADERS, params=params, timeout=60)
        if r.status_code == 429:  # too fast: wait, then retry the same page
            time.sleep(int(r.headers.get("Retry-After", "10")))
            continue
        r.raise_for_status()  # 402: out of credits; 404: no such List
        page = r.json()
        yield page["data"]
        params["cursor"] = page["meta"]["nextCursor"]
        if not params["cursor"]:
            return

What the loop gets right:

  • max_pages=50 covers a full List, and the ceiling also caps your bill.
  • A 429 is not a 402. A 429 clears after Retry-After. A 402 means you're out of credits.

Step 4: Save the members to a CSV file

csv.DictWriter keeps the columns you name. A flush after each page leaves a usable file if the run stops early.

LIST_ID = "84839422"
FIELDS = ["id", "username", "name", "description", "location",
          "protected", "followersCount", "createdAt", "url"]
seen = set()
with open(f"list-{LIST_ID}.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.DictWriter(file, fieldnames=FIELDS, extrasaction="ignore")
    writer.writeheader()
    for members in member_pages(LIST_ID):
        for member in members:
            if member["id"] not in seen:  # skip an account seen on an earlier page
                seen.add(member["id"])
                writer.writerow(member)
        file.flush()
print(f"wrote {len(seen)} members")

Each row gives you an account's id, handle, name, bio, location, protected flag, follower count, join date and profile URL.

Keep utf-8-sig. Microsoft says Excel opens a UTF-8 CSV normally when it starts with a byte order mark, which this adds.

In Excel, format the id column as Text. Excel keeps only 15 significant digits, so longer X ids lose their last digits. Our Twitter user ID lookup guide turns ids back into usernames.

Can you export a Twitter List's tweets too?

Yes, and a search with listId is the cheap way to read them.

The List timeline, GET /v1/x/lists/{id}/posts, returns the feed as X shows it. X picks the page size, up to about 100 posts. You can't ask for fewer, so a single call can cost you about 101 credits.

Search lets you choose. POST /v1/x/search with listId takes a limit, filters such as minLikes, and sinceId for new posts only. We tried it with a limit of 3:

→ search_x {"listId": "84839422", "limit": 3}
← 3 posts · 4 credits
  2026-10-21T20:30Z  @Sports  Imagine voting this man most overrated
  2026-10-21T19:34Z  @Music   IT'S HAPPENING 😍 Dove Cameron announces...

Next time, send the newest id you've seen as sinceId, and you pay only for new posts. Our guide to getting tweets with Python covers search paging.

What does it cost to export a Twitter List?

On Weir, a members call costs 1 credit plus 1 per account returned.

101credits for a page of 100 members
5,050credits for a full List
4,950members free each month

Most Lists fit inside the free credits, so they cost you nothing. A re-export reads the whole List again and costs the same. Here is a full 5,000-member List priced across APIs, as of October 2026:

Exporting a full 5,000-member List
X API, at its user-read rate$50
Weir, $5 pack$1.01
Weir, $1,000 pack$0.51
TwitterAPI.io$0.38

TwitterAPI.io is cheaper than us for this job. It charges $0.0015 per List call. Each call returns 20 members.

X's pricing page doesn't name its List members endpoint. Members come back as user objects, so we used X's user-read rate, $0.010.

This endpoint counts as 3 requests against your rate limit. On the free tier, that's up to 1,000 members a minute. A full List takes about five minutes.

If it doesn't work

  • A 404. The id is wrong or the List is gone. GET /v1/x/lists/{id} also answers 404 for a private List.
  • A 400 on page two. A cursor only works with the same List and limit. Change either, and start again.
  • A 402. You're out of credits, and retrying won't help. Buy a pack, or wait for next month's free credits.

When not to use Weir

  • Price per member is all you care about. TwitterAPI.io charges less per List member than our packs.
  • The List is private. Weir reads public Lists only.
  • You need to add or remove members. Weir only reads, so managing a List takes X's own API.
  • You export one List, once, with no code. A tool like Circleboom fits that job.

FAQ

What is the Twitter list member limit?

A List can hold 5,000 accounts, according to X's Help Center. A bigger group needs a second List, and you can own up to 1,000 of them.

Does the export include protected accounts?

Yes. Two of the first three members of X's own List were protected, and both came back with their profiles. Their posts stay hidden, and so do their follower lists.

Is there a Twitter list members API?

Yes. X's own GET /2/lists/{id}/members returns up to 100 accounts per request with an app-only bearer token. Weir's GET /v1/x/lists/{id}/members does the same with a plain API key, at a credit per member.

Can I export a Twitter List without coding?

Yes. Circleboom exports Lists on the account you connect, and TwListExport's store page promises a CSV in one click. You can also ask Claude for a List's members through our X MCP server, with no script.

How many List members can I export for free?

About 4,950 a month on Weir, from the free credits. That covers every List but the largest. Past that, a $5 pack buys 25,000 credits that never expire.

Sources

All pages checked 22 October 2026.