Client Data-Migration Spec (Bulk Customer Import)

This is the practical, "what do you actually send us" companion to docs/investor/technical-architecture.md's "Client data migration & onboarding" section and docs/staff-operations-guide.md's migration procedure. It's written for a client bank/credit union's own IT/ops team preparing to move their existing customers onto Coreledgerpay, and for Coreledgerpay staff/sales having that first "how do we get our data over" conversation.

It is deliberately core-system-agnostic: Coreledgerpay does not have a live, certified connector into Fiserv, FIS, Jack Henry, or any other core banking system today (see the honest gap called out in Technical Architecture and Competitive Analysis) - building one speculatively, before a specific client has confirmed a specific core (and often a specific product within that vendor's lineup - e.g. Fiserv DNA vs. Premier are very different systems), would be guessing at a very expensive integration. What follows instead is a plain file format any core's own export/reporting tools can produce, plus general guidance on where to look for each field regardless of which core a client runs.

What's actually built today (read this first)

The file format

One row per customer, as a CSV file (UTF-8, comma-separated, a header row matching the column names below exactly). The admin console's Migrations tab has a "Download CSV template" button that produces this exact format with one example row filled in - use it as the starting point rather than building the file from scratch.

ColumnRequiredNotes
emailYesThe customer's email address for their new Coreledgerpay login. Must be unique - a duplicate is rejected per-row, not treated as an update.
claimSecretYesA code your team chooses or generates per customer, communicated to them separately from this file (phone, secure email, in person) so they can activate their account. Never put this in the same channel/email as the customer's other PII.
legalNameYesUsed to create the customer's identity-verification record as already-verified (see "Why identity verification is skipped" below).
migrationNoteYesFree text recorded in Coreledgerpay's staff audit log explaining the source of this record (e.g. "migrated from Example Credit Union, verified there on 2024-03-01") - required because an unexplained pre-verified identity record would otherwise concern a compliance auditor.
sourceSystemReferenceYesThis customer's account identifier/number in your own system - kept only for your team's own cross-referencing during reconciliation; never shown to the customer. Also the join key the transaction-history file (below) uses to attach its rows to this customer, so it must be unique per customer in this file.
accountTypeNo (defaults to checking)checking or savings.
currencyNo (defaults to USD)ISO currency code.
initialBalanceNo (defaults to 0)The balance this customer currently holds in your system, as a plain decimal number (no currency symbols or thousands separators).

The transaction-history file format (optional, second upload)

A separate CSV, uploaded after the customers file above (the console matches its rows to that file's customers by sourceSystemReference, so it needs to already be loaded). One row per historical transaction - a customer with 200 past transactions has 200 rows here, all sharing that customer's sourceSystemReference. This is deliberately a second, linked file rather than extra columns on the customer file itself, since a customer can have anywhere from zero to hundreds of historical transactions - a fixed number of "transaction 1, transaction 2, ..." columns wouldn't scale, and most rows in the customer file would need almost all of them left blank. The Migrations tab has its own "Download transactions CSV template" button for this file.

ColumnRequiredNotes
sourceSystemReferenceYesMust match a sourceSystemReference in the customers file uploaded in the same session - a value that doesn't match any customer row is flagged and excluded, never silently guessed at.
amountYesA plain decimal number (no currency symbols or thousands separators), and never zero. Positive means money came in (a credit, e.g. a deposit); negative means money went out (a debit, e.g. a purchase or withdrawal) - the same sign convention this account's own balance history already uses everywhere else in this platform.
occurredAtYesThe date (or date and time) the transaction actually happened in your own system, e.g. 2024-03-01 - not the migration date. Recorded on the new account with this real historical date, not today's date.
currencyNo (defaults to the matching customer's own currency)ISO currency code.
descriptionNo (defaults to blank)Free text, shown to the customer in their transaction history exactly as provided.
typeNo (defaults to migrated)A short label for this transaction's kind (e.g. deposit, purchase) - shown alongside the description; doesn't affect any business logic.

Why identity verification is skipped for migrated customers

A migrated customer's identity record is created already verified in Coreledgerpay, not re-run through the normal KYC review queue - your institution already verified this customer's identity when they first opened their account with you, and re-verifying identity documents that already exist in your own records would be redundant friction for a customer who isn't actually new. migrationNote exists specifically so that shortcut is auditable, not silent.

Where to find these fields in your own core, without an API integration

None of this requires your core vendor's cooperation or an API certification - every core banking system supports operational reporting/extract tools that a client's own admin already has access to. General guidance, since Coreledgerpay has no live connector to verify exact menu paths against for any of these:

In every case, the deliverable Coreledgerpay needs is the CSV file(s) described above - not raw access to your core, not an API integration, and not a specific file format unique to your vendor.

End-to-end process

  1. Scope the batch. Client and Coreledgerpay staff agree on which customers are migrating in this batch (see Roadmap to Launch's guidance on phased/parallel-run cutovers for anything beyond a very small client).
  2. Client produces the customer CSV (and, if bringing over historical transactions, the linked transaction-history CSV too) using the formats above, from whatever export/reporting tool their core supports.
  3. Client generates (or agrees on a process for generating) a claimSecret per customer and a plan for communicating it to each customer separately from any data transfer to Coreledgerpay.
  4. File(s) transferred to Coreledgerpay staff securely - not over unencrypted email; use whatever secure file-transfer channel is already part of your institution's vendor-data-sharing process.
  5. Coreledgerpay staff upload the customer file, then (optionally) the transaction-history file, in the admin console's Migrations tab, review the preview (which flags any customer row missing a required field, and any transaction row that doesn't match a customer or fails to parse, before anything is committed), and run the migration.
  6. Staff reconcile each migrated account's balance against the source system in the "Migrated accounts" queue, marking each reconciled or flagged.
  7. Customers activate their own accounts at /claim (or the mobile app's "Migrating from another bank? Activate your account" screen) using their email and claim secret, choosing their own password.

See docs/staff-operations-guide.md for the staff-facing steps in detail, and docs/user-guide.md for what a migrated customer sees.

This page is generated from the same source that powers in-app help, so it always matches the current release.