Twitter Lists as a Data Source: The Curated Feed Nobody Queries

7 min readSocialAPI Engineering

Twitter Lists as a Data Source: The Curated Feed Nobody Queries

Lists are the oldest feature on X that almost nobody uses programmatically, and that is strange, because ★a list is the one thing on the platform that has already solved the hardest problem in topic monitoring: deciding which accounts matter.★

A keyword search returns whoever used the word. A list returns ★whoever a human decided belongs★ — and for narrow subjects, that difference is the whole game.


Why a list beats a keyword for narrow topics

Keyword monitoring has two failure modes that a list does not:

1. It catches the word, not the subject. ★Searching a term returns everyone using it, including the spam, the jokes, and the unrelated homonyms.★

2. It misses practitioners who never use the term. A specialist discussing their field often does not name it — they just talk about it. ★Keyword search cannot see them at all.★

A list inverts this: somebody with domain knowledge picked the accounts, so ★you get their posts whether or not any given post contains your keyword★.

Keyword search List timeline
Selection Anyone using the word ★A human's judgment★
Noise High ★Low★
Misses Practitioners who don't name it Accounts nobody added

Reading a list's timeline, members, and subscribers is three calls — all public.


Reading a list

import requests

BASE = "https://api.socialapi.tech"
KEY  = "your_api_key"
HDRS = {"X-API-Key": KEY}

def read_list(list_id, limit=100):
    """Timeline, members, and subscribers of a public list."""
    def get(path, **extra):
        r = requests.get(f"{BASE}{path}",
                         params={"list_id": list_id, **extra},
                         headers=HDRS, timeout=60)
        r.raise_for_status()
        return r.json()["data"]

    return {
        "posts":       get("/v1/list/timeline", limit=limit),
        "members":     get("/v1/list/members", limit=limit),
        "subscribers": get("/v1/list/subscribers", limit=limit),
    }

L = read_list("1234567890123456789")
print(f"{len(L['members'])} members · {len(L['posts'])} posts")

★The members call is the underrated one.★ A list's membership is a pre-filtered set of accounts on one subject — and you can take those handles and use them anywhere, independent of the list itself.


★Subscribers tell you something members don't★

Members are who the curator picked. Subscribers are who found it worth following.

★That second signal is a quality score the curator did not write.★ A list with 40 members and 8,000 subscribers has been validated by a lot of people; a list with 40 members and 3 subscribers has not.

Two practical uses:

  • ★Rank candidate lists by subscribers before deciding which to build on★
  • Read subscribers as a discovery pool — ★people who subscribe to a niche list are, by revealed preference, interested in that niche★

Reading a list is three calls — timeline, members, subscribers.

⚠️ The caveat: subscriber counts skew toward age. An old mediocre list can out-subscribe a new excellent one, so ★use it as one signal, not a ranking★.


Where lists fall short

Being honest about this, because it determines whether the approach fits:

1. There is no list search. ★You cannot query "find me lists about semiconductors."★ Discovery is the weak point — you find lists through profiles, links, or by noticing them, and then you can read everything.

2. Membership goes stale. ★A list curated in 2023 reflects who mattered in 2023.★ Nobody prunes them, so check the members' recent activity before trusting the set.

3. You cannot see which lists include an account. Discovery runs list → members. ★The reverse lookup does not exist★ — a genuine limitation, not an oversight on anyone's part.

★The honest summary: lists are excellent once you have the ID and weak at helping you find one.★


Questions people ask

What is a Twitter list? A curated set of accounts whose posts appear as one timeline. ★Anyone can build one.★

How do I read a list programmatically? Three calls keyed on the list ID — timeline, members, subscribers.

Where do I find the list ID? In the list's URL. ★Every call needs it★, and there is no way to search for one.

Can I search for lists? ★No.★ There is no list-search endpoint — this is the main weakness of the approach.

Can I see who is on a list? Yes, for public lists — the members call returns full profiles.

Can I see who subscribes to a list? Yes — ★and subscriber count is a useful quality signal★ the curator never wrote.

Can I see which lists an account is on? No. ★The reverse lookup does not exist.★

Is a list the same as a Community? No. ★A list is a view over other people's timelines; a Community is where posts live.★

Should I use a list or a keyword search? ★List when you know which accounts matter; keyword when you do not.★ They fail in opposite directions.

Why is a list less noisy? Because a human did the selection. ★Keyword search has no judgment behind it.★

Can I monitor a list continuously? Yes — poll the timeline and diff — same pattern as keyword monitoring.

Can I create a list through an API? No. ★Creation is a write action, and we are read-only.★

Can I add members through an API? No — same reason.

Are private lists readable? No. ★Private lists stay private to everyone★, same boundary as protected accounts.

How many members can a list have? Into the thousands. ★Page with a cursor rather than assuming one fetch.★

Does a list timeline include replies? Generally the members' posts — ★check whether replies are included before computing volume★.

Can I export a list's members? Yes — page and write out — the export pattern.

Are list members ordered meaningfully? Do not assume so. ★Key by ID★, not position.

How do I find good lists? Through the profiles of people already in the field. ★Practitioners curate lists in their own subject.★

How current is a list? As current as its curator. ★Check members' recent activity★ — stale lists look identical to fresh ones.

Can I tell when a list was updated? Not reliably. ★Infer it from the members' posting recency instead.★

Should I build my own list or reuse one? Reuse to start, then curate. ★Someone else's list is a free first draft of your account set.★

Can I take the members and drop the list? ★Yes, and often you should★ — the membership is the valuable part; the timeline is a convenience.

Do list posts differ from the accounts' own timelines? Same posts, aggregated. ★No separate content exists.★

Can I get historical posts from a list? Paging goes back as far as the underlying timelines allow — the archive limit.

How is a list different from following those accounts? ★A list does not affect your own timeline★ — you can read it without following anyone.

Can I combine lists? Yes, locally — fetch several and merge, ★deduplicating by account ID★.

Is subscriber count a good quality measure? ★Directionally★, but it skews toward older lists — treat it as one signal.

Do lists work for competitor tracking? Very well, and ★one list you maintain beats a keyword query you constantly tune★.

What is the biggest mistake with lists? ★Trusting a stale membership.★ Verify the accounts are still active before building on the set.


The short version

★A list is the one place on X where somebody has already answered "which accounts matter for this subject" — and that is the expensive part of topic monitoring, given away for free.★

Keyword search catches the word; a list catches the subject. ★A specialist who never names their field is invisible to search and fully visible in a list.★

Our API reads a list's timeline, members, and subscribers by ID, with cursors for large ones. ★The members call is the one worth reaching for★ — a pre-filtered account set you can use anywhere. Read-only, flat price per call.

Where it falls short, stated plainly: ★there is no list search and no reverse lookup★. Lists are excellent once you have an ID, and no help at all in finding one.

Related reading: how Communities differ from lists · when keyword monitoring is the right tool · finding accounts by bio · exporting what you collect.