Twitter Username History: How to Check and Track It
X shows how many times a handle changed and when, but not the old names. How to read that count, where past names can still turn up, and how to log new renames.
Tarun Khatri
Published · Updated · 7 min read
X shows a Twitter username history only as a count of changes and the date of the last one, not the old names.
This guide is for researchers, brand teams and developers who need to know who an account used to be. You will read the count, find old names where they still exist, and log every future rename yourself. We run Weir, the API in the examples.
See an account's rename count and last change date:
curl https://api.weirapp.io/v1/x/users/XDevelopers/about \
--header "Authorization: Bearer $WEIR_API_KEY"
You need a free Weir key, Python with requests, and a list of accounts. Here is the plan:
- Read the countOpen "About this account", or call the about endpoint.
- Look for old namesTry memory.lol and archived copies of the profile.
- Save the user IDKeep the numeric ID next to every handle you track.
- Check on a scheduleLook up your IDs daily and log any new username.
Step 1: Check a Twitter username history count
X counts renames for every public account. Tap the "Joined" date on a profile to open "About this account". It lists the username changes and when the last one happened.
That is the whole history X gives you: a number and a date.
The API returns the same numbers. We ran it on @XDevelopers on 21 October 2026, for 3 credits:
{
"id": "2244994945",
"username": "XDevelopers",
"aboutProfile": {
"usernameChanges": {
"count": 1,
"lastChangedAt": "2023-07-26T01:33:12.280Z"
}
}
}
One change, on 26 July 2023. That matches the news: MobileSyrup reported that day that "@TwitterDev is now @Xdevelopers".
A count of 0 comes with a lastChangedAt of null. Our guide to what "account based in" means on X covers the other fields on that screen.
Step 2: Find the old usernames
X does not show past handles, so you need an outside record. Each place holds a different part:
| Where to look | What it holds | The limit |
|---|---|---|
| About this account | The count and last date | No old names |
| memory.lol | Names it saw for each ID | Public: past 60 days |
| Wayback Machine | Saved copies of a profile | Only if someone saved it |
Start with memory.lol, since you can query it by account ID. Its README says it covers 542 million names for 443 million accounts.
The Wayback Machine is the fallback. Search it for the old profile URL if you can guess the old handle.
memory.lol has a catch. Its README says public lookups only cover facts "observed in the past 60 days". The full index, with good coverage back to 2011, is for approved researchers, journalists and activists.
We checked on 21 October 2026. The service answered, but a public lookup for @XDevelopers came back empty.
Step 3: Store the user ID, not the handle
Every X account has a numeric ID that never changes. The handle is only a label on top of it.
X's help center says a renamed account keeps its followers, Direct Messages and replies. It also warns that the old username "will immediately be available for use by someone else".
That is why a list of handles goes stale. Last year's @name can belong to a stranger today.
A tool that saves only handles will quietly start reading the wrong account.
So key your own data on the ID. Save it the first time you see an account, right next to the handle.
The ID still finds the account after a rename. We looked up 2244994945 on 21 October 2026, for 3 credits:
{
"id": "2244994945",
"username": "XDevelopers",
"createdAt": "2013-12-14T04:35:55.000Z"
}
Both endpoints in this guide take an ID. The about call costs 2 more credits that way, because the ID is turned into a username first.
Step 4: Track Twitter account name changes with a script
You can't get the past back, but you can record the future.
Save each account as an ID and a handle in a small JSON file. On every run, look up the IDs and compare the handles.
This script reads up to 100 IDs in one call to GET /v1/x/users:
import json, os, requests
headers = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"}
seen = json.load(open("handles.json")) # {"2244994945": "XDevelopers"}
r = requests.get("https://api.weirapp.io/v1/x/users",
params={"ids": ",".join(seen)}, headers=headers, timeout=60)
r.raise_for_status()
for user in r.json()["data"]:
old = seen[user["id"]]
if user["username"] != old:
print(f"{user['id']}: @{old} -> @{user['username']}")
seen[user["id"]] = user["username"]
json.dump(seen, open("handles.json", "w"))
When a line prints, you have a rename with its old and new handle.
Call the about endpoint once for that account to get the exact time from lastChangedAt. Now your log has the old name, the new name and the date, which X alone never shows.
An ID that X can't return lands in meta.notFound and costs nothing. That usually means the account was suspended or deleted.
Step 5: Run it on a schedule
Run the script once a day with cron or any task scheduler. A rename between two runs still gets caught, because the ID never moves. Two renames in one day show up as one.
0 9 * * * cd /home/you/handles && python check_handles.py >> renames.log
Each run costs 1 credit plus 2 per account found:
Pick daily when a missed day would hurt you, such as watching accounts that copy your brand. Weekly is cheaper for research lists.
The first two fit inside the 5,000 free credits a month. The third costs about $1.21 a month from the $5 pack. Rates are on the pricing page.
Want each account's new posts too? An x_user monitor follows the account by ID, so it keeps working after a rename. Our guide to monitoring an X account with a webhook sets one up.
Use it for accounts, not to target people
Rename history is useful for brands, bot research and reporting.
A scam account that grabbed a freed brand handle shows up fast. So does a network of accounts that all renamed themselves on the same night.
It is not a tool for following a private person. X already shows the count to anyone, but logging someone's handles to stalk or expose them breaks Weir's acceptable use policy.
If it doesn't work
- A
404from the about call means the account is protected or gone. Protected accounts keep this screen private. - A
400on the bulk call usually means a space or a handle inids. Send digits only, comma-separated. - A
429means you went over 30 requests a minute on the free tier. Wait and retry. - No new handle after a known rename? Check that you saved the ID, not the old handle.
When not to use Weir
- You need names from years ago. We can't recover them; only an archive like memory.lol might have them.
- You track one or two accounts. Tapping the "Joined" date in the app is free.
- You need data under a contract with X. Weir reads public pages and is not licensed by X, so access can change.
FAQ
How can I see someone's previous usernames on Twitter?
X itself shows only how many times a username changed and the date of the last change. For the old names, try memory.lol or an archived copy of the profile. Public memory.lol lookups only cover the past 60 days.
Is there a Twitter username history API?
Not for past names. Weir's about endpoint returns the change count and the last change date, as X shows them. To build a full history, store each account's ID and record new handles on a schedule.
Does memory.lol still work?
Yes, it answered our test on 21 October 2026. Public lookups cover what it saw in the past 60 days. The full archive needs a login and approval as a researcher, journalist or activist.
Does changing your username on X remove anything?
No. X's help center says followers, Direct Messages and replies stay with the account. The old handle is freed at once, so someone else can claim it.
Sources
- X Help Center, how to change your username (checked 21 October 2026): https://help.x.com/en/managing-your-account/change-x-handle
- X Help Center, common username issues (checked 21 October 2026): https://help.x.com/en/managing-your-account/help-with-common-username-issues
- memory.lol README (checked 21 October 2026): https://github.com/travisbrown/memory.lol
- memory.lol commit history, last commit 21 January 2026: https://github.com/travisbrown/memory.lol/commits
- MobileSyrup, X renames its official handles (26 July 2023): https://mobilesyrup.com/2023/07/26/twitters-old-handle-goes-private-as-company-takes-over-x-username/
- Weir API reference, bulk account lookup: https://docs.weirapp.io/reference/x/getXUsers
- Weir monitors and webhooks: https://docs.weirapp.io/monitors