Bulk metadata import via CSV (incumbent-DMS migration)

Drag-and-drop your files first, then upload a CSV that maps each filename to its sensitivity, collection, retention class, and metadata fields. Owner / admin only.

Updated 2026-04-26

Open /migrate (workspace owners and admins only) and upload a CSV. The file maps existing documents — by filename — to the metadata they should carry: sensitivity tier, collection membership, retention class, and any number of custom metadata fields.

Workflow:

1. **Ingest the bytes first.** Drag-and-drop the files (or whole folders) onto /upload. Folder uploads can become Collections in one click; the existing extraction pipeline runs the same as for any other ingest path. 2. **Upload your metadata CSV** on /migrate. Required column: `filename` (matches the document by display name, case-insensitive). 3. **Preview** parses the CSV, looks each filename up against your tenant's documents, and shows per-row outcomes — matched, unmatched, or warning (e.g. "no collection 'Smith Matter'"). Nothing is applied yet; the CSV stays server-side until you commit or dismiss the preview. 4. **Commit** runs each matched row through the same single-doc tools the UI uses (renameDocument, setDocumentSensitivity, setDocumentRetentionClass, addDocumentToCollection, setDocumentMetadata). Per-row failures (e.g. "active legal hold blocks rename") report in the result banner without rolling back the rest. Each mutation appends an audit-log event with reason "CSV migration" so the trail is attributable.

Supported columns:

| Column | Effect | |---|---| | `filename` | Required. Matches the document by display name (case-insensitive). | | `display_name` | Renames the document. Skipped if blank. | | `sensitivity` | One of public · internal · confidential · restricted · regulated. | | `collection_name` | Adds the doc to the named collection (must already exist; case-insensitive). | | `retention_class_code` | Applies the retention class with that code (case-insensitive). | | `meta:<key>` | Any column starting with `meta:` becomes a metadata patch entry. `meta:keywords`, `meta:docType`, `meta:parties`, `meta:matterNumber`, etc. |

Limits:

- Up to 10,000 rows per file. Larger sets need to be split. - Up to 10 MB CSV. Larger files need to be split. - The first 200 rows render in the preview table; the rest still commits. - The CSV bytes never persist on disk — only the parsed row plan goes into the migration_jobs table, which lets you commit later from the same browser session.

Built for typical incumbent-DMS migrations. iManage / NetDocuments / FileHold / SharePoint all support CSV exports of metadata against bytes; export the metadata, drag the bytes onto /upload, then run this. The audit log captures the full cutover for any future compliance review.