Overview
Bulk import lets you create or update many records at once from a spreadsheet file. Instead of editing records individually, you prepare your data in a CSV or Excel file, upload it, and let the platform process every row.
Common uses include:
- Migrating data from another system (customers, numbers, features)
- Applying price changes across hundreds of features at once
- Recording payments received from an external source
- Adding notes or contacts in bulk after a customer communication exercise
The platform supports 10 import types covering the main record types. Each import follows a two-step test-then-import process that catches errors before any changes reach the database.
Quick Start
- Go to Add menu > Bulk Import File
- Upload your CSV or Excel file
- Choose the File Type (e.g. Features) and File Mode (Insert or Update)
- Click Actions > Test File to validate without making changes
- Review the log for errors or warnings
- Click Actions > Import File to apply the changes
The test step checks every row and reports any errors or warnings in the log. Review these before importing.
Import Types
The File Type dropdown controls which kind of record the file creates or updates.
| File Type | What it imports |
|---|---|
| Customers | Customer accounts with addresses, billing settings, and optional features/notes/payments |
| Numbers | Telephone numbers with tariffs, carriers, CDR matching, and optional features/notes |
| Features | One-off and recurring charges attached to customers, numbers, or services |
| Tariffs | Call tariff rates |
| Standard Features | Standard feature templates |
| Payments | Payment records against customer accounts |
| Number Migrate | Moves numbers between customers |
| Customer Contacts | Contact records with names, addresses, and communication settings |
| Ignore Traffic Numbers | Numbers to exclude from billing |
| Notes | Notes attached to customer accounts |
Processing Modes
The File Mode dropdown controls whether the import creates new records or updates existing ones.
Insert Mode
Creates new records. The platform uses default values for any columns you leave out. If you have saved a default set named Import for the relevant record type, those defaults apply automatically. You can create an Import default set the same way as any other: fill in the fields you want as defaults, then use Default Values > Save and name it “Import”.
Update Mode
Modifies existing records. Each row needs a way to identify which record to update. Only the columns you include are changed. Columns not in your file stay as they are.
The record’s own ID (e.g. Feature ID) is the most reliable identifier, but it is not the only option. For customer imports, you can use the Account Number. For number imports, the telephone Number works. For feature imports, a unique feature name can identify the record. As long as the identifier matches exactly one record, the import proceeds. If it matches more than one, you can use Import Rules to control duplicate handling.
The Two-Step Process
Every bulk import goes through two stages: test and import. Users with Standard expert level can skip the test step using the Expert menu, but testing first is strongly recommended.
Step 1: Test
Click Actions > Test File to run validation.
The platform reads every row and checks:
- Column headers match known fields
- Required values are present
- Lookup values (e.g. carrier names, tariff names, status values) match existing records
- Dates are in a recognised format
- Numbers and amounts are valid
- In update mode, the referenced records exist
No changes are saved to the database. The file status changes to Tested and the log shows any errors or warnings found during validation.
What to look for in the log:
- Header warnings: “Header X in column N not matched” means the platform did not recognise a column header. Check for typos, or use Import Rules to map it.
- Line errors: Specific problems with individual rows, showing the line number and what went wrong.
- Summary: Total lines processed, including the header line.
Step 2: Import
Once you are happy with the test results, click Actions > Import File.
The platform processes every row again, this time saving changes to the database. The file status changes to Imported. Each successful row creates an activity log entry that records:
- Which user performed the import
- Which bulk import file and line number the change came from
- What type of change was made
Both the test and import actions let you fill in optional Reason and Details fields. These appear in the activity log and help with audit trails.
File Activity Tab
After importing, the bulk import file page shows a File Activity tab listing every change the import made. Each row in the tab shows:
- The customer affected
- Timestamp of the change
- Activity type and reason/details you entered on the import form
- The line number in the source file that produced the change
This gives you a single view of everything the import did, without needing to visit each changed record individually. You can click through to any affected record from here.
Supported File Formats
The platform accepts three file formats:
| Format | Extension | Notes |
|---|---|---|
| CSV | .csv | Default format. Uses comma separators. UTF-8 encoding recommended. |
| Excel | .xlsx | Modern Excel format. The platform reads the first sheet. |
| Legacy Excel | .xls | Older Excel format. Supported but .xlsx is preferred. |
The platform detects the format from the file extension. You can also force a specific format using Import Rules (see below).
Encoding
CSV files should use UTF-8 encoding. If your file uses a different encoding (e.g. Windows-1252 or ISO-8859-1), specify it in the Import Rules:
[File Format]
Encoding = windows-1252
If the platform encounters characters it cannot decode, it logs an encoding error and stops processing.
Column Headers
The first row of your file must contain column headers. The platform matches each header to a known field name. Matching is case-insensitive.
How Matching Works
- The platform reads each header and converts it to lowercase
- It looks for a match in the import type’s field name list
- Matched columns are mapped to the corresponding database field
- Unmatched columns generate a warning in the log
Information Only Columns
Headers ending in (Information Only) are automatically skipped during import. This is useful when your file contains reference data alongside the columns you want to import. For example, the Service Charges Report Annual Increase Bulk Update format uses this convention to include context columns that help you review the data without accidentally importing them.
You can also prefix a header with DNI or Do Not Import to skip it.
Multiple Names for the Same Field
Most fields accept several header names. For example, all of these map to the recurring charge field on a feature import:
Recurring ChargeService ChargeFeature Recurring ChargeRecurring Charge (£)
Check the column reference tables below for the accepted header names for each import type.
Import Rules
The Import Rules field accepts INI-style configuration that gives you extra control over how the file is processed.
File Format Section
Control file format and encoding:
[File Format]
Format = excel
Encoding = utf-8-sig
Format values: csv (default), excel / xlsx, legacy excel / xls
Headers Section
Remap column headers when your file uses non-standard names:
[Headers]
recurring charge = Monthly Fee
status = Current State
The left side is the platform’s field name. The right side is the header in your file. This lets you import files from external systems without renaming columns.
Set a header to do not import to skip a column:
[Headers]
do not import = Internal Notes
Columns Section
Map fields by column position instead of header name. Useful for files without headers:
[Columns]
account number = 1
recurring charge = 3
start date = 4
Value Mapping Sections
Remap lookup values when your file uses different terminology:
[Status Values]
active = live, enabled
dropped = cancelled, terminated
The left side is the platform’s value. The right side lists your file’s values (comma-separated).
Column Reference
The tables below list the most commonly used columns for each import type. All header names are case-insensitive.
Customers
| Column header | Field | Notes |
|---|---|---|
| Account Number | Account number | Identifies the customer for updates |
| Customer Name | Company/trading name | |
| Title | Contact title | Mr, Mrs, Miss, Dr, etc. |
| First Name | First name | |
| Surname | Surname | |
| Address 1-5 | Address lines | |
| Postcode | Postcode | |
| Email address | ||
| Status | Customer status | Matches status name or short name |
| Billing Cycle | Billing cycle | Matches cycle name |
| Account Manager | Account manager | Matches user name |
| Commission Holder | Commission holder | Matches user name |
The customer import can also create features, notes, payments, and direct debit details in the same file. Prefix the column header with the object type (e.g. Feature Service Charge, Note Subject, Payment Amount).
Numbers
| Column header | Field | Notes |
|---|---|---|
| Number ID | Number record ID | Preferred identifier for updates |
| Account Number / Customer | Customer account number | Required for inserts |
| Number | Telephone number | |
| Extension | Extension | |
| Number Type | Number type | Geographic, Mobile, Non-Geographic, etc. |
| Status | Number status | |
| Alternate CDR Number | CDR matching number | |
| Call Carrier | Call carrier | Matches carrier name |
| Line Carrier | Line carrier | |
| Inbound Tariff | Inbound call tariff | Matches tariff name |
| National Tariff | National call tariff | |
| Mobile Tariff | Mobile call tariff | |
| International Tariff | International call tariff | |
| Sold By | Sold by user | |
| Date Sold | Date sold | |
| Calls Start Date | When billing starts |
The number import can also create features, call plans, and notes. Use prefixed headers like Feature Service Charge, Feature Standard Feature, or Note Subject.
Features
| Column header | Field | Notes |
|---|---|---|
| Feature ID / ID | Feature record ID | Preferred identifier for updates |
| Account Number | Customer account number | For inserts; identifies the customer |
| Number | Telephone number | For inserts; attaches feature to this number |
| Number ID | Number record ID | Alternative to Number |
| Standard Feature | Standard feature template | Matches standard feature name |
| Description | Feature description | |
| Feature Type | Feature type | |
| Recurring Charge | Recurring charge amount | |
| One-Off Charge | One-off/connection charge | |
| Recurring Interval | Billing interval | Monthly, Quarterly, etc. |
| Feature Count | Feature count/quantity | |
| Status | Feature status | |
| Start Date | Feature start date | |
| End Date | Feature end date | |
| Sold Date | Date feature was sold | |
| Due Date | Next billing due date | |
| Change Effective From | Effective date for charge changes | Maps to the updated date field |
| Annual Increase Reference Date | Next annual increase due | |
| Annual Increase Profile | Increase profile | CPI, RPI, Fixed Amount, None |
| Carrier | Feature carrier | |
| Carrier Recurring Charge | Wholesale recurring charge | |
| Carrier One-Off Charge | Wholesale one-off charge | |
| Fixed Fee Tariff | Fixed fee tariff | Matches tariff name |
| Inbound Tariff | Inbound call tariff | |
| National Tariff | National call tariff | |
| Discount Plan 1 | First discount plan |
Payments
| Column header | Field | Notes |
|---|---|---|
| Payment ID / ID | Payment record ID | Preferred identifier for updates |
| Account Number | Customer account number | |
| Payment Date / Date | Payment date | |
| Payment Amount / Amount | Payment amount | |
| Payment Method / Type | Payment method | Matches payment type name |
| Our Reference / Reference | Your reference | |
| Customer Reference | Customer’s reference |
Notes
| Column header | Field | Notes |
|---|---|---|
| Note ID / ID | Note record ID | Preferred identifier for updates |
| Account Number | Customer account number | |
| Note Type / Type | Note type | Matches note type name |
| Subject | Note subject | |
| Body | Note body (plain text) | |
| Body (HTML) | Note body (HTML) | |
| Owner | Note owner | Matches user name |
| Departments | Department | Matches department name |
| Status | Note status | |
| Action Required Date | Date action is required by |
Customer Contacts
| Column header | Field | Notes |
|---|---|---|
| Account Number | Customer account number | |
| Contact Type | Contact type | |
| Title | Title | Mr, Mrs, Miss, Dr, etc. |
| First Name | First name | |
| Surname | Last name | |
| Name / Customer Name | Full name | Alternative to separate first/surname |
| Company Name | Company name | |
| Address 1-5 | Address lines | |
| Postcode | Postcode | |
| Country | Country | |
| Email address | ||
| Phone 1 / Phone 2 | Phone numbers | |
| Phone 1 Type | Phone type | Phone, Mobile, Fax, Home |
Validation and Error Handling
What the Test Step Checks
- Header matching: Every column header is checked against the import type’s known field names. Unmatched headers appear as warnings.
- Required fields: Insert mode checks that essential fields are present (e.g. Account Number for customer imports).
- Lookup values: Values that reference other records (carriers, tariffs, statuses) are checked against the database. Misspelt or missing values are flagged.
- Data types: Dates, numbers, and currency amounts are validated for format.
- Record existence: In update mode, the platform checks that each referenced record exists.
- Empty rows: Blank lines are reported in the log.
Common Error Patterns
“Header X not matched”: The column header was not recognised. Check spelling, or add a header mapping in Import Rules.
“Lookup value not found”: A value like a carrier name or tariff name did not match any record. Check the exact spelling, including case (lookups are case-insensitive, but the value must exist).
“Record not found”: In update mode, the ID in a row did not match an existing record. Check that the IDs are correct and the records have not been deleted.
Encoding errors: If the file contains characters outside the expected encoding, the import stops with an encoding error. Save the file as UTF-8, or specify the correct encoding in Import Rules.
Tips and Best Practices
Always test first. The test step catches problems before they affect live data. Review the log carefully, even when it looks clean.
Start small. Import a handful of rows first and check the results. Once you are confident the file is correct, import the full dataset.
Check for duplicates. Before inserting new records, export existing data and compare. Duplicate numbers or features can cause billing conflicts.
Use the activity fields. Fill in the Import Reason and Import Details fields on the import form. These appear in the activity log and make it much easier to trace changes months later.
Save your files. Keep a copy of every import file you process. The platform stores the file, but having your own copy makes troubleshooting easier.
Verify after importing. Spot-check a few records to confirm the import worked as expected. For large imports, re-run the relevant report and compare with your source data.
Related Pages
- Managing Annual Price Increases — end-to-end workflow for applying annual price increases using bulk import
- Customers — customer record fields and management
- Numbers — number record fields and management
- Features — feature record fields and management
- Payments — payment processing and recording
- Contacts — customer contact management