Import your fitment data into Paddock
You already have your fitment data: a spreadsheet, a TecDoc export or an ACES file. This guide shows how to load it into Paddock without a developer, in three steps:
- Put your data into one simple spreadsheet, the fitment sheet.
- Open
converter.htmlin your browser and drop the sheet. It checks every row and makes the import files. - Import those files into Shopify.
Do the theme setup first (the Vehicle metaobject definition and the custom.fitment product metafield): see MERCHANT-SETUP-GUIDE.md, sections 1 and 2.
What's in this folder
| File | What it is |
|---|---|
fitment-sheet-template.csv |
The empty fitment sheet. Open it in Excel, Numbers or Google Sheets |
fitment-sheet-example.csv |
A filled example (cars, motorcycles, universal parts, SKUs) |
example-shopify-products-export.csv |
A small Shopify product export that goes with the example |
converter.html |
The converter. Double-click it: it opens in your browser, works offline and never sends your files anywhere |
example-output/ |
What the converter produces from the example |
1. Fill in the fitment sheet
One row = one product × one vehicle. A part that fits three vehicles takes three rows.
| Column | Required | Example | Notes |
|---|---|---|---|
product_handle |
Yes, or sku |
ceramic-brake-pads-front |
The product's URL handle (Shopify admin → product → Search engine listing) |
sku |
Yes, or product_handle |
PAD-GOLF-R-01 |
Any variant SKU of the product. Needs your product export in the converter (step 2) |
make |
Yes | Audi |
Universal for a part that fits every vehicle (the other columns can stay empty) |
model |
Yes | R8 |
|
year_from |
Yes | 2016 |
First model year, four digits |
year_to |
No | 2023 |
Last model year. Empty = still produced |
engine |
No | 5.2 V10 |
Empty = fits every engine |
Example:
product_handle,sku,make,model,year_from,year_to,engine
ceramic-brake-pads-front,,Audi,R8,2016,2023,5.2 V10
,PAD-GOLF-R-01,Volkswagen,Golf R,2014,2021,2.0 TSI
o-ring-chain-kit-520,,Yamaha,MT-07,2014,2024,
all-weather-floor-mats,,Universal,,,,
Good to know:
- Use year ranges, not one row per year: Shopify allows at most 128 vehicles per product.
- Always spell makes and models the same way ("Volkswagen" everywhere, never "VW" here and "Volkswagen" there). The garage compares them exactly; the converter warns you when it sees two spellings.
- Commas or semicolons as separators both work (French Excel uses semicolons). Column names in French are accepted too (marque, modèle, année début…).
- Excel: File → Save as → CSV. The converter does not read .xlsx files.
- For each product in your sheet, list all its vehicles. The import replaces the product's fitment with what the sheet says. Products not in the sheet are not touched, so you can import in batches (for example one brand at a time).
2. Run the converter
- Double-click
converter.html. It opens in your browser. - Drop your fitment sheet in box 1.
- Optional: drop your Shopify product export in box 2 (Shopify admin → Products → Export → All products → CSV for Excel). It is needed if your sheet uses SKUs, it checks that every handle exists, and it unlocks the "tags" file (no app needed, see below).
- Read the result:
- Errors (red), with the row number of your spreadsheet: a year that isn't a year,
year_tobeforeyear_from, an empty make or model, an unknown handle or SKU, a missing column, more than 128 vehicles on one product. A product with an error is left out of the files until you fix the sheet and drop it again; every other product is converted. - Warnings: duplicate rows (kept once), two spellings of the same make or model, a product marked Universal that also lists vehicles. - Download the files.
The converter gives each vehicle a stable, readable handle, such as audi-r8-2016-2023-5-2-v10, ford-mustang-2018-present-5-0-v8 or universal. The same vehicle always gets the same handle, so you can run the converter again on an updated sheet: existing vehicles are updated, not duplicated.
3. Import into Shopify
Two things go into Shopify: the vehicles (Content → Metaobjects → Vehicle) and, for each product, the link to its vehicles (the product's Fitment field). Shopify's own product import does the second part; the first part needs Matrixify or a few minutes by hand.
Step A: create the vehicles
- A few dozen vehicles: by hand, no app. Content → Metaobjects → Vehicle → Add entry, once per line of
vehicles-list.csv. Type the handle shown in that file (the field at the bottom of the entry), so the product import can find each vehicle. - Many vehicles: with Matrixify (free plan for small files, paid plans for large catalogs). Matrixify → Import → upload
matrixify-metaobjects-vehicles.csv→ Import. Keep the file name: Matrixify reads "metaobjects" in it.
If vehicles already exist in your store under other handles, rename their handles to the ones of vehicles-list.csv, or the import creates them a second time.
Step B: link products to vehicles (no app needed)
Drop your product export in the converter (box 2): it makes shopify-products-fitment.csv.
- Shopify admin → Products → Import → choose
shopify-products-fitment.csv. - Tick Overwrite products with matching handles. Untick "Publish new products to all sales channels".
- Upload and preview → Import products. Shopify emails you a summary.
Only the columns of the file change: price, SKU, description, images, tags and everything else stay as they are (verified on a dev store). The Fitment column lists the vehicle handles separated by ; (semicolon and space), the format Shopify expects for this kind of field. If the summary says "Value requires that you select a metaobject", a vehicle of that row does not exist yet with that handle: do step A first, or fix the handle.
With Matrixify you can also import matrixify-products-fitment.csv instead (after the vehicles).
Alternative without vehicles in the Fitment field: tags
If you also dropped your product export, the converter makes shopify-products-fit-tags.csv: your export with one tag per vehicle added to each product, such as fit:Audi|R8|2016-2023|5.2 V10 or fit:Universal. Your other tags are kept; old fit: tags are replaced.
- Shopify admin → Products → Import → choose the file → tick Overwrite products with matching handles → Upload and preview → Import.
- The fitment badges on product cards, the "Fits your…" panel on product pages and the cart then use these tags.
Limit of the tags route: the garage's vehicle list (Year → Make → Model → Engine) reads the Vehicle entries, not the tags, and the fitment table on the product page lists only the vehicles of the Fitment field. Create the vehicles too (step A). Tags are best for adding a vehicle quickly to a few products.
You can also type a fit: tag by hand on a product to add one vehicle quickly. Format: fit:Make|Model|Years|Engine. Years: 2017-2023, 2017 (one year), 2017- (still produced) or empty (every year). Engine is optional. Tags and the Fitment field are merged.
Coming from TecDoc (Europe)
TecDoc (TecAlliance) links each article to vehicle types (KType for cars, motorcycle types for bikes). Export the article linkages as a flat table (your TecDoc tool, catalogue software or data provider can export Excel or CSV) and map the columns:
| TecDoc column | Fitment sheet column | Note |
|---|---|---|
| Article number (with your brand) | sku |
Must match a variant SKU in Shopify |
| Vehicle manufacturer | make |
|
| Model series | model |
Choose one way and keep it: with or without the chassis code ("Golf VII" or "Golf VII (5G1, BQ1)") |
| Construction year from (YYYYMM) | year_from |
Keep the first four digits: 201304 → 2013 |
| Construction year to (YYYYMM) | year_to |
Same; empty when still produced |
| Type / engine description (for example "2.0 GTI", kW, cc) | engine |
Optional. Leave it empty if the part fits all engines of that model |
The KType ID itself is not needed. Several KTypes often share make, model, years and engine: they become one row (the converter removes duplicates). TecDoc data is licensed by TecAlliance: check that your licence lets you display it in your store.
Coming from ACES / PIES (North America)
ACES (Auto Care Association) describes fitment; PIES describes the product (part number, brand, descriptions, prices). For Paddock, only ACES fitment matters; PIES goes into your normal Shopify product import.
ACES XML files use VCdb IDs (BaseVehicle, Make, Model, EngineBase). Ask your PIM, catalog provider or ACES tool for a flat export with names (often called "application export" or "ACES flat file"), then map:
| ACES flat column | Fitment sheet column | Note |
|---|---|---|
| Part number | sku |
Must match a variant SKU in Shopify |
| Make | make |
|
| Model (and Submodel if you need it, for example "F-150 XLT") | model |
Keep one convention |
| Year | year_from and year_to |
ACES lists one year per row: merge consecutive years into one range (a spreadsheet pivot table helps), or the product may go over 128 vehicles |
| Engine (for example "5.0L V8") | engine |
Optional |
Positions, quantities and notes (front/rear, "with sport package"…) have no column: put them in the product description or as product options.
A full ACES catalog (tens of thousands of base vehicles) is better served by a dedicated fitment app; Paddock's garage handles several thousand vehicles comfortably.
What Shopify imports natively (research, November 2026)
| Question | Answer | Source |
|---|---|---|
| Can the product CSV import set product metafields? | Yes. Product CSV import and export support product metafields, one column per metafield, named Name (product.metafields.namespace.key), for example Fitment (product.metafields.custom.fitment). Variant metafields are not supported |
Shopify Help Center: Using CSV files to import and export products |
Which value for a list.metaobject_reference in a product CSV? |
Handles or GIDs, separated by ; (Shopify Help Center, metafield table). Verified on a dev store: audi-rs3-2017-2024; audi-r8-2017-2024-v10 links the product to both vehicles; commas are rejected ("Value requires that you select a metaobject") |
shopify.dev: Data modeling with metafields and metaobjects, shopify.dev: List of data types, Shopify Community thread |
| Can the admin import metaobject entries (vehicles) from a CSV? | No official documentation found. Shopify's docs do not describe a CSV import for metaobject entries; the App Store has several apps whose whole purpose is that import | Metaobject CSV Import/Export (App Store), Matrixify: bulk import metaobject entries |
| Matrixify formats | Metaobject entries: columns Handle, Command, Definition: Handle, Status, then one row per field with Field (the field key) and Value; the rows of one entry repeat its handle. Verified on a dev store (a Field: <key> column per field is not recognised). Product metafields: column Metafield: namespace.key [type]; list values separated by commas; metaobject references written vehicle.<handle> (verified on a dev store) |
Matrixify: Metaobjects, Matrixify: Metafields, Matrixify release notes |
Conclusion. Shopify's product import links products to vehicles by handle; it cannot create the vehicles themselves. Hence: vehicles by hand or with Matrixify, product links with the native import (or Matrixify), and fit: tags as a quick extra.
Verified on the dev store (paddock-dev, November 2026):
- The fit: tags route works end to end: fit:Audi|R8|2017- makes a part show "Fits your Audi R8" for a 2020 R8; fit:Audi|R8|2019 shows "Doesn't fit" for a 2020; tags add to the Fitment field; fit:Universal shows "Universal fit".
- The native product import sets the Fitment field from vehicle handles separated by ;, and with "Overwrite products with matching handles" it changes only the columns of the file (price, SKU, vendor, description and tags were kept). Commas, GIDs separated by commas and a JSON array were rejected.
- The admin has no Import button for metaobject entries (Content → Metaobjects → Vehicle offers only "Add entry" and "Manage definition"): vehicles must be created by hand or with an app such as Matrixify.
- Matrixify (Demo plan) imported matrixify-metaobjects-vehicles.csv (2 new Vehicle entries, all fields set, status Active), then matrixify-products-fitment.csv (product updated, Fitment set to both vehicles, vendor and tags kept). The files were sent with Matrixify's "Upload from URL" (merchants usually drop the file in the import box instead).