Recommendations event properties

Recommendations events track how items are served and interacted with across each request. Each event includes properties that record the interaction type, the source that filled each slot, and how many items each source contributed—giving you the data to build accurate analytics dashboards and diagnose recommendation quality.

Event properties reference

Properties table

PropertyDescriptionData type
actionType of user interaction tracked for the eventString
recommendation_sourceSource that filled each individual slot. While the count properties give aggregate totals, recommendation_source shows which source filled each specific slot.String
model_personalized_countPersonalized recommendations returned by the primary modelInteger
personalized_countPersonalized recommendations in the eventInteger
model_non_personalized_countNon-personalized recommendations from primary models, such as top sellersInteger
model_fallback_countItems from the structured backup when the primary model can't fill the full requestInteger
fallback_countItems from random catalog selection when the primary model and structured backup fall shortInteger
non_personalized_countTotal non-personalized items (non-personalized model + structured backup)Integer

Property details and relationships

action

Action types:

  • click: User clicked a recommended item.
  • impression: Recommendations were shown to the user.
  • purchase: User purchased a recommended item.
  • view: User viewed the recommended items.

How to use: Use the action property to distinguish different user interactions in your analytics and reporting.

recommendation_source

Values:

ValueTierCorresponds to
model_personalizedTier 1—primary AI modelpersonalized_count
model_non_personalizedTier 1—primary non-personalized modelmodel_non_personalized_count
model_fallbackTier 2—precomputed popular or top-interacted itemsmodel_fallback_count
fallbackTier 3—random catalog fillfallback_count

How to use: Use recommendation_source alongside the count properties to see both the aggregate split and the per-slot breakdown.

model_personalized_count and personalized_count

Key relationship: These fields always have the same value.

Why both exist: Both properties exist for backward compatibility after a system update. Both appear in all event data.

model_non_personalized_count

Example: A "top sellers" or "most viewed" model.

Impact: Adds to non_personalized_count.

model_fallback_count

When it's used: Used when the primary model can't return enough items to fill the request—for example, by serving precomputed top-interacted or popular items.

When it's zero: model_fallback_count is zero in two cases:

  • The primary model returned enough items to fill the full request.
  • The template has no Tier 2 fallback. The following templates skip Tier 2 and go straight from the primary model to random selection:
TemplateFallback behavior
Similar attributesPrimary→random
Filter basedRandom is the primary engine
Recently viewedControlled by fill_with_random only

Impact: Adds to non_personalized_count.

fallback_count

When it's used: Used when the primary model and structured backup can't fill the full request.

Disable random fill: Set fill_with_random=false to prevent random items from being added when not enough results are available.

What a high value can indicate:

  • Insufficient data—not enough user or item data for the model to generate results.
  • Overly strict catalog filters—precomputed and interaction-based templates fetch a pool of item IDs, then apply static and dynamic filters. If too few items pass, Tier 3 random fill completes the request—even when the primary model has results.

Key difference from model_fallback_count: fallback_count is true random selection. model_fallback_count uses structured, model-based backup logic.

non_personalized_count

How it's calculated:

non_personalized_count = model_non_personalized_count + model_fallback_count

fallback_count isn’t included in this total. See Understand count relationships for the full formula.

How to use: Use this property to measure total non-personalized output in recommendations events.

Understand count relationships

Use these formulas when building analytics on recommendations event data.

Non-personalized items per event:

non_personalized_count = model_non_personalized_count + model_fallback_count

Total items served per event:

total = personalized_count + non_personalized_count + fallback_count

Because fallback_count isn’t included in non_personalized_count, add it separately to get the full total.

© Bloomreach, Inc. All rights reserved.