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), 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.
| 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 |
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 |
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 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").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 with a
Priceof 6.00 and 40 units of opening stock at a 1.25 unit cost. - The variant row — repeats
Lavender Soap / SOAP-100and 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.