Uploading catalogs
How upload works
Upload any CSV or JSON catalog. After you pick a file, ImportPreflight shows a preview of the first rows and a column mapping step: map your headers to ImportPreflight’s fields. You only must map product_name. We strongly recommend description and country_of_origin (ISO-2) for better classification and UFLPA / Entity List–style screening.
Previously, the pipeline assumed your file already used canonical names (product_name, description, etc.). That is still supported if you skip custom headers and your export already matches — otherwise, use the mapping step. Mappings apply to this upload only; saving "always use this mapping" for your organization is planned for a later step.
Formats
CSV and JSON are supported. The loader is chosen from the file extension. For JSON, both a top-level array and a products object are allowed — see docs/DATA_CONTRACTS.md in the repository for the canonical field names and optional column_map for API use.
Plan limits (SKUs per upload)
Each billing tier caps how many product rows you can send in a single upload (e.g. Free: 250, Starter: 2,500, Pro: 10,000, Business: 50,000). If you exceed the cap, submission is rejected before storage — split the file or upgrade. See the Pricing matrix and docs/BILLING_LIMITS.md in the repo.
Operator notes
Longer, deployer-focused notes live in the repo: docs/help/uploading-catalogs.md (Column mapping, quotas, and API reference).
Fields
At minimum the loader expects a product name (or equivalent column you map). For stable SKU history, include a dedicated sku field. We recommend: description, material, country_of_origin, and destination_country when you have them — the classifier and rules use free text to reduce ambiguity.
Example: "Cotton T-shirt" is weaker for HTS and flags than "Short-sleeve crew neck t-shirt, 100% cotton jersey knit, men’s, HS-style goods" because the model can tie materials and use to a narrower heading.
Size and quotas
A per-upload 50 MB default cap and per-organization monthly job limits are enforced server-side. If a job is rejected, check file size and your org’s remaining quota in organizations (or ask your admin).