- What does it create? - which records appear in your workspace.
- When does it create a new record vs. reuse an existing one? - how a row is matched against data you already have, and what happens when it matches.
At a glance
| Import type | What it creates | Matched against existing by | Re-importing a matching row |
|---|---|---|---|
| Products | A product owned by your company | SKU, within your company | Reused, never overwritten |
| Materials | A source product, plus a supplier when supplier columns are present | SKU, within the owning supplier | Reused, never overwritten |
| Bill of materials (BOM) | Inputs on the target product, plus the supplier parts and materials they reference | Products by SKU + ownership; inputs by source + quantity + unit | Products reused; inputs added only to unmodeled products |
| Suppliers | A supplier company, plus contacts when contact columns are present | UUID, then your internal ID, then name | Reused, never overwritten; new contacts merged in |
| Locations | A named location, optionally geocoded | Location name, within the owning company | Reused; blank fields filled in, set values kept |
| Activity data, Air travel, Transport | One activity record per row | Not matched | A new record every time |
The sample rows below use Variable’s canonical column names. Your file’s headers don’t need to match - the column mapping step lets you map any header to the right field.
Products
Creates a product owned by your company for each row.- Matched by: SKU, scoped to your company. If a row has no SKU, the product name is used instead.
- On a match: the existing product is reused and left untouched - its name, supplier, and other fields are not overwritten with the values in your file.
- Created new when: no product matches - by SKU, or by name when the row has no SKU. A SKU-less row gets a SKU generated from its name on creation.
Materials
Creates a source product (a material or supplier part) for each row, and a supplier company when supplier columns are present.- Matched by: SKU, scoped to the owning supplier. The supplier is matched first by UUID, then by your internal supplier ID, then by supplier name. Name is the fallback when a row has no SKU.
- On a match: the existing material and supplier are reused and left untouched.
- Created new when: no material matches - by SKU, or by name when the row has no SKU. A SKU-less row gets a SKU generated from its name on creation.
Bill of materials (BOM)
Creates inputs (line items) on the product you’re importing into, plus any supplier parts and materials the rows reference. See What happens after upload for the full 3-level structure.- Matched by: products are matched by SKU and ownership; individual inputs are matched by their source product, quantity, and unit.
- On a match: products are reused and left untouched. Inputs are only added to a product that was created during this import, is still UNKNOWN, or has no inputs yet. A product that’s already LIVE with inputs is treated as fully modeled and keeps its existing inputs.
- Created new when: the product or input isn’t already present under those rules.
If a re-import isn’t adding inputs to a product, the product is most likely already LIVE with a model. See Import troubleshooting for how to add to it.
Suppliers
Creates a supplier company for each row, plus contacts when contact columns (name or email) are present.- Matched by: UUID, then your internal supplier ID, then supplier name.
- On a match: the existing supplier is reused and left untouched. A contact is added only when no contact with the same email or name is already on that supplier.
- Created new when: no supplier matches by ID or name.
Locations
Creates a named location for each row, optionally geocoded to coordinates when address details are provided.- Matched by: location name, within the owning company - the company named in the
companyIdcolumn, or your own company for locations you hold directly. - On a match: the existing location is reused. Address fields from your file fill in blanks but do not overwrite values that are already set.
- Created new when: no location with that name exists for that company.
Activity data, air travel, and transport
These three types record transactions and events - a purchase, a sale, a flight, a shipment. Each row becomes one activity record. Air travel and transport are activity types with their own columns (flight details, logistics weight and distance, and so on).- Matched by: nothing. Imported activity rows are not matched against existing activities.
- Always created new: every row produces a new record on every import.
Why re-imports don’t update existing records
For products, materials, suppliers, and BOMs, a match means reuse, not update: Variable keeps the record you already have and ignores the newer values in your file. This prevents an accidental re-import from silently rewriting curated data. If you’ve fixed values in your source file and want them to land, edit the records directly in the app or via the API. Locations are the one exception - a re-import fills in any address fields that were previously blank, but still won’t overwrite values that are already set.Next steps
- Data import overview - the import workflow end to end
- What happens after upload - the 3-level BOM structure
- Import troubleshooting - duplicate handling and common errors