Direct CSV Import requires Admin access. You can find it in Integrations > Data Import.
Accessing Direct CSV Import
- Navigate to Integrations from the main menu
- Select the Data Import tab
- Click Import CSV to open the import wizard
Step 1: Entity & File
Choose what you’re importing and upload your file. Entity type:- Account — Update fields on existing accounts
- People — Create or update people records linked to existing accounts
- Drag and drop a CSV or Excel file, or click to browse
- Supported formats:
.csv,.xlsx,.xls - Once uploaded, the wizard displays your detected column headers and a preview of the first few rows
Header layout
Some exports don’t put the column names in row 1. They start with a report title, a date, or notes, and some add a row of group names above the column names. Statisfy scans the top 20 rows of your file to find the column names row and, if there is one, the group names row. A Header layout line appears above the data preview and summarizes the layout Statisfy used, for example column names in row 1 · no group row. When Statisfy detects that the column names aren’t in row 1, the Header layout card opens on its own and explains what it found, for example Rows 1-3 look like titles or notes, column names are in row 4. Otherwise, click Change to open it. In the card:- Select the Column names row. Rows above it are ignored.
- Optionally, select a Group names row. Only rows above the column names row are listed. Choose None if your file has no group row.
- Check the Top of the file preview. Each row is labeled as ignored, groups, names, or data.
- Click Apply. Statisfy reads the file again with the new layout and refreshes the column headers and preview. Click Cancel to keep the current layout.
/. For example, a Logins column under a Module A group becomes Module A / Logins. This keeps columns with the same name in different groups apart. The data preview shows the group row above the column names.
Example: a file with a title row and a group row.
Account, Module A / Logins, Module A / Seats, and Module B / Logins.
When you click Apply with a new layout, the column names can change. In a new import, the wizard clears the identifier column and the column mappings. In an import from a previous import, Apply sets the identifier column and the mapping rows to the values of that import again. Changes that you made in Steps 2 and 3 are lost. A column that is not in the new headers becomes blank, and you must select it again.
Step 2: Identifier
Configure how rows in your CSV are matched to accounts in Statisfy.CSV Column
Select which column in your file contains the identifier value.
Match By
Select which account field to match against:
- Account Name — Match by the account display name (fuzzy matching)
- Domain — Match by company domain (e.g., acme.com)
- CRM Account ID — Match by Salesforce or HubSpot account ID
- Custom fields — Match by any custom field you’ve defined on accounts (each custom field appears as a separate option)
Need a field that doesn’t exist yet? The Match By dropdown has a Create New Field option pinned at the top (marked with a plus icon). Selecting it opens the field-creation dialog right inside the wizard, and the new field is selected for you when you save. Because this step always matches against accounts, the field is created as an account custom field — even during a people import.
Step 3: Map Columns
Map CSV columns to the target fields on the selected entity (account or people).- Click Add Mapping
- Select a CSV Column and the corresponding target field (standard or custom)
- Repeat for each column you want to import
Text, Number, Date, Currency, Percent) so you can verify the data in your CSV is appropriate for the field before executing.
Example (Account):
Example (People):
Supported custom field types
You won’t see custom fields that can’t be populated from a CSV cell — the mapper hides them so you only pick from the types listed below.Not supported in CSV: Pill, Object, Lookup List, JSON, and Lookup fields that target an account or document. You won’t be able to map these from a CSV — use the web app to populate them instead.
Choosing a date format
When a mapping targets a Date field, a Date format dropdown appears under that mapping row. It tells Statisfy how to read the dates in your CSV. The available formats are:- YYYY-MM-DD (ISO) — the default, for example
2026-06-11 - ISO 8601 with time — an ISO date that includes a time, for example
2026-06-11T14:30:00 - MM/DD/YYYY (US) — for example
06/11/2026 - DD/MM/YYYY (EU) — for example
11/06/2026
Excel files with typed date columns: If your
.xlsx or .xls file stores a column as a real date type (rather than as text that looks like a date), the wizard hides the Date format dropdown for that mapping and shows the message “Dates in this column are stored as dates by the file, so no format is needed.” Statisfy reads the date value directly from the file, so slash-style formats like DD/MM/YYYY and MM/DD/YYYY no longer need to be picked — and can’t be mis-picked — for typed Excel date columns. The picker still appears for CSV columns and for Excel columns whose cells are stored as text, since those are genuinely ambiguous.Step 4: Options
Configure how unmatched rows are handled during the import. For account imports: All rows attempt to match an existing account using the identifier from Step 2. Rows that don’t match any account are skipped. The job details list each skipped row with its reason, for exampleAccount not found for domain='nowhere.com'.
For people imports, choose one of:
- Skip — When the account is matched but no person with the given email is found, the row is skipped. Only existing people are updated.
- Create new person — When the account is matched but no person with the given email is found, a new people record is created and linked to the matched account.
Step 5: Preview & Confirm
The wizard runs a dry-run preview of your import using the first rows of your file (up to 10) and shows the results before any data is changed. The preview checks both that each row matches an existing record and that each mapped value parses correctly for its target field type, so most type errors surface here before you execute. The full import will process all rows when you execute it. Summary cards show:- Will Update — Rows that matched an existing record and will update its fields
- Will Create — (People only) Rows that will create new people records
- Will Skip — (People only) Rows that will be skipped
- Errors — Rows that could not be processed (either the identifier didn’t match, or a mapped value failed validation for its target field — for example a non-numeric value in a Number column, or a Lookup-by-email that didn’t match a user)
Review the results, then click Execute Import to start the import.
The preview is a dry-run — no data is changed until you click Execute Import.
How rows are processed
Direct CSV Import and CSV Integration follow the same rules when they write your data:- Account not found: a row whose account can’t be matched is skipped, not failed. The job details list it with its reason.
- Repeated rows: rows for the same record are merged. For each field, the last non-empty value in the file wins. For people imports, rows with the same email create or update one person.
- Invalid cells: a cell that can’t be converted to its field type drops only that cell. Statisfy still writes the row’s other values and reports one error per bad cell, for example
Failed to coerce field .... - Text cells: leading and trailing whitespace is trimmed. A cell that is empty or contains only whitespace never overwrites an existing value.
- Clear token: a cell that holds only the clear token empties the field. The token is
-by default, and it is not case-sensitive. An import clears a field only when the field has a value now. A token inside a longer text (for examplea;-in a list) is a normal item. A date cell with-,N/AorNaTalso clears a date field. These fields are never cleared from a CSV: the account name, domain, type, ARR and renewal date, a person’s email and name, owner fields, and product usage values. An account with no type stops getting emails and activities, so the type cannot be cleared. The preview shows how many values the import clears. - AI-maintained fields: you can’t map a column to a field whose value is maintained by AI. Statisfy rejects the request with a
422error and the reasonfield is maintained by AI. - Non-editable fields: you can’t map a column to a field that isn’t editable. If a field becomes non-editable after you start the import, Statisfy skips writes to it and counts them in the job results. The row’s other fields are still written.
After Import
Once you click Execute Import, the job is queued for background processing. You’ll see a confirmation toast with the job ID. Tracking import status:- Go to Integrations > Data Import
- The history table shows all past imports with:
- File name and entity type
- Status: Pending, Processing, Processed, or Failed
- Counts for updated, created, skipped, and errored rows
- Import date
- Click View on a row, or click the row itself, to open Import Details
Import details
Import Details shows the import’s status and these details:- File, Entity, Started, and Completed
- Started by: the email of the user who started the import
- Processing time: how long the import took to process, in seconds
- Updated, Created, Skipped, and Failed rows counts, for processed and failed imports
- Blank rows that Statisfy ignored, if any
- Skipped writes: the number of field values that Statisfy didn’t write because the field isn’t editable or is maintained by AI
- Error Details: up to 50 errors, each with its row, column, and message. Errors that apply to the whole import, not one row, show
—in the Row column.
- Entity: Account or People
- Identifier: the CSV column and the account field it matched against
- If no match: what happened to unmatched rows
- Header layout: the column names row and, if set, the group names row
- A table of each CSV column, its Target field, and its Date format
Download the import file
Click Download file in Import Details to download the original file you uploaded. If Statisfy has no file for the import, the button is disabled and No file recorded appears next to it.Start a new import from a previous configuration
Use New import from this configuration to repeat an import with a new file, for example a weekly usage export with the same columns. The button is disabled when the configuration isn’t recorded.- Open Import Details for the import you want to reuse.
- Click New import from this configuration. The import wizard opens with the entity type, the Match By field, and the unmatched-row option from the previous import already set.
- Upload the new file in Step 1. The wizard then applies the previous identifier column and column mappings to the new file’s headers.
- Check each step, fix any flagged items, and execute the import as usual.
- Header layout doesn’t match: if the previous import used a custom header layout, Statisfy tries that layout first. If it doesn’t fit the new file, or the identifier column isn’t found with it, Statisfy detects a new layout and shows This file does not match the previous header layout. Check the Header layout card in Step 1.
- Missing identifier column: if the new file doesn’t have the previous identifier column, Step 2 shows a warning with the column name. Pick the identifier column.
- Missing columns: if the new file doesn’t have a mapped column, Step 3 keeps the mapping row with its target field but no CSV column. A warning lists each missing column and its target field. Pick a column or remove the row. You can’t continue until you do.
- Unavailable target fields: if a mapped field can no longer take CSV values, for example because it’s no longer editable, Step 3 shows These fields can no longer take CSV values with the field names. Pick another field or remove the row.
If you change the entity type in Step 1, the wizard drops the previous configuration, because its mapping doesn’t apply to the other entity type.
Reuse a previous import
Statisfy records the configuration and the file of an import. Use them to check an import, or to do the same import again with a new file. Some imports have no record of one or both. View an import: in Integrations > Data Import, click View on the row of the import, or click the row. The Import Details dialog opens. The Configuration section shows the entity, the identifier, the If no match option, the header layout, and each CSV column with its target field and date format. If Statisfy did not record the configuration, the section shows Configuration not recorded. Download the file:- Click Download file in the Import Details dialog. You get the file that was uploaded for that import.
- If Statisfy did not record the file, the button is disabled and the dialog shows No file recorded.
- In the Import Details dialog, click New import from this configuration. The button is disabled if the configuration was not recorded.
- The import wizard opens with the entity type, the Match By field, and the people option (Skip or Create new person) already set.
- Upload a new file in Step 1.
- Check the identifier column in Step 2.
- Check the column mappings in Step 3.
- Continue to Preview & Confirm and click Execute Import.
If you change the Entity Type in Step 1, the wizard removes the previous configuration. It clears the identifier column and the column mappings. It also sets Match By back to Name and the Step 4 option back to Skip.
Troubleshooting
Accounts not matching
Accounts not matching
- Verify the identifier column contains valid data
- Check that identifiers match exactly — CRM Account IDs and domains must match the stored value precisely. Account name matching uses fuzzy matching but still requires a close match
- Ensure the accounts already exist in Statisfy before importing. Rows whose account isn’t found are skipped and listed with their reason in the job details
- Try a more reliable match method like CRM Account ID or Domain
People import requires email
People import requires email
The email field mapping is required for people imports. Add a mapping from a CSV column to the email field in Step 3.
Rows showing as errors in preview
Rows showing as errors in preview
- Check that the identifier value exists in Statisfy for account imports
- Verify that data types match the target fields (e.g. numbers for Number and Percent fields, a recognized boolean word for Boolean)
- For Date fields, make sure the Date format selected on the mapping matches how dates are written in your file — a
06/11/2026value will fail under the default ISO format until you switch the mapping to US or EU format. (Excel columns stored as a real date type skip the picker entirely — Statisfy reads them directly and the format setting doesn’t apply.) - For Lookup-to-user or Lookup-to-owner fields, the cell must contain an email that matches a user in your workspace — the error message lists the unresolved email
- For Text List and Multi-Pick List fields, separate multiple values with semicolons (
;). For Multi-Pick List, each value must match a defined option - For Pick List fields, the cell value must match one of the field’s defined options
- For Currency fields, symbols like
$and thousands commas are stripped automatically, but the remaining value must be a valid number - For people imports with “Skip” strategy, unmatched emails appear as skipped, not errors
Import rejected with 'unsupported field mappings'
Import rejected with 'unsupported field mappings'
The API returns
422 unsupported_field_mappings when a mapping targets a field type that Statisfy doesn’t read from CSV (Pill, Object, Lookup List, JSON, or a Lookup that targets an account or document), or when the target custom field key doesn’t exist (typically because it was deleted between choosing it in the wizard and running the import). Statisfy also rejects mappings to fields that are maintained by AI (field is maintained by AI) or aren’t editable (field is not editable). Remove those mappings, or replace the target with a field from the supported-types table above, then re-run the preview.Column headers look wrong
Column headers look wrong
If the detected headers show a report title, a date, or blank names, the column names probably aren’t in row 1. Open the Header layout card in Step 1, select the correct Column names row, and click Apply. See Header layout.
Import stuck in Pending or Processing
Import stuck in Pending or Processing
Imports are processed asynchronously. Large files may take several minutes. If a job stays in Processing for an extended time or moves to Failed, check the job details for error messages and retry with a corrected file.