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
| Constraint | Value |
|---|---|
| Data rows (excluding the header) | max 10,000 |
| File size | max 10 MB |
| Encoding | UTF-8 (or UTF-8 with BOM) |
| Separator | comma (,) |
| Currency | EUR (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 formatx.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-312026-06-25 13:29:572026-06-25T13:29:57.566Z
Ambiguous formats like
31/12/2026are not accepted. If the time zone is missing, UTC is assumed; if the time is missing,00:00is 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:
BOOLEANfollows the boolean rule above;SELECTmust be one of the definition's options;TEXThas 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: