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.

  1. 30syou already have a folder of folders and no idea what any of them mean.
  2. 3minthe six-group map below, and which three groups hold most of what people want.
  3. 10minthe guided tour, group by group, with the real file names.
  4. 20minthe naming traps at the end, which are the reason some folders look empty when
  5. they are not.
6broad kinds of recordPeople, content, messages, activity, profile, privacy - our grouping, not Meta's. Their folder names are different and vary between accounts.
2formats you will meetJSON for structured records, HTML for rendered pages. Several sections can arrive as either.
0files with a table of contentsWhich is the entire reason this post exists.

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:

GroupRoughly 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.

The seven lists that are not in any file

Of the things people most want to know about their social graph, seven are not stored at
all.
They are arithmetic on the lists above:

  • Unfollowers — people who follow you and are not in your following list. Pure set

    subtraction.

  • Fans — following you but not followed by you. The same subtraction, labelled from the

    other side.

  • Mutuals — in both lists. An intersection.
  • Unfollowed but stayed — someone you unfollowed who still follows you. Found by

    intersecting recently_unfollowed against followers.

  • Ignored inbound requests — someone requested you and you never approved, so they are

    not a follower. Found by removing your followers from received requests.

  • Dead accounts — entries whose username is one of Instagram's __deleted__ placeholders,

    scattered across every list. They accumulate silently and nobody removes them.

Two consequences worth sitting with.

The first is that these are derived, not disclosed. Meta holds the ingredients and does
not hand over the recipe. Any tool showing you "your unfollowers" has done this subtraction
itself, and it is a judgement call rather than a fact from the file — which is worth knowing
before you treat a number as authoritative.

The second is subtler. Whether Instagram keeps sent requests in their own file, separate
from your following list, has a real effect on what "still to accept" means. We verified
against real exports that they are kept separately, which means a lingering request entry
whose username also appears in your followers means the request was accepted while the
record stayed behind. The file is not lying to you; it just is not tidied up.

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.

Why this folder is the most interesting one

Three reasons, in increasing order of how much they change what you can learn.

Timestamps are the whole point. Every one of these is an event with a time attached.
That means the export supports genuine questions about your own rhythm — when you were
active, what your weeks looked like, what changed and when — and it supports them with
records rather than impressions.

Searches are the most revealing list in the export. What you searched for privately, with
no audience, is exactly the sort of thing nobody documents. It is also the list people are
most likely to have forgotten exists.

The ads section is not about ads you saw. It is about categories Meta says it used to
decide what to show you, plus a list of the advertisers it says were involved. The gap
between "what I was shown" and "what I was classified as" is often the most alarming thing
in the file, and it is the clearest example of a conclusion the data supports and the
interface never offered.

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.

jsonIllustrative. Field names are simplified and every value is invented. The code below is a teaching example, not a transcription of your file.[^illustrative]
```json
{
  "string_map_data": {
    "Follower": "example_handle_one",
    "Following": "false",
    "Date Followed": "2021-06-14 09:12:44"
  }
}
```

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.

  1. 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.

  2. 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.

  3. 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.

  4. Large lists are sharded too. followers_1.json, followers_2.json and so on are one

    list. A tool that reads only the first shard will confidently report a follower count that
    is a fraction of the real one.

  5. 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.

  6. 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

  1. meta-data-policy
  2. gdpr
  3. illustrative
What's actually inside your Instagram data export — LMKFR Blog