How to Upload a Flat File

Bulk create and update clients, contacts, events, cases, and payments in your agency by uploading a CSV, TXT, or XLSX file.

You must be a Super Admin user or have the following permissions: create uploads update uploads create upload templates update upload templates

Flat file uploads let you bulk create and update clients, contacts, events, cases, and payments in your agency from a CSV, TXT, or XLSX file. Every upload runs through an upload template, which stores the field mapping and the processing rules so you only set them up once per file format.

Overview

An upload has two parts. The upload template tells the platform how to read your file: which column maps to which system field, how rows are matched to existing records, and what defaults to apply. The upload itself is one file processed with that template. Templates are reusable, so once a template is correct, later files in the same format need no setup. One file can create clients, contacts, events, cases, payments, forms, and warrants at the same time.

Prerequisites

  • A file saved as CSV, TXT, or XLSX
  • Permissions create_upload_templates and update_upload_templates to build and save a template
  • Permissions create_uploads and update_uploads to upload and process a file
  • If your agency is live, build and test a new template in your staging agency first

Learn more about flat file uploads.

How-To Steps

Step 1: Create an upload template

  1. Log in to your eCourtDate production or staging agency.
  2. Click Uploads in the top navigation.

Navigate to uploads

  1. Click the Upload Templates tab.

Upload Templates tab

  1. Enter a name in the Name field of the Create Upload Template card.

Fill form to create upload template

  1. Click Create.

Click Create button

The new template opens so you can map it. You can change the name later.

Newly created upload template page

Step 2: Map your columns from a sample file

  1. Choose your sample file in the Upload a Sample File (optional) card.

Choose a sample file

  1. Review the format and the column headers read from the file.

Field mapping list

  1. Click Auto Map Fields to suggest a system field for every column.

Auto Map Fields button

  1. Select a system field in the Map to Field dropdown for any column that is still unmapped.
  2. Click Save.

Click Save button

Auto Map Fields uses AI, and the suggestions are not deterministic, so review every mapping before you save. The sample file is only used to read your headers, and nothing from it is imported.

Step 3: Confirm the Field Mapping card

The Field Mapping card is the source of truth for how every upload is read. Only the fields you map here are imported, and unmapped columns are ignored.

Field Mapping section

  1. Enter the column header from your file next to each system field you want to import.
  2. Copy and paste each header exactly, since mappings match your file's headers on an exact, case sensitive match.
  3. Click Map Default Fields to prefill mappings with each field's standard name, or Reset All Fields to clear every mapping.
  4. Check Map by Column Position if your file has no headers, which switches every mapping to the numerical position of the column (the first column is 0).
  5. Click Save.

Save field mapping changes

Use the Search Fields box to jump to a field, or click the model badge next to a field name to show only that model's fields.

Step 4: Choose a processing method

In the Processing Settings card, select one of these options in Processing Method:

  • Update by Matching Fields (incremental): each upload includes only records created or changed since the last upload. Records that are not in the file are left untouched.
  • Full Replace: Across All Uploads: each upload is a complete snapshot of your data. Any record that is not in the file may be archived, including records another upload created.
  • Full Replace: This Template Only: each upload is a complete snapshot of the records this template created. Records created by other templates are left alone.

If you select either full replace option, checkboxes appear for the record types to archive when they are missing from the file. Unchecked types are left untouched.

  • Load and Replace Clients: existing clients not present in the upload are archived
  • Load and Replace Contacts: existing contacts not present in the upload are archived
  • Load and Replace Cases: existing cases not present in the upload are archived

Step 5: Set the match fields

The Match Existing Records settings decide how a row is matched to an existing record, and they apply regardless of the processing method you chose. Every selected field must match for a row to count as the same record, matching is case-insensitive, and a row with no match creates a new record.

  1. Select the fields that identify a client in Client Match Fields. At least one field is required to create clients.
  2. Select the fields that identify an event in Event Match Fields. Include Event Reference if your source system provides a stable ID for each event.
  3. Select the fields that identify a case in Case Match Fields. Case Number is usually the only stable identifier for a case across uploads.
  4. Select the fields that identify a payment in Payment Match Fields. Left empty, payments are matched on Payment Reference and Payment Amount together.
  5. Click Save.

The colored border on each selector shows the strength of the criteria: red is missing, yellow is weak, and green is recommended. Too few fields can collapse unrelated rows into one record, and too many can create duplicates when your source data varies slightly.

