Data Import & Onboarding
If you are migrating from another system — or setting up a new tenant — the Data Import tool lets you bulk-load your master data and opening balances without entering records one by one.
Go to Settings → System → Data Import to access the tool.
How it works
Every entity follows the same three-step flow:
- Download the template — an Excel file with column headers, field notes in row 2, and sample rows
- Fill in your data — replace the sample rows with your real data; do not change the headers in row 1
- Upload and review — the system validates every row and shows a colour-coded result table before you apply
Only rows that pass validation are imported. Rows with errors or duplicates are skipped and shown with a specific error message — you can correct the file and re-upload.
What you can import
Master data
Import master data first — transactions reference these records.
| Entity | Key fields | Notes |
|---|---|---|
| Customers | Name, Phone | Name must be unique |
| Vendors | Name, Type, Phone | Type must be: Fuel · Maintenance · Border Agent · Spare Parts · Subcontractor · Other |
| Drivers | Name, License Number, License Expiry, Phone, Status | License Expiry in YYYY-MM-DD; Status: Active · On Trip · On Leave · Suspended |
| Fleet | Reg Number, Type, Make, Model | Type: Truck · Trailer |
| Routes | Name, Origin, Destination, Distance (km), Estimated Days | Checkpoints optional — semicolon-separated (e.g. Mikumi;Iringa;Mbeya) |
| Chart of Accounts | Account No, Name, Category, Type, Debit/Credit | Supplements the Tanzania Standard CoA — existing accounts are never overwritten |
| Items | Code, Name, Type, Unit, Selling Price, VAT Applied | Type: Product · Service; VAT Applied: true · false |
Transactions (migration)
Use these to carry over open records from your previous system.
| Entity | What it creates | Notes |
|---|---|---|
| Customer Invoices | InvoiceData records | Customer Name must match an existing customer — import Customers first |
| Vendor Invoices | PurchaseInvoice records | Vendor Name must match an existing vendor — import Vendors first |
| Opening Balances | A single Draft journal entry | All rows become lines in one journal — review and post it in Accounting → Journal Entries |
Validation rules
The system checks each row before applying:
| Check | What fails |
|---|---|
| Required fields | Row with an empty required column is rejected |
| Enum values | Value not in the allowed list (e.g. wrong Status) is rejected |
| Numeric fields | Non-numeric value where a number is expected |
| Date format | Date not in YYYY-MM-DD format |
| Boolean fields | Value that is not true or false |
| Lookup fields | Customer Name / Vendor Name / Account No not found in existing records |
| Duplicates | Record with the same key already in the system — skipped with a warning |
| Batch duplicates | Two rows in the same file with the same key — the second one is an error |
Opening balances
Opening balances represent your GL account balances at the point you switch to this system. They are imported differently from other entities:
- Each row in the template becomes one journal line
- All lines are combined into a single Draft journal entry named
Opening Balances Import - The journal is created in Draft status — you can review it in Accounting → Journal Entries
- Check that total Debits equal total Credits (the review screen shows both totals)
- When satisfied, click Post to lock the opening balances into the General Ledger
If your opening balances do not balance (total debits ≠ total credits), investigate before posting. Common causes: missing retained earnings account, transfers or owner equity not accounted for.
Recommended onboarding order
Follow this sequence to avoid lookup errors between entities:
1. Customers
2. Vendors
3. Drivers
4. Fleet
5. Routes
6. Chart of Accounts (or use Tanzania Standard CoA seed)
7. Items
8. Opening Balances → review draft journal → post
9. Customer Invoices (outstanding / pending invoices)
10. Vendor Invoices (unpaid vendor bills)
Customer invoices — migration notes
When migrating outstanding invoices:
- Invoice No is optional — if blank, one is auto-generated (
IMP-{timestamp}-{row}) - Amount is the subtotal before VAT
- VAT Rate (%) defaults to 18 if left blank; enter
0for exempt or zero-rated services - Status: use
Sentfor unpaid invoices the customer is aware of;Draftfor invoices not yet sent;Paidfor historical invoices you want in the system for records - The import creates a single-line invoice — you can open any imported invoice and edit it for multiple lines
Vendor invoices — migration notes
- Amount is the subtotal before VAT
- VAT Applied: enter
trueif the vendor charged VAT;falseotherwise - Status:
Approvedfor bills you have already verified;Draftfor unreviewed bills;Paidfor settled bills - Approved bills are visible in AP Aging reports
Limits and exclusions
The import tool does not support:
- Historical Jobs or Trips — operational history cannot be reconstructed from a spreadsheet
- Payments linked to specific invoices — mark invoices as
Paidin the invoice import instead - GL Entries directly — use the Opening Balances journal flow to set GL balances
There is no hard row limit per file, but very large files (10 000+ rows) may be slow to validate in the browser. For large datasets, split into batches of 2 000–3 000 rows per file.
Related
- Settings → System → — entry point for Data Import
- Chart of Accounts → — set up your account structure before importing opening balances
- Journal Entries → — review and post the opening balances journal
- Quick Start → — general platform onboarding guide