Try the live demo Start free trial
Help
On this page

Import and export the price list

How to download the whole price list as a CSV file, load lines from a CSV file, and let your company's own AI read a price list from a PDF, a photo or a spreadsheet. Every import shows a preview first: nothing is saved until you press Import.

What it is for

The price list holds the lines you quote and invoice. Typing hundreds of lines by hand is slow, so three of the buttons at the top of Settings > Price list move whole lists in and out:

  • Export CSV downloads the whole list as a file you can open in Excel.
  • Import CSV loads lines from a CSV file you prepared.
  • Import with AI reads a PDF, a photo, an Excel file, a CSV or a text file with your company's own AI and turns it into lines.

Both imports work the same way after the file is read: you get a preview where every cell can be changed, and only Import N rows writes to the price list.

The price list itself is described on the Price list page. Suppliers named in a file are described on the Suppliers page.

Words like VAT may read differently in your company: they follow your country and Settings > Wording.

Who can use it

Role What they can do
Owner Export CSV, Import CSV, and Import with AI once the AI is set up.
Admin Export CSV, Import CSV, and Import with AI once the AI is set up.
Supervisor No access. The price list is not in their menu.
Crew No access.
Accountant No access.

Import with AI is shown only when all of these are true:

  • you are an owner or admin,
  • the AI assistant feature is switched on for the company (Settings > Company, section Features),
  • the company's own AI is set up in Settings > AI setup: a provider, a key and a model. An OpenAI compatible provider also needs the address of its service.

If one of them is missing the button is hidden and the page cannot be opened. The reading is done with your company's own account at your AI provider. FSMCore has no AI account of its own.

Export CSV

  1. Open Settings, then Price list.
  2. Press Export CSV.

The file downloads at once. It is named price-list- followed by today's date, for example price-list-2026-10-02.csv. Excel opens it with the right characters (the euro sign, m²).

What is in the file:

  • Every line of the price list, archived lines included.
  • The same order as the page: by category in your category order, then your own line order.
  • Eight columns: description, unit, unit_price, vat, category, notes, supplier, archived.
  • The price as a plain number with no currency sign, for example 25.50. Empty when the line has no price.
  • The VAT column holds the name of the tax rate.
  • The supplier column holds the supplier's name.
  • The archived column says Yes on an archived line and is empty on the others.

The first seven columns are exactly the columns the CSV import reads. So you can export, change prices in Excel, save as CSV and import the file again: lines with the same description are updated. The import ignores the archived column: importing a file never archives or restores a line, and an archived line stays archived.

Import a CSV file

  1. Open Settings, then Price list.
  2. Press Import CSV. The Import price list page opens.
  3. In CSV file, choose your file. See The CSV file for what it must look like.
  4. Press Preview. The file is read and the preview appears below. Nothing is saved yet.
  5. Check the rows. Change any cell that is wrong.
  6. Press Import N rows (the button shows the number of rows that are ready).

You see the message Price list imported with how many lines were added and how many were updated, and you are taken back to the price list.

To stop without importing, leave the page. Nothing was saved.

The CSV file

The CSV file field is required. It takes a CSV or plain text file of at most 5 MB. A larger file is refused with The file is larger than 5 MB. The page checks the name and the size of the file as soon as you choose it: a file that is too large or an Excel file is not uploaded, and the reason shows in red under the field. Every file is checked again on the server when you press Preview.

An Excel file (.xls, .xlsx, .xlsm, .xlsb) is refused with This is an Excel file, and Import CSV reads CSV files only. Save as CSV or use Import with AI. FSMCore looks at the name of the file and at what is inside it, so an Excel file renamed to .csv is refused too, and a real CSV file is accepted whatever your browser calls it. Any other file that is not text is refused with This file is not a CSV file. Upload a CSV file, or use Import with AI for a PDF or a photo.

Columns

Column What goes in it
description The text of the line. Required, at most 255 characters.
unit The unit, for example m² or hour. Optional, at most 255 characters.
unit_price The price for one unit. Optional.
vat A tax rate name from Settings > Tax rates, or a percent. Optional.
category The category. Optional, at most 100 characters.
notes Notes for the office. Optional.
supplier The supplier's name. Optional, at most 255 characters.

The first line

The first line of the file may name the columns. Then the columns can be in any order, and you can leave some out. These names are understood (capitals do not matter):

Column Names that work
Description description, text, item, name
Unit unit, units
Unit price unit_price, unit price, price, rate
VAT vat, tax, tax_rate, tax rate, vat rate
Category category
Notes notes, note
Supplier supplier, supplier name, supplier_name, vendor, bought from

If the first line has no description column under one of those names, it is read as a normal row. The columns are then taken in this fixed order: description, unit, unit_price, vat, category, notes, supplier.

Commas or semicolons

A file separated by semicolons works too. Many European spreadsheet programs save CSV that way. FSMCore looks at the first line and picks the right one. Empty rows are skipped.

How prices are read

Currency signs, currency codes (EUR, GBP and so on) and spaces are ignored. All of these are read correctly:

