ChatGPT Project Export Is Missing Uploaded Files

Data Export delivers a zip with conversations.json and chat.html but no PDFs or images you uploaded to Projects. Pull the binaries from the Library or each Project's Files panel instead.

You ran Settings → Data Controls → Export data, waited for the email, downloaded the zip — and found only conversations.json and chat.html. The PDFs, images, and spreadsheets you uploaded into a Project are nowhere in the archive. This is by design, not a bug: the personal Data Export ships text and metadata only, and uploaded binaries live in a separate object store that the export does not package.

Fastest fix (as of June 2026): open the Library in the ChatGPT sidebar at chatgpt.com, filter by type (PDFs, Documents, Spreadsheets, Images), and download the files — individually or in bulk. The Library, launched 24 March 2026, is now the persistent store for everything you upload, so it usually holds the attachments your export left out. If a Project predates the Library or a file is not there, open the Project and download from its Files panel. For Team / Enterprise data, the personal export can never reach workspace files — your admin must use the Compliance API export.

Which bucket are you in

SymptomLikely causeGo to
Zip has only conversations.json + chat.html, no PDF/PNGExport omits binaries by designFix 1 (Library) / Fix 2 (per-Project)
Library shows the file but export did notWorking as intended; wrong recovery channelFix 1
File uploaded an hour ago is missing everywhereNot yet propagated / export is a point-in-time snapshotCause 3, then re-export
Whole Team-workspace chats missing, not just filesPersonal export can’t read a Team workspaceFix 4 (admin export)
You uploaded it but it’s “workspace-owned”File belongs to the org, not youFix 4
Export timestamp predates the uploadSnapshot was taken before the file existedRe-run export

Common causes

Ordered by hit rate, highest first.

1. The standard export omits binary uploads by design

The most common cause. The personal Data Export packages conversations, custom instructions, and metadata into conversations.json plus a chat.html viewer. Uploaded binaries (PDF, PNG, XLSX, DOCX) live in a separate object store and are not included in the zip. OpenAI’s own export now sends only those two files for most personal accounts.

How to spot it: unzip the archive and search for *.pdf or *.png. None found = binaries omitted as expected.

2. Project files are a separate UI surface (Library or Files panel)

Since the Library shipped (24 March 2026), most uploads also land in a central file store you can reach from the sidebar. Files attached directly to a Project still appear in that Project’s Files panel. Neither is covered by Data Export, and there is still no single “export all Projects + Files” button.

How to spot it: Settings → Data Controls → Export data gives you chats only; the binaries are reachable in the Library or via Project → Files → per-file Download.

3. A recently uploaded file has not propagated yet

If you uploaded a file shortly before triggering the export, the snapshot may not include it, and it can take a few minutes to show in the Library. The export itself reflects state at request time.

How to spot it: older Project files appear or are referenced in metadata, but the file you uploaded this morning is missing.

4. Personal export when the data lives in a Team / Enterprise workspace

You ran the personal Data Export, but the Project lives in a Team or Enterprise workspace. The personal export covers your personal-workspace data only — confirmed by OpenAI: workspace conversations cannot be exported through the personal flow at all.

How to spot it: conversations from the Team workspace are missing too, not just the files. That means you used the wrong export channel.

5. Files marked “workspace-owned” follow the org, not you

In Team / Enterprise, certain files are owned by the workspace rather than by your user. The personal export will not include them even when you uploaded them.

How to spot it: the Admin Console / Compliance view shows the files as workspace-owned, and your personal export omits them.

6. The export was generated before the files existed

Data Export captures state at request time. If you triggered the export on day 1 and uploaded files on day 3, the day-1 zip does not contain the day-3 files. Note that only your most recent export request is fulfilled — earlier pending requests are auto-cancelled.

How to spot it: the export filename timestamp predates the upload. Generate a fresh export.

Before you start

  • Decide what “complete” means: chats only, files only, or both. Different surfaces cover different scopes.
  • List every Project that holds files you care about — you may need to walk through each, or just sweep the Library once.
  • Confirm your plan and workspace: Free / Go / Plus / Pro behave differently from Team / Enterprise admin exports.

Information worth collecting before you dig in:

  • Export request timestamp and delivered timestamp.
  • Plan tier and workspace (personal vs Team / Enterprise).
  • Expected files (filenames, the Project they live in, upload dates).
  • The diff between what you expected and what is in the zip.
  • Whether this is for compliance, migration, or personal backup — that drives which strategy to use.

Shortest fix path

Ordered by ROI. Fixes 1 and 2 cover almost every personal backup need.

Fix 1: Sweep the Library (fastest)

The Library is the persistent store for files you upload, and it lets you download them straight away.

chatgpt.com → sidebar → Library
  → filter: Documents / Spreadsheets / Presentations / PDFs / Images
  → select files → Download (single or bulk)
  → save into /backup/<project-name>/

As of June 2026 the Library is available on Plus, Pro, and Business, with rollout extending to Free and Go (and the EEA, Switzerland, and UK) per OpenAI’s 14 May 2026 release notes. Individual accounts get up to 10 GB of file storage; Business / Enterprise orgs get up to 100 GB. If your plan or region doesn’t have the Library yet, skip to Fix 2.

