The Best Twitter (X) Accounts to Follow, by Topic

By TwitterAPI.io Team•16 min read
Topic map of the best Twitter (X) accounts to follow: News (@Reuters, @AP, @BBCBreaking), Science and space (@NASA, @SpaceX, @NASAWebb), Tech and AI (@karpathy, @AnthropicAI, @OpenAI), Developers (@github, @code, @vercel), Sports (@FIFAWorldCup, @F1, @espn), Finance and economics (@federalreserve, @FT, @IMFNews), Culture and ideas (@NobelPrize, @metmuseum, @librarycongress), each with its median posts per week, plus a four-step check before you follow.
Seven topics, three strong picks each, chosen from 38 accounts checked with live profile and timeline data collected in 2026.

This page is a curated reading list: the best X (Twitter) accounts to follow, grouped by topic, with a reason for each pick and live numbers showing that the account is active and that people engage with what it posts. It is not a follower-count ranking. If you want to know which accounts have the most followers, that is a different question with a different answer, and our leaderboard of the most-followed Twitter accounts covers it. Here, size is one column among five.

Most best-accounts lists you will find are a name, a profile picture and a sentence, often written years ago. Handles change, organizations leave the platform and once-busy feeds go silent, and the lists rarely say so. So instead of trusting memory, we looked every candidate up through the X data that is public right now: its profile, and its 40 most recent posts including replies. That gave us five things per account: followers, posts per week, median likes and views per original post, the share of posts that are replies, and how long ago it last posted.

The picks cover organizations and public figures only, chosen for readers who want a feed that teaches them something: news, science and space, tech and AI, software development, sports, finance and economics, and culture. No gossip accounts, no personal accounts of private people. At the end there is a short section on building your own best-accounts list for any niche with two API calls per account.

01 — Section

What makes a Twitter account worth following

A good account for your feed is one you will actually read and learn from. That turns into four checks you can run on any profile in under a minute, by hand or with the API.

1. It still posts. Open the profile and look at the newest post that is not pinned. In our check, four well-known accounts had not posted in more than 30 days, one of them for over three years. Following them adds nothing to your feed.

2. Its pace fits your feed. A wire service can post hundreds of times a day; a research lab may post a few times a week. Neither is wrong, but a firehose will drown everything else on your timeline. We measured pace as posts per week across each account's 40 most recent posts.

3. People engage with it for its size. Raw likes favor huge accounts. Likes per 1,000 followers (median likes on original posts divided by followers, times 1,000) shows whether an account's audience is still paying attention. Across our set the median was 0.045, with a range from under 0.001 to almost 10.

4. It talks or it broadcasts. The share of posts that are replies tells you the style. Headline feeds sit near 0%. Researchers and product teams often reply in threads and answer questions, which makes their feed more useful and also noisier.

The chart below plots the first and third checks against each other for the 37 accounts we analyzed. The pattern is clear: the larger the account, the fewer likes it earns per follower (Spearman rank correlation -0.44). That does not make big accounts bad picks. @SpaceX and @FIFAWorldCup combine huge audiences with strong engagement. It means follower count alone should not decide what you follow.

Scatter chart of 37 X accounts, followers on a log x-axis against median likes per original post per 1,000 followers on a log y-axis, colored by topic. Tech and AI accounts such as @karpathy, @AnthropicAI, @GoogleDeepMind and @OpenAI sit highest; large news and finance accounts such as @Reuters, @business, @TIME and @TheEconomist sit lowest. Spearman rank correlation -0.44.
Followers vs engagement per follower for 37 accounts and 1,115 original posts. Data collected in 2026 via the TwitterAPI.io API.
02 — Section

Best news accounts on X

News accounts are the classic reason to use X: posts appear as events happen. Most of them broadcast headlines with a link and almost never reply, so judge them by speed and pace rather than engagement. Every one of the active accounts below posted within the last few hours of our collection.

AccountFollowersPosts per weekMedian likes / viewsReply share
@Reuters26.4M1,646.28 / 27,7780%
@AP16.5M169.3203 / 77,5910%
@BBCBreaking50.2M30.8567 / 1,550,6225%
@nytimes53.9M144.6165 / 109,8320%
@axios861K261.69 / 16,5420%
@NPR7.7M0.2524 / 206,91312.5%

