Importing fitment data into Shopify by CSV sounds like a five-minute job until your first upload silently drops half the rows or maps a 2018 Camry to the wrong trim. If you sell auto parts, the fitment file is your catalog’s backbone, and a sloppy CSV import becomes wrong-part returns, chargebacks, and a support inbox full of “this didn’t fit my car.” This guide walks through how Shopify fitment data CSV import actually works, where it breaks, and how to structure your file so a year/make/model filter can read it cleanly.
What “fitment data” means in a Shopify CSV
Fitment data is the table that links each product to the vehicles it fits. At minimum every row pairs a part with a vehicle defined by year, make, and model. Most real catalogs go further and add trim, engine, drive type, and position (front/rear, left/right) because a brake pad that fits a base Civic may not fit the Si.
Shopify itself has no native concept of vehicle fitment. The platform stores products, variants, tags, and metafields, but it does not know that “2015 Toyota Tacoma” is a vehicle. That gap is why fitment lives in one of three places: product tags, metafields, or a dedicated fitment app’s own database. Your CSV structure depends entirely on which of those three you target.
The three ways fitment CSVs map to Shopify
1. Tag-based fitment
The simplest method writes each vehicle into the product’s tag list, often formatted like 2015_Toyota_Tacoma or ymm:2015:Toyota:Tacoma. A filter app then reads those tags to build the dropdown. Tag-based imports are easy to generate from a spreadsheet, but Shopify caps products at 250 tags each. A universal floor mat fitting 4,000 vehicles cannot be expressed in tags, so this approach only works for parts with narrow application lists.
2. Metafield-based fitment
Metafields store fitment as structured JSON or list values attached to a product. This scales past the tag limit and keeps the data out of the customer-facing tag cloud. The trade-off is that your CSV has to serialize cleanly into the metafield’s namespace, key, and type, and Shopify’s native CSV importer does not handle complex metafield lists well. Most sellers use the app’s own importer or a tool like Matrixify for this path.
3. App-database fitment
Dedicated fitment apps keep vehicle data in their own database and link it to products by SKU or product handle. Your CSV uploads to the app, not to Shopify’s product importer. This is the only model that comfortably handles universal parts, ACES-style data, and millions of part-to-vehicle rows. The CSV format is defined by the app, which is why reading its template documentation before you build the file saves hours.
Rule of thumb: if any single part fits more than ~200 vehicles, skip tags entirely and use an app that stores fitment in its own database. Tag-based CSV imports break quietly at scale, and the failure looks like missing products rather than an error message.
How to structure a fitment CSV that imports cleanly
Whatever target you choose, a clean source file follows the same discipline. Build it once, correctly, and every downstream import gets easier.
- One vehicle per row. Resist the urge to cram multiple years into a single cell as “2015-2018.” Expand ranges into individual rows so each row is one part fitting one specific year/make/model. This is how ACES data is structured and how filters expect to read it.
- A stable join key. Every row needs a column that links back to a Shopify product, almost always the SKU or the product handle. SKUs are safer because handles change when you rename a product.
- Consistent make and model spelling. “Chevy” and “Chevrolet” become two separate dropdown entries. Pick the canonical spelling, usually the manufacturer’s official name, and normalize the whole file to it before import.
- Separate columns for each attribute. Year, make, model, trim, engine, and position each get their own column. Concatenated fields like “2015 Toyota Tacoma 4WD” are far harder to validate and de-duplicate.
- UTF-8 encoding, no stray characters. Save as UTF-8 CSV. Smart quotes, em dashes, and trailing spaces from Excel are the most common cause of rows that import as the wrong vehicle or fail silently.
The import workflow, step by step
- Export your existing catalog first. Pull a current Shopify product export so you have the exact SKUs and handles to join against. Importing fitment that references a SKU which does not exist yet produces orphan rows.
- Build the fitment file in a spreadsheet. Use the one-vehicle-per-row structure above. Keep a master copy; never edit the live import file directly.
- Validate before you upload. Sort by make and model and scan for spelling drift. Run a quick check that every SKU in the fitment file exists in your catalog export.
- Match the target template. If you import to an app, download its CSV template and align your column headers exactly. Header mismatches are the number-one cause of failed app imports.
- Test with a small batch. Upload 20 to 50 rows first, confirm the year/make/model filter shows the right vehicles on a product page, then run the full file.
- Re-test the storefront. Pick three known parts and confirm the dropdown returns them for the correct vehicles and excludes the wrong ones.
Why CSV imports fail (and how to prevent it)
Most failed fitment imports trace back to a handful of repeatable mistakes:
- Year ranges left unexpanded. “2015-2018” in one cell either imports as a single broken vehicle or gets ignored. Expand it.
- Mismatched join keys. A SKU typo or a renamed handle orphans the row. The part exists, the fitment exists, but they never connect.
- Tag limit overflow. Tag-based imports stop adding vehicles after 250 tags with no error, so wide-application parts silently lose coverage.
- Encoding corruption. Non-UTF-8 files turn “Mazda” or accented model names into garbage that no filter can match.
- Duplicate rows. The same part-vehicle pair imported twice inflates your data and can slow filter queries.
A validation pass that checks for these five issues before upload prevents the large majority of import problems.
CSV import versus a managed fitment app
Raw CSV import gives you full control and zero recurring cost, but you own every step: sourcing the data, normalizing spelling, expanding ranges, validating join keys, and re-testing after each catalog change. For a store with a few hundred SKUs and narrow application lists, that is manageable. For a store carrying universal parts or pulling from ACES databases, the manual overhead compounds fast.
A fitment app such as Aculogi handles the import path and the storefront filter together, storing fitment in its own database so universal parts and large vehicle lists are not constrained by Shopify’s tag limit. The CSV still matters, because clean source data imports cleanly and messy data imports messily regardless of the tool, but the app removes the tag-limit ceiling and the storefront wiring. If you are weighing the build-versus-buy decision, our guide to choosing a Shopify vehicle fitment app walks through the trade-offs, and the ACES fitment data on Shopify guide covers importing industry-standard data without breaking your catalog.
Keeping fitment data current after the first import
Fitment is not a one-time upload. New model years ship every fall, you add and discontinue parts, and manufacturers revise applications. Plan for incremental imports: keep your master spreadsheet as the single source of truth, append new rows there, and re-import deltas rather than rebuilding the whole file. Whenever you import a fresh batch, run the same small-batch storefront test before trusting the full update. A fitment catalog that drifts out of date produces the exact wrong-part returns the filter was meant to prevent.
Frequently asked questions
Can I import fitment data using Shopify’s native CSV importer?
Only for simple tag-based fitment, and even then you are limited to 250 tags per product. Shopify’s native importer does not handle structured fitment lists or app databases. For anything beyond narrow application parts, you import through a fitment app’s own CSV tool or a bulk tool like Matrixify.
What columns does a fitment CSV need?
At minimum: a join key (SKU or handle), year, make, and model. Most real catalogs add trim, engine, drive type, and position so the filter can distinguish variants of the same vehicle. Each attribute belongs in its own column, and each row should represent one part fitting one vehicle.
How do I handle a part that fits a range of years?
Expand the range into one row per year. A part fitting 2015 through 2018 becomes four rows. Year ranges packed into a single cell either import incorrectly or get skipped, and one-vehicle-per-row is the structure year/make/model filters are built to read.
Why did my fitment import succeed but the filter shows nothing?
Almost always a join-key mismatch. The fitment rows reference a SKU or handle that does not match your live products, so the data imports but never links to a product. Export your catalog, confirm every SKU in the fitment file exists, and re-import.
What’s the best file format for a fitment CSV?
UTF-8 encoded CSV with comma delimiters and a single header row. Avoid exporting straight from Excel without checking encoding, since smart quotes and stray characters corrupt make and model names that the filter then cannot match.
