5 min read

Importing and exporting your price list

Editing one service at a time in the catalogue is fine for everyday tweaks. When you want to bulk-update prices, copy services from a partner, or pull an entire existing price list out of a PDF or Excel file — you have two faster paths.

Where to find it

Open Services → Pricing. In the toolbar (top right) open the ⋮ (More actions) menu and choose Import / export services. The first thing you see is a light choice between two routes — pick by goal, not by file format (the same Excel fits either). Click a row and that route's mechanics (upload zone, steps) open:

  • Read services from a file — pull services out of an old price list, a ready-made quote, a PDF or a photo. We read the services and show them for review before anything is added. (The more common route, listed first.)
  • Download and update your existing services — download your price list, edit it in Excel (prices or names), and upload it back. We match the file to your existing services and open the changed rows in an editable review table so you can fix anything before saving.

A Choose a different route link takes you back to the choice.

Export — download your catalog

Downloading is step 1 of the Download and update your existing services route: pick that route, then click Download next to step 1. (If you only want a backup, download here and simply don't upload anything back.) The file is named bulido-catalog-{today's date}.csv (bulido-katalog-... in other languages). Open it in Excel, Numbers, Google Sheets, or any spreadsheet tool.

Columns in the file:

Column What it is
id A unique row identifier. Do not edit. Empty for new rows you add by hand.
category Two-level path, e.g. Internal > Painting.
name Service name in your current language.
unit One of , lm, pc, set, kg, l (labels match your language).
price Decimal with a dot or comma, e.g. 12.50.

The file also includes system services (the starter catalog) and any of your own services that aren't currently hidden.

Import — apply changes

Edit the CSV in your spreadsheet, then drag and drop it onto the Download and update your existing services screen (or use Choose file). The maximum size is 5 MB.

What happens on each row:

  • Row with an existing id — the matching service is updated. Renaming a row is safe in this mode; the row keeps its identity, so anything that references it (templates, past quotes) stays intact.
  • Row with id empty — a brand new service is created, owned by you. The leaf category in category is created if it doesn't exist yet.
  • Row that was in your last export but is now missing — the service is hidden (your own services get a "hidden" flag; system services are hidden via an override). They aren't deleted, so anything that referenced them keeps working.
  • System service whose row you changed — the change is stored as an override on top of the system entry. You can clear the override later from the catalog UI.

Before anything is applied, the changed rows open in an editable review table — the same surface as the "Read services from a file" route and the pricing wizard. Nothing is saved until you confirm it:

  • Click any cell to fix it. Correct the service name, category, unit, price or automatic calculation right in the table before saving.
  • Pick the category from a searchable, section-grouped dropdown. You assign one of your existing categories here — you don't create new ones from this screen.
  • Services missing from your uploaded file are listed in a separate "to remove" section. By default they'll be hidden when you save, but you can press Keep on any you don't want removed.
  • Per-row errors are shown inline. If a row has a problem — an unknown unit, or a category that isn't in your catalogue — the error appears on that row so you can fix it. Nothing is applied until every row is valid.

Once everything looks right, click Save changes to apply it.

Common mistakes

  • Editing the id column. That makes the row look like a brand new service to us — a duplicate. Leave id alone for rows you want to update.
  • Renaming via hand-typed CSV (no id column). Without the id, we match by category and name. Renaming = the old row disappears (gets hidden), a new one is created. The new service won't be in your existing templates until you re-add it. Always use the round-trip flow (download → edit → upload) when renaming.
  • Mixing languages in the header row. If you export from a Polish account, the header is id,kategoria,nazwa,jednostka,cena. Don't switch some headers to English — keep one language.
  • Changing the category of an existing row. For an existing service (one with an id), the category column is ignored on update. To move a service to another category, do it from the catalog UI.

Limits

  • CSV size: 5 MB.
  • Translations: only the language you're currently using gets touched by an import. Other-language names already on the service stay as they are.
  • Category sort order, visibility, translations: not configurable via CSV in this first version.
  • To re-show a previously hidden service: use the catalog UI ("unhide"). The CSV import never unhides.

Read services from a file (AI)

The Read services from a file route lets you upload your existing price list as a PDF, Excel file, or a photo/scan. Pick the route, then drop the file (or use Upload a file). We'll read out the services, units and prices and show them in a table for review.

Accepted formats: PDF, XLSX, XLS, CSV, JPG, PNG, WEBP. Up to 20 MB per file.

After upload:

  1. Reading usually takes around 15 seconds. If it takes longer than a minute we'll show a hint.
  2. A table of detected services appears. You can click any cell to edit name, price, unit, auto-calculation or category — the same inline-edit pattern as the pricing wizard.
  3. Rows whose category couldn't be matched against your tree drop into the "Uncategorised" bucket — reassign them before saving.
  4. Click Add to price list and choose whether to add the new services to your existing ones or replace the whole list.

Unmatched categories never silently create new branches in your tree — everything goes into the "Uncategorised" bucket so you stay in control.

Last updated June 5, 2026