Skip to content

Import Reference

Every CSV import surface, column, and error message in one place

Back to Documentation

One import engine, many surfaces

Ardent Seller imports CSV files directly in your browser through one shared engine. Inventory, entities (vendors, customers, locations, charities), transactions, procedures, and several Settings registries each have their own import with their own columns — this page is the full reference for all of them. Every import uses the same flow: pick a file, map its columns to Ardent Seller fields, validate every row, and only then save. For a gentler, inventory-focused walkthrough with a worked example, start with Importing from CSV.

The Import Inventory dialog opened from a list page, with the template download link and CSV file picker
Every importable list has this dialog behind its Open Menu button - download the template, pick your file, then map columns.

Where Import and Download Template live

On every importable list page, open the ("more") menu in the table's action bar. It contains Download Template (a CSV with that surface's exact header row) and Import from CSV (pick your file and start the import). Imports are per-surface: you import inventory items on an inventory list, vendors on the Vendors page, and so on. The import surfaces are:

  • Inventory — every inventory list, for example Source → Ingredients, Create → Finished Goods, or Deliver → Products.
  • Entities — Source → Vendors, Deliver → Customers, Optimize → Charities, and the Locations page (linked from Settings).
  • Transactions — transaction lists such as Source → Purchases and Deliver → Sales.
  • Procedures — Create → Recipes.
  • Settings registries — Tax Categories, Transaction Methods, Referral Sources, Pricing Tiers, and Attributes (detailed below).

Some surfaces are export-only — stocktake counts, the income statement, price lists, inventory valuation, donations, and customer sales reports can be downloaded as CSV but not imported back.

The column-mapping flow

Your file's headers do not have to match the template exactly — after you pick a file, a mapping step matches your CSV columns to Ardent Seller fields. The import runs in three stages:

  1. Select the file. Only .csv files up to 10 MB are accepted. The file is parsed in your browser; nothing is uploaded yet.
  2. Map the columns. Ardent Seller pre-matches your headers to its fields — exact matches first, then common synonyms ("qty" for Quantity, "item code" for SKU), then close-typo matches. You review the suggestions next to a preview of the first 5 rows of your file and can change any assignment. Every required field must be mapped before you can continue, and each CSV column can be used for only one field.
  3. Validate and import. Every row is checked — required values, valid categories, states, and units, numeric fields, and references to existing records. Only when every row passes is anything saved.

Values for list-based columns (Category, State, Unit, Status, and so on) are matched case-insensitively, and a near-miss gets a "Did you mean?" suggestion in the error list.

Validation is all-or-nothing

One invalid row aborts the whole import — nothing is saved until every row is valid. Errors are reported with their row numbers, so fix the listed rows and upload the file again. You will never end up with half a file imported.

Inventory columns

One row per item; add extra rows for variants (see the Variant columns below). Name, SKU, Category, State, and Unit are required — they must be mapped and filled in on every row.

ColumnRequiredDescriptionValid values / example
NamereqThe item name.e.g. Vanilla Extract
SKUreqA unique identifier for the item.e.g. VAN-001
CategoryreqThe item type. Use "raw" for raw materials.raw, food, subassembly, packaging, finished, mro, equipment, labor, product, service
StatereqThe item lifecycle state. Use "active" for items in use.draft, active, archived
UnitreqThe tracking unit — the full unit NAME, not the abbreviation ("gram", not "g").e.g. unit, gram, kilogram, ounce, pound, milliliter, liter, hour
DescriptionoptFree-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 and expiry 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 seed the opening-balance transaction. Item level only — leave blank on variant rows.numeric, 0 or more
UnitCostoptPurchase cost per unit in your account currency. Pairs with Quantity for the opening balance.numeric, 0 or more
AllergensoptComma-separated allergens present in the item.milk, eggs, fish, shellfish, tree nuts, peanuts, wheat, soybeans, sesame
MinimumOrderQuantityoptThe smallest quantity you can order, in the item's Unit.numeric, e.g. 12
OrderIncrementoptThe step size in which the item is ordered.numeric, e.g. 6
LeadTimeDaysOverrideoptOverrides the vendor's default lead time, in days.integer, e.g. 14
ReplenishPointoptLow-stock trigger, in the item's Unit. On-hand at or below this flags the item.numeric, 0 or more
ReplenishQuantityoptSuggested top-up amount when the item runs low.numeric, 0 or more
TagsoptSemicolon-separated EXISTING tag names (matched case-insensitively). Import never creates tags. Item level only.e.g. bestseller;fall-line
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 stock for this variant, on the variant's row. Leave item-level Quantity blank or stock is double-counted.numeric, 0 or more
VariantUnitCostoptPurchase cost per unit for this variant. Pairs with VariantQuantity.numeric, 0 or more
AttributeNameoptAn item-level attribute. Must already exist under Settings > Attributes.e.g. Scent
AttributeValueoptThe value for that attribute. Must be one of its defined options.e.g. Lavender
VariantAttributeNameoptA variant-level attribute. Must already exist under Settings > Attributes.e.g. Size
VariantAttributeValueoptThe value for the variant attribute. Must be one of its defined options.e.g. Large

