Skip to main content

CSV Imports

Riseact lets you import supporters and donations from CSV files. The importers are designed as an onboarding tool: they are meant to load an organization's initial data, not to maintain a continuous synchronization with an external CRM.

Principles

  • No updates to existing records. If a matching record already exists (based on the deduplication keys), it is kept as-is: existing data is never overwritten.
  • Idempotency. Re-importing the same file does not create duplicates. Deduplication happens through external references (external ref) and, for rows without a key, through an internal row marker.
  • In-app report. Each import generates an event that can be reviewed in Settings → Imports, with status, counts, and discarded rows. When it finishes, a summary email is also sent.
  • One import per organization at a time. While an import is in progress, you cannot start another one for the same 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 (only supported one)

Larger files must be split into multiple imports.

Header format

Headers are lowercase, with words separated by spaces (not snake case, not Title Case). Example: first name, supporter external ref, payment date. The comparison ignores case and outer whitespace; multiple internal spaces are normalized to a single one.

The only exception: custom field columns, which keep the custom_ prefix with an underscore (see Custom fields).

Values: format rules

These rules apply to both importers.

  • Amounts (amount): fixed format x.xx - whole digits, dot as the decimal separator, exactly two decimals (regex ^\d{1,10}\.\d{2}$). Not allowed: decimal comma (12,34), thousands separator (1.234,56), zero or a single decimal (12, 12.3), values ≤ 0.

  • Dates and timestamps (payment date): strict ISO 8601. Accepted formats:

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

    Ambiguous formats like 31/12/2026 are not accepted. If the time zone is missing, UTC is assumed; if the time is missing, 00:00 is assumed.

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

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

  • Tax identification number / VAT number: format validation only (alphanumeric characters, within the maximum length); no existence check.

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

  • Multi-value tags: multiple values separated by commas within the same cell. Since the comma is also the CSV separator, the cell must be enclosed in quotes:

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

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

Deduplication

Supporter - key chain, the first match found wins and stops:

supporter external ref → email → ssn → vat

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

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

Payment - key (donation, payment date, amount): avoids counting the same payment twice when re-importing the file.

Custom fields

Custom fields are imported with dedicated custom_<key> columns, where <key> is the stable key of a custom field definition belonging to the organization (e.g. custom_numero_tessera).

  • The definition must already exist: the import does not create new custom fields. A nonexistent <key> is a header error.
  • The column is assigned to the entity of its definition: a custom_<key> of type supporter goes on the supporter, one of type donation goes on the donation (even in the denormalized donations file).
  • In the supporters importer, only <key> values of type supporter are allowed.
  • Value consistency: BOOLEAN follows the boolean rule above; SELECT must be one of the definition's options; TEXT has no constraints.

Report and outcome

When it finishes, in Settings → Imports you will find:

  • the import status (Pending, In progress, Completed, Failed);
  • counts of the created records (supporters, donations, payments) and of the discarded rows;
  • the list of discarded rows with a reason, and a CSV export of just the discarded subset, to be corrected and re-uploaded.

A file-level error (unreadable CSV, invalid headers, file too large, failed pre-flight) makes the whole import fail without creating any records. An error on a single row does not block the import: the row ends up among the discarded ones and the import stays Completed.

See the dedicated pages for the complete list of columns: