Migrating from Other Platforms
Overview#
TaxMTD supports importing data from 14 platforms in three ways:
| Mode | Platforms | How It Works |
|---|---|---|
| OAuth | FreeAgent | Connect your account, auto-import everything |
| API | Stripe, Shopify, WooCommerce, Square, GoCardless, PayPal | Already connected for banking - pull customer/product data too |
| CSV | Xero, QuickBooks, Sage, FreeAgent, Crunch, IRIS (KashFlow), Coconut, Zoho Books | Upload CSV exports, auto-detected column mapping |
Navigate to Settings > Import Data to access the import wizard.
What You Can Import#
| Data Type | Description |
|---|---|
| Contacts | Customers, suppliers, and their details |
| Products | Product/service catalogue with prices and SKUs |
| Invoices | Sales invoices with line items |
| Bills | Purchase invoices from suppliers |
| Expenses | Business expenses with categories |
| Projects | Project records for time tracking |
| Time Entries | Billable hours and timeslips |
| Subscriptions | Recurring invoice templates |
FreeAgent (One-Click Migration)#
FreeAgent is the most comprehensive import - it pulls contacts, invoices, bills, expenses, projects, and time entries automatically via OAuth.
How to connect#
- Go to Settings > Import Data
- Click Connect FreeAgent
- Log into your FreeAgent account and approve access
- You'll be redirected back to TaxMTD
- Click Import Everything or choose specific data types
FreeAgent tokens are long-lived (~20 years) so you won't need to reconnect unless you revoke access.
Stripe#
If you already have Stripe connected for bank feed imports, you can also pull:
- Customers - imported as contacts
- Products + Prices - imported as products with pricing
- Invoices - imported with line items and payment status
- Subscriptions - imported as recurring invoice templates
Go to Settings > Import Data, select Stripe under "Connected Payment Platforms", and choose what to import.
Shopify / WooCommerce#
Similarly, if Shopify or WooCommerce is connected:
- Customers - imported as contacts
- Products - imported with titles, SKUs, and prices
- Orders - imported as invoices with line items
CSV Import from Accounting Platforms#
For platforms without direct API integration (or if you prefer file upload):
Xero#
- In Xero, go to Contacts > All Contacts > Export
- Save the CSV file
- In TaxMTD, go to Settings > Import Data > CSV Upload > Xero
- Upload the file - columns are auto-detected
For invoices: Business > Invoices > Export
For products: Business > Products and Services > Export
QuickBooks Online#
- Go to Sales > Customers > Export to Excel
- Save as CSV
- Upload to TaxMTD - select "QuickBooks" as the platform
For invoices: Sales > Invoices > Export
Sage Accounting#
- Go to Contacts > More > Export
- Save the CSV
- Upload to TaxMTD - select "Sage"
For products: Stock Items > Export
Other Platforms#
IRIS (formerly KashFlow), Coconut, Crunch, and Zoho Books all support CSV export. TaxMTD auto-detects the format based on column headers. If auto-detection fails, use the "Generic CSV" option and map columns manually.
Deduplication#
TaxMTD prevents duplicate records on re-import:
| Data Type | Dedup Key |
|---|---|
| Contacts | Name (case-insensitive) or provider reference |
| Products | SKU, then name as fallback |
| Invoices | Invoice number, then client + date + total |
| Subscriptions | Provider reference |
Re-importing the same data is safe - duplicates are automatically skipped.
Column Remapping#
If auto-detection maps columns incorrectly, the preview step shows dropdown menus above each column. Select the correct TaxMTD field for each CSV column before importing.
Plan Requirement#
Platform migration import requires the Pro plan or above. Essential plan users can manually create records.
API Reference#
See the Import API documentation for programmatic access to the import endpoints.
Preview Endpoint#
curl -X POST https://your-domain.com/api/import/preview \
-H "Content-Type: application/json" \
-d '{
"mode": "csv",
"entityType": "contacts",
"csv": "ContactName,EmailAddress\nJohn Smith,john@example.com"
}'Import Endpoint#
curl -X POST https://your-domain.com/api/import/migrate \
-H "Content-Type: application/json" \
-d '{
"mode": "api",
"platform": "stripe",
"entityType": "contacts"
}'