Bring your products and ingredients into Digital Florists using spreadsheets.
Digital Florists imports product and ingredient data from spreadsheets so you can set up your shop, add a seasonal range, or move from another system in bulk.
This page covers features gated by Admin-tier permissions — typically Settings access. Admins have these by default; your administrator can adjust who has them in Settings > Team.
Ingredient imports support event work. Product imports and shop migrations are included with Orders.
Settings > Advanced > Configuration > Data Migration
Moving from Shopify, WooCommerce, Strelitzia, Florist Window, or FloristPro
Before importing products, set up your tax rates and occasions. The importer matches those by name and rejects any row that names one you haven’t created yet. Categories work differently: a name that doesn’t match an existing category is created as a new one, so check your spelling before you import. A typo gives you a duplicate category on the order screen and the POS rather than an error.
The product import is a step-by-step wizard. Nothing is saved until you review the changes and confirm.
Step 1 of 5, Goal: the wizard asks whether you are adding new products, updating existing ones or converting an export before you upload anything.
1
Choose what you want to do
Go to Settings > Storefront > Products, click Options in the top right, and choose Import Products. You’ll see three options:
Add new products: you’re creating products from scratch using a spreadsheet
Update existing products: you want to change prices, descriptions, or other details on products you already have
Prepare an existing export: you have a product file from another platform (like Shopify) that needs converting first
2
Download a template
For new products, pick Blank Template or Worked Example (sample data included). To update existing products, click Export Products For Update for a spreadsheet pre-filled with your current catalogue. You can filter by category if you only want to update part of your range.
3
Fill in your spreadsheet
Open the template in Excel, Google Sheets, or Numbers. See the column reference below for what each column means.The key concept: each row in the spreadsheet is one variant (size), not one product. If a product comes in three sizes, you need three rows, one per size. See understanding variants below for a worked example.
4
Upload and preview
Back on the import page, drag your file onto the upload area (or click to browse). The file must be a .csv, .xls or .xlsx file, no larger than 10 MB.Click Preview Changes. Digital Florists reads your file and shows what will happen: which products are new, which are being updated, and what’s changing. Nothing is saved yet.
5
Review and confirm
Check the summary at the top: how many products, how many are new, how many variants, and any warnings.Below the summary you’ll see a detailed list of every change, grouped by product. For updates, it shows the current value and the new value side by side so you can spot anything unexpected.When you’re happy, tick the confirmation checkbox and click Import Products.
First time? Download the Worked Example in step 2. It shows you how to format a product with multiple sizes, categories, and pricing. Delete the sample rows and replace them with your own data.
This is the most important concept to get right. In Digital Florists, a product is the thing your customer sees (e.g., “Red Rose Hand-Tied”), and a variant is a specific size or version of it (e.g., Standard at £35, Large at £50).Each row in your spreadsheet is one variant, not one product.Here’s what a product with three sizes looks like in your CSV:
Product Code
Product Name
Categories
Variant Name
Price
Cost Price
ROSE-HT
Red Rose Hand-Tied
Bouquets, Birthday
Standard
35.00
12.00
ROSE-HT
Red Rose Hand-Tied
Bouquets, Birthday
Large
50.00
18.00
ROSE-HT
Red Rose Hand-Tied
Bouquets, Birthday
Luxury
75.00
25.00
Notice that all three rows share the same Product Code (ROSE-HT). That’s how Digital Florists knows they’re sizes of one product, not three separate products.And here’s a product that only comes in one size:
Product Code
Product Name
Categories
Variant Name
Price
Cost Price
CHOC-BOX
Chocolate Box
Add-ons
Standard
12.00
6.00
What stays the same across rows: Product Code, Product Name, Categories, Description, Occasions, and other product-level details must be identical on every row that belongs to the same product. If they differ, the import will show a warning.What changes per row: Variant Name, Price, Cost Price, Stock, Barcode, Tax Rate, and variant images can be different on each row, that’s the whole point of variants.
If your spreadsheet included image URLs (in the Attachment column), those images are downloaded in the background. You’ll see a message saying how many are being processed
Go to Products to see your updated catalogue
After importing, you’ll need to reset the product cache on your POS for the new products to appear at the till. Go to the POS, tap the cog icon, and select Reset Product Cache.
Come back to the import page after an import and a banner counts up any pictures that couldn’t be downloaded. Click Show details and you get the product name, the reason, and the link that didn’t work for each one.Fix those links in your spreadsheet and import the rows again, or add the pictures to the products by hand. Dismiss the banner once you’ve dealt with it.
Here’s every column you can use. Only the ones marked required need a value for new products. Everything else is optional.
The column order in your spreadsheet doesn’t matter. Columns are matched by name, not position. You can rearrange, add, or remove optional columns however you like.
A unique code for the product (like a SKU). If you don’t have codes, you can use the product name. When multiple rows share the same Product Code, they become variants of the same product.
Product Name
Yes (for new products)
The name customers see, like “Red Rose Hand-Tied”.
Categories
Yes (for new products)
Which categories the product belongs to. The first category listed is the primary category used for filtering and display. Add more with commas (e.g., Bouquets, Birthday). For subcategories, use > (e.g., Flowers > Roses). Maximum 5 categories. If a category doesn’t exist yet, it’s created automatically. Important: you can only assign products to the most specific (deepest) category in a tree. For example, if “Add-ons” has subcategories like “Chocolates” and “Candles”, use Add-ons > Chocolates rather than just Add-ons.
Variant Name
Yes (for new variants)
The size or version name, like “Standard”, “Large”, or “Luxury”. If the product only has one size, use “Standard” or “Base”.
Price
No (defaults to 0)
The retail price including tax.
Cost Price
No (defaults to 0)
What you pay for it. Useful for margin reporting.
Tax Rate
Yes (for new variants)
The tax rate to apply. Enter the name of a tax rate you’ve already set up (e.g., “Standard” or “Reduced”), or the percentage. See tax rates in your spreadsheet. If you have a default tax rate configured in Settings, you can leave this blank.
Barcode
No (auto-generated)
A barcode for POS scanning. If your product already has a barcode, enter it here. For bespoke items or anything without one, leave it blank and one is generated for you.
Description
No
A product description. You can use basic formatting like bold and bullet points.
Occasions
No
Tag the product with occasions like Birthday, Romance, or Sympathy. Separate multiple occasions with commas. These must match occasion names you’ve already set up.
Visible
No
Yes or No. Whether the product appears to staff. Defaults to Yes.
Age Verification
No
Yes or No. Turn on for items like champagne where your driver needs to check ID.
Designer
No
A designer name.
Brand
No
A brand name.
Stock
No
How many you have in stock, as a whole number. A half or a minus figure is rejected with the row number. Defaults to 0.
Stock Control
No
Yes or No. Whether Digital Florists tracks stock for this variant. Defaults to No.
Product Kind
No
Enter gift_card to mark the product as a gift card, or standard for a normal product. For updates, leave the cell blank to keep the current value or enter __CLEAR__ to reset it to standard. The kind cannot change once the product has been sold.
Attachment
No
A web link (URL) to the product image (shared across all variants). Downloaded automatically in the background.
Attachment Alt Text
No
Descriptive text for the product image.
Variant Attachment
No
A web link to a variant-specific image. Use this when different sizes have different photos. This is a separate column from Attachment: Attachment is the product image, Variant Attachment is for the individual size.
These columns appear when you export your existing products for updating:
Column
Required?
What it does
Match Product Code
Yes (for updates)
Identifies which existing product to update. Filled in automatically when you export your products.
Match Barcode
Yes (for updates)
Identifies which existing variant to update. Also filled in automatically on export.
When updating existing products, blank cells keep the current value. If you want to clear a field (like removing a description), type __CLEAR__ in that cell. Get this wrong and a half-filled spreadsheet won’t wipe the missing fields the way you might expect.
If your products don’t have codes and you want multiple rows to become variants of the same product, use the Product Group column. Give all the rows for one product the same group name (anything you like, “My Bouquet”, “Group A”, etc.) and Digital Florists links them together.
Fill the Tax Rate column with the name of one of your tax rates, exactly as you named it, or with the percentage. Type 20 and you get your 20% rate. Where what you typed matches more than one of your rates, that row is rejected and the message names the rates it matched, so go back and use the exact name.Export your products for updating and the Tax Rate column comes back filled in with the rate each size is on. Where a rate has since been deleted, the cell comes back blank. Blank keeps whatever rate a size is already on, so fill those cells in yourself if you’re changing them.
Check any older export or master spreadsheet before your next import. A number in the Tax Rate column is read as the percentage, so a column holding anything else puts your products on the wrong rate or has the row rejected. Export your products again and work from the fresh file if you aren’t sure what’s in the old one.
Click Preview Changes and the review step counts up Warnings alongside the products and rows it’s about to change. A warning doesn’t stop the import: the row still goes in, but something won’t turn out the way the spreadsheet reads.Rows marked Attachment check are the common ones. Most are image links missing the https:// at the front, which are skipped when the import runs, and the rest flag a website whose pictures couldn’t be fetched. Fix those links before you confirm, or plan to add the pictures by hand.
Excel can corrupt long barcodes. It converts them to scientific notation (e.g., 5012345678901 becomes 5.01235E+12), or treats values starting with + or = as formulas. Use the Export Products For Update XLSX file when updating, or format the barcode column as Text in Excel before pasting. Google Sheets handles this without the workaround.
If you have a long list of stems, sundries, or materials to add to your ingredient library, you can import them from a spreadsheet instead of adding them one by one.
1
Open the import
Go to Events > Ingredients to open your Ingredient Library, then click Import CSV.
2
Download a template
On the screen that opens, choose one of the template types and click Download template:
Empty: just the column headers
Sample: headers with two example rows
My ingredients: pre-filled with your existing ingredients (useful if you want to update prices in bulk). You can filter by category if you only want to export a subset.
3
Fill in your spreadsheet
The only column you must fill in is Name. Everything else is optional. See the ingredient columns below for details.
4
Try a dry run first
Upload your file and tick the Dry run checkbox before clicking Import. This shows you what would happen (how many ingredients would be created, updated, or skipped) without saving anything. It’s a safe way to check your file is correct.
5
Import for real
Once you’re happy with the dry run summary, untick the dry run checkbox and click Import again to save the changes.
Ingredients are matched by name and category. If you import an ingredient called “Red Naomi Rose” in the “Roses” category and you already have one with that exact name in that category, it updates the existing one rather than creating a duplicate.
The ingredient name (e.g., “Red Naomi Rose”, “Eucalyptus”, “Cellophane”). Rows with no name are skipped.
Category
No
Which category to file it under (e.g., “Roses”, “Foliage”, “Sundries”). If the category doesn’t exist, it’s created automatically.
Cost
No
What you pay for it (net price).
Price
No
What you charge for it (net price). If left blank but Cost and Markup are provided, the price is calculated automatically.
Markup
No
A multiplier for calculating price from cost. For example, 1.6 means the price is 1.6 times the cost.
Unit
No
How you count it in recipes, such as stem, item, or metre.
Bought As
No
How your supplier sells it, such as bunch, roll, or box.
Pack Size
No
How many units are in one bunch, roll, box, etc. For example, enter 10 for ten stems in a bunch.
Colours
No
Comma-separated colours, like blush, ivory or red, white.
Supplier
No
The supplier or wholesaler.
Product Code
No
The supplier’s product reference, such as F0082.
Notes
No
Anything useful to remember about the ingredient or how it is ordered.
Attachment
No
A web link (URL) to an image of the ingredient. Downloaded automatically in the background.
Is Hire
No
Yes or No. Whether this is a hire item (like a vase or urn) rather than a consumable.
Stock Quantity
No
How many you have. Only used for hire items.
Enforce Stock
No
Yes or No. Whether to enforce stock limits. Defaults to Yes.
Archived
No
Yes or No. Set to Yes to archive an ingredient.
Accepted file types: CSV, TXT, or XLSX (Excel).
Unrecognised columns are safely ignored. Column names are also flexible with spacing and capitalisation (e.g., “stock quantity”, “Stock_Quantity”, and “STOCK QUANTITY” all work).
You don’t have to fill in both Cost and Price. If you provide a Cost and a Markup but leave Price blank, Digital Florists calculates the price for you. For example:
Cost: £0.50, Markup: 1.8 = Price: £0.90
Cost: £1.20, Markup: 2.0 = Price: £2.40
If you’re updating an existing ingredient and it already has a markup saved, that saved markup is used to calculate the new price from your updated cost.
If you’re moving to Digital Florists from another platform, the Data Migration tool converts your existing data into a format you can import.Go to Settings > Advanced > Configuration and open the Data Migration tab.
Export your products from Shopify as a CSV file, then upload it here. Your file is converted from Shopify’s column format into the Digital Florists product import format.You can choose whether to include unpublished/inactive products.Once converted, download the resulting file and upload it through the product import wizard.
Strelitzia
Two options are available:
Products: converts your Strelitzia product export into the Digital Florists format. Download the result and import it via the product import wizard.
Customers: imports your Strelitzia customer list directly. Customer records are deduplicated and tidied during the import.
FloristPro
Upload your FloristPro product export (usually a file called something like designs.xlsx or designs.csv). It’s converted into the Digital Florists format. Download the result and import it via the product import wizard.Accepts CSV or Excel (XLS/XLSX) files.
Florist Window
Export your products from Florist Window, then upload the file here. CSV and Excel (XLS/XLSX) files are both accepted.Tick Include unpublished/inactive products if you want the ones that aren’t live on your Florist Window site as well. Those come across hidden from staff. Make them visible once you’ve checked them over.Click Convert File. The converted file downloads, and you upload that through the product import wizard.Rows marked as deleted and rows with no price are left out. A product left with no categories comes through as Uncategorized, so check the converted file before you import it.Each row’s VAT rate is matched against the tax rates you’ve set up in Digital Florists. Where a row’s rate doesn’t match one of yours, that row falls back to your default tax rate. Check the Tax Rate column in the converted file before you import it, and confirm the rates with your accountant if you’re not sure.
This is a one-off conversion for moving your catalogue across. It’s separate from the live FloristWindow website integration, which brings new web orders in as they’re placed. See Website Integrations.
WooCommerce
Export your products from WooCommerce as a CSV file and upload it here.Tick Include unpublished/inactive products to bring across products that aren’t published on your site.Click Convert File, then upload the converted file through the product import wizard.Simple products come through as a single size called Base. Variable products come through with one row per variation, so each variation becomes a size of the same product, named after its WooCommerce attributes. Every row is set to your default tax rate, so change any that need a different one before you import.
This is a one-off conversion for moving your catalogue across. It’s separate from the live WooCommerce website integration, which brings new web orders in as they’re placed.
Generic Remapping
Generic Remapping is the option for a system that isn’t listed above.For Products, put your data into the product import columns first, then upload the CSV here. Rows that belong to the same product are grouped together, product-level details are copied across every row of that product, and any row without a tax rate is set to your default rate. Download the result and upload it through the product import wizard.For Customers, click Download the customer import template, put your data into it, and upload it. CSV and Excel files are both accepted. Choose how existing customers are matched: the stricter Email only (recommended), or the wider Email, then phone, then name and postcode. The wider option catches more existing records, but it can merge partners and households into one customer, so preview the run before you commit it.Leave Preview only, do not save ticked and click Preview Import first. It reports how many customers would be created and how many already exist, without changing anything. Untick it and click Import Customers when you’re happy.
Converting a product export gives you a file to download. Upload that through the normal product import wizard, where you still get the full preview and review step before anything is saved. Customer imports work differently, because those load into Digital Florists directly.
If you use Florist Toolbox to design your arrangements, you can paste a Toolbox code directly into Digital Florists to import a product’s ingredients, labour, and pricing.
1
Copy the export code from Toolbox
In Florist Toolbox, copy the export code for your arrangement.
2
Open the product in Digital Florists
Go to the product you want to update, or create a new one.
3
Open the Toolbox import
On a new product, click Import full product from Florist Toolbox. To pull ingredients into an existing variant instead, click Import beside Stems & sundries on the variant, which opens Import Ingredients Only.
4
Paste the code and import
Paste the code and click Import.
5
Review ingredient matches
Ingredient names are matched to your ingredient library. Any ingredients that aren’t in your library yet are created automatically.
6
Confirm
Review the matched ingredients and pricing, then click Confirm import.
Yes. Use the Update existing products option in the product import wizard. Export your current products first, make changes in the spreadsheet, then re-upload. The Match columns identify the right products to update.
What happens if my import has errors?
Your file is checked before anything is saved. If there are problems (missing required fields, invalid data, duplicate barcodes), you’ll see a clear error message telling you which row has the issue and what’s wrong. Fix the errors in your spreadsheet and try again.
Can I import Excel files?
Yes. Products accept .xls and .xlsx as well as CSV, so an older workbook from another system imports without being converted first. Ingredients accept XLSX and CSV. When updating existing products, use the XLSX export directly: it preserves barcodes correctly without the formatting issues that CSV files can have in Excel.
Will importing overwrite my existing data?
For products: only fields with values in your spreadsheet are updated. Blank cells keep the current value. To explicitly clear a field, enter __CLEAR__ in that cell. For ingredients: matching is done by name and category. Existing ingredients are updated, new ones are created.
Is there a row limit?
Product imports are limited to 10,000 rows per file. If you have more, split your file into batches. Ingredient imports have no hard row limit but are still subject to the usual upload size limit.
What if I import the wrong file?
For products, you are shown a full preview of every change before anything is saved. If the import fails part-way through, no partial changes are kept.For ingredients, changes are saved as they’re processed, so tick the dry run checkbox first to preview what will happen before committing.
I'm getting an error about a category containing subcategories
Products can only be assigned to the most specific (deepest) category in a tree. If “Add-ons” has subcategories like “Chocolates” and “Candles”, you need to use Add-ons > Chocolates in the Categories column rather than just Add-ons. Use the full path with > to point to the right subcategory.