Don't Follow Back
DontFollowBack

How to Download Threads Data as JSON and Read the Export

By the Don’t Follow Back editorial team ·

What this guide covers

Threads can provide a machine-readable copy of your account information in JSON. The important part is choosing the correct profile and format, then checking what the downloaded ZIP actually contains before drawing conclusions from it.

This guide is grounded in two sources:

  • Meta’s current Threads download instructions, which describe how the request works.
  • The file paths, JSON wrappers, and result states supported by the Don’t Follow Back importer and its Threads fixtures.

The platform workflow may change. The supported-file section below describes the application as implemented now.

Request the Threads export

Meta currently says Threads information can be requested in HTML or JSON. Choose JSON because the importer needs structured records rather than an HTML page intended for manual reading.

For a Threads profile created with an Instagram account, Meta directs the request through the associated Instagram account. Profiles created with a mobile number or email have a separate option in the Threads help flow.

A practical request sequence is:

  1. Open Accounts Center from the account connected to the Threads profile.
  2. Go to Your information and permissions and choose Export your information.
  3. Create an export and select the correct Threads profile or associated profile.
  4. Choose Export to device.
  5. Choose JSON, not HTML.
  6. Select the information categories you need and a date range that fits your question.
  7. Start the export and wait for the availability notification.

Meta notes that preparation can take up to 30 days. A shorter wait does not guarantee a more complete archive, and an earlier export request can have different categories from a later one.

Files the Threads importer analyzes

For a normal ZIP, the importer looks under the threads/ directory. Numbered variants are supported where shown.

File path Current behavior
threads/followers.json, followers_1.json, and other numbered follower files Analyzed and merged into the current follower set
threads/following.json Analyzed as the current following set
threads/recently_unfollowed_profiles.json and numbered variants Analyzed only as platform-provided history
threads/blocked_profiles.json and numbered variants Analyzed when the record structure supplies an account identifier
threads/threads_and_replies.json Detected for coverage; not currently organized into the relationship report
threads/liked_threads.json Detected for coverage; not currently turned into an insight card
threads/personal_information.json Detected for coverage
threads/saved_threads.json Detected for coverage
login_and_profile_creation/ records Detected for coverage, not interpreted as an authorization or security verdict
Message files Counted for coverage and skipped; message bodies are not analyzed
Photos, videos, and other media Counted and skipped

A complete ZIP is the most reliable upload because it preserves platform and directory signals. The importer also accepts an individual followers.json, followers_1.json, or following.json file as a fallback. A standalone file provides less context than the ZIP.

What the JSON fixture looks like

The current fixture contract uses a Threads-specific wrapper around relationship rows:

{
  "text_post_app_text_post_app_followers": [
    {
      "title": "EXAMPLE_CREATOR",
      "string_list_data": [
        {
          "href": "https://www.threads.com/example_creator",
          "value": "example_creator",
          "timestamp": 1760000000
        }
      ]
    }
  ]
}

The importer normalizes the username to lowercase. When more than one supported follower file contains the same username, it keeps one account record and retains the newest usable timestamp.

The timestamp is a field exported with the row. The report does not relabel it as a guaranteed account-creation date or as proof of why a relationship changed.

Direct facts and derived results

A direct exported fact is something represented by a supported source record:

  • example_creator appears in the exported Followers list.
  • A row contains a Threads profile URL and timestamp.
  • A supported recently-unfollowed file contains a named account.
  • A blocked-profile record is present.

A derived result is a calculation made from those facts:

  • Mutuals are usernames present in both Followers and Following.
  • Not following you back means Following minus Followers.
  • You do not follow back means Followers minus Following.
  • Counts and percentages summarize the normalized sets.

Example: if a fictional export contains 120 Followers and 150 Following, with 90 usernames in both lists, the directly exported facts are the list memberships. The derived results are 90 mutuals, 60 accounts not following back, and 30 followers you do not follow.

None of those current-state calculations identifies every historical unfollower.

Recent unfollowers versus current non-followers

These are different questions.

A current non-follower is an account found in Following but absent from Followers in the same export. That account may never have followed you.

A historical unfollower requires one of two stronger sources:

  • a supported recently_unfollowed_profiles.json record supplied by Threads; or
  • an earlier Snapshot compared with a newer follower export.

Even a two-point comparison only identifies a missing match between those dates. Username changes, deletion, deactivation, restoration, incomplete exports, and timing can make a change ambiguous.

Why a Threads ZIP may produce a limited report

Check these conditions in order:

  1. Wrong profile selected. An Instagram-only export is not treated as Threads data.
  2. HTML selected. Request JSON.
  3. Followers or Following omitted. Activity-only data cannot build the relationship map.
  4. Only one list included. The report can read that list, but mutual and one-sided comparisons need both.
  5. Empty wrapper. A supported empty array means the category exists but has no exported rows.
  6. Changed structure. A known filename with an unrecognized JSON shape is reported as unrecognized rather than guessed.
  7. Messages or media dominate the archive. Those files add size but do not add relationship records.
  8. Archive damaged or nested. Upload the original ZIP; do not place it inside another ZIP.

A safe interpretation checklist

Before acting on a result, ask:

  • Is this value directly exported, or calculated from two lists?
  • Were both Followers and Following included?
  • Is the result current state, platform-provided history, or a Snapshot comparison?
  • Does the report show a category as analyzed, detected, skipped, missing, empty, or unrecognized?
  • Could a username change or account-state change explain a missing match?
  • Does the selected export range cover the activity being discussed?

Start with the Threads export analyzer for the product scope. If the archive is not recognized, compare it with the Instagram JSON and ZIP troubleshooting guide. For processing and retention details, read the export privacy guide.