Step 6: Upload and preview the file

  1. Click Uploads in the top navigation.

Navigate to Uploads

  1. Click Choose File and select the file to upload.

Select file and choose upload template

  1. Select your template in Upload Template.
  2. Check Preview Upload.

Preview Upload checkbox

  1. Click Create.

Click Create button

The upload opens with the status SKIPPED and no records are created yet. Check the red warning banners at the top, which list Unmapped file fields and Missing upload template fields, then read the row table below. Each column heading shows the mapped system field above the raw header from your file, so you can confirm the mapping row by row. If you change the template, refresh the upload page to load the latest mapping.

Step 7: Process the file

  1. Click Process Upload.

Click Process Upload button

  1. Watch the status badge change to QUEUED while the upload waits for a worker.

File status showing Queued

  1. Wait for the status badge to reach COMPLETE.

File status showing Completed

  1. Review the count cards for file rows, clients, contacts, events, cases, payments, forms, and warrants, and click any count to open those records filtered to this upload.
  2. Enter a value in the search box on the upload and click Search to find the rows behind a count.

The Search Operator dropdown on the upload offers contains, =, <, <=, >, and >=, and the column dropdown narrows the search to one column or searches Any column. To search inside file data across every upload instead, check Search File Data on the Uploads page, then set Search Operator and Search Column.

What to Expect

While an upload runs, the upload page shows a progress bar with the current row, the process time, and the time per row. The status badge moves through QUEUED and PROCESSING to COMPLETE. If another upload in your agency is already processing when you create a new one, the new upload is created as DELAYED and waits its turn instead of running immediately.

If you entered addresses in the template's Notify Emails field, those addresses receive a summary with the record counts and any errors once processing finishes. Check the Notify Assigned Users option to also send an in-app notification to everyone assigned to the clients, cases, or events the upload touched.

Best Practices

  • Preview the first upload with any new template so you catch mapping problems before records are created.
  • Use Update by Matching Fields (incremental) unless your file is a full snapshot of your data every time.
  • Include a stable reference (such as a client reference, Event Reference, or Case Number) in every file and select it in Match Existing Records so rows update instead of duplicating.
  • Build and test new templates in your staging agency before you point them at production data.
  • Remove blank rows and stray columns from your file, and set Field Delimiter and Cell Separator to match how your source system exports.

Frequently Asked Questions

Q: Do I have to preview every upload?

A: No. Preview Upload only skips processing so you can check the mapping first. Once you trust the template, leave it unchecked and the upload starts processing as soon as you click Create.

Q: How do I set a default value for a field?

A: Use the Default Values section of the upload template. You can set Default Client Status, Default Client Group, Default Event Status, Default Location, Default Flow, Default Portal, Default Payment Status, and Default Payment Amount. Each one applies when the matching column is unmapped or the row's value is blank.

Q: My dates and times are not processed correctly. How do I fix this?

A: Open the Parsing Formats section of the template and set Date Format and Time Format to match your file. Both default to automatic detection.

Q: The preview shows no data. What should I check?

A: Check File Format in Parsing Formats. It defaults to CSV, and auto detects the format from the file extension, so a TXT or XLSX file will not be read while the template is set to CSV. Also confirm Field Delimiter matches the character your file uses to split columns.

Q: Do I have to build every template from scratch?

A: No. Open the File Templates tab under Uploads, then click Import on a sample to create an upload template from it, or click Sample to download a CSV with that template's column headers.

Q: How do I create statuses from the values in my file?

A: Check Auto Create Statuses in the template's Post Processing Settings. Client, event, and payment statuses found in the file are created if they do not already exist. Go to Admin > Settings > Statuses afterwards to configure them.

Q: What can I do with an upload once it completes?

A: Click Create Bulk Action on the upload to start a bulk action scoped to that upload's records. You can also open the Tools menu for Download File, Replay Upload, Sync Upload, and Trash Upload.

Troubleshooting

Issue: The upload page shows a warning about mapped fields.

Symptoms: A red banner reads Unmapped file fields or Missing upload template fields followed by a list of column names.

Solution: Unmapped file fields lists columns in your file that no mapping uses, which is fine if you do not need them. Missing upload template fields lists mappings whose column is absent from this file, which usually means a header was renamed or misspelled. Open the template's Field Mapping card, correct the header text, then reprocess the upload.

