Skip to content

Importing from CSV

Bulk-load your items, contacts, and transactions from a spreadsheet

Back to Section Guides

How CSV import works in Ardent Seller

Most list pages — Inventory (Ingredients, Packaging, Finished Goods, Products, and the rest), Entities (Vendors, Customers, Locations), Transactions, Procedures, and several Settings registries — have their own Import from CSV action. Import happens right in your browser: you download the template, fill it in with a spreadsheet, and upload it. Ardent Seller reads each row, validates it, and creates the records. Because it is per-section, you import inventory items on an inventory page, vendors on the Vendors page, and so on.

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. Ardent Seller parses it, checks every row, and reports what it finds before your data changes.

For example, go to Inventory → Ingredients, open the menu, download the template, add your rows, and import it back.

Match the template headers exactly

There is no column-mapping step yet, so your file's header row must match the template exactly — same column names, same spelling, same capitalization. The safest approach is to start from the downloaded template and type your data underneath the existing headers rather than building a file from scratch. (Column mapping is a planned improvement.)

Opening stock is imported at the item level only via the Quantity and UnitCost columns. To set opening stock for a specific variant, use the item's add/edit sheet in the app instead.

Inventory column reference

These are the columns in the inventory import template. Headers are case-sensitive. Name and SKU are required; every other column is optional and can be left blank.

ColumnRequiredDescriptionValid values / example
NamereqThe item name.e.g. Vanilla Extract
SKUreqA unique identifier for the item. Must be unique across your items.e.g. VAN-001
CategoryoptThe item type. Use "raw" for raw materials.raw, food, subassembly, packaging, finished, mro, equipment, labor, product, service
StateoptThe item lifecycle state. Use "active" for items in use.draft, active, archived
UnitoptThe 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
DescriptionoptOptional free-text notes about the item.e.g. Pure Madagascar bourbon
BinLocationoptWhere the item is physically stored.e.g. Shelf A3
DefaultEntityoptMust exactly match an existing location or vendor name, or be left blank.e.g. Main Kitchen
FoodoptMarks the item as a food item (enables allergen tracking).true / false
PriceoptThe item's SELLING price (not purchase cost). Leave blank for pure raw materials.numeric, e.g. 6.00
QuantityoptOpening 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
UnitCostoptPurchase cost per unit in your account currency. Pairs with Quantity for the opening balance.numeric, 0 or more, e.g. 3.50
AllergensoptComma-separated list of allergens present in the item.milk, eggs, fish, shellfish, tree nuts, peanuts, wheat, soybeans, sesame
MinimumOrderQuantityoptThe smallest quantity you can order for this item.numeric, e.g. 12
OrderIncrementoptThe step size in which the item is ordered.numeric, e.g. 6
LeadTimeDaysOverrideoptOverrides the default lead time, in days.numeric, e.g. 14
VariantSKUoptSKU for a variant. On a variant row, repeat the item Name and SKU and fill this in.e.g. SOAP-100-LG
VariantDescriptionoptA description of the variant.e.g. Large bar
VariantPriceoptThe selling price for this variant.numeric, e.g. 9.00
AttributeNameoptName of an item-level attribute. Must already exist under Settings → Attributes.e.g. Scent
AttributeValueoptThe value for that attribute. Must be one of the attribute's defined options.e.g. Lavender
VariantAttributeNameoptName of a variant-level attribute. Must already exist under Settings → Attributes.e.g. Size
VariantAttributeValueoptThe value for the variant attribute. Must be one of the attribute's defined options.e.g. Large

A worked example

The file below imports three items. The first is a raw material with opening stock but no selling price. The second is a product with opening stock, a unit cost, and a selling price. The third block shows a variant: 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
Vanilla Extract,VAN-001,raw,active,milliliter,,500,0.08,,,
Lavender Soap,SOAP-100,product,active,unit,6.00,40,1.25,,,
Lavender Soap,SOAP-100,product,active,unit,6.00,40,1.25,SOAP-100-LG,Large bar,9.00
  • Vanilla Extract — a raw material tracked in milliliter (the full unit name, not "ml"). Price is blank because it isn't sold on its own. Quantity 500 with UnitCost 0.08 sets both on-hand stock and average cost.
  • Lavender Soap — a product with a Price of 6.00 and 40 units of opening stock at a 1.25 unit cost.
  • The variant row — repeats Lavender Soap / SOAP-100 and adds a "Large bar" variant priced at 9.00. Because opening stock is item-level, set variant-specific stock from the item's edit sheet after import.

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.

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 download-template-then-import flow applies across the app. Each section has its own set of columns — always download that section's template to see them:

  • Inventory — Ingredients, Packaging, MRO, Finished Goods, Products, and more.
  • Entities — Vendors, Customers, and Locations.
  • Transactions — purchases, sales, and other transaction records.
  • Procedures — recipes and other procedures.
  • Settings registries — reference lists such as attributes and pricing tiers each expose their own import.

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.

Unknown header / column not recognized

Headers are case-sensitive and there is no column mapping yet. Start from the downloaded template so the header row matches exactly.

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.

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 and UnitCost must be 0 or more). Remove currency symbols and thousands separators.