Import Customers in Bulk
Why Import Customers?
Instead of adding customers one by one, you can upload a file containing all your customers at once. Paymely supports:
- CSV files (.csv)
- Excel files (.xlsx)
- Google Sheets (public URL)
Start an Import
- In the sidebar, click Directory
- Make sure you are on the Holding tab
- Click Import a List (button in the top right)
- The 4-step import wizard opens
Note: Imported customers arrive in the Holding tab of the directory. To start collection, select them and click Activate to move them to the Active Customers page.
Step 1 — Upload Your File
Drag and drop or browse
Drag a CSV or Excel file into the drop zone, or click to browse your computer.
Limits:
- Maximum file size: 4 MB
- Maximum rows: 2,000
- Accepted formats:
.csv,.xlsx
Import from Google Sheets
Alternatively, paste a public Google Sheets URL and click Import. The sheet must be publicly accessible (Share → Anyone with the link).
Download a Template
If you don't have a file ready, download a pre-formatted template:
- CSV template — bilingual headers with an example row
- Excel template — same content in .xlsx format
Step 2 — Map Columns
Paymely automatically detects your column headers and maps them to the correct fields. If a column is not recognized, it defaults to Ignore. You can manually change any column's mapping.
For each column, you can choose:
| Target Field | Description |
|---|---|
| First Name | Customer's first name (required) |
| Last Name | Customer's last name (required) |
| Name | Combined full name — auto-split into first/last (use instead of separate name columns) |
| Email address (required if no phone) | |
| Phone | Phone number (required if no email) |
| Amount Due | Outstanding balance ($) |
| Amount Paid | Amount already paid ($) |
| Due Date | Payment due date (auto-normalized) |
| Status | Customer status: active, inactive, paid, or overdue |
| Province | Canadian province (auto-normalized, e.g., QC, ON) |
| Language | Preferred language: en or fr |
| Comments | Notes about the customer account |
| Payment frequency | Weekly, biweekly, semi_monthly, or monthly |
| Installment amount | Amount per payment cycle (requires frequency) |
| Custom field | Stored as a custom field on the customer profile |
| Ignore | Column is skipped during import (default for unrecognized columns) |
Tip: Paymely recognizes bilingual column headers — both English ("First Name") and French ("Prénom") are auto-detected.
Required Mappings
Before proceeding, you must map:
- A name field (First Name, or combined Name)
- At least one contact method (Email or Phone)
Step 3 — Preview and Validate
Before importing, Paymely validates every row and shows you a preview:
Row Status
- Valid rows (green badge) — will be imported
- Error rows (red badge) — contain validation errors and will be skipped
Error rows are highlighted in red. Hover over a flagged field to see the specific error (e.g., "Invalid email", "Language is required").
Exclude Rows
You can exclude individual rows without re-uploading your file. Click the X button on any row to exclude it from the import. Click again to re-include it. The import count updates automatically.
Validation Rules
- First name and last name are required
- At least one of email or phone must be provided
- Language is required (en or fr)
- Email must be valid format if provided
- Amounts must be numeric — both English ($1,234.56) and French (1 234,56) formats are accepted
- Dates are auto-normalized to YYYY-MM-DD
- Statuses accept French values: "Non payé" → active, "Payé" → paid, "En retard" → overdue, "Inactif" → inactive. Leave empty for active.
- Payment frequency accepts French: "Hebdomadaire", "Bihebdomadaire", "Mensuel", "Bimensuel", or day-based: "7 jours", "14 jours", "30 jours"
Duplicate Handling
Choose how to handle customers that already exist (matched by email or phone):
| Mode | Behavior |
|---|---|
| Skip duplicates | Existing customers are left unchanged (default) |
| Update — overwrite | All non-empty fields in the file replace existing values |
| Update — fill empty | Only empty/missing fields on existing records are filled in |
Customer Quota
Your subscription tier limits the number of active customers. The preview shows your remaining capacity. If the import would exceed your limit, you must reduce the file or choose a higher tier in Settings - Billing.
Step 4 — Results
After the import completes, you see a summary:
| Metric | Description |
|---|---|
| Imported | New customers created |
| Updated | Existing customers updated (overwrite or fill modes) |
| Skipped | Duplicates that were skipped |
| Errors | Rows that failed validation |
From here, you can:
- Import another file
- View customers to see the imported records
Import History
Recent imports are tracked and visible from the customer list. Click Show history to see:
- Date and time of each import
- File name
- Import mode used
- Number of rows: total, imported, updated, skipped, errors
- Status (completed, partial, failed)
Frequently Asked Questions
Can I import customers with custom fields? Yes — any column not mapped to a standard field is automatically stored as a custom field.
What date formats are accepted?
Paymely auto-normalizes common formats: YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY, January 15, 2026, etc.
What happens if I import the same file twice? By default (Skip duplicates mode), existing customers matched by email or phone are skipped — no duplicates are created.
Can I fix errors and re-import? Yes — click Fix and re-upload on the preview step to go back to step 1 with a corrected file. You can also exclude individual rows directly from the preview.
What languages are accepted for the Language field?
Paymely accepts: en, english, anglais, fr, french, français, francais.
What status values are accepted?
English: active, inactive, paid, overdue. French: Non payé, Payé, En retard, Inactif, Actif, Impayé. Empty defaults to active.
What frequency values are accepted?
English: weekly, biweekly, semi_monthly, monthly. French: Hebdomadaire, Bihebdomadaire, Bimensuel, Mensuel. Day-based: 7 jours, 14 jours, 15 jours, 30 jours.
What happens to unrecognized columns? Unrecognized columns default to Ignore. You can manually change any column to a Paymely field or custom field in the mapping step.