Issue: Records are duplicated after processing.

Symptoms: You see two copies of the same client, event, or case in your agency after an upload.

Solution: Review Match Existing Records in the template. Choose the smallest set of fields that uniquely identifies each record type, and confirm those fields are mapped and present in every file. A missing or unstable match field creates a new record instead of updating the existing one.

Issue: An upload processed with the wrong template settings.

Symptoms: Data landed in the wrong fields, or record counts on the upload are far from what you expected.

Solution: Fix the template first, then open the upload and click Tools > Replay Upload. The upload returns to QUEUED and the same file is processed again with your corrected settings. If the records are right but their scheduled messages are not, click Tools > Sync Upload to re-sync the events that upload created with your latest message settings.

Issue: The upload is rejected before it is created.

Symptoms: An error reports that the upload already exists.

Solution: An upload cannot reuse the name or the file of another upload that has not been trashed. Rename the file before uploading it again, or trash the earlier upload from its Tools menu.

Issue: No upload can be created from the Uploads page.

Symptoms: A warning reads that no upload templates were found, and the file form is missing.

Solution: Create an upload template first. Click the Upload Templates tab and follow Step 1, or import one from the File Templates tab.

Related Articles

Flat file uploads let you bulk create and update clients, contacts, events, cases, and payments in your agency from a CSV, TXT, or XLSX file. Every upload runs through an upload template, which stores the field mapping and the processing rules so you only set them up once per file format.

### Overview

An upload has two parts. The upload template tells the platform how to read your file: which column maps to which system field, how rows are matched to existing records, and what defaults to apply. The upload itself is one file processed with that template. Templates are reusable, so once a template is correct, later files in the same format need no setup. One file can create clients, contacts, events, cases, payments, forms, and warrants at the same time.

### Prerequisites

- A file saved as CSV, TXT, or XLSX
- Permissions `create_upload_templates` and `update_upload_templates` to build and save a template
- Permissions `create_uploads` and `update_uploads` to upload and process a file
- If your agency is live, build and test a new template in your staging agency first

