How to read your Instagram data export

Your Instagram data export is a folder of folders, in formats most people cannot read. Here is how to request it, open it, and understand what is actually inside.

There is a specific moment in this process that almost everybody hits, and it is the
moment a person opens their Instagram data export, sees a folder of folders with names
like connections and your_posts and media, opens one of the .json files, and
stares at a single line of text that runs off the side of the screen.

That is not your fault, and the file is not broken. It is doing exactly what it was
built to do, which is to be read by software rather than by a person. You just happen
to be a person.

So this post is the whole first stage of reading your own archive, in order: how to
ask for the file, which format to ask for, what lands in your downloads folder, and
what to do with a JSON blob once you are holding it. There is no tooling required for
the first four steps. Nothing leaves your machine at any point in this article.

An Instagram data export is a ZIP archive full of machine-readable files, and it is
not meant to be read by eye.
Request it from Meta's own Download Your Information
tool, choose JSON where the option exists, wait for the email, unzip it, and open a
single .json file in any text editor to confirm you have the real thing. Reading it
as a human record is a separate step, and it is the step this series is about.

  1. 30syou already know the shape of the problem: it is a file, not a profile.
  2. 5minrequest the export and pick the format, which is the only decision that is
  3. genuinely hard to undo later.
  4. 2minfind the email, download the ZIP, enter the password, unzip.
  5. 1minopen one .json file and see what a machine-readable record looks like.

What you are actually working with

Before the steps, the mental model, because most of the confusion is a wrong model
rather than a missing tool.

An export is a snapshot of what Meta currently holds about one account, generated
on request, in a machine-readable format. It is a copy of a database's contents, not a
backup of a life, and not a log of what happened to you. Those are three different
things and only the first one is real.

1-4file formats in one exportJSON, HTML, CSV and media - which sections use which varies by account and by the date you requested
variesexact folder namesThe set and the naming depend on account type, platform, app version and request date

Three consequences follow, and they explain almost every surprise later:

  1. It is a record of a record-keeping practice. What arrives is the shape an event

    left when a system wrote it down, not the event.

  2. Some things were never stored, so no export can contain them. This is not a bug

    and re-requesting will not conjure them.

  3. Sections can arrive in different formats, and the formats are not equally

    complete. Choosing wrong on the request screen is expensive to fix later.

Step one: request it, and choose the format carefully

The request lives inside the account itself. In the Instagram app or on the web, open
Account Center, then the section covering your information and permissions, then
Download Your Information. Meta moves this path around fairly often and has renamed it
more than once, so if the labels do not match the above exactly, look for
"Download your information" inside Account Center rather than assuming it is
gone.1

There are two things to decide on that screen, and only one of them really matters.

Whether to request all information or a subset. Requesting everything is simpler
and avoids a second round of waiting. Requesting a subset produces a smaller export.

Which format you want. This is the decision that is hard to undo. Where the tool
offers a text-format choice, pick JSON. Some sections are only ever delivered as
HTML, and HTML is a rendered web page of the same underlying data — readable, but with
the structure stripped out, which means whole categories of detail are simply not in
the file.

This is worth one more sentence, because it is the single most common way people end
up with a disappointing archive. A later tool can convert HTML back into structured
data. It cannot recover information that the HTML never contained. We have written a
whole post about exactly this failure mode, and it is the more detailed version of
this section:
Why your Instagram export is missing half your life.

Step two: wait for the email, and download it promptly

Meta emails a download link when the export is ready. A few practical things about
this stage:

  • Check spam and junk. The message is unremarkable and gets filtered.
  • The link expires. Meta states a limited validity window for it, and it is not

    generous. Download as soon as it arrives; do not leave it sitting in your inbox for a
    week.

  • The ZIP is usually password-protected, with a password derived from information

    the account holder already gave, such as a date of birth. The email or Meta's help
    page tells you which.

  • It can be large. Accounts with years of media are frequently hundreds of

    megabytes, and sometimes multiple gigabytes, sometimes split across several archives.
    A slow or failing download that dies at 90% is usually a connection problem rather
    than a corrupt request.

Step three: unzip it and get your bearings

Once extracted, you have a folder per subject area. The exact set and the exact names
depend on your account, your platform, the app version, and the date you made the
request, so treat any list you find online — including the simplified one below — as
a shape rather than a specification.

