Import user data from a CSV

A CSV import sets stored values for many users in one go, at app.signature.cat/data/import or through Import from CSV on the Data page. The file is checked before anything is written, and the whole import applies all-or-nothing. Turn the feature on first - see User data overrides.

When to use it

Use the import when you have dozens or hundreds of users to set up, typically straight from an HR export. For one person the per-user editor is faster and refreshes their signature right away.

The import only ever touches the addresses listed in the file. Everyone else keeps whatever they have, including users with no stored data at all.

The file

Start from Download CSV template on the import page - it contains the header row and one example row:

email,firstname,lastname,jobtitle,department,photo,address,phone
jane.doe@yourcompany.com,Jane,Doe,Senior Account Manager,Sales,https://yourcompany.com/photos/jane.jpg,"Main Street 1, 00-001 Warsaw",+48 600 000 000

The format is ordinary CSV: comma-separated, one header row, values with a comma inside wrapped in double quotes (a quote inside a quoted value is doubled), LF or CRLF line ends, UTF-8.

email is required in every file. It identifies the user whose entry the row replaces and must be that user's primary Workspace address - it is not an override of the {{email}} variable, and it is not written into any signature. Aliases are not resolved here, so a row listing an alias never reaches that person's signature.

Add at least one of the data columns. Each one sets the field of the same name on the Data screen:

ColumnSetsLimit
firstnameFirst name, {{firstname}}120 characters
lastnameLast name, {{lastname}}120 characters
jobtitleJob title, {{jobtitle}}200 characters
departmentDepartment, {{department}}200 characters
photoPhoto URL, {{photo}}2048 characters, https:// link only
addressAddress, {{address}}300 characters
phonePhone, {{phone}}60 characters

Columns may appear in any order, but every header must be one of the names above and none may appear twice.

What a row does

A row replaces that user's whole stored entry - it is not a partial update:

  • a filled cell stores that value;
  • an empty cell means "use the directory" and clears any value stored for that field;
  • a column you left out of the header is cleared as well, for every address in the file;
  • a row with an address and no values at all removes that user's entry entirely;
  • users not listed in the file are never touched.

So a file with only email and phone clears every other stored field of the listed users. Export what you already have, or list every column you want to keep.

Limits

Up to 2000 data rows and 1 MB per file. Larger files are rejected before the upload - split the data into several files and import them one after another.

Upload, check, confirm

Nothing is written until you confirm the preview:

  1. Upload. Choose the file with Choose a CSV file. It is parsed and validated on the spot.
  2. Review before import. You get a summary (how many rows, how many are new, how many update an existing entry) and a table of rows marked New or Update, with "directory" shown wherever a cell would clear a value. Very long files list the first rows only; all of them are imported.
  3. Confirm. Click Import N rows. Only now is anything written. The result screen reports how many entries were saved and how many empty rows removed an entry.

One broken row rejects the whole file

The import is all-or-nothing: if any row or the file itself fails validation, nothing is written and no entry changes. Fix the file and upload it again.

Problems with a single row:

What the app saysCause and fix
"The email address is not valid."The email cell is not a syntactically valid address.
"This email appears more than once in the file."The same address is listed twice. Merge the rows into one - a row replaces the whole entry, so the second one would silently win.
"The row has a different number of cells than the header."Usually an unquoted comma inside a value. Wrap such values in double quotes.
"The row contains control characters (e.g. a line break inside a value)."Values must be single-line plain text. Remove line breaks and tabs, including inside quoted cells.
"A value is not valid for its column."A value is longer than the limit above, or a photo cell is not an https:// link.

Problems that reject the file outright:

What the app saysCause and fix
"The file has no data rows."The file holds only a header.
"The email column is missing."Add the required email column.
"Add at least one data column besides email."A file of addresses alone does nothing.
"Unknown column in the header."Only the eight documented column names are accepted, spelled exactly.
"A column appears twice in the header."Remove the duplicate.
"The file has more than 2000 data rows."Split the file.
"A quoted value is never closed - check the quoting."An opening double quote has no closing one - often a stray quote in an address.

After the import

Imported values reach mailboxes with the next daily sync. To apply them sooner, use Sync signatures now on the result screen - it starts a signature sync immediately. The button is optional; skipping it just leaves the change to the daily sync. If a sync is already running, the app says so, and anything that run misses is applied by the next one.

Unlike a single-user save on the Data page, an import does not refresh signatures on its own - that is why the button is offered.

Related: User data overrides, Template variables, Logs.