Learn more about [flat file uploads](https://ecourtdate.com/flat-file-uploads).

### How-To Steps

#### Step 1: Create an upload template

1. Log in to your eCourtDate [production](https://app.ecourtdate.com) or [staging](https://staging.ecourtdate.com) agency.
2. Click **Uploads** in the top navigation.

![Navigate to uploads](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/1-navigate-to-uploads.png)

3. Click the **Upload Templates** tab.

![Upload Templates tab](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/2-upload-templates-tab.png)

4. Enter a name in the **Name** field of the **Create Upload Template** card.

![Fill form to create upload template](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/3-fill-upload-templates-name.png)

5. Click **Create**.

![Click Create button](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/4-Click-Create-button.png)

The new template opens so you can map it. You can change the name later.

![Newly created upload template page](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/5-You-will-directed-to-page.png)

#### Step 2: Map your columns from a sample file

1. Choose your sample file in the **Upload a Sample File (optional)** card.

![Choose a sample file](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/6-Choose-file.png)

2. Review the format and the column headers read from the file.

![Field mapping list](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/7-map-files.png)

3. Click **Auto Map Fields** to suggest a system field for every column.

![Auto Map Fields button](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/8-Auto-map-Field.png)

4. Select a system field in the **Map to Field** dropdown for any column that is still unmapped.
5. Click **Save**.

![Click Save button](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/9-Click-Save-button.png)

**Auto Map Fields** uses AI, and the suggestions are not deterministic, so review every mapping before you save. The sample file is only used to read your headers, and nothing from it is imported.

#### Step 3: Confirm the Field Mapping card

The **Field Mapping** card is the source of truth for how every upload is read. Only the fields you map here are imported, and unmapped columns are ignored.

![Field Mapping section](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/10-Match-fields.png)

1. Enter the column header from your file next to each system field you want to import.
2. Copy and paste each header exactly, since mappings match your file's headers on an exact, case sensitive match.
3. Click **Map Default Fields** to prefill mappings with each field's standard name, or **Reset All Fields** to clear every mapping.
4. Check **Map by Column Position** if your file has no headers, which switches every mapping to the numerical position of the column (the first column is 0).
5. Click **Save**.

![Save field mapping changes](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/11-Click-Save-button.png)

Use the **Search Fields** box to jump to a field, or click the model badge next to a field name to show only that model's fields.

#### Step 4: Choose a processing method

In the **Processing Settings** card, select one of these options in **Processing Method**:

- **Update by Matching Fields (incremental)**: each upload includes only records created or changed since the last upload. Records that are not in the file are left untouched.
- **Full Replace: Across All Uploads**: each upload is a complete snapshot of your data. Any record that is not in the file may be archived, including records another upload created.
- **Full Replace: This Template Only**: each upload is a complete snapshot of the records this template created. Records created by other templates are left alone.

If you select either full replace option, checkboxes appear for the record types to archive when they are missing from the file. Unchecked types are left untouched.

- **Load and Replace Clients**: existing clients not present in the upload are archived
- **Load and Replace Contacts**: existing contacts not present in the upload are archived
- **Load and Replace Cases**: existing cases not present in the upload are archived

#### Step 5: Set the match fields

The **Match Existing Records** settings decide how a row is matched to an existing record, and they apply regardless of the processing method you chose. Every selected field must match for a row to count as the same record, matching is case-insensitive, and a row with no match creates a new record.

1. Select the fields that identify a client in **Client Match Fields**. At least one field is required to create clients.
2. Select the fields that identify an event in **Event Match Fields**. Include **Event Reference** if your source system provides a stable ID for each event.
3. Select the fields that identify a case in **Case Match Fields**. **Case Number** is usually the only stable identifier for a case across uploads.
4. Select the fields that identify a payment in **Payment Match Fields**. Left empty, payments are matched on **Payment Reference** and **Payment Amount** together.
5. Click **Save**.

The colored border on each selector shows the strength of the criteria: red is missing, yellow is weak, and green is recommended. Too few fields can collapse unrelated rows into one record, and too many can create duplicates when your source data varies slightly.

#### Step 6: Upload and preview the file

1. Click **Uploads** in the top navigation.

![Navigate to Uploads](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/1-navigate-to-uploads.png)

2. Click **Choose File** and select the file to upload.

![Select file and choose upload template](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/17-choose-file.png)

3. Select your template in **Upload Template**.
4. Check **Preview Upload**.

![Preview Upload checkbox](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/19-Preview-Upload.png)

5. Click **Create**.

![Click Create button](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/20-Click-Create-button.png)

The upload opens with the status **SKIPPED** and no records are created yet. Check the red warning banners at the top, which list **Unmapped file fields** and **Missing upload template fields**, then read the row table below. Each column heading shows the mapped system field above the raw header from your file, so you can confirm the mapping row by row. If you change the template, refresh the upload page to load the latest mapping.

#### Step 7: Process the file

1. Click **Process Upload**.

![Click Process Upload button](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/21-click-process-upload.png)

2. Watch the status badge change to **QUEUED** while the upload waits for a worker.

![File status showing Queued](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/22-file-queued.png)

3. Wait for the status badge to reach **COMPLETE**.

![File status showing Completed](https://assets.ecourtdate.com/images/articles/ea2b2160-3817-4344-ae7d-e3a70c3b1f82/23-file-completed.png)

4. Review the count cards for **file rows**, **clients**, **contacts**, **events**, **cases**, **payments**, **forms**, and **warrants**, and click any count to open those records filtered to this upload.
5. Enter a value in the search box on the upload and click **Search** to find the rows behind a count.

The **Search Operator** dropdown on the upload offers contains, =, <, <=, >, and >=, and the column dropdown narrows the search to one column or searches **Any column**. To search inside file data across every upload instead, check **Search File Data** on the **Uploads** page, then set **Search Operator** and **Search Column**.

### What to Expect

While an upload runs, the upload page shows a progress bar with the current row, the process time, and the time per row. The status badge moves through **QUEUED** and **PROCESSING** to **COMPLETE**. If another upload in your agency is already processing when you create a new one, the new upload is created as **DELAYED** and waits its turn instead of running immediately.

If you entered addresses in the template's **Notify Emails** field, those addresses receive a summary with the record counts and any errors once processing finishes. Check the **Notify Assigned Users** option to also send an in-app notification to everyone assigned to the clients, cases, or events the upload touched.

### Best Practices

- Preview the first upload with any new template so you catch mapping problems before records are created.
- Use **Update by Matching Fields (incremental)** unless your file is a full snapshot of your data every time.
- Include a stable reference (such as a client reference, **Event Reference**, or **Case Number**) in every file and select it in **Match Existing Records** so rows update instead of duplicating.
- Build and test new templates in your staging agency before you point them at production data.
- Remove blank rows and stray columns from your file, and set **Field Delimiter** and **Cell Separator** to match how your source system exports.

### Frequently Asked Questions

**Q: Do I have to preview every upload?**

A: No. **Preview Upload** only skips processing so you can check the mapping first. Once you trust the template, leave it unchecked and the upload starts processing as soon as you click **Create**.

**Q: How do I set a default value for a field?**

A: Use the **Default Values** section of the upload template. You can set **Default Client Status**, **Default Client Group**, **Default Event Status**, **Default Location**, **Default Flow**, **Default Portal**, **Default Payment Status**, and **Default Payment Amount**. Each one applies when the matching column is unmapped or the row's value is blank.

**Q: My dates and times are not processed correctly. How do I fix this?**

A: Open the **Parsing Formats** section of the template and set **Date Format** and **Time Format** to match your file. Both default to automatic detection.

**Q: The preview shows no data. What should I check?**

A: Check **File Format** in **Parsing Formats**. It defaults to CSV, and **auto** detects the format from the file extension, so a TXT or XLSX file will not be read while the template is set to CSV. Also confirm **Field Delimiter** matches the character your file uses to split columns.

**Q: Do I have to build every template from scratch?**

A: No. Open the **File Templates** tab under **Uploads**, then click **Import** on a sample to create an upload template from it, or click **Sample** to download a CSV with that template's column headers.

**Q: How do I create statuses from the values in my file?**

A: Check **Auto Create Statuses** in the template's **Post Processing Settings**. Client, event, and payment statuses found in the file are created if they do not already exist. Go to **Admin** > **Settings** > **Statuses** afterwards to configure them.

**Q: What can I do with an upload once it completes?**

A: Click **Create Bulk Action** on the upload to start a bulk action scoped to that upload's records. You can also open the **Tools** menu for **Download File**, **Replay Upload**, **Sync Upload**, and **Trash Upload**.

### Troubleshooting

**Issue:** The upload page shows a warning about mapped fields.

**Symptoms:** A red banner reads **Unmapped file fields** or **Missing upload template fields** followed by a list of column names.

**Solution:** **Unmapped file fields** lists columns in your file that no mapping uses, which is fine if you do not need them. **Missing upload template fields** lists mappings whose column is absent from this file, which usually means a header was renamed or misspelled. Open the template's **Field Mapping** card, correct the header text, then reprocess the upload.

**Issue:** Records are duplicated after processing.

**Symptoms:** You see two copies of the same client, event, or case in your agency after an upload.

**Solution:** Review **Match Existing Records** in the template. Choose the smallest set of fields that uniquely identifies each record type, and confirm those fields are mapped and present in every file. A missing or unstable match field creates a new record instead of updating the existing one.

**Issue:** An upload processed with the wrong template settings.

**Symptoms:** Data landed in the wrong fields, or record counts on the upload are far from what you expected.

**Solution:** Fix the template first, then open the upload and click **Tools** > **Replay Upload**. The upload returns to **QUEUED** and the same file is processed again with your corrected settings. If the records are right but their scheduled messages are not, click **Tools** > **Sync Upload** to re-sync the events that upload created with your latest message settings.

**Issue:** The upload is rejected before it is created.

**Symptoms:** An error reports that the upload already exists.

**Solution:** An upload cannot reuse the name or the file of another upload that has not been trashed. Rename the file before uploading it again, or trash the earlier upload from its **Tools** menu.

**Issue:** No upload can be created from the **Uploads** page.

**Symptoms:** A warning reads that no upload templates were found, and the file form is missing.

**Solution:** Create an upload template first. Click the **Upload Templates** tab and follow Step 1, or import one from the **File Templates** tab.

### Related Articles

- [How to create upload templates](/how-to-create-upload-templates)
- [How to Assign Organizations via Uploads](/how-to-assign-organizations-via-uploads)
- [How Bulk Actions Work](/how-bulk-actions-work)
- [How to Manage Clients](/how-to-manage-clients)
- [How to manage statuses](/how-to-manage-statuses)
Share:

Need Help?

Can't find what you need? Our team is here to assist.

Get Help