PADDOCK.

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:

  1. Put your data into one simple spreadsheet, the fitment sheet.
  2. Open converter.html in your browser and drop the sheet. It checks every row and makes the import files.
  3. 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

  1. Double-click converter.html. It opens in your browser.
  2. Drop your fitment sheet in box 1.
  3. 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).
  4. Read the result: - Errors (red), with the row number of your spreadsheet: a year that isn't a year, year_to before year_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.
  5. 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

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.

Drop your product export in the converter (box 2): it makes shopify-products-fitment.csv.

  1. Shopify admin → Products → Import → choose shopify-products-fitment.csv.
  2. Tick Overwrite products with matching handles. Untick "Publish new products to all sales channels".
  3. 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.

  1. Shopify admin → Products → Import → choose the file → tick Overwrite products with matching handles → Upload and preview → Import.
  2. 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).