Variant opening stock: never fill both levels

Quantity and UnitCost seed an opening-balance transaction for the item, setting on-hand stock and starting average cost in one step. For an item with variants, put opening stock on the variant rows via VariantQuantity and VariantUnitCost and leave the item-level columns blank — filling in both levels double-counts the stock, because each pair creates its own opening-balance transaction. See How Stock Moves for how opening balances work.

A variant row repeats the item's Name and SKU, then fills in the Variant columns. Attributes named in AttributeName or VariantAttributeName must already exist under Settings → Attributes with the value as a defined option, and Tags names must already exist in your tag registry — import never creates them.

Entity columns: vendors, customers, locations, charities

The same column set covers all entity lists. Name, Category, and State are required — except that on a list fixed to a single category (such as Vendors), the Category column does not need to be mapped.

ColumnRequiredDescriptionValid values / example
NamereqThe entity name (business or person).e.g. Bulk Supplies Co.
CategoryreqThe entity type. Not required to map on single-category lists such as Vendors.vendor, customer, charity, primary, secondary, storage, production, sales
StatereqLifecycle state.draft, active, archived
FirstNameoptContact first name.e.g. Dana
LastNameoptContact last name.e.g. Reyes
StreetAddress1optAddress line 1.e.g. 12 Main St
StreetAddress2optAddress line 2.e.g. Suite 4
CityoptCity.e.g. Austin
StateProvinceoptState or province.e.g. TX
PostalCodeoptPostal or ZIP code.e.g. 78701
CountryoptCountry name from the supported list.e.g. United States
EmailoptContact email address.e.g. hello@example.com
PhoneoptContact phone number.e.g. 555-0100
WebsiteoptWebsite URL.e.g. example.com
SourceoptCustomers only. An EXISTING referral-source name (matched case-insensitively); never auto-created.e.g. Farmers Market
GroupsoptCustomers only. Semicolon-separated EXISTING group names; never auto-created.e.g. Wholesale;VIP
LeadTimeDaysoptVendors only. Typical lead time in days.integer, 0 or more
MinimumOrderValueoptVendors only. Minimum order value in your account currency.numeric, 0 or more
OrderingNotesoptVendors only. Free-text ordering notes.e.g. Order by Wednesday

Source and Groups only apply to customers, and LeadTimeDays, MinimumOrderValue, and OrderingNotes only to vendors — they are rejected on other categories. Source and group names must already exist in your registries; import never creates them.

Transaction columns

One row per transaction line item. The Entity and Inventory values must match records that already exist in your account.

ColumnRequiredDescriptionValid values / example
InitiationDatereqWhen the transaction started.date, e.g. 2026-07-01
TransactionNumberoptOrder, invoice, or receipt reference.e.g. INV-1042
EntityreqThe vendor, customer, or other entity — must match an existing entity name.e.g. Bulk Supplies Co.
CategoryreqThe transaction category.initial, purchase, adjustment, waste, loss, donation, stocktake, manufacture, assembly, send, receive, sale, expense, income, consumption
StatusreqThe transaction status. Only completed transactions move stock.initiated, in progress, completed, canceled, returned
CompletionDateoptWhen the transaction completed.date, e.g. 2026-07-03
SurchargeoptSurcharge amount.numeric
DiscountoptDiscount amount.numeric
TaxoptTax amount.numeric
ShippingoptShipping amount.numeric
FeesoptOther fees.numeric
MethodFeesoptPayment-processing fees.numeric
InventoryreqThe inventory item on this line — must match an existing item.e.g. Lavender Soap
BatchNumberoptBatch or lot number for the line.e.g. LOT-88
BrandNameoptBrand of the purchased goods.e.g. Acme
ProductNameoptThe vendor's own product name.e.g. Soap Base 5kg
CountryOfOriginoptCountry of origin from the supported list.e.g. United States
ExpirationDateoptExpiry date for perishable goods.date
PackageUnitreqThe unit each package is measured in — full unit name.e.g. gram, unit, liter
QuantityInPackagereqHow much of the item one package contains.numeric
PackageCostreqCost (or sale price on sales) per package.numeric
PackageQuantityreqHow many packages this line covers.numeric
TaxCategoryoptAn existing tax-category name.e.g. Supplies
DescriptionoptLine description.free text
NotesoptFree-text notes.free text
TagsoptSemicolon-separated EXISTING tag names; never auto-created.e.g. market-day

Status must be completed for stock to move

Imported transactions follow the same rule as everything else in Ardent Seller: only completed transactions change on-hand quantities. If you import historical purchases or sales with a Status of initiated or in progress, your stock will not move until each transaction is marked completed. See How Stock Moves.

