Importing from CSV
Bulk-load your items, contacts, and transactions from a spreadsheet
How CSV import works in Ardent Seller
Most list pages — inventory (Ingredients, Packaging, Finished Goods, Products, and the rest), Vendors, Customers, Locations, Transactions, Recipes, and several Settings registries — have their own Import from CSV action. Import happens right in your browser: you select your file, map its columns to Ardent Seller fields, and confirm. Ardent Seller validates every row and creates the records — nothing saves until the whole file passes. This guide walks through the inventory import end to end; for the column reference of every other import (vendors, customers, transactions, recipes, and more), see the complete import reference.
Where to find Import & Template
On any importable list, open the actions menu — the ⋯ ("more") button in the table's action bar — and choose Import from CSV. The same menu offers a Download Template option.
- Download Template — gives you a CSV containing the exact header row for that section. On a new account the template has the headers only (no data rows); fill in one row per record beneath them.
- Import from CSV — pick your filled-in file, map its columns to Ardent Seller fields, and confirm. Ardent Seller checks every row and reports what it finds before your data changes.
For example, go to Source → Ingredients, open the ⋯ menu, download the template, add your rows, and import it back.
Map your CSV columns to Ardent Seller fields
After you select a file (it must be a .csv and no larger than 10 MB), Ardent Seller shows a mapping step: each Ardent Seller field gets a dropdown where you pick the CSV column that contains it, next to a preview of the first five rows of your file. Fields marked with * are required and must be mapped before you can continue; anything you don't need can stay on — Ignore —.
- Suggestions pre-fill automatically — when your headers match the template (or a close variant like "product name", "qty", or a small typo), the mapping is filled in for you. Starting from the downloaded template is still the easiest path, because every field pre-fills and you only review.
- One CSV column per field — the same column cannot feed two different fields. If it does, the importer reports it and you adjust the mapping.
- Continue validates the file — after mapping, the importer checks every row and shows either "N records to import" or a row-by-row error list. Nothing is saved until every row passes.
Inventory column reference
These are the fields the inventory import accepts — the downloaded template has one column per field. Name and SKU are required and must be mapped to a column; every other field is optional and can be left unmapped or blank.
| Column | Required | Description | Valid values / example |
|---|---|---|---|
Name | req | The item name. | e.g. Vanilla Extract |
SKU | req | A unique identifier for the item. Must be unique across your items. | e.g. VAN-001 |
Category | opt | The item type. Use "raw" for raw materials. | raw, food, subassembly, packaging, finished, mro, equipment, labor, product, service |
State | opt | The item lifecycle state. Use "active" for items in use. | draft, active, archived |
Unit | opt | The tracking unit — use the full unit NAME, not the abbreviation ("gram", not "g"). | unit, gram, kilogram, milligram, ounce, pound, milliliter, liter, teaspoon, tablespoon, cup, inch, foot, meter, hour |
Description | opt | Optional free-text notes about the item. | e.g. Pure Madagascar bourbon |
BinLocation | opt | Where the item is physically stored. | e.g. Shelf A3 |
DefaultEntity | opt | Must exactly match an existing location or vendor name, or be left blank. | e.g. Main Kitchen |
Food | opt | Marks the item as a food item (enables allergen tracking). | true / false |
Price | opt | The item's SELLING price (not purchase cost). Leave blank for pure raw materials. | numeric, e.g. 6.00 |
Quantity | opt | Opening on-hand stock, in the item's Unit. Pairs with UnitCost to set opening stock and average cost. | numeric, 0 or more, e.g. 100 |
UnitCost | opt | Purchase cost per unit in your account currency. Pairs with Quantity for the opening balance. | numeric, 0 or more, e.g. 3.50 |
Allergens | opt | Comma-separated list of allergens present in the item. | milk, eggs, fish, shellfish, tree nuts, peanuts, wheat, soybeans, sesame |
MinimumOrderQuantity | opt | The smallest quantity you can order for this item. | numeric, e.g. 12 |
OrderIncrement | opt | The step size in which the item is ordered. | numeric, e.g. 6 |
LeadTimeDaysOverride | opt | Overrides the default lead time, in days. | numeric, e.g. 14 |
ReplenishPoint | opt | Low-stock reorder trigger, in the item's Unit. On-hand at or below this flags the item as low stock. | numeric, 0 or more, e.g. 10 |
ReplenishQuantity | opt | Suggested top-up amount to reorder when the item runs low, in the item's Unit. | numeric, 0 or more, e.g. 50 |
Tags | opt | Semicolon-separated list of EXISTING tag names. Import never creates new tags — define them first. | e.g. bestseller;fall-collection |
VariantSKU | opt | SKU for a variant. On a variant row, repeat the item Name and SKU and fill this in. | e.g. SOAP-100-LG |
VariantDescription | opt | A description of the variant. | e.g. Large bar |
VariantPrice | opt | The selling price for this variant. | numeric, e.g. 9.00 |
VariantQuantity | opt | Opening on-hand stock for this variant, in the item's Unit. Put it on the variant's row (leave the item-level Quantity blank). Pairs with VariantUnitCost. | numeric, 0 or more, e.g. 25 |
VariantUnitCost | opt | Purchase cost per unit for this variant, in your account currency. Pairs with VariantQuantity to set the variant's opening balance and average cost. | numeric, 0 or more, e.g. 3.50 |
AttributeName | opt | Name of an item-level attribute. Must already exist under Settings → Attributes. | e.g. Scent |
AttributeValue | opt | The value for that attribute. Must be one of the attribute's defined options. | e.g. Lavender |
VariantAttributeName | opt | Name of a variant-level attribute. Must already exist under Settings → Attributes. | e.g. Size |
VariantAttributeValue | opt | The value for the variant attribute. Must be one of the attribute's defined options. | e.g. Large |
A worked example
The file below imports two items. The first is a raw material with opening stock but no selling price. The second is a product whose stock is held at the variant level: to add a variant, repeat the item's Name and SKU on an additional row and fill in the Variant* columns.
Name,SKU,Category,State,Unit,Price,Quantity,UnitCost,VariantSKU,VariantDescription,VariantPrice,VariantQuantity,VariantUnitCost
Vanilla Extract,VAN-001,raw,active,milliliter,,500,0.08,,,,,
Lavender Soap,SOAP-100,product,active,unit,6.00,,,SOAP-100-SM,Small bar,6.00,40,1.10
Lavender Soap,SOAP-100,product,active,unit,6.00,,,SOAP-100-LG,Large bar,9.00,25,1.60- Vanilla Extract — a raw material tracked in
milliliter(the full unit name, not "ml").Priceis blank because it isn't sold on its own.Quantity500 withUnitCost0.08 sets both on-hand stock and average cost. - Lavender Soap — a product sold in two variants. The item-level
QuantityandUnitCostare left blank because the stock lives on the variants. - The variant rows — each repeats
Lavender Soap / SOAP-100and adds a variant with its own opening stock viaVariantQuantityandVariantUnitCost: the Small bar starts at 40 units (1.10 each) and the Large bar at 25 units (1.60 each).
Together, Quantity and UnitCost create an opening-balance transaction on import, so both your on-hand quantity and your average cost are set in one step.
Variants & attributes
Each variant is an additional row that repeats the parent's Name and SKU, then fills in VariantSKU, VariantDescription, and VariantPrice. To give a variant its own opening stock, add VariantQuantity and VariantUnitCost on that variant's row (and leave the item-level Quantity / UnitCost blank so stock isn't counted twice).
Attributes work through the AttributeName / AttributeValue columns for the item, and VariantAttributeName / VariantAttributeValue for a variant. Import does not create new attribute definitions — the attribute must already exist under Settings → Attributes, and the value you supply must be one of that attribute's defined options.
Importing other sections
The same select-map-validate flow applies across the app — every importable list has its own template and its own set of fields. The complete import reference documents the columns for every surface:
- Inventory — Ingredients, Packaging, MRO, Subassemblies, Finished Goods, Products, and more (covered on this page).
- Vendors, customers, locations, and charities — contact details plus vendor ordering terms and customer groups.
- Transactions — purchases, sales, and other transaction records.
- Recipes and production runs — including ingredient and step rows.
- Settings registries — tax categories, transaction methods, referral sources, pricing tiers, attributes, and custom fields.
Troubleshooting common errors
The importer validates every row and shows errors row-by-row. A single error aborts the whole import — nothing is saved until every row is valid — so fix the reported rows and re-upload.
Missing Name or SKU
Both Name and SKU are required on every item row. Fill in any blanks.
Duplicate SKU
Each item SKU must be unique across your items. Change the duplicate, or if it is meant to be a variant, move it onto a variant row that repeats the same Name and SKU.
A required field is not mapped ("... is required. Choose the CSV column that contains it.")
Every field marked with * on the mapping step must point at a CSV column. Pick the column from the dropdown, or add the column to your file if it is missing.
A column is mapped to more than one field ("Each column can only be used once.")
One CSV column can only feed one Ardent Seller field. Set the extra field back to Ignore, or split the data into separate columns.
File rejected before mapping
The importer only accepts .csv files up to 10 MB ("Please select a CSV file." / "File is too large"). Save spreadsheets as CSV first, and split very large files.
Invalid Category or State
Use one of the accepted values — Category: raw, food, subassembly, packaging, finished, mro, equipment, labor, product, service; State: draft, active, archived. Values are matched case-insensitively, and near-misses get a "Did you mean?" suggestion.
Unrecognized Unit
Use the full unit NAME rather than an abbreviation — for example "gram" instead of "g", "milliliter" instead of "ml".
Invalid allergen
Allergens must come from the supported list: milk, eggs, fish, shellfish, tree nuts, peanuts, wheat, soybeans, sesame.
DefaultEntity not found
The DefaultEntity value must exactly match an existing location or vendor name, or be left blank.
Attribute not defined / invalid value
Import does not create attributes. Define the attribute and its options under Settings → Attributes first, then use one of its options as the value.
Non-numeric Price, Quantity, or UnitCost
These must be plain numbers (Quantity, UnitCost, VariantQuantity, and VariantUnitCost must be 0 or more). Remove currency symbols and thousands separators.