@Reuters. The Reuters wire's main account (its bio points business news to @ReutersBiz). It was the fastest news feed we measured, at about 1,646 posts a week extrapolated from a short burst, so put it in an X List rather than your main timeline. Low likes per post simply reflect volume.

@AP. The Associated Press. A steadier pace than Reuters, 169.3 posts a week, and a median of 203 likes per original post. A good single follow for verified breaking news.

@BBCBreaking. BBC breaking-news alerts only; its bio sends international coverage to @BBCWorld and UK news to @BBCNews. At 30.8 posts a week it is the calmest major news feed here, and its posts drew a median of 1,550,622 views, the highest of any news account in our set.

@nytimes and @axios. The New York Times is the most-followed news account we checked (53.9M), and 22.5% of its recent posts were reposts, mostly of its own reporters and The Athletic. Axios posts short items at a high pace, about 261.6 a week.

Skip for now: @NPR. The account still shows 7.7M followers, but its newest post was 1,289 days old when we collected. NPR announced on April 12, 2023 that it would stop posting to its official Twitter accounts after the platform labeled it state-affiliated, then government-funded, media (NPR's own report is at npr.org/2023/04/12/1169269161/npr-leaves-twitter-government-funded-media-label). Our data shows it has not come back.

03 — Section

Best science and space accounts

Science and space accounts are where large audiences and real engagement overlap. The median post in this group drew 1,309 likes, and the accounts post a manageable 16.4 times a week at the median.

AccountFollowersPosts per weekMedian likes / viewsReply share
@NASA92.3M21.41,926 / 867,69020%
@SpaceX41.9M22.17,471 / 1,250,5307.5%
@NASAWebb3.5M3.51,309 / 128,18160%
@esa1.9M15.9139 / 22,7622.5%
@NatGeo28.1M16.4397 / 101,35247.5%

@NASA. The most-followed account in our whole set (92.3M). About 35% of its recent posts were reposts, mostly of NASA mission and center accounts, so following it is a good way to discover those.

@SpaceX. Launch updates and webcasts. It had the strongest engagement of the large science accounts, a median of 7,471 likes and 1,250,530 views per original post, and almost no reposts.

@NASAWebb. The James Webb Space Telescope's official account. It posts only about 3.5 times a week, but 60% of its posts are replies in threads that explain each image, and it earned 0.373 likes per 1,000 followers, the best ratio in this group.

@esa and @NatGeo. The European Space Agency is the counterpart to NASA for European missions and reposts heavily (37.5% of recent posts). National Geographic posts about 16.4 times a week and threads many of its stories as replies.

04 — Section

Best tech, AI and developer accounts

This is the group where small accounts beat big ones. The AI labs and researchers below have a fraction of NASA's audience, yet their median likes per 1,000 followers (1.61) is more than 20 times the science group's. They also reply far more: a median 37.5% of recent posts were replies.

AccountFollowersPosts per weekMedian likes / viewsReply share
@karpathy4.4M2.543,614 / 6,225,80277.5%
@AnthropicAI1.8M6.94,652 / 721,16327.5%
@OpenAI5.5M12.07,306 / 1,381,76540%
@GoogleDeepMind1.6M12.72,542 / 220,37237.5%
@verge4.8M661.612 / 9,9820%

@karpathy. Andrej Karpathy, a founding member of OpenAI and former Director of AI at Tesla, according to his own site (karpathy.ai). He posts only a few times a week, but his median original post drew 43,614 likes and 6,225,802 views, the highest engagement per follower of any account we checked (9.941 likes per 1,000 followers).

@AnthropicAI, @OpenAI and @GoogleDeepMind. The official accounts of three leading AI labs. Model launches, research papers and product changes show up here first, usually as a thread. All three ranked in the top four for engagement per follower.

@verge. The Verge covers consumer tech at a newsroom pace, about 661.6 posts a week, nearly all headline links. Useful in a tech List; heavy in a main feed.

For software developers, the official accounts of the tools you use are the fastest source of release notes, outages and deprecations.

AccountFollowersPosts per weekMedian likes / viewsReply share
@github2.7M18.4231 / 55,02615%
@code819K17.1242 / 27,24042.5%
@vercel466K4.0308 / 91,45115%
@nodejs916K1.6219 / 37,1930%
@ThePSF693K4.218 / 14,8307.5%

@github and @code. GitHub and Visual Studio Code both post a few times a day. @code replies a lot (42.5% of recent posts), often answering editor questions.

@vercel, @nodejs and @ThePSF. Vercel had the best engagement per follower of the developer group (0.661). Node.js and the Python Software Foundation post less often, so following them costs your feed little. One to drop: @rustlang, whose own bio now says the account is no longer active; its newest post was 568 days old.

05 — Section

Best sports accounts

League and broadcaster accounts post highlights and scores at a high pace, a median of 159.2 posts a week in this group, and almost never reply. Pick the competitions you care about rather than following every league.

AccountFollowersPosts per weekMedian likes / viewsReply share
@FIFAWorldCup13.2M16.310,554 / 302,9700%
@F112.9M82.05,006 / 260,3260%
@espn58.6M159.23,649 / 347,79410%
@NFL36.9M236.71,539 / 174,4870%
@NBA47.0M848.7483 / 72,84010%

@FIFAWorldCup. The official FIFA World Cup account. Its median original post drew 10,554 likes, the most of any account in our set except @karpathy, at a modest 16.3 posts a week.

@F1. Formula 1's official account, with 0.39 likes per 1,000 followers, the second best ratio among sports accounts.

@espn, @NFL and @NBA. The big US broadcasters and leagues. They are among the most-followed accounts anywhere, and during a season they post hundreds of times a week; @NBA was at about 849. Follow the one league you watch, or put them in a sports List.

06 — Section

Best finance, economics, culture and ideas accounts

Finance publishers are the busiest accounts on X and the least engaged per follower: a median of 555.9 posts a week and 31.5 likes per post in this group. The primary-source institutions are the better follows.

AccountFollowersPosts per weekMedian likes / viewsReply share
@federalreserve1.6M13.756 / 47,21612.5%
@IMFNews4.6M49.388 / 23,45610%
@FT7.1M555.932 / 19,9020%
@business10.5M2,602.17 / 15,4730%
@TheEconomist26.3M1,090.86 / 19,6800%

@federalreserve. The official channel of the Federal Reserve Board of Governors, per its bio: rate decisions, speeches and data releases, about 13.7 posts a week. Few accounts are a more direct primary source for markets.

@IMFNews. The International Monetary Fund. Half of its recent posts were reposts, most of them from its managing director Kristalina Georgieva (@KGeorgieva), so one follow covers the institution and its leadership.

@FT, @business and @TheEconomist. The Financial Times, Bloomberg and The Economist post article links at several hundred to a few thousand posts a week. Their engagement per follower was among the lowest we measured (under 0.001 to 0.004 likes per 1,000 followers), which says more about volume than quality. Read them in a List.

Culture and ideas accounts are slower and quieter, which makes them pleasant in a main feed, but this is also where we found the most dormant accounts.

AccountFollowersPosts per weekMedian likes / viewsReply share
@NobelPrize1.3M29.4332 / 22,8500%
@metmuseum4.2M3.7146 / 21,4970%
@librarycongress1.1M6.674 / 5,86422.5%
@TIME18.5M120.418 / 18,3060%
@smithsonian2.2M0.5100 / 26,00655%
@britishmuseum1.9M0.3181 / 35,976n/a

@NobelPrize. The official Nobel Prize feed: laureate announcements, lectures and the science behind each prize, about 29.4 posts a week with the best engagement per follower in this group (0.246).

@metmuseum and @librarycongress. The Metropolitan Museum of Art and the Library of Congress post objects and documents from their collections a few times a week. @librarycongress replies in threads (22.5% of posts) that add context to each item.

@TIME. A newsroom-pace feed, about 120.4 posts a week. Skip for now: @smithsonian and @britishmuseum, whose newest posts were 76 and 338 days old when we collected.

07 — Section

Famous accounts that went quiet

Four of the 38 accounts we checked had not posted in more than 30 days. Together they still show more than 12 million followers, because followers stay when an account stops posting. A follower count tells you how many people once followed an account, not whether it is alive.

AccountFollowersDays since newest postWhat happened
@NPR7.7M1,289NPR stopped posting in April 2023
@rustlang152K568Bio says the account is no longer active
@britishmuseum1.9M338No stated reason on the profile
@smithsonian2.2M76No stated reason on the profile

The chart below shows the posting pace of every account we measured, with the dormant ones in gray. The spread is enormous: from a few posts a year to a few thousand a week. The two dashed lines mark one and ten posts a day, a useful band for accounts you want in your main feed. Anything above the top line is better read in an X List; X allows up to 5,000 accounts per list and 1,000 lists per account (help.x.com/en/using-x/x-lists-not-working, confirmed by heise online's guide to X Lists).

Bar chart of posts per week at collection time for 37 X accounts on a log scale, sorted from @NPR, @britishmuseum and @smithsonian (gray, dormant) up to @Reuters and @business, with dashed reference lines at 1 and 10 posts a day.
Posting pace from each account's 40 most recent posts, including replies. Gray bars had no post in over 30 days. Data collected in 2026.
08 — Section

Build your own best-accounts list with the API

Every number on this page came from two read calls per account, and you can run the same check on any niche: your industry's companies, a conference's speakers, the maintainers of the libraries you use. No X account is needed for reads.

Step 1, verify the handle. GET /twitter/user/info?userName=<handle> returns the profile with followers, following, statusesCount and createdAt. An unknown handle comes back as HTTP 200 with status: "error" and msg: "user not found"; a suspended account comes back with data.unavailable: true. Drop both.

Step 2, read recent posts. GET /twitter/user/last_tweets?userName=<handle>&includeReplies=true returns 20 posts per page, newest first, with likeCount, viewCount, isReply, retweeted_tweet and createdAt on each. Follow next_cursor while has_next_page is true; two pages were enough for our pace and engagement numbers.

Step 3, score. Skip accounts whose newest post is older than 30 days, compute posts per week and median likes on original posts (not reposts or replies), divide by followers, and sort. The code below does all three.

What it costs. Profiles are $0.18 per 1,000 and timeline posts $0.15 per 1,000 ($0.003 for a full 20-post page), so one account check (a profile plus 40 posts) is about $0.006. Our 38-account check made 117 requests and cost about $0.23. On the official X API pay-per-usage rate card (docs.x.com/x-api/getting-started/pricing), the same reads cost $0.010 per user and $0.005 per post, about $0.21 per account; per 1,000 posts that is $5 against $0.15, roughly 33x. New accounts that pass the automatic bot check get up to $1 of free credits (at most 100,000 credits, no card, one per person or network, expiring after 31 days); before the first payment the rate limit is 0.2 requests per second, so the script waits 5 seconds between calls. Plans and per-endpoint rates are on the pricing page.

Limits to keep in mind. The API returns only public accounts; protected accounts' posts are not available. Forty posts is a snapshot, so rerun the check monthly rather than treating one week as permanent.

python
import os, time, statistics, requests
from datetime import datetime, timezone

BASE = "https://api.twitterapi.io"
HEADERS = {"X-API-Key": os.environ["TWITTERAPI_IO_KEY"]}
PAUSE = 5  # 0.2 requests/s before your first payment; 0.05 is fine once paid

def profile(handle):
    r = requests.get(f"{BASE}/twitter/user/info", headers=HEADERS,
                     params={"userName": handle}, timeout=30).json()
    if r.get("status") != "success" or not r.get("data"):
        return None                      # "user not found" comes back as status error
    if r["data"].get("unavailable"):
        return None                      # suspended or unavailable account
    return r["data"]

def recent_posts(handle, pages=2):
    posts, cursor = [], ""
    for _ in range(pages):
        time.sleep(PAUSE)
        r = requests.get(f"{BASE}/twitter/user/last_tweets", headers=HEADERS,
                         params={"userName": handle, "includeReplies": "true",
                                 "cursor": cursor}, timeout=30).json()
        posts += (r.get("data") or {}).get("tweets") or []
        if not r.get("has_next_page"):
            break
        cursor = r.get("next_cursor", "")
    return posts

def ts(s):
    return datetime.strptime(s, "%a %b %d %H:%M:%S %z %Y")

def score(handle):
    info = profile(handle)
    if info is None:
        return {"handle": handle, "status": "not found or unavailable"}
    posts = recent_posts(handle)
    if not posts:
        return {"handle": handle, "status": "no recent posts returned"}
    now = datetime.now(timezone.utc)
    oldest = min(ts(p["createdAt"]) for p in posts)
    newest = max(ts(p["createdAt"]) for p in posts)
    days = max((now - oldest).total_seconds() / 86400, 1 / 24)
    originals = [p for p in posts if not p.get("retweeted_tweet") and not p.get("isReply")]
    likes = statistics.median([p["likeCount"] for p in originals]) if originals else 0
    return {
        "handle": handle,
        "followers": info["followers"],
        "days_since_last_post": round((now - newest).total_seconds() / 86400, 1),
        "posts_per_week": round(len(posts) / days * 7, 1),
        "reply_share": round(sum(1 for p in posts if p.get("isReply")) / len(posts), 2),
        "median_likes": likes,
        "likes_per_1k_followers": round(likes / max(info["followers"], 1) * 1000, 3),
    }

candidates = ["NASA", "SpaceX", "NASAWebb", "esa", "NatGeo"]
rows = []
for h in candidates:
    time.sleep(PAUSE)
    rows.append(score(h))
active = [r for r in rows if r.get("days_since_last_post", 999) <= 30]
for r in sorted(active, key=lambda r: r["likes_per_1k_followers"], reverse=True):
    print(r)
for r in rows:
    if r not in active:
        print("skip:", r["handle"], r.get("status") or f"{r['days_since_last_post']} days since last post")
09 — Section

How we collected this

Question. Among well-known organization and public-figure accounts that readers commonly follow by topic, which are active, at what pace do they post, and how much engagement do their posts get relative to their size?

Accounts. 38 accounts in seven topics: news, science and space, tech and AI, developers, sports, finance and economics, and culture and ideas. The list was chosen editorially from organizations and public figures widely recommended in each field; @nytimes and @librarycongress were added after the first pass showed @NPR and @britishmuseum dormant, and @nodejs replaced @rustlang in the developer table. Every handle resolved through /twitter/user/info; none returned user not found.

Window and sample. Each account's 40 most recent posts including replies at collection time, via /twitter/user/last_tweets with includeReplies=true (for @britishmuseum that request returned an empty page, so its 40 posts exclude replies and its reply share is shown as n/a; for @rustlang only one page was read). 1,480 posts in the analyzed set, 1,115 of them original posts (not reposts, not replies). Collected in 2026; 117 requests, about $0.23.

Metrics. Posts per week = posts in the sample divided by the days from the oldest sampled post to collection time, times 7. Median likes and views use original posts only. Likes per 1,000 followers = median likes divided by followers, times 1,000. Reply share counts posts where isReply is true, including an account's replies inside its own threads.

What the sample cannot show. Forty posts is a snapshot: a launch week, a match day or a breaking story moves every number, and for the fastest accounts the pace is extrapolated from a span of hours. View counts are X's own counter. Engagement per follower does not measure accuracy or quality, and our picks are an editorial selection, not a census of every good account in each field.

Privacy. Aggregates only. Organization and public-figure accounts only; we did not analyze the accounts they reposted, quoted or replied to. Raw responses are kept compressed for audit; per-post rows in the published sample carry no ids, text or handles.

python
import os, time, statistics, requests
from datetime import datetime, timezone

BASE = "https://api.twitterapi.io"
HEADERS = {"X-API-Key": os.environ["TWITTERAPI_IO_KEY"]}
PAUSE = 5  # 0.2 requests/s before your first payment; 0.05 is fine once paid

def profile(handle):
    r = requests.get(f"{BASE}/twitter/user/info", headers=HEADERS,
                     params={"userName": handle}, timeout=30).json()
    if r.get("status") != "success" or not r.get("data"):
        return None                      # "user not found" comes back as status error
    if r["data"].get("unavailable"):
        return None                      # suspended or unavailable account
    return r["data"]

def recent_posts(handle, pages=2):
    posts, cursor = [], ""
    for _ in range(pages):
        time.sleep(PAUSE)
        r = requests.get(f"{BASE}/twitter/user/last_tweets", headers=HEADERS,
                         params={"userName": handle, "includeReplies": "true",
                                 "cursor": cursor}, timeout=30).json()
        posts += (r.get("data") or {}).get("tweets") or []
        if not r.get("has_next_page"):
            break
        cursor = r.get("next_cursor", "")
    return posts

def ts(s):
    return datetime.strptime(s, "%a %b %d %H:%M:%S %z %Y")

def score(handle):
    info = profile(handle)
    if info is None:
        return {"handle": handle, "status": "not found or unavailable"}
    posts = recent_posts(handle)
    if not posts:
        return {"handle": handle, "status": "no recent posts returned"}
    now = datetime.now(timezone.utc)
    oldest = min(ts(p["createdAt"]) for p in posts)
    newest = max(ts(p["createdAt"]) for p in posts)
    days = max((now - oldest).total_seconds() / 86400, 1 / 24)
    originals = [p for p in posts if not p.get("retweeted_tweet") and not p.get("isReply")]
    likes = statistics.median([p["likeCount"] for p in originals]) if originals else 0
    return {
        "handle": handle,
        "followers": info["followers"],
        "days_since_last_post": round((now - newest).total_seconds() / 86400, 1),
        "posts_per_week": round(len(posts) / days * 7, 1),
        "reply_share": round(sum(1 for p in posts if p.get("isReply")) / len(posts), 2),
        "median_likes": likes,
        "likes_per_1k_followers": round(likes / max(info["followers"], 1) * 1000, 3),
    }

candidates = ["NASA", "SpaceX", "NASAWebb", "esa", "NatGeo"]
rows = []
for h in candidates:
    time.sleep(PAUSE)
    rows.append(score(h))
active = [r for r in rows if r.get("days_since_last_post", 999) <= 30]
for r in sorted(active, key=lambda r: r["likes_per_1k_followers"], reverse=True):
    print(r)
for r in rows:
    if r not in active:
        print("skip:", r["handle"], r.get("status") or f"{r['days_since_last_post']} days since last post")
10 — Questions

Questions readers ask

What are the best Twitter accounts to follow?

It depends on the topic. From our check of 38 accounts: @Reuters, @AP and @BBCBreaking for news; @NASA, @SpaceX and @NASAWebb for science and space; @karpathy, @AnthropicAI, @OpenAI and @GoogleDeepMind for AI; @github, @code and @vercel for developers; @FIFAWorldCup, @F1 and @espn for sports; @federalreserve and @IMFNews for economics; @NobelPrize, @metmuseum and @librarycongress for culture. All were posting at collection time.

Are the accounts with the most followers the best ones to follow?

Not necessarily. Across 37 accounts the rank correlation between followers and likes per 1,000 followers was -0.44: larger accounts earned less engagement per follower, and none of the 10 most-followed made the top 10 for engagement. For a raw follower ranking see our most-followed leaderboard instead.

How can I tell if an X account is still active?

Open the profile and check the date of the newest post that is not pinned. With the API, /twitter/user/last_tweets returns the latest posts newest first, so the first post's createdAt tells you. Four famous accounts in our set, including @NPR and @rustlang, had not posted in more than 30 days.

How many accounts should I follow on X?

There is no fixed right number, but pace matters more than count. Accounts in our set ranged from under one post a week to about 2,602 a week. A handful of wire or newspaper accounts can fill a timeline by themselves, so put high-volume accounts in an X List and keep your main feed for slower, higher-signal accounts.

What is an X List and how many accounts can it hold?

A List is a custom timeline that shows posts only from the accounts you add, without following them. X allows up to 5,000 accounts per list and up to 1,000 lists per account (help.x.com/en/using-x/x-lists-not-working). Lists are the best place for fast news, sports and finance feeds.

Which AI accounts are worth following on Twitter?

The official accounts of AI labs, @OpenAI, @AnthropicAI and @GoogleDeepMind, plus researchers such as @karpathy. In our data the tech and AI group had the highest engagement per follower (1.61 likes per 1,000 followers at the median) and replied the most (37.5% of recent posts).

Can I find the best accounts in my own niche automatically?

Yes. Start with candidate handles, call /twitter/user/info to verify each one and /twitter/user/last_tweets to read its recent posts, then rank by recency, posts per week and likes per 1,000 followers. A profile plus 40 posts costs about $0.006 per account.

11 — Further reading

Continue

Sources & further reading
More from this series
Build it

Stop reading. Start building.

Starter credits cover real testing on real data. Google sign-in, no card, no application queue.

Get an API key