ClientsImport and export

Clients

Import and export

What you can bring in and take out today: the full account export, saved items as CSV, generator invoices, and client data through the API.

You should never be locked in. This page explains every way to get data into Free Invoice Automation and out again, and is clear about what exists. In short: you can export everything in your account at any time, import and export your saved items as CSV, bring your generator invoices with you when you sign up, and read or write clients in bulk through the API. A dedicated CSV import or export screen for clients is not part of the product.

What exists

DataImportExport
Whole account (all businesses, clients, documents, payments, files)NoYes: Export everything (JSON, PDFs and CSV)
Saved items (products and services)Yes: CSVYes: CSV
Invoices made in the free generator before sign-upYes: moved in automatically, once, on sign-upIncluded in the account export
ClientsThrough the API (upsert_client), one request per clientIn the account export, or through the API (list_clients)
Reports (from the week of 25 January 2027)NoCSV or PDF per report
Store customers and orders (WordPress from January 2027, Shopify from February 2027)Created automatically by the store connectorIncluded in the account export

Export everything

Export everything produces a complete copy of your account: JSON data, the PDFs of your documents, and CSV files. It covers every business in the account. Use it before you delete anything, to keep your own tax records, or simply to have a copy.

1

Open Settings > Data export and delete

Only the account Owner can start an export. A request from any other member, including an Admin, is refused.

2

Start the export

Choose Export everything. The export is prepared in the background, so you can keep working.

3

Download it

When the export is ready, download it from the same page.

Deleting your account deletes your documents and payments with it. Your clients and tax authorities may expect you to keep invoices for years, so export first. See Delete your account.

Through the API, the Owner (or an API key created by the Owner with the account.export scope) starts an export with POST /v1/account/exports, which returns 202 and an export id, then checks it with GET /v1/account/exports/{id} until it is ready. See Export your account and Export your data.

Start an account export
curl -X POST "https://api.freeinvoiceautomation.com/v1/account/exports" \
  -H "Authorization: Bearer $FIA_API_KEY" \
  -H "Idempotency-Key: export-2027-01-31"

Saved items as CSV

Your list of products and services can be moved in and out as CSV, which is the quickest way to bring a price list from another tool.

  • Import: each valid row becomes an item. Rows that cannot be imported are listed with the reason, so you can fix and re-import them. CSV files up to 5 MB are accepted (proposed limit).
  • Export: downloads a CSV with every item field: name, description, SKU, unit, price, currency and default tax rate.
  • Items are never deleted, only archived, so old documents always keep their lines. Each document line also keeps its own copy of the item values.
ActionRESTPermission
Import itemsPOST /v1/items/importitems.manage
Export itemsGET /v1/items/exportitems.view

See Saved items for the full item model.

When you open an exported CSV in a spreadsheet, cells that start with =, +, - or @ are prefixed so the spreadsheet does not run them as formulas (proposed safeguard).

Invoices from the free generator

If you made invoices in the free invoice generator before you had an account, they live in your browser only. When you create an account, they move into it once:

  • The import happens one time, right after sign-up, and is safe to retry: the same invoice is never imported twice.
  • Imported invoices keep the number you already gave them, so a PDF you sent earlier still matches. They do not use up numbers from your business's own sequence; new invoices start your sequence as normal.

Clients through the API

There is no CSV upload screen for clients. To move a client list in from another tool, use the API: send one create or update a client request per row. Because POST /v1/clients with an existing id updates that client, a script can be re-run safely, and an Idempotency-Key per row protects you against duplicates when a request is retried.

curl -X POST "https://api.freeinvoiceautomation.com/v1/clients" \
  -H "Authorization: Bearer $FIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: import-clients-row-17" \
  -d '{ "name": "Northwind Traders", "email": "[email protected]", "default_currency": "GBP" }'

To read all clients, follow next_cursor until has_more is false; see Pagination and filters. From the week of 25 January 2027 the CLI wraps the same calls (freeinvoiceautomation client upsert and client list; command names are proposed). Your AI assistant can also add clients one by one with the MCP tool upsert_client, for example from a list you paste into the chat.

Bulk scripts count toward your API rate limit and, on the Free plan, the monthly fair-use limits. See Rate limits and Fair-use limits.

Store connectors

The WordPress and WooCommerce plugin and the Shopify app create invoices, clients and payments from store orders through the same API. When Shopify asks for a customer's data or for it to be removed, the app passes that request on: the customer's client data is exported to the merchant, or redacted except what tax law requires on documents already issued.

Permissions

KeyNeeded forDefault roles
account.exportExport everythingOwner only
items.manageImporting itemsOwner, Admin, Editor
items.viewExporting itemsOwner, Admin, Editor, Viewer, Accountant
clients.create / clients.editCreating or updating clients through the APIOwner, Admin, Editor
reports.exportExporting reports as CSV or PDFOwner, Admin, Editor, Accountant

Errors

CodeWhen
permission_deniedYou are not the Owner (account export) or your role lacks the items or clients key
validation_failedA client or item field is invalid; details.issues lists each field
idempotency_key_reusedThe same key was sent with a different body; use one key per row
rate_limitedToo many requests in a minute; wait for Retry-After
plan_limit_reachedA Free fair-use limit was reached