AI Chat Archive — ZIP bundle structure

When a user runs bulk export (a paid-tier feature) or exports a single conversation with Include attachments in the ZIP checked, AI Chat Archive produces a single .zip archive with a deterministic layout.

This document specifies that layout so third-party importers can reliably traverse it.

Top-level contents

ai-chat-archive-{YYYY-MM-DD}-{HHMMSS}.zip
├── 2026-03-12_Designing-a-REST-API/
│   ├── Designing-a-REST-API.md
│   └── attachments/
│       ├── design-brief.pdf
│       └── screenshot.png
├── 2026-03-14_Refactoring-the-auth-layer/
│   ├── Refactoring-the-auth-layer.md
│   └── attachments/
│       └── error-log.txt
├── 2026-04-02_Late-night-debug-session/
│   ├── Late-night-debug-session.md
│   └── _SKIPPED.md
└── …

Folder-name convention

{created_at_date}_{safe_title}

Example:

Transcript file

The transcript's filename matches the folder's safe_title, with an extension matching the format:

PDF is not supported in ZIP mode because PDF generation uses the browser's print pipeline, which cannot be batched.

attachments/ subfolder

Present only when:

  1. The conversation has at least one attachment or file, and
  2. The user checked Include attachments in the ZIP.

Files inside preserve their original filenames, with the same sanitization rules as folder names. If two attachments share a name, the second gets a -2 suffix and so on.

The transcript's > 📎 Attachment: {name} references use the sanitized name, so an importer can join {folder}/attachments/{sanitized-name} reliably.

_SKIPPED.md

If one or more attachments could not be downloaded during export, AI Chat Archive writes a _SKIPPED.md file into the conversation folder:

# Files that could not be downloaded

- design-brief.pdf — network error
- old-prototype.fig — attachment expired

The transcript is still produced in full; only the binary attachments are missing.

What's not in the ZIP

Stability guarantees

Related