In the file Read as
€1,234.50 1234.50
1234,5 1234.50
1.250.000 1250000.00
12 12.00

A price may have at most two decimals and at most 10 digits before the decimal point. Anything else, for example 12.505 or call us, makes the row an error: Unit price "..." is not an amount with at most two decimals.

An empty price is fine. The line is added with no set price.

A price with a minus sign in front, for example -5.00, is read as a minus price. Use it for a discount or a credit line. The price list form and the AI assistant accept a minus price in the same way.

How VAT is read

Write either:

  • the name of one of your tax rates, as it reads in Settings > Tax rates (capitals do not matter), or
  • a percent: 23, 13.5 or 13.5%.

If a percent fits both an ordinary rate and a reverse charge rate, the ordinary rate is picked. If it still fits more than one rate, the row is an error and you are asked to use the rate name.

An empty VAT cell is fine. The line is added with no set rate.

Suppliers in the file

A supplier is matched by name. Capitals do not matter. A name your company does not have yet adds a new supplier with that name when you import.

  • A file with no supplier column leaves the supplier of every line as it is. If you type a supplier into the preview, that row sets it. If you type one and then clear the cell again, the line keeps the supplier it has.
  • A file with a supplier column sets the supplier of every row. An empty cell takes the supplier off the line, also when you emptied the cell yourself in the preview.

Import with AI

Use this when your price list is not a tidy CSV: a supplier's PDF, a photo of a printed or handwritten list, or a spreadsheet with its own layout.

  1. Open Settings, then Price list.
  2. Press Import with AI. The Import price list with AI page opens.
  3. In Price list file, choose one file.
  4. Press Read with AI.
  5. Wait while the file is read. See While the file is read.
  6. Check the rows in the preview. Change any cell that is wrong, and type the prices that are missing.
  7. Press Import N rows, or Cancel import to throw the rows away.

Which files

One file, required, at most 20 MB:

  • a PDF,
  • a photo of a printed or handwritten list (JPG, PNG, WebP, GIF),
  • an Excel file (XLSX, XLS),
  • a CSV file,
  • a text file.

A PDF can only be read when your AI provider is OpenAI, Anthropic, Google Gemini, Mistral, xAI or OpenRouter. With another provider, upload a photo of the pages, an Excel file or a CSV instead.

Your company's own AI provider reads the file. The file is deleted from FSMCore as soon as it has been read, whether the reading worked or not.

While the file is read

After Read with AI a box named Reading the file appears. It updates by itself every 2 seconds. You do not need to reload: the rows appear when the AI has read the file.

  • A PDF or a photo is read in one go. The box says Your AI provider is reading the file. A long list can take a minute or two.
  • An Excel file, a CSV or a text file is read in parts of 200 rows. A short file that fits in one part shows the same sentence as a PDF. A longer file shows which part is being read and how many rows were found so far (for example Part 2 of 5 · 200 rows so far), with a progress bar. An Excel file with several sheets is read sheet by sheet.

While a file is being read or a preview is open, the file field is switched off and the Read with AI button is hidden.

You can leave the page. When you come back to Import with AI, your open import carries on: the reading goes on, or the preview opens again. Changes you typed into the preview before you left are kept: every cell reads as you left it. Only you see it: another owner or admin does not see your import.

What the AI reads

For each line the AI copies the description, the unit, the unit price, the VAT, the category (the heading the line sits under) and notes. It skips headings, column titles, totals, page numbers, terms and contact details.

The AI does not read a supplier. The Supplier cell is empty, and the lines that are updated keep the supplier they have. Type a supplier in the preview if you want to set one. If you type one and then clear the cell again, the line keeps the supplier it has.

A minus price written in the file, for example -15.00 for a discount, is kept as a minus price.

A price is never invented

  • A row with no price in the file stays without a price. It is marked No price in the file. The summary says how many rows have no price and that they will be added without one unless you type it.
  • For an Excel file, a CSV or a text file, FSMCore checks every price the AI returns against the numbers written in the file. A price that is not in the file is dropped, and the row shows a note: The AI gave a price of "...", which is not in the file, so it was left empty.

Always check the prices in the preview against your own list before you import, most of all for a PDF or a photo.

Cancel import

Cancel import is shown in the Reading the file box and beside the Import button in the preview. It asks Cancel this import? and tells you that the rows read from the file are deleted and nothing is added to the price list. After you confirm you see Import cancelled, and the page is ready for a new file.

The preview

The Preview is the same for a CSV import and an AI import, and the same rules are applied to every row.

The summary

The line under the heading tells you what will happen:

  • how many rows are ready, how many are new and how many update lines already on the price list (matched by description),
  • how many rows have errors and will be skipped,
  • for an AI import, how many rows have no price in the file,
  • how many new suppliers will be added.

It ends with Every cell can be edited. Nothing is saved until you press Import.

A file with nothing to read shows No rows found in this file.

The columns

