Event SpecsAutomotive

Automotive Event Spec

This page defines all standard automotive events for Datafly Signal — covering OEM marketing sites, dealer groups, online vehicle marketplaces, and aftersales/service portals. Implement these events to enable accurate server-side delivery to advertising and analytics platforms across the full funnel: discover, configure, qualify, convert, and retain.

💡

These event names come from Signal’s live automotive blueprints. The cross-vertical events (page, search, view_item_list, sign_up, login, generate_lead) reuse GA4’s recommended names where an e-commerce equivalent exists; automotive-specific actions use snake_case noun-then-action names (vehicle_viewed, test_drive_booked, trade_in_valued). Use these names verbatim — Signal’s blueprints map them to each vendor’s native event in the Vendor Mapping table, so renaming them breaks delivery.

All events are sent via datafly.track(). Properties are passed as a flat object in the second argument. Vehicles are identified by item_id (your internal stock ID or VIN-derived ID). Monetary amounts are numbers with a separate currency property using ISO 4217 codes.

⚠️

Never pass raw PII (email, phone, or name) into track() properties. Signal collects and hashes identifiers automatically via datafly.identify() and collected vendor_ids.


Browsing Events

vehicle_searched

Fired when a user submits a search against the vehicle inventory.

datafly.track('vehicle_searched', {
  search_term: 'phev suv under 60k',
  make: 'BMW',
  body_type: 'suv',
  condition: 'used',
  fuel_type: 'phev',
  transmission: 'automatic',
  min_price: 30000,
  max_price: 60000,
  min_year: 2021,
  max_mileage: 40000,
  postcode: 'SW1A',
  radius_miles: 50,
  results_count: 42
})
PropertyTypeRequiredDescription
search_termstringOptionalFree-text query if submitted
makestringOptionalManufacturer filter (e.g. BMW)
modelstringOptionalModel filter (e.g. 3 Series)
body_typestringOptionalsaloon, suv, hatchback, estate, coupe, etc.
conditionstringOptionalnew, used, certified_pre_owned
fuel_typestringOptionalpetrol, diesel, hybrid, phev, bev
transmissionstringOptionalmanual, automatic
min_price / max_pricenumberOptionalPrice range filters
min_year / max_yearnumberOptionalYear range filters
max_mileagenumberOptionalMileage cap (used vehicles)
postcodestringOptionalBuyer’s outward postcode for proximity search
radius_milesnumberOptionalSearch radius from postcode
results_countnumberOptionalNumber of results returned

Fired for a generic site search that is not scoped to vehicle inventory (e.g. searching help content, dealer locations, or news). For inventory searches, use vehicle_searched instead.

datafly.track('search', {
  search_term: 'nearest bmw dealer'
})
PropertyTypeRequiredDescription
search_termstringRequiredThe search term entered by the user

view_item_list

Fired when a user views a search results grid, inventory listing, or model range page.

datafly.track('view_item_list', {
  item_list_id: 'used-bmw-suv',
  item_list_name: 'Used BMW SUVs',
  items: [
    { item_id: 'STK-7421', item_name: 'BMW X3 xDrive30e', item_brand: 'BMW', item_category: 'SUV', price: 49995, index: 0 },
    { item_id: 'STK-7422', item_name: 'BMW X5 xDrive45e', item_brand: 'BMW', item_category: 'SUV', price: 64995, index: 1 }
  ]
})
PropertyTypeRequiredDescription
item_list_idstringOptionalMachine-readable identifier for the listing or collection
item_list_namestringOptionalHuman-readable name of the listing being browsed
itemsarrayOptionalArray of vehicle objects displayed (see Items Array Schema)

vehicle_viewed

Fired when a user opens a vehicle detail page (VDP). The vehicle-detail view is always vehicle_viewed, not view_item — Signal maps it to GA4 view_item / Meta ViewContent for you.

