Format guide

Microsoft Teams chat export: HTML, JSON, CSV, and ZIP

No single format serves reading, spreadsheets, automation, and attachment recovery equally well. A portable archive should include all of them.

Why ZIP is the container

ZIP keeps the transcript, structured data, diagnostic files, and accessible attachments together with relative paths. Standard archive software can open it without a proprietary account or cloud service.

chat.html
chat.json
chat.csv
links.csv
attachments-report.csv
failed-attachments.html
README.txt
attachments/

HTML: best for reading

chat.html is the primary human-readable result. It preserves safe rich text, authors, dates, reactions, links, and relative references to downloaded files. Active page content such as scripts, iframes, event handlers, forms, and site-specific styling is removed.

Use HTML for offline reading, search, review, and handoff to someone who should not need a data tool.

JSON: best for structured processing

chat.json uses the schema identifier chat-exporter-for-teams/v1. Each message carries its order, ID, author, timestamps, text, sanitized HTML, reactions, links, and attachment candidates. The file also includes public attachment status records.

Use JSON for local scripts, data transformations, indexing, or importing into tools that can handle structured content. Review privacy and company policy before passing the archive to any AI or cloud service.

CSV: best for spreadsheets

chat.csv uses a UTF-8 byte order mark and one message per row. Multiline text, links, reactions, and attachment URLs are quoted correctly. Use it for filtering by author or time, manual audit, and spreadsheet analysis.

CSV is intentionally flatter than JSON. It cannot preserve nested structures as precisely, so it should not be the only archival format.

Attachment and link reports

links.csv separates ordinary links from file candidates. attachments-report.csv records exactly one final state for every discovered candidate:

  • downloaded — included under attachments/;
  • failed — a usable file was not returned;
  • skipped — file downloads were disabled or an explicit size boundary prevented inclusion.

failed-attachments.html makes the original URLs easy to reopen while signed in. This is more honest than silently dropping blocked files.

Which format should you use?

GoalBest file
Read and search the conversation offlinechat.html
Write a script or preserve nested metadatachat.json
Filter rows in Excel or Sheetschat.csv
Review shared web linkslinks.csv
Audit file success and failureattachments-report.csv
Keep the complete package togetherThe ZIP itself

Export once instead of choosing upfront

Chat Exporter builds every useful format in the same local archive.

View source on GitHub