your-export/
├── connections/          who you follow and who follows you
├── followers/
├── following/
├── your_posts/           posts you published, with captions and timestamps
├── your_posts_media/     the image and video files for those posts
├── media/                media on your profile and saved posts
├── saved/                posts you saved
├── likes/                things you liked
├── comments/             comments you wrote
├── messages/             message threads, if your account has any
├── stories/              story views and archive entries
├── search_results/       your own search history
├── contacts/             contacts synced to the account
├── information_about_you/    profile fields
└── devices_and_logins/   devices and sessions

If the unzip or the password fails

Three problems come up repeatedly, all of them mundane.

"The archive is password-protected." Expected. The password is shown in the
download email or in Meta's help page, and it is derived from something already on the
account, most often a date of birth in a DDMMYYYY-style form with no separators. It
is not a password you set, and there is nothing to reset — if you cannot recall the
underlying detail, the request has to go through Meta's account recovery, which is a
separate and much longer process than re-requesting an export.

"The file is too large to extract" or extraction stalls. On Windows, the built-in
extractor struggles with very large archives and long filenames, which is why exports
occasionally fail on the default tool. A dedicated extractor such as 7-Zip handles
these more reliably. On macOS and Linux, unzip is generally fine; if the archive
contains paths that do not match your system, the contents usually extract anyway.

"It says it needs more space than I have." Real, and not a corrupt download. Large
media sections are the usual cause. Free up space, or extract a section at a time if
your extractor supports partial extraction.

Size is not a measure of anything

An export's total size is tempting to read as a measure of how much history an account
holds. Do not. Size tracks media, and media tracks how many files were never deleted,
which is not the same thing as how much happened. An account with a modest photo count
and a long messaging history can be larger than one with thousands of posts and no
messages, and an account that deleted its media on schedule can be tiny while being
rich in exactly the text records you wanted.

We say this plainly because it is the kind of number people build a wrong expectation
around: a small export is not a disappointing export, and a large one is not a better
one. It is a different one.

Two things surprise everyone here, and both are normal:

  • Empty folders. An empty folder means the export contains no records in that

    category. It does not mean the request failed, and it does not always mean the
    underlying data never existed — which is a distinction we spend a lot of time on in
    the next post of this series.

  • A folder that only contains null. null in these files is the absence of a

    value in the record. It is not a zero, and it is not an event that did not happen.
    null means the file declines to say.

Step four: open one file and see why you cannot read it

This is the step where most people give up, and the reason is not that the content is
complicated. It is that the format is optimised for something other than reading.

Pick a small .json file — information_about_you is a good first pick — and open it
in any plain text editor. Notepad is fine. TextEdit is fine. So is a code editor if
you have one. You do not need to install anything.

What you will see is a single enormous line of text, with field names in quotation
marks, values after colons, and very few line breaks. Here is a representative shape,
with the values invented so that nothing in it is anybody's real data:3

json
{
  "profile": [
    {
      "string_map_data": {
        "Name": { "value": "REDACTED" },
        "Username": { "value": "REDACTED" },
        "Email": { "value": "REDACTED" },
        "Date of birth": { "value": "REDACTED" },
        "Bio": { "value": "REDACTED" }
      }
    }
  ],
  "connected_applications": [
    {
      "string_value_data": "REDACTED",
      "string_list_data": ["REDACTED"]
    }
  ]
}

string_map_datayour profile fields, wrapped one level deep in an extra object

That last point is the one that trips people up. Every value in the profile section
is not a plain value; it is an object with a value key inside it. This is a
deliberate trade: the wrapper leaves room for the field to grow a timestamp or a
source later without breaking whatever is reading it. It costs a little
readability now so that a format can stay stable for a decade.

The result is that a file which contains five facts about you takes up a screen and a
half, and there is no visual structure to scan. There is no column, no row, no
alignment. The file is fine. It is simply not a document.

Open the .json file

One line of "key": { "value": "..." } pairs, wrapped at the screen edge, with no
line breaks, no columns, and every value hidden one level down inside an object.
Reading it means reading the field names to find out what the values are.

What the same record looks like readable

Name: redacted
Username: redacted
Email: redacted
Bio: redacted

The information is identical. Nothing was lost. What changed is that the structure
became visible.

A note on timestamps, because it will matter later

Timestamps in an export are precise but not always in a form you can use directly.
Some arrive in UTC with no offset attached, some include an offset, some are truncated
to the day rather than the second, and the convention is not consistent between
sections. This matters more than it sounds: if two sections disagree about whether
they are UTC or local, then a "what were you doing at 11pm" question gets the wrong
answer, and you will not notice that anything went wrong.

