Skip to main content

BMW Stolo Source

Status (2026-07-03): All mappings below are implemented in sources/stolo.py (_StoloVehicleEntity). BQ-backfill extractor not yet built — the "BQ column" column is the target schema for it.

Stolo is the primary EU inventory feed. EU markets use Stolo (UPPER_SNAKE_CASE enums). BQ US InvSearch uses its own coding (single-letter codes, Title Case strings, short numeric codes). Natural-language text fields (bodystyle_name, modeldescription) are consistent across systems; coded fields are not.

BmwInventoryEntity field mapping

Columns: BQ (source of truth) | Entity field | Stolo path | ZA path | BQ backfill | ║ | Stolo 1 (1-series WBA31GE0507T72918) | BQ ✓ 1 | Stolo 2 (X5 WBA21EU0609307369) | BQ ✓ 2

Legend: ? = path needs verification · ⚠️ = known issue · ✓ = direct mapping · [first locale] = localized object, extract first value · ✅ N = BQ check passed, N matching rows · ❌ fmt = concept maps but value format differs · ❌ EU = EU-only value (model not sold in US) · — = not checked / not applicable

Manual check procedure: For each row, 3 sample values were pulled from each source (Stolo fixture, BQ public_invsearchvehicles, ZA fixture) and compared by eye. The check validates that the mapped path yields values of the correct concept and format — not that the exact value appears across sources (EU and US cars differ). A ✓ in the manual check column means the mapping was confirmed by a human reviewer.


Existing entity fields

BQ columnEntity fieldStolo pathZA pathBQ backfillStolo 1BQ ✓ 1Stolo 2BQ ✓ 2manual checkcode note
vinvinvehicle.ordering.productionData.vin17vinWBA31GE0507T72918❌ EUWBA21EU0609307369❌ EU
modelcodemanufacturer_codevehicle.vehicleSpecification.modelAndOption.model.agModelCodemanufacturerCode31GE❌ EU21EU❌ EU
modeldescriptionmodel_descriptionvehicle.vehicleSpecification.modelAndOption.model.modelNametitle116❌ EUX5 xDrive40i✅ 15,155
modelrangemodel_rangevehicle.vehicleSpecification.modelAndOption.marketingModelRange1_F40❌ EUX5_G05❌ fmt (BQ: G05, 551k)different format (Stolo: X5_G05, BQ: G05)
modelyearmodel_yearmodelYearStolo: no model year field — will be null for Stolo-sourced records
bodystyle_codebody_typevehicle.vehicleSpecification.modelAndOption.bodyTypebodyTypeSPORTS_HATCH❌ EUSPORT_ACTIVITY_VEHICLE❌ fmt (BQ: 05, 1.79M)different format (Stolo: named enum e.g. SPORT_ACTIVITY_VEHICLE, BQ: numeric code e.g. 05; ZA: 2-letter abbreviation e.g. SH)
fueltypefuel_typevehicle.vehicleSpecification.modelAndOption.baseFuelTypefuelTypeGASOLINE❌ fmt (BQ: O, 2.93M)GASOLINE❌ fmt (BQ: O, 2.93M)different format (Stolo: GASOLINE, BQ: O; ZA: Petrol)
enginedrivetype_namedrive_typevehicle.vehicleSpecification.modelAndOption.marketingDriveTypedriveTrainSDRIVE❌ EUXDRIVE❌ fmt (BQ: xDrive, 2.36M)different format (Stolo: XDRIVE, BQ: xDrive; BQ also combines drivetrain+marketing e.g. RWD/sDrive; ZA: Rear Wheel Drive)
exteriorgenericcolorexterior_colorvehicle.vehicleSpecification.modelAndOption.color.clusterFineexteriorColourWHITE❌ fmt (BQ: White, 350k)BLACK❌ fmt (BQ: Black, 350k)different format (Stolo: WHITE, BQ: White); ZA exteriorColour gives specific paint name (Skyscraper Grey metallic), not a generic cluster — no better ZA field exists
interiorgenericcolorinterior_colorvehicle.vehicleSpecification.modelAndOption.upholsteryColor.upholsteryColorClusterinteriorColourBLACK❌ fmt (BQ: Black, 519k)BLACK❌ fmt (BQ: Black, 519k)different format (Stolo: BLACK, BQ: Black); ZA interiorColour gives specific upholstery name (Veganza perforated Black), not a generic cluster — no better ZA field exists
interiorupholsterytypeinterior_codevehicle.vehicleSpecification.modelAndOption.upholsteryTypeinteriorCodeLEATHERETTE❌ fmt (BQ: Leatherette, 314k)LEATHERETTE❌ fmt (BQ: Leatherette, 314k)different format (Stolo: LEATHERETTE, BQ: Leatherette; ZA: option code e.g. KUSW)
totalmsrppricevehicle.price.grossListPricecashPaymentOption.totalCost40610.02119350.01
mileagemileagemileageStolo: no mileage field — will be null for Stolo-sourced records
code (options)feature_refs[].codevehicle.vehicleSpecification.modelAndOption.equipments (keys)S05DM, ...

New fields to add

