Overview
Beeswax lets you bulk-import data from CSV files so you can get up and running quickly — especially useful when migrating from another system. You can import four types of data:
- People — contacts and users
- Businesses — clients and suppliers
- Products & Services — items you buy and sell
- Chart of Accounts — your transaction accounts (income, expense, asset, loan, and transfer accounts)
Each import type has a downloadable CSV template you can use as a starting point.
Note: Bank statement imports are handled separately via Money > Bank Import. See the Bank Import help article for details on importing bank CSV files.
Getting Started
Navigate to Data Imports from the main navigation. You will see four import cards — one for each data type. Each card has two actions:
- Import — start a new CSV import
- Download CSV Template — download a pre-formatted template with the correct column headers
Download the template first, fill it in with your data, then upload it to start the import.
The Import Workflow
Every import follows the same four-step process:
Step 1 — Select a CSV File
Choose the data type you want to import and upload your CSV file.
| Requirement | Detail |
|---|---|
| File format | CSV (.csv) |
| Encoding | UTF-8 recommended |
| First row | Must contain column headers |
| Maximum size | 10 MB |
Step 2 — Preview
After uploading, Beeswax shows a preview of the first five rows from your CSV so you can verify the data looks correct before proceeding.
Step 3 — Map Fields
Map each column in your CSV to the corresponding Beeswax field. Use the dropdown next to each CSV header to select which field it maps to, or choose "Don't import" to skip a column.
Required fields are flagged with a Required badge. You cannot proceed until all required fields are mapped.
Import Options
| Option | Description |
|---|---|
| Update Existing Records | When enabled, if a matching record is found (by email for people, by name for businesses and accounts, by title for products), the existing record is updated instead of creating a duplicate |
Step 4 — Results
Once the import completes, you see a summary showing:
- Number of records created
- Number of records updated (if Update Existing was enabled)
- Number of failures with error details
If any rows fail, the results page shows the row number, error message, and a summary of the row data so you can fix the issue in your CSV and re-import.
Note: Large imports (over 500 KB or more than 100 rows) are processed in the background. You will be redirected to a results page that updates when processing is complete.
Importing People
Import contacts into your account. Each person is associated with a business — if a business name is included in your CSV and does not already exist, it will be created automatically. If no business name is provided, the person is assigned to your default company.
CSV Template Fields
| Field | Required | Description |
|---|---|---|
| first_name | Yes | Person's first name |
| last_name | Yes | Person's last name |
| Yes | Email address (used to match existing records when updating) | |
| address | No | Street address |
| city | No | City or town |
| state | No | State or region |
| postcode | No | Postal or ZIP code |
| country | No | Country |
| phone | No | Phone number |
| mobile | No | Mobile number |
| fax | No | Fax number |
| company_name | No | Business to associate this person with — created automatically if it does not exist |
Matching for Updates
When Update Existing Records is enabled, people are matched by email address within your account. If a person with the same email already exists, their details are updated.
Importing Businesses
Import client and supplier businesses into your account.
CSV Template Fields
| Field | Required | Description |
|---|---|---|
| name | Yes | Business name (must be unique within your account) |
| address | No | Street address |
| city | No | City or town |
| state | No | State or region |
| postcode | No | Postal or ZIP code |
| country | No | Country |
| phone | No | Phone number |
| web_address | No | Website URL |
Matching for Updates
When Update Existing Records is enabled, businesses are matched by name (case-insensitive) within your account.
Importing Products & Services
Import the items you buy and sell. These appear as line items when creating invoices and expenses.
CSV Template Fields
| Field | Required | Description |
|---|---|---|
| title | Yes | Item name (must be unique within your account) |
| description | No | Item description |
| kind | Yes | One of: Sell, Buy, or Buy & Sell |
| unit | Yes | One of: Units, Hours, or Days |
| sell_amount | Yes | Default sell price |
| buy_amount | No | Default buy price |
| sell_account_name | No | Name of the income account to allocate sales to (defaults to first income account if not specified) |
| buy_account_name | No | Name of the expense account to allocate purchases to |
| item_category_name | No | Item category name — created automatically if it does not exist (defaults to "Main") |
| active | No | Whether the item is active — accepts: true, false, yes, no, 1, 0 |
Validation Rules
- Kind must be exactly one of:
Sell,Buy, orBuy & Sell(case-insensitive) - Unit must be exactly one of:
Units,Hours, orDays(case-insensitive, singular forms like "Hour" or "Day" are also accepted) - If a sell or buy account name is provided but not found, the system falls back to the first income or expense account in your chart of accounts
Matching for Updates
When Update Existing Records is enabled, products are matched by title (case-insensitive) within your account.
Importing Chart of Accounts
Import transaction accounts (your chart of accounts). This is useful when migrating from another accounting system.
CSV Template Fields
| Field | Required | Description |
|---|---|---|
| name | Yes | Account name |
| type | No | Account type — one of: IncomeAccount, ExpenseAccount, AssetAccount, LoanAccount, or TransferAccount. You can also use the short form: income, expense, asset, loan, transfer. Defaults to AssetAccount if not specified |
| opening_balance | No | Opening balance amount (decimal) |
| description | No | Account description |
| bsb | No | BSB number (for bank accounts) |
| account_number | No | Bank account number |
| bank_account | No | Whether this is a bank account — accepts: true, false, yes, no, 1, 0 |
| active | No | Whether the account is active |
Account Types
| Type Value | Description |
|---|---|
| IncomeAccount (or income) | Revenue accounts (e.g. Services, Interest Earned) |
| ExpenseAccount (or expense) | Expense accounts (e.g. Rent, Software & Subscriptions) |
| AssetAccount (or asset) | Asset accounts (e.g. Bank accounts, Equipment) |
| LoanAccount (or loan) | Loan and liability accounts |
| TransferAccount (or transfer) | Transfer accounts for moving money between accounts |
Matching for Updates
When Update Existing Records is enabled, accounts are matched by name within your account.
Import History
You can view past import results by navigating to Data Imports and checking the import history. Each result shows:
- The data type that was imported
- Number of records created, updated, and failed
- Status (completed, completed with errors, or failed)
- Date of the import
Click on an individual result to see detailed error information for any rows that failed.
Tips & Best Practices
- Start with the template. Download the CSV template for each data type and use it as your starting point. This ensures your column headers match what Beeswax expects.
- Import in order. If your people reference businesses, import businesses first so the company associations can be resolved.
- Clean your data first. Remove empty rows, fix formatting, and ensure required fields are filled in before uploading.
- Use Update Existing for corrections. If you need to fix data after an initial import, enable "Update Existing Records" and re-import your corrected CSV.
- Check the results. After each import, review the results page for any failed rows and fix them in your CSV before re-importing.
- Use UTF-8 encoding. If your data contains special characters (accents, symbols), save your CSV with UTF-8 encoding to avoid character issues.