What you're seeing
You uploaded a CSV and the Review & edit step shows rows flagged in red with a per-row error message. The Confirm button stays disabled until the errors are resolved.
Why it happens
The review step checks each row for a few kinds of problems:
- A single field is wrong — a required value is missing, a value is too long, or a value is in the wrong format (for example, a date that isn't
YYYY-MM-DD, or a malformed email). - Two fields don't agree — a start date after an end date, an end time before a start time, or a missing currency code on a row that needs one.
- A row conflicts with another row or with existing data — two rows share the same name (for example, two clients named "Acme"), or a row collides with a record you already have.
The most common specific causes:
- Missing required column. A required header is absent from the file. Headers like
nameorstatusare required for many imports. - Date format mismatch. Dates must be
YYYY-MM-DD— locale formats likeMM/DD/YYYYaren't accepted. - Value doesn't match an allowed option. A transaction
Typecell ofIncome(capitalized) doesn't match the expectedincome. - Reference can't be matched. A
Clientcell on a project import names a client that doesn't exist in your workspace. - Duplicate name. Importing a client with a name you already use — client names must be unique.
- Text in a number column. Amounts must be plain numbers, with no thousands separators or currency symbols.
How to fix it
- Read the per-row message. Each red row carries a specific error. Fix or remove the row right in the review table.
- Edit in place. The review table lets you edit individual cells, so you don't need to re-upload to fix a few stray rows.
- Compare against the sample. Use Download sample on the import page for a guaranteed-valid example tailored to your workspace, then mirror its column names and value formats.
- Round-trip when in doubt. Export the relevant records to CSV, edit them in a spreadsheet, and re-import. The exported file already matches what the import expects — see Import / export formats.
- Re-upload only if you changed many rows. Otherwise just keep working in the review step.
Tips and edge cases
- Errors block confirmation; warnings don't. A "name already exists" message on a client is sometimes a warning rather than an error — read it carefully.
- Empty rows are dropped quietly. Trailing blank rows in spreadsheets are no problem.
- Tags split on commas inside the cell. A tag that literally contains a comma becomes two tags — rename it to work around this.
- Linking step is conditional. For projects, after you fix the validation errors there's an optional step where you match imported rows to existing clients by name. Skip it if all your rows already reference existing records.
On mobile
Not available on the mobile app — manage from the web app.