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), 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.

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
ReplenishPointoptLow-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
ReplenishQuantityoptSuggested top-up amount to reorder when the item runs low, in the item's Unit.numeric, 0 or more, e.g. 50
TagsoptSemicolon-separated list of EXISTING tag names. Import never creates new tags — define them first.e.g. bestseller;fall-collection
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
VariantQuantityoptOpening 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
VariantUnitCostoptPurchase 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
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 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"). 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 sold in two variants. The item-level Quantity and UnitCost are left blank because the stock lives on the variants.
  • The variant rows — each repeats Lavender Soap / SOAP-100 and adds a variant with its own opening stock via VariantQuantity and VariantUnitCost: 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.