Procedure columns: recipes and production

A procedure spans multiple rows: the first row carries the procedure-level fields, and additional rows repeating the Name carry one ingredient or one step each. The TargetInventory item must already exist.

ColumnRequiredDescriptionValid values / example
NamereqThe recipe or procedure name. Repeated on every ingredient and step row.e.g. Lavender Soap Batch
DescriptionoptFree-text description.free text
BatchNumberoptBatch or lot number.e.g. LOT-88
CategoryreqThe procedure type.recipe, production
StatereqLifecycle state.draft, active, archived
TargetInventoryreqThe item this procedure produces — must match an existing producible item.e.g. Lavender Soap
TargetVariantSKUoptTargets the recipe at a specific variant of the target item. Must match one of its VariantSKUs; blank targets the whole product.e.g. SOAP-100-LG
InitiationDateoptStart date.date
CompletionDateoptCompletion date.date
BatchUnitreqThe unit the batch output is measured in — full unit name.e.g. unit, gram, liter
QuantityInBatchreqHow much one batch yields, in the BatchUnit.numeric
BatchQuantityoptNumber of batches.numeric
IngredientoptOne ingredient per row — must match an existing item allowed for this target.e.g. Lavender Oil
IngredientUnitoptThe unit for the ingredient quantity — full unit name.e.g. milliliter
IngredientQuantityoptHow much of the ingredient one batch uses.numeric
StepNumberoptOne step per row; steps are ordered by this number.integer, e.g. 1
StepInstructionoptWhat the step does.e.g. Melt the base
StepDurationQuantityoptHow long the step takes.numeric
StepDurationUnitoptThe time unit for the duration.e.g. minute, hour
TagsoptSemicolon-separated EXISTING tag names on the first row; never auto-created.e.g. fall-line

Settings registries and custom fields

Five Settings registries have their own menu import. Each is a small, flat CSV — download the registry's template to see the headers.

RegistryRequired columnsOptional columns
Tax CategoriesName, CategoryType, StateIRSCategory, Description, SortOrder
Transaction MethodsName, StateDescription, ApplicableCategories (semicolon-separated), FixedFee, PercentageFee
Referral SourcesName, StateDescription
Pricing TiersName, Tier Type, Value Type, Value, StateDescription
AttributesName, StateOptions (semicolon-separated name:abbreviation pairs)

Custom fields are imported as extra columns on the surfaces that host them: after you define a field under Settings → Custom Fields, its exported header looks like CF: Field name and appears in the mapping step like any other column. The field definitions themselves are created in Settings, not by CSV. Tag and customer-group registries do not have a CSV import either — create tags and groups in Settings first, then reference them by name in the Tags and Groups columns of the imports above.

Common errors and what they mean

These are the exact messages the importer shows (row numbers and values vary with your file).

Please select a CSV file.

The file is not a .csv. Export or save your spreadsheet as CSV first — .xlsx and other formats are not accepted.

File is too large (12.4 MB). Maximum size is 10 MB.

The 10 MB limit is per file. Split a large export into smaller files and import them one at a time.

The CSV file contains no data rows.

The file has headers but nothing beneath them. Add at least one data row.

CSV parsing error (Row 3): ...

The file itself is malformed at that row — often an unclosed quote or a ragged row. Re-export from your spreadsheet program.

"Name" is required. Choose the CSV column that contains it.

A required field is not mapped to any CSV column. In the mapping step, assign a column to every field marked required.

The CSV column "Product Name" is mapped to more than one field (Name, SKU). Each column can only be used once.

Two fields point at the same CSV column. Change one of them — every field needs its own column.

Row 4: Category is required. Valid values: raw, food, subassembly, ...

A required cell is blank on that row. Fill it in with one of the listed values.

Row 4: Invalid Unit "g". Did you mean "gram"?

The value is close to a valid one but not exact. Values are matched case-insensitively, but abbreviations are not accepted — use the suggested full name.

No account selected. Please try again.

The app lost track of your active account. Reload the page and retry the import.

Account changed during import. Please try again.

You switched accounts while the import was running. Switch back and run the import again — nothing was saved.

Failed to import data: ...

The rows validated but the server rejected the save; the message contains the reason. Fix it and retry, or contact support via the in-app help form if it persists.

What import never does

Import fills in your data — it never invents reference records from the values it finds. Specifically, import never auto-creates:

  • Locations or vendors — a DefaultEntity or Entity value must match an existing entity by name.
  • Attributes or attribute options — define them under Settings → Attributes first.
  • Tags — names in the Tags column must match existing registry tags; unrecognized names are reported as errors.
  • Customer groups or referral sources — the Groups and Source values must match existing names.

It also never saves part of a file: validation is all-or-nothing, so a failed import leaves your account exactly as it was. Create the reference records first, then import — if an import fails, the row-numbered errors tell you which values were not found.

Related articles