timestampprecise, but check which timezone and how much precision the field actually carries

We do not silently normalise this. When LMKFR shows a timestamp we say which form the
file used, and when a field is day-only we do not dress it up as midnight. A timeline
built on a day-only field is a timeline of days, and presenting it as though it were
more precise than the file is would be a lie told with good intentions.

What the file will and will not contain

An export is broad and incomplete at the same time, and the incompleteness is not
uniform. The boundary of what a request can return is set by what Meta defines as
"your information", which is a published boundary and worth reading once.4
Two honest examples before the practical section:

  • Where a fact is stored, it is stored precisely. Timestamps, counts, types, and

    identifiers are present and machine-readable, which is what makes the archive worth
    having.

  • Where a fact was never stored, the file says nothing. There is no field for

    "the photo you deleted from a shared album", no field for the context of a moment,
    and no field for what any of it meant. An export can be complete and still tell you
    almost nothing about the parts that matter to you.

  • Media coverage varies by section. Your own posts usually bring their media. In

    messages, attachments are frequently represented by a thumbnail rather than the
    original file, which is a different thing from having the file.

Your options for reading it, honestly ranked

Once it is unzipped, there are four realistic routes. None of them is wrong; they
cost different amounts of time and give you different things.

Open files in a text editor and read them. Free, private, and completely adequate for
small exports. Tells you what is in there. Will not tell you how many of anything, and
gets slow fast.

The honest reason LMKFR exists is the second sentence of each option: reading an
export is not hard, and answering questions across a whole archive is. Anyone can
open a folder. The work is in turning a million records into a timeline without
inventing anything, and in being upfront about the sections where the file is thinner
than the interface would suggest if nobody mentioned it.

The export as delivered

40+ folders, mixed formats, some empty, some HTML. Every fact present is buried one
level deep in an object, and nothing is summarised anywhere.

The same archive, parsed locally

Folders counted. Formats labelled per section, including which ones are HTML. Posts
and comments on a timeline. Told plainly which numbers cannot be derived from the file.

Nothing is uploaded in local mode, and we do not want your export in the first place —
a full export contains your messages, your contacts, and your search history, which is
about the last thing a nostalgia app should be collecting. There is an opt-in account
and claim layer for people who want a public stat card for their own username. It is
off by default, and the default is the point.

What each option is good for

If you take nothing else from the list above, take this shape: read by hand to find
out what you have, use a spreadsheet to answer one specific question about one
section, and use a purpose-built local tool when the question spans the whole archive
or asks you to compare across years. Those are three different jobs and the mistake is
usually reaching for the most powerful tool to do the least interesting one.

If you are not technical at all

Then the honest advice is narrower than the rest of this post, and it is still enough.
You have three steps available to you and none of them requires a text editor:

  • Look at your folder names. Even without opening anything, they tell you what

    sections exist, and that alone answers "is there anything about my messages here".

  • Open the HTML sections in a browser. Where a section arrived as HTML, double-

    clicking the file renders it as a readable page. You lose the structure, but you can
    read the content, which is often the thing you actually wanted.

  • Drag the folder onto LMKFR. If the idea of parsing JSON sounds like something

    other people do to other people, this is the version where it is done to you, in
    your browser, by code you can watch running in the network tab.

Everything else on this page is context for those three steps, not a prerequisite for
them. Nobody needs to understand a file format to look at a decade of their own
history, and the format is the least interesting part of this.

If you only remember five things

  1. Request it from Account Center inside the account, and pick JSON where the

    format is offered. That is the only choice that is expensive to undo.

  2. Download the link when the email arrives; it expires.
  3. Unzip, then open one small .json file in a plain text editor. That single file

    confirms the whole export is real and intact.

  4. Empty folders and null values are normal, and they mean the file is not talking,

    not that something broke.

  5. Reading a file and analysing an archive are different jobs. Do not let a tool that

    only does the first one pretend to do the second.

That is stage one, and it is genuinely the least interesting stage — you have the
folder, you know it is real, and you know why it does not read like a page. Nothing
above was held back to make you continue. Stage two is where it gets concrete: which
folders are worth opening, what is actually in them, and why some of them are emptier
than you expected.

If you are not in a hurry, read this next

Six profile photos, six decisions about who you were is
the shortest post in this series and the easiest place to start reading for real. It
needs no tools at all — profile photo history is the one part of an archive that
requires no inference, because nobody chose those dates except the person in them.

What to do with the folder when you are done