Fix 2: Walk each Project and download from its Files panel

For files attached directly to a Project (or older uploads that predate the Library), download from the Project itself:

For each Project:
  open Project → Files panel (project sources list)
  → open a file → Download
  → save into /backup/<project-name>/

The desktop and web apps do not expose a bulk-download API for personal accounts. For 5-10 Projects, manual download takes about 15 minutes. For 50+, see Fix 6.

Fix 3: Save Project Instructions and metadata separately

Instructions are inside the JSON export, but they are easier to preserve as Markdown:

For each Project:
  open Project → Edit instructions → copy text
  → save as /backup/<project-name>/instructions.md
  → also note the Project name, creation date, and file list

This lets you rebuild the Project elsewhere if you need to.

Fix 4: For Team / Enterprise, use the admin / Compliance export

The personal flow cannot reach workspace data, so an admin runs the export through the Compliance Platform:

Admin → Compliance Platform / Compliance API
  → export workspace data (Conversations + Library files)
  → results delivered as JSONL log files + file payloads

OpenAI’s Compliance API exposes Library-specific endpoints for exporting (and deleting) workspace files, and the Compliance Logs Platform delivers immutable, time-windowed JSONL exports. If you do not have admin rights, coordinate with your workspace owner.

Fix 5: For chat history, parse conversations.json

The standard export still includes your full chat history in conversations.json. Reparse it to pull Project-specific chats:

import json

with open("conversations.json") as f:
    convos = json.load(f)

# Each conversation has a "conversation_id"; the Project association
# may live in a metadata field, so inspect the keys first.
for c in convos[:3]:
    print(c.keys())

Filter by Project, then export each chat as Markdown. Note that inline image URLs in the JSON point to externally hosted assets that can expire — download anything you care about from the Library while it is fresh.

Fix 6: For 50+ Projects, scriptable workarounds

There is no official bulk-export API for personal Plus accounts. Options:

  • Bulk-download from the Library (Fix 1) — this alone replaces most per-Project clicking.
  • Use a desktop automation tool (Hammerspoon, AutoHotkey) to drive the Files panel for each Project that predates the Library.
  • For Team / Enterprise, have the admin run a programmatic export via the Compliance API.
  • Open a help.openai.com ticket asking for a one-off complete export — sometimes honored for migration scenarios.

Fix 7: For ongoing backup, mirror to external storage

Don’t rely on one-shot exports. For files you cannot lose:

Source-of-truth pattern:
  Local folder (or Google Drive) → upload into ChatGPT
  → never edit only inside ChatGPT
  → if you lose account access, the source copy survives

Treat the Library and Project Files as a working cache, not the canonical store.

How to confirm it’s fixed

Run this verification before you delete anything or cancel a plan:

For each file in /backup/<project-name>/:
  - Open it (PDF reader, image viewer, spreadsheet app)
  - Check page count / dimensions match what you remember
  - Cross-reference the filename and timestamp against the Library or Files panel

A backup that is “present but corrupted” is worse than knowing the file is missing. You are done when:

  • Every Project in your inventory has a backup folder with its files and instructions.md.
  • Three random PDFs from the backup render correctly.
  • Chats you care about exist as Markdown / JSON, retrievable by Project name.
  • For Team / Enterprise: the admin export’s manifest lists the expected file count.

Common pitfalls

  • Assuming the personal Data Export is comprehensive — it is conversations.json + chat.html, not your files.
  • Forgetting the Library: the binaries the export skipped are usually one sidebar click away.
  • Triggering an export and uploading files afterward, then expecting the older zip to include them.
  • Running the personal export when your data lives in a Team workspace — wrong channel.
  • Backing up file references (filenames in the JSON) without the binary payloads.
  • Letting the download link lapse: it expires 24 hours after the email arrives, and you must request a fresh export to get a new one.
  • Treating one export as forever — file content changes, so re-export critical Projects on a schedule.

FAQ

How long does the Data Export take to arrive? Usually a few minutes for personal accounts, though OpenAI states it can take up to 7 days for large accounts. The download link in the email expires after 24 hours, and only your most recent request is fulfilled (earlier pending requests are cancelled).

Where did my uploaded files go if they aren’t in the export? They are in the Library (sidebar at chatgpt.com) or in the originating Project’s Files panel. The export never carries the binaries; it only references them in metadata.

Can I export a single Project’s data? Not directly through the standard export. Download that Project’s files from the Library or its Files panel, then filter conversations.json for the chats inside it.

Will images from my conversations be exported? Inline image URLs appear in the JSON, but the binaries are hosted externally and can expire. Save images you care about from the Library, or download them while the chat is fresh.

How do I back up Custom GPT Knowledge files? Open the GPT → Configure → Knowledge and download each file manually. There is no bulk export for Knowledge files.

Does cancelling my subscription delete my files? Files become inaccessible once you lose workspace access, and deleted Projects (with their chats, files, and instructions) are purged within 30 days. Always back up before you cancel, not after.

Tags: #ChatGPT #Troubleshooting #chatgpt-projects #data-export