Guide
How to download your X archive, and what is in it
Your X (Twitter) archive holds every post you have written, with its date, likes and reposts. Here is how to get it, which few files matter, and how to read them without being misled.
Updated
On X, open Settings and privacy, then Your account, then Download an archive of your data, confirm your password and request the archive. X sends an email and an in-app notification when it is ready, and you download a .zip while signed in. Your posts are in data/tweets.js (large accounts also get tweets-part1.js and so on), long posts in data/note-tweet.js and account details in data/account.js. Each post carries its text, time, likes and reposts as of the export, but no impressions: X leaves those out of archive downloads.
Request the archive
On the web:
- Open More in the menu beside your timeline.
- Choose Settings and privacy, then Your account.
- Choose Download an archive of your data.
- Confirm your password, then choose Request archive.
In the X app, tap your profile picture, then Settings and privacy, Your account and Download an archive of your data, and follow the same steps. Signed in on the web, the page is also at x.com/settings/download_your_data.
X prepares the file and tells you by email and in the app when it is ready. Download the .zip while signed in to the same account. Xβs menus move from time to time; if a step is missing, search Xβs help centre for βdownload your X archiveβ.
The files that hold your writing
The archive comes with an HTML page for browsing it and a data folder of machine-readable files covering most of what X keeps about you. For your writing, three matter:
| File | What it holds |
|---|---|
data/tweets.js | Every post, reply and repost, one row each. Large accounts get the rest in tweets-part1.js, tweets-part2.js and so on. |
data/note-tweet.js | The full text of long posts, beyond the first 280 characters. |
data/account.js | Your account id, handle and display name, plus your email address, when you created the account and the app you created it from. |
The rest covers media, direct messages, the accounts you follow and that follow you, Lists, and information about ads. The IP address you signed up from has a file of its own, account-creation-ip.js. None of it is needed to study what you wrote.
What each post carries
Each row of tweets.js is one post: its id, text, time (in UTC), like count and repost count, whether it replies to or quotes another post, and its hashtags, mentions, links and media. Your reposts of other peopleβs posts are in there too, marked by a retweeted_status field or text starting with βRT @β.
Two things are missing. There are no impressions: X leaves them out of archive downloads, so an archive tells you how people reacted, not how many saw a post. And the counts are frozen on the day you requested the archive; a post that kept travelling afterwards will not show it until your next download.
Reading tweets.js yourself
The file is JSON behind one line of JavaScript. Delete everything before the first [ and any JSON tool will open it:
window.YTD.tweets.part0 = [
{
"tweet" : {
"id_str" : "1834000000000000000",
"created_at" : "Tue Sep 17 08:12:40 +0000 2024",
"full_text" : "Why do onboarding emails get ignored?",
"favorite_count" : "42",
"retweet_count" : "5",
"entities" : { "hashtags" : [ ], "user_mentions" : [ ], "urls" : [ ] }
}
}
]Values above are made up. Note that the counts are stored as text (β42β, not 42), and that the time is in UTC: convert it to your own zone before you group posts by hour, or a late-evening post lands on the wrong day.
When the archive is too big
An archive is mostly photos and video, often gigabytes around a few megabytes of text. You do not need to upload all of it anywhere to study your writing. Crux, for example, takes the whole .zip up to 500 MB, but recommends sending just the text files: tweets.js with its part files, note-tweet.js and account.js, up to 200 MB each and 300 MB in total. It recognises them by what is inside, so a download renamed βtweets (1).jsβ still works, and it reads only the id, handle and display name from account.js.
Analysing it fairly
The tempting move is to sort by likes. On an account that has grown, that mostly ranks posts by date: a post from two years ago reached fewer people because fewer people followed you. Compare each post with the posts you published around it instead. Crux divides each postβs likes plus 3 times its reposts by the median of the 20 posts nearest it in time, then groups posts by hook, format, topic and time, and reports a group only when it clears a test against chance. The full method.