Worth deciding deliberately, because the failure mode here is leaving a complete
archive of your private messages sitting in a Downloads folder for three years.

  • Keep it somewhere you chose, not wherever it happened to land. A named folder in

    a sensible place beats a copy buried in Downloads that you will not find again.

  • Do not put it in a git repository, even a private one, and especially not a

    public one. This is the single most common way people accidentally publish their own
    message history, and it has happened to people who are careful about everything else.

  • Do not leave it in cloud sync by accident. A folder in a synced Desktop folder

    is a folder that has been uploaded somewhere you did not choose.

  • Delete the extra copy when you have what you need — the ZIP as well as the

    extracted folder. You can always request the export again; you cannot un-share one
    that was already copied somewhere.

Questions this comes up

Getting the file and opening it

Do I need to install anything to read my Instagram data export?

No. After unzipping, any plain text editor will open a .json file — Notepad on
Windows, TextEdit on Mac, or whatever you already use to read text. Reading the file
this way does not summarise it, but it confirms the export is intact and shows you the
real field names, which is enough to know what you have.

Is there a viewer or app that shows my Instagram export like a profile?

There are third-party tools that will parse it for you. Before using one, check where
the file actually goes. Tools that work entirely in your browser have no reason to
transmit anything; tools that ask you to "drop your export here" are asking you to
send your private messages and contacts to whoever runs the page. LMKFR parses in your
browser in local mode and does not upload your file.

Why is my export in several ZIP files?

Because the total size exceeded what can be sent as one archive. It is a size limit,
not a sign that something was duplicated or lost. Extract each one into the same
folder, and expect some overlapping folder names where a large export was split.

My export has a folder called messages and I barely used messages. Is that empty for real?

Possibly yes — the folder can be created even when there is nothing in it, and some
accounts never had the feature. But an empty or thin message export is worth a separate
look, because attachment handling in that section is known to be inconsistent. We treat
that as a question rather than an answer until you look at the section yourself.

Can I get the missing data back by requesting the export again?

Sometimes, and specifically in one situation: a section that arrived as HTML can be
re-requested as JSON, which recovers detail the rendered page never contained. Data
that was never stored cannot be recovered by any request, from us or from anyone.

Does my Instagram data export contain my old deleted posts?

No. A deletion is a deletion, and the export reflects what the platform currently
holds. If a post is absent, it is absent — which is a genuinely hard thing to accept
when you were hoping to recover something, and it is better to know now than to hope
for an hour.

Keeping it safe, and what happens to it

Is it safe to keep the extracted folder?

Yes, with ordinary care. It contains your personal data, including private messages
and anything you synced. Keep it somewhere private, do not commit it to a public
repository, and delete the extra copy when you have what you need. Nobody else needs it.

Does LMKFR upload my export to your servers?

Not in local mode. The export is read by code running in your browser, and the file
does not leave your machine. You can confirm this by opening your browser's network
tab while it parses — there is nothing to see. The opt-in account and claim layer are
separate, off by default, and only ever hold a stat card for your own username.

I'm 16 and my export has stuff from when I was younger. Is that allowed?

Instagram's minimum account age is 13.5 An export can easily contain material from
before the account existed, including childhood-era memories, which is exactly the sort
of thing people reach for this tool to look at. Everything here runs on your own
device, so reading it does not involve us at all.

Where the sourced version lives

Every factual claim on this page that touches Meta's process is traceable to Meta's own
documentation, and we link to it rather than paraphrasing it from memory. Meta
reorganises its help centre fairly often, so if a deep link has moved, search the help
centre for the article name.

1: Meta Help Centre, "Download Your Information" — the canonical description of
the request flow, the format option, and the expiry window on the download link.
<https://help.instagram.com/> Meta's Data Policy is the reference for what
"your information" is defined to include. Start at <https://www.facebook.com/privacy/policy/>
4: Meta Data Policy — the definition of "information about you" that
the export itself is drawn from, 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>
5: Meta's Terms of Use set the minimum account age at 13. Meta's Terms are linked
from every login screen; the current version is at
<https://help.instagram.com/581066165581870>
3: The JSON snippet above is illustrative. The values are redacted and the
field names have been simplified where the real file uses nested structures. The real
shape of your files is whatever your export actually contains — which is the reason the
step above tells you to open one rather than trust ours.

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 number in
this post is either drawn from your own export or clearly labelled as illustrative.

Footnotes

  1. meta-dyi
  2. gdpr
  3. illustrative
  4. meta-data-policy
  5. age
How to read your Instagram data export — LMKFR Blog