Skip to main content

CSV Imports

Riseact imports supporters and donations from CSV files. The importers are meant to load an organization's initial data, not to sync with an external CRM.

Principles​

  • Existing records are not updated. If a record matches an existing one (according to the deduplication keys), it stays as it is.
  • Re-importing the same file creates no duplicates. Deduplication uses external references (external ref) and, for rows without a key, an internal row marker.
  • In-app report. Every import appears in Settings > Imports, with status, counts and discarded rows. A summary email is sent when it finishes.
  • One import at a time per organization.

File limits​

ConstraintValue
Data rows (excluding the header)max 10,000
File sizemax 10 MB
EncodingUTF-8 (or UTF-8 with BOM)
Separatorcomma (,)
CurrencyEUR

Larger files must be split into multiple imports.

Header format​

Headers are lowercase, with words separated by spaces: first name, supporter external ref, payment date. Case and outer whitespace are ignored, multiple internal spaces are reduced to one. It is the same convention as the exports, so an exported file can be fixed and uploaded again without renaming anything.

Two exceptions:

  • custom field columns use the custom_ prefix (see Custom fields);
  • identifier columns (id, supporter id, donation id) are ignored: ids are assigned by Riseact. Any other unknown column is an error, so typos are caught.

Values: format rules​

They apply to both importers.

  • Amounts (amount): x.xx, dot as decimal separator, exactly two decimals (regex ^\d{1,10}\.\d{2}$). Rejected: decimal comma (12,34), thousands separator (1.234,56), zero or one decimal (12, 12.3), zero or negative values.

  • Dates and timestamps (payment date): strict ISO 8601, for example:

    • 2026-12-31
    • 2026-06-25 13:29:57
    • 2026-06-25T13:29:57.566Z

    31/12/2026 is not accepted. Without a time zone UTC is assumed, without a time 00:00.

  • Date of birth (date of birth): YYYY-MM-DD.

  • Country code (country code): ISO 3166-1 alpha-2 (e.g. IT).

  • Tax identification number and VAT number: format validation only (alphanumeric, within the maximum length).

  • Booleans (marketing consents and BOOLEAN custom fields): only t/f, true/false, 0/1, case-insensitive. Empty cell = not set. Any other value (yes, si, x) makes the row fail.

  • Multi-value tags: comma separated in the same cell, which must therefore be enclosed in quotes:

    ...,altro,"x,y,z",altro,...

    "x,y,z" produces three tags: x, y, z.

Deduplication​

Supporter: the first key that finds a match wins, in this order:

supporter external ref -> email -> ssn -> vat

With no key set, a new supporter is always created. If a secondary key (email, ssn, vat) matches more than one supporter, the one with the lowest id wins.

Donation: key donation external ref. Rows with the same value merge into a single donation with multiple payments. Without donation external ref each row becomes a one-off donation.

Payment: key (donation, payment date, amount), so re-importing the file does not duplicate payments.

Custom fields​

They are imported with custom_<key> columns, where <key> is the key of the custom field definition (e.g. custom_numero_tessera).

  • The definition must already exist: an unknown <key> is a header error.
  • The value goes to the entity of the definition: a supporter field on the supporter, a donation field on the donation.
  • The supporters importer accepts only supporter fields.
  • BOOLEAN follows the boolean rule above, SELECT must be one of the definition's options, TEXT is free.

Report and outcome​

In Settings > Imports you will find:

  • the status (Pending, In progress, Completed, Failed);
  • the created records (supporters, donations, payments) and the number of discarded rows;
  • the discarded rows with their reason, exportable to CSV to fix and upload again.

A file error (unreadable CSV, invalid headers, file too large, failed pre-flight check) makes the import fail without creating records. A row error discards only that row and the import stays Completed.

The columns are listed in: