Who can import members
You need the members.bulk_import capability. This is a separate capability from members.create because it carries its own rate limit and validation flow. If you do not see the Import button on the Members list, ask your Administrator to check your role.Where to start
Open the Members list athttps://loan.compuzign.com/your-slug/members, then click Import. The import dialog opens with three steps: upload, preview, and result.
The CSV columns
The platform reads a header row and matches columns by name. Header matching is case-insensitive, and spaces or hyphens are treated as underscores, so bothfirst_name and First Name are accepted. Columns the platform does not recognise are ignored. A leading UTF-8 byte-order mark, the marker Excel prepends when it exports a CSV, is stripped automatically, so an Excel export imports cleanly.
Required columns
Every row must have a value in each of these five columns.Optional columns
These columns are written when present and left blank when omitted.Download a starter template
The upload step has a Download a starter template link. It gives you a CSV with the full header row and one well-formed sample row, so you can edit in place rather than build the header by hand.Limits
A file with more than 500 data rows is rejected. Split it and import the pieces separately. The hourly limit counts committed imports only, so one credential cannot create thousands of fake records in an hour.
The real gate on file type is the CSV parser, not the extension. When the browser reports a content type, it must be
text/csv, application/csv, or text/plain; when no content type is sent, that check is skipped and the file is parsed directly. Either way, a file that does not parse as CSV is rejected.
How the import works
The flow is preview then commit. You never mutate your workspace from the upload itself.1
Upload the CSV
Drag the file onto the drop zone or browse for it, then click Continue. The platform virus-scans the file before parsing, and an infected file is rejected outright. It then parses the header, validates each row, and cross-checks every
cif and branch_code against your workspace. This writes an import record with status PREVIEWED and emits member.import.previewed. No member rows are created.If the file is malformed, the platform records the import with status REJECTED, emits member.import.rejected, and shows you the reason. Nothing is created. This covers a missing required column or a row count over the limit, and also an empty file, a file with a header but no data rows, and any file that cannot be parsed as CSV.2
Review the preview
The preview shows every row with a status pill and a summary strip you can click to filter. Each row falls into one of four groups:
- Ready (
creatable): the row is valid and will be created. - Already a customer (
skipped_existing): an active member with thiscifalready exists in your workspace. The existing-CIF check ignores soft-deleted members, so a CIF that belonged to a previously deleted member can be reused on import. - Duplicate in file (
skipped_duplicate_in_file): the samecifappears in an earlier row of this file. - Invalid (
errored): the row failed validation. The pill shows the reason, for examplemissing first_nameorbranch_code does not exist in this workspace.
3
Commit the valid rows
Click Create N members. The platform re-reads the same file, verifies it matches the file you previewed, re-validates against your current workspace, and creates a member for every still-valid row. It flips the import record to
COMMITTED and emits member.import.committed.The result step shows how many members were created and lists any rows skipped at commit time, with a reason for each.Between preview and commit, a row can change. If another staff member creates a member with the same
cif in the meantime, that row is skipped at commit and reported in the result, rather than failing the whole batch.After the import
Imported members are created with KYC statusUNVERIFIED. They are ready to use, but each member must still pass identity verification before a loan can be disbursed against their profile. See KYC verification.
Events recorded
Every import is recorded in the audit trail, separate from the per-membermember.created events the commit produces.