Column Shows
Line The line number in the file. For an AI import, the number of the row in reading order.
Description The text. Underneath: Adds a new line (green), Updates the existing line (amber) or Skipped: with the reason (red). An AI import also shows No price in the file. and any note about a dropped price here.
Unit The unit.
Unit price The price as written. Underneath, the amount as FSMCore read it, in your currency. An empty cell shows No price.
VAT The rate as written. Underneath, the tax rate it was matched to. The cell suggests your rate names as you type.
Category The category.
Supplier The supplier. New supplier underneath means the name is not one of your suppliers yet and will be added.
Notes The notes.

Change a cell

Click a cell, change the text and click somewhere else. All rows are checked again straight away, so an error you fixed turns green and the summary and the number on the Import button change with it.

You can fix a wrong price, pick another VAT rate, type a supplier, or clear a description to skip a row you do not want.

What import does

When you press Import N rows:

  1. Every row is checked once more, as it now reads in the preview.
  2. Rows with an error are skipped. A row is never half imported.
  3. A row whose description is already on the price list (capitals do not matter) updates that line. Unit, price, VAT, category and notes all take the values of the row. An empty cell clears that value on the line.
  4. Every other row is added as a new line at the end of the list.
  5. All ready rows are saved together. If something goes wrong, none of them is saved.

Good to know:

  • An archived line is matched too. It is updated and stays archived.
  • A category name that is new joins the end of your categories. A row with the category "Uncategorised" is saved with no category.
  • New suppliers are added with only their name. Fill in the rest in Settings > Suppliers.
  • Every added or changed line is recorded: who changed what, and when.
  • Estimates and invoices that already used a line do not change. They keep their own copy of every line.
  • No email or notification is sent.

Abandoned imports

An AI import that you neither import nor cancel stays open, so you can come back to it. 24 hours after the file was read, FSMCore clears it by itself (changing cells in the preview does not move that time): the rows read from the file are deleted, and the uploaded file too if it is still there. Nothing is added to the price list.

AI chats are a different thing. They are never deleted automatically.

A CSV import has nothing to clear: its preview lives only on the open page.

Common mistakes

I do not see Import with AI. You must be an owner or admin, the AI assistant feature must be on, and Settings > AI setup must have a provider, a key and a model (and the address of the service for an OpenAI compatible provider).

A row says "Skipped: Description is empty." Every row needs a description. Type one in the cell, or leave the row skipped.

A row says "Description is longer than 255 characters." Shorten the text in the cell. The same goes for Unit is longer than 255 characters., Category is longer than 100 characters. and Supplier is longer than 255 characters.

A row says "Same description as line N of this file." The file has the same description twice. Only the first is imported. Change one of them or leave the second skipped.

A row says the unit price "is not an amount with at most two decimals". The price has three or more decimals, or it is text. Type the amount in the cell, for example 25.50.

A row says the VAT "matches" two rates and to "Use the rate name instead." Two of your tax rates have that percent. Type the name of the rate you mean. The cell suggests your rate names.

A row says "No VAT rate of N% in Settings > Tax rates." Your company has no tax rate with that percent. Pick one of your rates in the cell, or add the rate in Settings > Tax rates first and preview again.

A row says the VAT "is not one of your tax rates". The text is neither a rate name nor a percent. Type one of your rate names or a percent.

The preview says "No rows found in this file." The file is empty or has only empty rows.

"This is an Excel file, and Import CSV reads CSV files only. Save as CSV or use Import with AI." Import CSV does not read Excel files. In Excel choose Save as and pick CSV, then upload that file. Or use Import with AI, which reads Excel files.

The import took the suppliers off my lines. The file had a supplier column with empty cells. An empty supplier cell clears the supplier. Remove the column from the file to leave suppliers as they are. In an AI import, or a file with no supplier column, an empty Supplier cell never takes a supplier off.

The import changed lines I did not mean to change. A row with the same description as an existing line updates that line and overwrites its unit, price, VAT, category and notes. Look for Updates the existing line in the preview before you import.

"Upload a PDF, a photo (JPG, PNG, WebP, GIF), an Excel file (XLSX, XLS), a CSV or a text file." The file is of a type the AI import does not take, for example a Word file. Save it as PDF or take a photo. The message shows in red under the Price list file field as soon as you choose the file, and the file is not uploaded. The file is checked again when you press Read with AI.

"The file is larger than 20 MB." Split the list into smaller files, or upload an Excel file or CSV instead of a scan. The message shows in red under the Price list file field as soon as you choose the file, and the file is not uploaded. The file is checked again when you press Read with AI.

"Your AI provider cannot read PDF files through FSMCore." Your provider is not one of those that read PDFs here. Upload a photo of the pages, an Excel file or a CSV instead.

"The file could not be read" The box shows the reason in plain words, for example The AI could not read the file. or The file has no text to read. The file has been deleted. Try again, or upload a clearer photo, an Excel file or a CSV.

Rows from the AI have no price. The AI found no price on that line, or returned one that is not written in the file. Type the price in the Unit price cell, or import the row without a price and set it later on the price list.