Skip to main content

Importing cases

Learn how to bulk import cases into Whistleblower Software using a CSV or Excel file, including attaching files to imported cases.

The case importer lets you bulk upload cases into the platform from a structured file. This is useful when migrating historical cases from another system or source. You can also attach files and documents to your imported cases, and the importer will prompt you to upload any that are missing.

Before you start

  • You need access to the Cases page to start an import.

  • Your file cannot contain more than 30,000 rows, excluding the column header.

  • Supported file formats: XLS(X), CSV, TSV, PSV, XML, JSON, PDF, and ODS.


Create your custom fields first

If you are migrating cases from a previous system, that system may use fields that do not currently exist in your Whistleblower Software reporting channel. Before starting your import, create a custom field for each one so you have somewhere to map that data into during the column matching step.

See Creating custom fields for instructions on how to set these up.

Custom fields are only visible to case handlers and are never shown to the whistleblower.


Step 1: Start the import

Go to Cases, click Options in the top right corner, and select Import Cases.

You will land on the import overview page. Before clicking Start import, you have two options:

  • Download template: Download a pre-formatted file to structure your data correctly before uploading.

  • Configure fields: Go directly to your reporting channel's custom fields setup if you still need to create fields before importing.

When you are ready, click Start import.

Step 2: Select your reporting channel

Choose the reporting channel you want to import cases into from the Select Reporting Channel dropdown. Imported cases will be created under this channel.

Step 3: Upload your file

Drag your file into the upload zone or click Select files to browse.

Step 4: Upload and select your sheet

If your file contains multiple sheets, select the one that contains your case data. If you select multiple sheets, each one must contain a key column so they can be joined together.

Step 5: Select your header row

Select the row in your sheet that contains the column headers. This tells the importer which row to use to identify each column.

Step 6: Match your columns

The importer will attempt to automatically match your sheet's columns to the corresponding fields in Whistleblower Software. Review each match and adjust manually if a column was not matched correctly or needs to be mapped to a different field.

External ID

Each case you import must have an External ID, a unique reference that comes from the system you're migrating from, for example the case number used in your old tool.

The importer uses it to recognise cases it has seen before. If you import a row whose External ID already exists, the importer replaces that existing case instead of creating a new one. This means you can safely run the same import more than once, whether to fix a typo or add a missing conversation, without ever ending up with duplicate cases. Import the same file twice and nothing is duplicated, the cases simply end up in their final, corrected state.

💡 Make sure each case keeps the same External ID across imports. Changing it will be treated as a brand new case.

Adding messages and notes

You can import a case's full conversation history and internal notes alongside its case data, so migrated cases arrive with their existing context intact. Create a column and name it Messages & notes (JSON). The column header shows the expected format and will flag any errors in your data as you go.

Each cell is a JSON array, with one object per message or note. Example:

[
{
"entry_type": "reporter_message",
"body": "I witnessed expense fraud in finance.",
"created_at": "2024-03-01T10:00:00Z",
"files": ["file-22.png"]
},
{
"entry_type": "handler_message",
"author_email": "[email protected]",
"body": "Thanks for the report, investigating.",
"created_at": "2024-03-01T11:30:00Z",
"files": ["file-23.png"]
},
{
"entry_type": "internal_note",
"author_email": "[email protected]",
"body": "Escalated to compliance team.",
"created_at": "2024-03-02T09:00:00Z",
"files": ["file-222.png", "file-221.png"]
}
]

Each entry supports:

  • entry_type (required): reporter_message, handler_message, or internal_note. Internal notes are only ever visible to case handlers, never to the whistleblower.

  • body (required): the message or note text

  • created_at: when the entry was originally sent

  • author_email: attributes a handler message or internal note to a specific case handler

  • files: file names to attach to that specific entry. These are matched the same way as in Step 3, so reference the exact file name or path you're uploading alongside your sheet

Step 7: Upload missing attachments (if prompted)

If your file references attachments you will see a popup listing the missing files. You can either upload them now by dragging them into the zone or using Browse folder or Browse files, or click Continue without files.

Files are matched to their cases by file name, so make sure your file names match exactly what is referenced in your sheet.

Step 8: Review your entries

Before completing the import, review all entries in the Review Entries table. You can:

  • Use Find & replace to make bulk corrections across your data.

  • Switch between All rows and Error rows to focus only on entries that need fixing.

  • Click Find error to jump directly to the next row that needs attention.

If you still have missing attachments, you can upload them now using the Upload missing attachments button in the top right corner. Once everything looks correct, click Complete import at the bottom right.

Step 9: Complete the import

Once the import is processed, you will see a summary split into two panels:

  • Cases successfully created: The number of cases that were imported successfully. Each created case is assigned an occurrence number in the platform.

  • Rows failed to import: The number of rows that could not be created, along with the reason in the Warning / error column. You can fix the reported problem and click Retry failed rows to attempt those rows again, or leave them out.

You can toggle Only show failed rows to focus on what needs attention.

Download your passwords before you leave. Click Download passwords to save the case passwords for the imported cases. These cannot be recovered later once you navigate away from this page.


We're here to support you. If you have questions reach out to us directly via the Messenger icon in the bottom right corner of your screen, or send us an email at [email protected]

Did this answer your question?