bizinly.
Let’s talk business

DEVELOPERS

Import & export formats

The CSV/JSON shape Bizinly reads and writes for customers and products.

Customers and products can each be exported and imported as CSV or JSON, from the app's own Import/export screens, the MCP tools (export_customers, import_customers, export_products, import_products), or the underlying HTTP endpoint directly.

Formats

  • CSV — delimiter ;, ,, | or tab; auto-detected on import unless one is specified. Export starts with a UTF-8 byte-order mark, so accented characters open correctly when the file is double-clicked into a spreadsheet app.
  • JSON — a list of objects, or { "rows": [...] }.

Column matching

A column is matched by its internal key (for example retail_price), by its human-readable header (Price), or by a known alias in another language (Cijena) — matching ignores case and accents. Unknown columns are reported as "not imported"; they are never treated as an error.

Values

  • Numbers accept both 1.234,50 and 1,234.50.
  • Yes/no accepts yes/no, 1/0, x, and their local-language equivalents.
  • Dates accept 2026-09-18 and 18.09.2026.
  • Reference data travels as readable codes, not internal ids — an unrecognised code is reported as a row error rather than silently dropped: currency by its ISO code (EUR), tax by its code or rate, company type and unit by their code or name, payment terms by name.

Update or create

Each row is matched against existing records, in order:

  • Customers: internal id, tax number/VAT number, or code.
  • Products: internal id, SKU, code, or barcode.

A row that matches updates that record — and only the columns present in the file change; a file with just two columns (say, SKU and price) updates only those fields and leaves the rest of the record untouched. A row that matches nothing creates a new record (a brand-new row still needs a name). An unrecognised id is reported as an error, never silently inserted as new. Two rows in one file sharing the same match key: the second is rejected.

Dry run first

Every import path — the app's screen, and the MCP tools — checks the file first and reports exactly what would happen: how many rows are new, how many update an existing record, and every rejected row with its reason. Nothing is written until that plan is confirmed and the import is run for real.

Limits

Up to 5,000 rows and 10 MB per import; a file over either limit is refused up front, never partially imported.

Writes are real, audited actions

Each row goes through exactly the same validation, permission checks and activity log entry as creating or editing that record by hand in the app, plus one summary entry for the whole import. Exporting needs view and export rights; importing needs add rights to create new rows and edit rights to update existing ones — a row the caller may not write is reported rather than silently skipped.

Related: Connect with MCP, Import and export customers and products.

Book a live demo Back to the docs