datafly.track('vehicle_viewed', {
  currency: 'GBP',
  value: 49995,
  items: [
    {
      item_id: 'STK-7421',
      item_name: 'BMW X3 xDrive30e',
      item_brand: 'BMW',
      item_category: 'SUV',
      item_variant: 'M Sport',
      condition: 'new',
      fuel_type: 'phev',
      year: 2024,
      mileage: 10,
      price: 49995,
      currency: 'GBP',
      dealer_id: 'D-1138'
    }
  ]
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code (e.g. GBP, USD)
valuenumberOptionalList or sticker price of the vehicle
itemsarrayOptionalArray containing the viewed vehicle (see Items Array Schema)

view_promotion

Fired when a promotional offer or finance banner is visible to the user.

datafly.track('view_promotion', {
  promotion_id: 'PCP-SUMMER24',
  promotion_name: '0% APR Summer Event',
  creative_name: 'summer-apr-hero.jpg',
  creative_slot: 'homepage-hero'
})
PropertyTypeRequiredDescription
promotion_idstringOptionalIdentifier for the promotion
promotion_namestringOptionalHuman-readable name of the promotion
creative_namestringOptionalName or URL of the creative asset shown
creative_slotstringOptionalSlot or placement where the promotion appeared

select_promotion

Fired when a user clicks a promotional offer or finance banner.

datafly.track('select_promotion', {
  promotion_id: 'PCP-SUMMER24',
  promotion_name: '0% APR Summer Event',
  creative_name: 'summer-apr-hero.jpg',
  creative_slot: 'homepage-hero'
})

Accepts the same properties as view_promotion.


Engagement Events

vehicle_saved

Fired when a user favourites or saves a vehicle to return to later.

datafly.track('vehicle_saved', {
  currency: 'GBP',
  value: 49995,
  items: [
    { item_id: 'STK-7421', item_name: 'BMW X3 xDrive30e', item_brand: 'BMW', item_category: 'SUV', price: 49995 }
  ]
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code
valuenumberOptionalMonetary value of the saved vehicle
itemsarrayOptionalArray containing the saved vehicle (see Items Array Schema)

vehicle_compared

Fired when a user adds a vehicle to a side-by-side comparison.

datafly.track('vehicle_compared', {
  compared_count: 3,
  items: [
    { item_id: 'STK-7421', item_name: 'BMW X3 xDrive30e', item_brand: 'BMW' },
    { item_id: 'STK-7422', item_name: 'BMW X5 xDrive45e', item_brand: 'BMW' },
    { item_id: 'STK-9001', item_name: 'Audi Q5 TFSI e', item_brand: 'Audi' }
  ]
})
PropertyTypeRequiredDescription
compared_countnumberOptionalNumber of vehicles currently in the comparison
itemsarrayOptionalArray of vehicles in the comparison (see Items Array Schema)

brochure_downloaded

Fired when a user downloads a spec sheet or brochure (PDF).

datafly.track('brochure_downloaded', {
  brochure_id: 'BR-X3-2024',
  item_id: 'STK-7421',
  make: 'BMW',
  model: 'X3',
  language: 'en'
})
PropertyTypeRequiredDescription
brochure_idstringOptionalInternal ID for the brochure asset
item_idstringOptionalVehicle the brochure is for, if scoped
makestringOptionalManufacturer
modelstringOptionalModel
languagestringOptionalBrochure language (ISO 639-1)

configure_vehicle

Fired when a user builds or customises a vehicle in a configurator (selecting trim, options, colour). A strong intent signal for new-vehicle marketing.

datafly.track('configure_vehicle', {
  make: 'BMW',
  model: 'X3',
  trim: 'M Sport',
  exterior_colour: 'Phytonic Blue',
  configured_price: 54320,
  currency: 'GBP',
  options: ['panoramic_roof', 'tech_pack', 'tow_bar']
})
PropertyTypeRequiredDescription
makestringRequiredManufacturer of the configured vehicle
modelstringOptionalModel being configured
trimstringOptionalTrim or variant selected
exterior_colourstringOptionalSelected exterior colour/paint
configured_pricenumberOptionalTotal price of the build as configured
currencystringOptionalISO 4217 currency code
optionsarrayOptionalList of selected option/pack identifiers

Qualification Events

finance_quote_requested

Fired when a user runs the finance/lease calculator and a monthly payment is shown.

datafly.track('finance_quote_requested', {
  item_id: 'STK-7421',
  finance_type: 'pcp',
  term_months: 36,
  deposit: 5000,
  annual_mileage: 10000,
  monthly_payment: 489,
  apr: 6.9,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
item_idstringOptionalVehicle the calculation is for
finance_typestringOptionalpcp, hp, lease, cash
term_monthsnumberOptionalTerm length in months
depositnumberOptionalInitial deposit amount
annual_mileagenumberOptionalAgreed annual mileage
monthly_paymentnumberOptionalCalculated monthly payment shown
aprnumberOptionalRepresentative APR shown
currencystringOptionalISO 4217 currency code

trade_in_valued

Fired when a user completes a part-exchange / trade-in valuation.

datafly.track('trade_in_valued', {
  current_vehicle_make: 'Ford',
  current_vehicle_model: 'Focus',
  current_vehicle_year: 2018,
  current_vehicle_mileage: 42000,
  valuation_amount: 8750,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
current_vehicle_makestringOptionalMake of the trade-in vehicle
current_vehicle_modelstringOptionalModel of the trade-in vehicle
current_vehicle_yearnumberOptionalYear of the trade-in vehicle
current_vehicle_mileagenumberOptionalOdometer reading of the trade-in
valuation_amountnumberOptionalCalculated trade-in value
currencystringOptionalISO 4217 currency code

Lead & Conversion Events

generate_lead

Fired when a user submits a high-intent lead form — a “request a quote”, a callback request, or any enquiry that creates a qualified lead. This is a primary automotive conversion event for ad platforms.

datafly.track('generate_lead', {
  lead_type: 'callback',
  item_id: 'STK-7421',
  dealer_id: 'D-1138',
  finance_type: 'pcp',
  value: 489,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
lead_typestringOptionalfinance_quote, callback, reserve, enquiry
item_idstringOptionalVehicle the lead is scoped to, if any
dealer_idstringOptionalDealer the lead is routed to
finance_typestringOptionalpcp, hp, lease, cash (when finance-related)
valuenumberOptionalEstimated lead value (e.g. monthly payment or vehicle price)
currencystringOptionalISO 4217 currency code
⚠️

Do not include the customer’s email, phone, or name in generate_lead properties. Signal hashes identifiers server-side from the collected identity and datafly.identify() traits.


dealer_contacted

Fired when a user submits an enquiry or contact form to a dealer.

datafly.track('dealer_contacted', {
  dealer_id: 'D-1138',
  item_id: 'STK-7421',
  enquiry_type: 'availability',
  channel: 'form'
})
PropertyTypeRequiredDescription
dealer_idstringRequiredThe dealer being contacted
item_idstringOptionalSpecific vehicle, if the enquiry is scoped
enquiry_typestringOptionalprice, availability, finance, general
channelstringOptionalform, whatsapp, live_chat, callback, phone

test_drive_booked

Fired when a user books a test drive — a high-value lead event.

datafly.track('test_drive_booked', {
  item_id: 'STK-7421',
  dealer_id: 'D-1138',
  appointment_at: '2026-05-12T10:30:00Z',
  make: 'BMW',
  model: 'X3',
  value: 49995,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
item_idstringRequiredVehicle being test-driven
dealer_idstringOptionalDealer hosting the test drive
appointment_atstringOptionalISO 8601 timestamp of the booked slot
makestringOptionalManufacturer
modelstringOptionalModel
valuenumberOptionalList price of the vehicle
currencystringOptionalISO 4217 currency code

vehicle_reserved

Fired when a user places a refundable deposit to reserve a vehicle online.

datafly.track('vehicle_reserved', {
  item_id: 'STK-7421',
  dealer_id: 'D-1138',
  deposit: 99,
  value: 49995,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
item_idstringRequiredVehicle being reserved
dealer_idstringOptionalDealer holding the reservation
depositnumberOptionalReservation deposit amount taken
valuenumberOptionalList price of the reserved vehicle
currencystringOptionalISO 4217 currency code

purchase

Fired when a vehicle order is completed online (or recorded as sold). This is the primary revenue conversion — ensure it fires reliably.

datafly.track('purchase', {
  transaction_id: 'ORD-10042',
  value: 49995,
  currency: 'GBP',
  finance_type: 'pcp',
  dealer_id: 'D-1138',
  affiliation: 'BMW Park Lane',
  items: [
    {
      item_id: 'STK-7421',
      item_name: 'BMW X3 xDrive30e',
      item_brand: 'BMW',
      item_category: 'SUV',
      item_variant: 'M Sport',
      price: 49995,
      quantity: 1,
      currency: 'GBP'
    }
  ]
})
PropertyTypeRequiredDescription
transaction_idstringRequiredUnique order identifier — used for deduplication
valuenumberOptionalTotal order value
currencystringOptionalISO 4217 currency code
finance_typestringOptionalpcp, hp, lease, cash
dealer_idstringOptionalDealer that fulfilled the order
affiliationstringOptionalStore or dealer that generated the order
itemsarrayOptionalVehicle(s) purchased (see Items Array Schema)
⚠️

Always send transaction_id on purchase events for deduplication. Platforms like Meta CAPI and GA4 use the transaction ID to prevent double-counting alongside browser-side events.


Aftersales Events

service_appointment_booked

Fired when an existing customer books a service, MOT, or repair appointment.

datafly.track('service_appointment_booked', {
  dealer_id: 'D-1138',
  item_id: 'WBA-VIN-XYZ',
  service_type: 'mot',
  appointment_at: '2026-06-01T09:00:00Z',
  estimated_cost: 180,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
dealer_idstringOptionalDealer where the service is booked
item_idstringOptionalThe customer’s own vehicle (VIN or internal ID)
service_typestringOptionalroutine, mot, recall, repair
appointment_atstringOptionalISO 8601 timestamp of the booked slot
estimated_costnumberOptionalQuoted cost
currencystringOptionalISO 4217 currency code

Account Events

sign_up

Fired when a user completes account registration (e.g. for a saved-search or “My Garage” account).

datafly.track('sign_up', {
  method: 'email'
})
PropertyTypeRequiredDescription
methodstringOptionalRegistration method (e.g. email, google, apple)

login

Fired when a user signs in to their account.

datafly.track('login', {
  method: 'email'
})
PropertyTypeRequiredDescription
methodstringOptionalLogin method (e.g. email, google, apple)

Items Array Schema

💡

Several events accept an items array, where each entry is a vehicle. Each object can include the following properties. The items[] array uses GA4-style field names. Signal’s server-side blueprints automatically transform these to vendor-specific formats (e.g., Meta’s contents[] with id/title fields).

PropertyTypeDescription
item_idstringInternal stock ID or VIN-derived listing ID
item_namestringVehicle display name (e.g. BMW X3 xDrive30e)
item_brandstringManufacturer / make
item_categorystringBody type or category (e.g. SUV, Saloon)
item_variantstringTrim or variant (e.g. M Sport)
conditionstringnew, used, certified_pre_owned
fuel_typestringpetrol, diesel, hybrid, phev, bev
yearnumberModel year
mileagenumberOdometer reading (used vehicles)
pricenumberList or sticker price
quantitynumberNumber of units (typically 1 for vehicles)
indexnumberPosition in list (0-indexed, relevant in list/search contexts)
currencystringISO 4217 currency code
dealer_idstringID of the dealership listing the vehicle
item_list_idstringIdentifier of the list the vehicle was shown in
item_list_namestringName of the list the vehicle was shown in

Common Context

All automotive events benefit from these properties on every event (set via datafly.identify() or page-level config):

PropertyTypeDescription
customer_idstringStable internal customer ID once identified
dealer_group_idstringThe franchise/group running the site
regionstringSales region or country
currencystringDefault currency for the site

For platform identifiers (Meta, Google Ads, etc.), Signal handles those automatically via collected vendor_ids — you don’t need to send them on every event.


Vendor Mapping

The table below shows how Datafly Signal maps automotive events to the native event names expected by each vendor’s server-side API. Signal uses these snake_case event names as its canonical format, and blueprints handle the transformation to vendor-specific payloads.

Signal EventGA4Meta CAPITikTok Events API
vehicle_searchedsearchSearchSearch
searchsearchSearchSearch
view_item_listview_item_listViewContentViewContent
vehicle_viewedview_itemViewContentViewContent
view_promotionview_promotion(custom)(custom)
select_promotionselect_promotion(custom)(custom)
vehicle_savedadd_to_wishlistAddToWishlistAddToWishlist
vehicle_compared(custom)(custom)(custom)
brochure_downloaded(custom)(custom)Download
configure_vehicle(custom)CustomizeProduct(custom)
finance_quote_requestedgenerate_leadLeadSubmitForm
trade_in_valued(custom)(custom)(custom)
generate_leadgenerate_leadLeadSubmitForm
dealer_contactedgenerate_leadContactContact
test_drive_bookedgenerate_leadSchedule(custom)
vehicle_reservedadd_to_cartInitiateCheckoutInitiateCheckout
purchasepurchasePurchaseCompletePayment
service_appointment_bookedgenerate_leadSchedule(custom)
sign_upsign_upCompleteRegistrationCompleteRegistration
loginlogin(custom)(custom)