BQ columnEntity fieldStolo pathZA pathBQ backfillStolo 1BQ ✓ 1Stolo 2BQ ✓ 2manual checkcode note
productionnumbernewvehicle.ordering.productionData.orderNumber2328330❌ EU2412362❌ EU
series_codenewvehicle.vehicleSpecification.modelAndOption.series.name1❌ EUX✅ 639,038
series_namenewvehicle.vehicleSpecification.modelAndOption.retailSeries.name1❌ EUX❌ fmt (BQ: X5, 639k)different format (Stolo: series letter e.g. X, BQ: full name e.g. X5)
bodystyle_namenewvehicle.vehicleSpecification.modelAndOption.bodyTypeDescription [first locale]Hatch Back❌ EUSports Activity Vehicle✅ 1,792,477
basemsrpnewvehicle.price.grossModelPrice3290094600
create_datenewvehicle.ordering.orderData.orderEntryDate2025-03-062025-10-13different format (Stolo: date 2025-03-06, BQ: datetime 2023-06-01 19:27:04)
actualproductiondatenewvehicle.ordering.productionData.productionDate2025-06-242025-12-05
productionweeknewvehicle.ordering.productionData.confirmedProductionWeek2025-06-272025-12-12different format (Stolo: full date of week start e.g. 2025-06-27, BQ: week number e.g. 27) — Stolo value is more informative; week number can be derived downstream
endofproductionnewvehicle.ordering.productionData.endOfProduction2025-06-242025-12-05different format (Stolo: date, BQ: datetime)
dealerestarrivaldatenewvehicle.ordering.distributionData.expectedDeliveryDate2025-07-042026-01-09
dealeractualarrivaldatenewvehicle.ordering.distributionData.arrivalDate2025-07-022026-01-20
ordertypenewvehicle.ordering.orderData.orderType08❌ fmt (BQ: descriptive string e.g. Priority Stock)different format (Stolo: integer code, BQ: descriptive string)
eventidnewvehicle.ordering.productionData.orderStatus198198confirmed match: Stolo orderStatus 3-digit codes (190/195/198) = BQ eventid 3-digit logistics event codes
dealeridnewvehicle.ordering.distributionData.shippingDealerNumber033252❌ EU000116❌ EUWas destinationLocationDomesticDealerNumber; that field collapses to the national importer (dealer class VG) in import markets (JP → single 000210 "BMW Japan Corporation"). shippingDealerNumber is the physical retail outlet (class EH) in every market and is identical to the domestic field in home-network markets (DE); switched globally.
dealernamenewvehicle.ordering.distributionData.shippingDealerNameCloppenburg GmbH❌ EUAuto-Leebmann GmbH❌ EUWas destinationLocationDomesticDealerName; switched to shippingDealerName alongside dealerid.
name (options)newvehicle.vehicleSpecification.modelAndOption.equipments[code].name [first locale]Parking Assistant
optiontype (options)newvehicle.vehicleSpecification.modelAndOption.equipments[code].typeOPTIONdifferent format (Stolo: OPTION, BQ: O)
isstandard (options)newvehicle.vehicleSpecification.modelAndOption.equipments[code].standardtruedifferent format (Stolo: bool, BQ: string "false")
ispackage (options)newvehicle.vehicleSpecification.modelAndOption.equipments[code].packageFlag [str "1"=true, "0"=false]falsedifferent format (Stolo: "0"/"1" string, BQ: string "false"/"true")
enginedrivetype_codenewvehicle.vehicleSpecification.modelAndOption.driveTypeFRONTALL_WHEELdifferent format (Stolo: English enum e.g. ALL_WHEEL; BQ: German abbreviation e.g. AR = AllRad, HR = HinterRad, VR = VorderRad — maps as ALL_WHEELAR, FRONTVR, REARHR)
transmissiontypenewvehicle.vehicleSpecification.modelAndOption.transmissionAUTOMATIC❌ fmt (BQ: A, 1.91M)AUTOMATIC❌ fmt (BQ: A, 1.91M)different format (Stolo: AUTOMATIC, BQ: A)
hybridflagnewvehicle.vehicleSpecification.modelAndOption.is48Volt [bool]falsetruestored as boolean; uncertain concept match: Stolo is48Volt is specific to 48V mild hybrid (bool), BQ hybridflag is a string code e.g. NOHY
sportsflagnewvehicle.vehicleSpecification.modelAndOption.sportsFlag [bool]nullnullstored as boolean; Stolo returns null; concept same, both null/false for standard vehicles
soldnewvehicle.salesProcess.type ["AVAILABLE"=false, "SOLD"=true]falsefalsedifferent format (Stolo: derived from enum, BQ: string "true"/"false")
usednewvehicle.ordering.orderData.usageState ["NEW"=false, "USED"=true]falsefalsedifferent format (Stolo: derived from enum NEW/USED, BQ: string "true"/"false")
prioritycodenewvehicle.ordering.productionData.productionPriority54different format (Stolo: integer, BQ: string)

No source found

BQ columnNotes
orderstatusNo Stolo/ZA equivalent — BQ uses a separate 0–7 scale (1=in stock, 0=sold) unrelated to eventid
codeInternal record code
stocknumberDealer stock number
internetprice
invoiceprice
retailvalue
saleprice
askingprice
wholesaleprice
priceblocked
startofproduction
estimateddateofarrival
estimateddateofdeparture
actualdateofdeparture
invoicedate
releasetocarrierdate
vehicleshipdate
solddate
lotdate
daysonlot
update_date
last_modified_date
eventdescription
darstatus
dmsstatus
demonstrator
stopsale
transferflag
transferfrom
altshipto
retailtype
vehicleretailtype
environment
dealerlocation
dealermarket
dealerregion
dealernotes
dealeraddress
dealeremail
dealerphone
powertrain
transmissiondescription
enginedisplacement
horsepower
acceleration
milespergallon
milespergalloneqv
grossweight
doors
ispaint
isupholstery
iswheel
istrim
isaccessory
price (options)
wholesaleprice (options)