How to Find Old Tweets — What Actually Works, and What Doesn't
How to Find Old Tweets — What Actually Works, and What Doesn't
You remember the post. Roughly what it said, roughly when, definitely who wrote it.
You search for it. Nothing. You scroll their profile for ten minutes, get to about six weeks ago, and give up.
This is a known and frustrating gap. X's search index heavily favours recent content, and profile scrolling gets slower the further back you go. Neither is built for "find me something from 2023".
Here's what actually works, in order of how likely it is to succeed.
Method 1: Your own archive (if it's your account)
If the posts are yours, this is the answer and almost nobody uses it.
X will give you a complete archive of everything you've posted — every tweet, every reply, every DM, going back to the day you signed up. Not a sample. Everything.
Settings → Your account → Download an archive of your data
You'll wait somewhere between a few hours and a couple of days, then get a ZIP. Inside is a browsable HTML file and, more usefully, the raw JSON.
Why this beats every other method: it's complete. No index gaps, no rate limits, no scrolling. It's the ground truth about your own account.
Its one limitation: it's a snapshot. Request it today and you have everything up to today; posts from tomorrow need a fresh request.
★If you only take one thing from this article: request your archive now, before you need it.★ For accounts that aren't yours, the equivalent move is starting to capture them before you need those too.
Method 2: Search with a date range
For other people's posts, this is the first thing to try.
from:username since:2023-01-01 until:2023-06-30
Add keywords if you remember any:
from:username "conference" since:2023-01-01 until:2023-12-31
How well this works depends entirely on how old the posts are. Recent months are reliable. A year back is patchy. Several years back and you're often searching an index that simply doesn't have it.
⚠️ Narrow the window rather than widening it. A six-month range often returns less than three separate two-month ranges run one after another, because each query hits a result cap before the range is exhausted. Splitting the period into chunks and running them separately is the single most effective trick here.
If you're running many of these windows in sequence, that's the kind of thing an API handles better than a browser tab.
Method 3: Read the profile timeline directly
Search and profile browsing use different paths, and the profile path is often better for older content.
Reading a timeline programmatically gets you further than scrolling by hand — you page back with a cursor instead of waiting for the interface to load more.
import requests
BASE = "https://api.socialapi.tech"
KEY = "your_api_key"
def get_timeline(username, pages=10):
"""Page back through a user's timeline."""
all_tweets, cursor = [], None
for _ in range(pages):
params = {"username": username, "limit": 100}
if cursor:
params["cursor"] = cursor
r = requests.get(
f"{BASE}/v1/user/last_tweets",
params=params,
headers={"X-API-Key": KEY},
timeout=60,
)
r.raise_for_status()
body = r.json()
batch = body["data"]
if not batch:
break
all_tweets.extend(batch)
cursor = body.get("meta", {}).get("next_cursor")
if not cursor:
break
return all_tweets
tweets = get_timeline("nasa", pages=10)
print(f"{len(tweets)} tweets, oldest: {tweets[-1]['created_at']}")
What to expect: a single page returns around 100 posts. For an account that posts a few times daily, that's a couple of weeks per page. Ten pages gets you a few months. A prolific account will cover less ground per page than a quiet one.
This is bounded — you can't page back indefinitely — but it reaches further than search does for the same account.
Method 4: Third-party archives
For historically significant accounts, someone has often already archived them. Public archives exist for politicians, well-known figures, and various institutional accounts.
These are the only reliable route to genuinely old posts, including deleted ones, because they captured the content at the time.
Their limitation is coverage: they exist for accounts someone thought worth archiving, which is a very small fraction of X.
What doesn't work
Worth stating plainly so you don't waste time:
Deleted posts. Once deleted, a post is gone from X entirely — search, profile, API, all of it. What survives is what someone else captured: a quote-tweet, a screenshot, a third-party archive. There is no way to retrieve a deleted post from X itself, and any tool claiming otherwise is showing you a cached copy from somewhere else.
Suspended accounts. When an account is suspended its posts go with it. Same situation as deletion.
Protected accounts. If they were protected when posted, you were never able to read them and that doesn't change retroactively.
Google. People suggest site:twitter.com searches. It sometimes surfaces something, but Google's coverage of X is thin and getting thinner. Worth thirty seconds, not worth planning around.
The reliable answer: capture it going forward
Every method above is an attempt to reconstruct history that wasn't saved. They all have gaps, because the underlying index has gaps.
If you need reliable history for specific accounts, the working approach is to stop trying to reconstruct and start capturing. Poll the accounts you care about on a schedule, store what comes back, and in three months you have three months of complete history — including posts that were later deleted.
import json, pathlib
def capture(username):
"""Append new tweets to a local archive. Run daily."""
archive = pathlib.Path(f"{username}_archive.jsonl")
seen = set()
if archive.exists():
with archive.open() as f:
seen = {json.loads(line)["id"] for line in f}
fresh = [t for t in get_timeline(username, pages=2) if t["id"] not in seen]
with archive.open("a") as f:
for tweet in fresh:
f.write(json.dumps(tweet) + "\n")
return len(fresh)
Run that daily and your archive grows without gaps. Two pages is plenty for a daily run on most accounts — you only need to reach back to yesterday.
★The asymmetry worth internalising: capturing forward is cheap and complete; reconstructing backward is expensive and full of holes.★ The best time to start was whenever you first wanted the data. The second best time is now.
Questions people ask
How do I find old tweets from someone?
Search with from:username since: until:. If that fails, page back through their timeline programmatically, which usually reaches further.
How do I find my own old tweets? Download your archive from Settings. It's complete, which nothing else is.
Can I search my Twitter history?
Yes — from:yourusername plus keywords. For anything genuinely old, the downloaded archive is more reliable.
How far back does Twitter search go? Nominally to the beginning, practically not far. Recent months are dependable; years-old queries return partial results at best.
Can I recover deleted tweets? Not from X. Deletion removes them from every X surface. Only external copies — quotes, screenshots, third-party archives — survive.
How do I see someone's first tweet? Their profile page has a "joined" date; getting the actual first post means paging to the very end of their timeline, which is only feasible for accounts that don't post much.
What is the Twitter archive? Two different things: the ZIP export of your own data from Settings, and third-party archives of notable accounts. The first is complete for you; the second is complete for whoever was archived.
How long does the archive download take? Usually a few hours, sometimes a couple of days. X emails you when it's ready.
What's in the archive file? Your posts, replies, DMs, likes, and account history — as browsable HTML plus raw JSON. The JSON is the useful part if you're processing it.
How do I clear my Twitter search history? That's your own search box history, not posts — tap the search bar and clear recent searches. Unrelated to finding old posts.
Can I find tweets from a specific date?
since:2023-05-01 until:2023-05-02 gets a single day, if the index still holds it.
Why can't I find a tweet I know exists? Most likely the index doesn't cover it — old content thins out. Also possible: it was deleted, the account is protected, or the account was suspended.
Is there a way to archive someone else's tweets? Yes, by capturing them yourself over time. You can't retroactively archive what you didn't capture.
How do I download all tweets from an account? Your own: the archive export. Someone else's: page through their timeline and store the results. The second is bounded by how far back the timeline reaches.
Can I search tweets that were quote-tweeted? Yes, and this is a useful trick for finding deleted content — the quote often preserves the original text even after the original is gone.
Does the API give me full history? No API gives complete history, because X's own index doesn't have it. Going forward is complete; going backward is partial.
How many tweets can I retrieve per request? Around 100 per page. Use the cursor to page back further.
What's the best way to keep a permanent record? Capture on a schedule and store it yourself. Anything that depends on X still serving the post is temporary by definition.
Can I find old tweets without an account? Sometimes, on the web, with heavy restrictions. Not something to rely on.
How do I find the first tweet from an account? Page to the end of the timeline. ★Cheap for small accounts, expensive for large ones★ — the cost is page count, not difficulty.
How do I see someone's Twitter history? Page their timeline in order. ★"History" is something you assemble★ — no endpoint hands it to you as a unit.
How do I view my own Twitter history? Request the official account archive for completeness, or page your timeline for what is publicly visible.
Does Twitter have a watch history? No. ★Viewing is not recorded in any retrievable form★ — the boundary that governs this.
How do I search an archive? Only within one that captured the posts. ★Platform search is not an archive★, which is why old posts get harder to find rather than impossible.
Can I find a specific person's oldest posts? Yes — page to the end. ★The constraint is how many pages, not whether it works.★
Why do archives of public figures exist? Someone captured them continuously. ★That is the only mechanism★ — nobody reconstructed them afterwards.
How do I search a Twitter archive? Only inside one that captured the posts. ★Platform search is not an archive★ — the distinction matters more than it sounds.
How do I view my Twitter history? Request your official account archive for completeness, or page your timeline for the public part.
Is there a Twitter watch history? ★No.★ Viewing is never recorded in a retrievable form — the rule.
How do I see my whole Twitter history? The official archive is the only complete copy — ★request it before deleting anything★.
Can I get follower count history? ★Only if you recorded it.★ No historical series is served — how to build one.
Is there a follower history tool? Any tool storing daily snapshots. ★They cannot show you history from before you started.★
How far back does my archive go? To the beginning of the account — ★that is what makes it different from search★.
How long does the archive take? Hours to a couple of days, delivered as a downloadable file.
Can I get someone else's archive? ★No — archives are account-owner only.★ For other accounts, page their timeline.
Does the archive include deleted posts? Only if they existed when it was generated — what deletion removes.
Can I search inside my downloaded archive? Yes — it is a local file, ★which makes it far more searchable than the platform★.
What format is the archive? A browsable bundle with the underlying data included.
Can I automate archiving? ★Yes — scheduled paging★ — the forward-capture pattern beats any backward reconstruction.
Why archive at all if posts stay up? ★Because deletion is irreversible and unannounced★ — you cannot capture retroactively.
If you're building an archive
The capture script above is the shape of it. What makes it work long-term is the boring part: paging that doesn't truncate, deduplication that survives restarts, and retries that tell a rate limit apart from a transient failure.
That's what our API handles — cursor-based paging with full engagement counts on every post, flat price per call, no rate limit of your own to manage.
Two things we don't bill for: requests we reject before they leave us — a malformed parameter, say — and errors on our side.
Related reading: advanced search operators including date ranges · monitoring accounts in real time · what to do when X returns a rate limit error.