What's actually inside your Instagram data export
An Instagram data export is a folder of folders with no table of contents. Here is a guided tour of what is actually in each one, which files carry the real record, and which parts Meta computes rather than stores.
There is a specific kind of disappointment that is specific to this file. You unzip it
expecting a record of yourself and you get connections, messages, personal_information,preferences, your_activity, and a media folder with several thousand images in it.
Every name is plausible. None of them tell you anything. There is no table of contents, no
index, no file called about_you_readable.txt. You are holding a filing cabinet with the
labels photocopied off the boxes inside it.
So this post is the tour. Every folder, what is genuinely in it, which files carry the
structured record and which are just a rendering of it, and — the part that surprised us
most when we built this — a fair amount of the most interesting information in your export
is not stored at all. It is computed from things that are stored, and once you can see
which is which, the whole cabinet makes sense.
Nothing here needs tooling to follow. It helps to have your unzipped export open beside
you, but reading this first is fine.
An Instagram data export contains six broad kinds of record: the people you are connected
to, the content you posted, your messages, your activity, your profile details, and the
privacy and advertising data Meta holds about you. Some arrive as structured JSON and some
arrive as rendered HTML. The JSON is where the usable fields are. Several of the most
interesting views — who unfollowed you, who is a mutual, which accounts are dead — do not
exist in any file and are calculated by comparing the lists that do.
- 30syou already have a folder of folders and no idea what any of them mean.
- 3minthe six-group map below, and which three groups hold most of what people want.
- 10minthe guided tour, group by group, with the real file names.
- 20minthe naming traps at the end, which are the reason some folders look empty when
- they are not.
The cabinet, and the six ways to sort it
The first thing to understand is that Meta's folders and the way anyone sensible groups
them are not the same thing. The download is organised the way a database is organised:
by the table that wrote the row. That is a reasonable way to store data and a terrible way
to find your own life in it.
We read the export into six groups, and we are labelling them as ours, because they are:
| Group | Roughly what it answers |
|---|---|
| **People** | Who is connected to you, and in what direction |
| **Content** | What you posted, and what media came with it |
| **Messages** | Who you talked to and what you said |
| **Activity** | What you did: likes, comments, searches, watches |
| **Profile** | The fields describing the account itself |
| **Privacy** | Logins, ad interests, advertisers, synced contacts |
If you only have patience for two of these, make them Messages and Activity. Those
two hold the large majority of what people are actually looking for when they finally open
this file. Content is mostly photographs you will recognise. Profile is fourteen fields you
could have typed in yourself. Privacy is the one that tends to be a surprise.
But the interesting thing is not any single group. It is the gap between what is stored
and what is true, which is where the rest of this post goes.
People: the twenty lists, and the seven that do not exist
This is the group that best demonstrates the difference, so it is worth going through
properly.
A connections export is a set of separate files, one per list, and the naming is more or
less literal. You will find files along the lines of
connections/followers.jsonaccounts following you
connections/following.jsonaccounts you follow
connections/close_friends.jsonthe small circle
connections/blocked_profiles.jsonaccounts you blocked
connections/muted_accounts.jsonaccounts you muted
connections/restricted_profiles.jsonaccounts you restricted
connections/pending_follow_requests.jsonrequests you sent and they have not answered
connections/follow_requests_you've_received.jsonrequests you have not answered
Each entry is small — a username, a link, and a timestamp — which is all you need to answer
a surprisingly large number of questions on its own.
Content: photographs, and the fields attached to them
The content group is the part people expect to be the emotional payload, and it is mostly
images — with a small amount of genuinely useful structured data attached to each one.
The shape is consistent: an item carries a caption, a timestamp, a path to the media, and
a media type. Posts, reels, and stories are separate lists rather than one combined feed,
and your profile pictures have their own. There is also a recently-deleted list, which is
worth knowing about even though it is usually empty.
captionwhat you wrote with it
timestampwhen it was posted, to the second
mediaPathwhere the file sits inside your export
mediaTypewhether this row was an image or a video
hashtagshashtags recorded on posts that actually used them
That last one has a behaviour worth stating plainly, because it confuses people: hashtags
appear only on posts that used them. An empty hashtag list on a post does not mean
Instagram failed to read your caption. It means no hashtag was detected. A caption full of
words is not a hashtag list.
Two pieces of this group are frequently overlooked.
Media shared in conversations is filed separately from your own posts. Photos and videos
you exchanged in direct messages turn up in the messages area rather than with your posts,
linked to the conversation they came from. This is why a media folder can contain a
surprising number of images that you did not post — they are screenshots, photographs and
links that other people sent you, retained because they were part of a thread.
Your watch history is not your activity either. It is its own list, kept apart from the
things you interacted with, and it is the only place in the export that records passive
consumption as opposed to deliberate action.
Messages: the folder that actually pays off
If you take one folder away from this post, take this one.
Messages arrive as a directory of conversations. Each conversation is a folder, and each
folder contains numbered files:
messages/inbox (details in [What you actually said](/blogs/instagram-export-messages-dms))/<conversation>_<id>/message_1.jsonthe first shard
messages/inbox (details in [What you actually said](/blogs/instagram-export-messages-dms))/<conversation>_<id>/message_2.jsonthe next shard
messages/message_requests/...threads you never accepted
The sharding is the first surprise. One long conversation is split across several files
(message_1, message_2, and so on) rather than being one file, so any tool that reads
only the first file shows you a fraction of a conversation that actually went on for years.
Treating those shards as one continuous thread, in order, is not difficult and it is where
a lot of the value is.
Inside, each message carries a sender, content, a timestamp, a type, and — often overlooked
— reactions, which record who reacted to a specific message with what. That turns a
thread into something searchable by tone as well as topic, which is not something the
Instagram interface has ever offered you.
Message types run beyond plain text. Photos, videos, audio, voice notes, links, stickers,
GIFs, shared posts, shared reels and shared stories are all distinguished, and there is a
distinct type for messages that were unsent — prepared and never delivered. Whether
that appears in your export at all varies, but when it does, it is one of the more revealing
rows in the entire export.
Activity: the biggest folder, and the least obvious
Your activity folder is usually the largest thing in the download, and it is the one people
open expecting nothing. It is where the shape of your attention turns out to be recorded.
It is a long list of small files, one per kind of interaction, and the set is larger than
most people expect. Things you liked, things you commented on, comments you wrote,
searches you ran, posts you saved, stories you viewed, stories you reacted to, story
polls you answered, story questions you answered, music you saved, things you reposted,
links you clicked, ads you clicked, ads you viewed, posts you viewed, posts you were shown
and marked interested or not, profile searches, tag searches, keyword searches, reels you
commented on, notes you interacted with, and reels you watched.
One caveat that belongs here rather than at the end: activity is recorded from one
account's point of view, and it counts interactions, not relationships. Someone who never
posts and only ever liked your photographs is genuinely present in this folder and genuinely
invisible everywhere else.
Profile: fourteen fields
This is the smallest group and it takes thirty seconds.
personal_information/personal_information.jsonthe account's own details
usernameyour handle at the time of export
fullNamethe display name on the profile
biothe profile text
emailthe email on the account
phonethe phone number on the account
birthdaythe date of birth on the account
accountBasedInthe country listed on the profile
isPrivatewhether the account was private
isProfessionalwhether it had switched to a business or creator account
professionalCategorythe category chosen for that account
accountCreatedwhen the account was created
These are the fields you typed in. They are worth reading precisely because they are the
part of the export that is not derived, not inferred and not about behaviour — just what the
account says it is.
Privacy: the folder you did not expect to be interesting
The privacy and settings material is usually filed near the bottom and usually skipped. It
contains some of the most concrete facts about how you are treated.
Login history is the standout. It records IP address, user agent, device, location and
time for each sign-in. This is the only place in the entire export that says where your
account was used from, and for anyone who has ever wondered whether an old device still has
access, it is the file to read.
Around it you will find signup details, password change activity, profile status changes,
privacy changes, device and language information, logout activity, notification preferences,
synced contacts, your topics, ad interests, the advertisers using your activity, links you
visited, eligibility information, account history, and interactions with AI features.
What the export gives you, and what it becomes
The most common confusion in this whole process is not about folders. It is about
expecting the file to be a record and finding it is a rendering of a record. Here is the
distinction, on a single row of real data.
```json
{
"string_map_data": {
"Follower": "example_handle_one",
"Following": "false",
"Date Followed": "2021-06-14 09:12:44"
}
}
```Follower is not a label — it is the key, and the value beside it is an account. Following
being false tells you that account follows you, not that you follow them; the direction
is decided by which key the value sits under. And the date is a string, not a timestamp,
which means it has to be parsed before it can be compared to anything.
Three facts, none of which is visible until someone reads it as structure:
string_map_dataan object of key/value pairs, not a table
"Following: false" -> the key names the relationship, the value is a boolean
"Date Followed"a formatted string, not an epoch timestamp
And that is the whole difference between the file and the thing you wanted:
What the export gives you
A folder called connections, containing followers_1.json through followers_7.json, each
one an array of objects whose keys are strings like Follower and Date Followed, whose
timestamps are formatted strings, and whose usernames appear exactly once per shard with no
marker of which shard is new.
What it becomes once you can read it
One list of the accounts that follow you, deduplicated across shards, sorted by when each
one followed, with the direction of every follow resolved and the dates turned into something
you can compare.
That transformation is boring on purpose. Counts derived deterministically from your own
file, on your own machine, are checkable by you. Anything that involves a system guessing
what the numbers mean is both less accurate and a worse thing to hand your archive to.
Names that will trip you up
Six things in this export reliably surprise people. None of them is your fault.
- Conversation folders carry a numeric suffix. The folder is named after the
participants and then given an internal identifier —
someone_1234567890, say. That
number is not part of the person's name and should not appear in anything you read out of
it. Strip it and the folder names become readable. - Long conversations are split across numbered files.
message_1.json,message_2.json, and onwards, all one conversation. Reading only the first shows you a
small fraction of a long thread. - The same section can have several file names. Profile details alone have at least
three. Absence under one name is not absence from the export.
- Large lists are sharded too.
followers_1.json,followers_2.jsonand so on are onelist. A tool that reads only the first shard will confidently report a follower count that
is a fraction of the real one. - Some text arrives mis-encoded. Certain filenames, particularly conversation folder
names, can come through with mangled characters where accents or non-Latin scripts were
written in one encoding and read in another. It is recoverable, and it is worth knowing
that the mangling is in the file rather than in your reader. - Empty is not the same as absent. A section can exist as a folder and contain nothing
because nothing of that type ever existed, and it can also contain nothing because that
particular slice is not in what you requested. They look identical from outside.
Where to go from here
If you have read this far you know more about the shape of your export than most people
ever do, and the practical next step is much shorter than it looks.
Open three things, in this order. Your messages/inbox (details in [What you actually said](/blogs/instagram-export-messages-dms)) folder, your activity folder,
and your login history. They are the three places where the file is both dense and
unglamorous, which is where the actual information lives.
Check the format before you draw conclusions. If a section you care about arrived as
HTML rather than JSON, the fields you are looking for may not be in that section at all —
and no better tool will recover them. We have written about that specific failure at length,
because it is the one that produces the most false conclusions about your own life:
Why your Instagram export is missing half your life
Then let a tool do the reading. Not because the export is unreadable — it is entirely
readable — but because the work of merging shards, deduplicating lists, parsing dates and
joining relationships is exactly the kind of work that computers are worse at people for
doing by hand and much better at doing reliably. LMKFR does all of it locally, in your
browser, and shows you which parts are measured and which are inferred.
And check who ends up holding the file before you hand it to anyone. Now that you know
this is the most sensitive file you own — messages, contacts, login history, and a fair amount
about other people besides — the question stops being whether a tool is useful and starts
being whether it needs a server. That is a different question with a different answer, and it
has a one-minute way to settle it:
Is it safe to upload your Instagram data export?
Then go deeper on whichever folder surprised you. This page is the map — every folder named,
every field explained once. It is deliberately not the last word on any of them, because a
folder like connections has an entire argument of its own about who is actually in your graph
and what the difference is between the three views everyone quotes. Start where the inventory
made you pause:
Who was actually in your Instagram life?
Questions this comes up
How many files are in a typical Instagram data export?
There is no fixed number, and the honest answer is that it varies enormously by account. A
small account with little history can produce a few dozen files. An account with years of
activity, a large following list and a substantial media folder can produce thousands. The
variation comes mostly from sharding — long messages and large follower lists are split
across numbered files — so file count tracks how much you did more than it tracks how much
Meta is holding about you.
What is the single most useful folder in the export?
It depends entirely on what you are asking, which is why this post is a tour rather than a
recommendation. Messages is the richest if you want to know who you actually talked to.
Activity is the richest if you want to know what you paid attention to. Login history is the
most useful if you have a security question. And if you want to know what was said about
you, there is no folder that answers it, which is a different kind of answer.
Does the export contain my old DMs if I deleted the app?
It contains what the account currently holds, which is not the same as everything that ever
existed in the app. Deleting the app from a device does not remove your messages from the
account, so those will normally be present. Messages deleted from within the conversation are
gone, and a thread you never accepted may be filed under message requests instead of your
inbox.
Why is there a folder of files I do not recognise at all?
Probably a section added to the export after the one you remember requesting, because the
set of sections has changed over time and varies by platform. Preferences, account settings
and newer feature-specific folders are all normal. If a file is empty that is normal too —
sections are created whether or not there is anything to put in them.
Can I get a bigger export than this one?
Only by requesting again, and only for specific sections. Re-requesting a section in JSON can
recover detail that arrived as a rendered HTML page. It cannot recover anything that was
never stored in the first place, and it cannot retroactively extend the period your history
covers — the export reflects what the platform holds when you ask for it.
Is it safe to send my export to an online tool?
That is a real question and the answer depends entirely on the tool. LMKFR does not need it:
in local mode your export is read in your browser and does not leave your machine. For
anything else, the relevant questions are whether the file is processed on a server, whether
it is retained after processing, and whether it is used to train anything. Your export
contains private messages and an address book. Treat any tool that will not answer those
three questions plainly as a no.
Where the sourced version lives
Every structural claim on this page is checkable against the file in front of you, which is
a better source than we are. The naming details are the kind of thing that shifts between
account types, platforms and dates of request, so if your file disagrees with this page,
your file is right and this page is out of date — and we would like to hear about it.
The one thing worth citing is the boundary of the whole exercise. Meta's Data Policy is the
reference for what "your information" is defined to include, and therefore the honest limit
of what any request can return.1 The right to a copy of your personal
data is spelled out in data protection law in the EU and UK, on a fixed deadline.2
1: Meta Data Policy — the definition of "information about you" from which
the export is drawn, and therefore the honest boundary of what a request can return.
<https://www.facebook.com/privacy/policy/>
2: Regulation (EU) 2016/679 (GDPR), Article 15 — the data subject's right of access to
personal data. <https://eur-lex.europa.eu/eli/reg/2016/679/oj>
3: The JSON above is illustrative. The field names are simplified and every
value is invented; a real connections entry carries a different internal shape and often
different key names. It is included to show what structured data looks like, not to describe
your file. Read your own.
LMKFR is an independent project. It is not affiliated with, endorsed by, or associated
with Instagram or Meta, and it works only with a file you already hold. Every file name in
this post is a real name our parser looks for, drawn from the export format itself rather
than from documentation, and every number is either counted from your own file or labelled
as illustrative.
Footnotes
- meta-data-policy
- gdpr
- illustrative