Fitment mapping & synonyms
Connection
Section titled “Connection”There is one file, so the Action column determines what we do: replace or add.
Add(synonyms)Replace(mapping)
It is connected through vehicle_mapping in the sources.
Synonyms
Section titled “Synonyms”We can apply the fitments of one vehicle to another vehicle.

In this example, J-4000 will be compatible with all the same products as the vehicles on the left (J-4500/4600/4700).
Mapping
Section titled “Mapping”The same thing, but the vehicle on the left is replaced by the vehicle on the right:

The year cannot be mapped to a different year. There is no YearFrom / YearTo. Use YearRange only, as the match key for which years the row applies to.
Wildcards
Section titled “Wildcards”* in a FieldFrom cell and in YearRange means “match any value at this position”. An empty From cell is not a wildcard - it matches only an empty / Universal value.
| From / YearRange | Matches |
|---|---|
* | Any fitment value for that field (or any year, for YearRange) |
Empty FieldFrom | Only a blank / Universal value - not “any” |
| Concrete value | That value only |
YearRange accepts * for any year, or a normal year range such as 2020-2021. A row with an empty YearRange is skipped.
From / To cells
Section titled “From / To cells”After a row matches, FieldTo decides the output:
| FieldFrom | FieldTo | Result |
|---|---|---|
* | Empty | Leave the current value |
* | Populated | Overwrite with FieldTo |
| Empty | Populated | FieldTo |
| Empty | Empty | Empty string |
| Populated | Empty | Universal |
| Populated | Populated | FieldTo |
* in a To cell also leaves the current field value (the original, or whatever a previous mapping in the same pass already wrote).
In layman’s terms, for a specific field such as Submodel:
*=> empty = leave it as-is on every matching vehicle*=> a value = set that value on every matching vehicle- Empty => a value = only blank/Universal submodels become that value
- Empty => empty = force blank
- A value => empty = that specific submodel becomes Universal
- A value => another value = swap one specific submodel for another
Matching
Section titled “Matching”Each row is matched using that row’s From columns. You do not have to fill every column.
- Without
*, a shorter row still applies to more specific vehicles. A Make-only row matches every model of that make. - With
*, filled cells must match the vehicle exactly;*matches any value in that column.
If several rows match the same vehicle, the most specific ones are used (more filled-in From values beat more *s). If they are equally specific, all of them are applied, one after another.
That lets a mapping collapse onto wildcard rows instead of listing every year and model. For example a RideType cleanup can be one row (YearRange=*, RideTypeFrom=Street Motorcycle, RideTypeTo=Street, * in the other From/To fields) rather than a row per year/model.
The mapped values are applied at index time. After changing vehicle_mapping, reindex the store.