Efficient event-based Engagement usage
This guide covers how to keep your implementation efficient on event-based pricing by minimizing unnecessary event processing and storage.
Bloomreach supports multiple pricing models. If you're not sure which one applies to your contract, see Which pricing model am I on?
-
On event-based pricing, monthly processed events (MPE) and maximum stored events (MES) are your commercial meters. This guide covers how to stay within those limits.
-
On profile-based pricing (introduced May 2026), billing is based on billable profiles and MUV rather than event volume. This guide doesn't apply—see Pricing and usage instead.
Key concepts
MPE
MPE is the total number of events processed into or within the platform in a calendar month—including events triggered when customers view items, start sessions, open emails, and interact with campaigns and channels. This includes both system events—predefined and available by default—and custom events tailored for your business.
NoteIf you send or import the same event multiple times, each occurrence counts toward MPE—even if deduplication later removes the duplicate.
Duplicated events
If you send or import the same event multiple times, each occurrence is treated as a new event and counts toward MPE. However, if there is a 1:1 duplication, deduplication takes place.
Duplication can occur when the same event is sent with different attributes multiple times. To avoid this, ensure only unique data is tracked or imported.
You can use event deduplication to clean up and prevent the same event from being stored twice. However, the event will still be considered processed and counted toward your MPE, even with deduplication.
MES
MES is the maximum number of events stored in your account at any point in time. It includes all active events that haven't expired or been deleted, and excludes events that have been moved to external storage, such as Engagement BigQuery (EBQ).
Different event attributes don't count as separate events, but events with the same name and different statuses do.
What generates events
Not all platform actions generate events. The following table shows which sources count toward your event volume.
| Source | Generates events? |
|---|---|
| Ad audiences | Yes |
| API—retrieving events, customers, or catalogs | No |
| API—sending events | Yes |
| BigQuery | Yes |
| Customer attribute updates | No |
| Email, SMS, MMS, push, WhatsApp, webhooks | Yes |
| Exports | No |
| Imports—customers, catalogs, vouchers | No |
| Imports—events | Yes |
| Predictions | No |
| Recommendations | Yes, if shown or clicked |
| Web tracking | Yes, if the SDK is enabled for the specified events |
| Weblayers, in-app messages, experiments | Yes |
Check your tracking health
Before optimizing, check whether your event volumes reflect real user behavior. Go to Overview > Bloomreach usage to review event volume, MPE, channel dashboards, and data breakdowns by event and campaign.
Quick health checks
| Check | Healthy sign |
|---|---|
| Banner shows vs. clicks | Shows higher than clicks |
| Campaign enqueued vs sent | Within ~5% of each other |
checkout vs. view_item | Lower than or similar to view_item |
session_start vs. view_item | Roughly in line over time |
Unhealthy patterns and likely causes
| Pattern | Likely cause |
|---|---|
| Banner clicked > banner shown | Incorrect tracking in weblayer JavaScript |
| Campaign enqueued ≠ campaign sent | Outside ~5% margin—investigate campaign logic |
cart_update > view_item | Multiple pings for cart_update |
checkout > view_item | Too many checkout steps tracked—track only critical ones |
session_start > 10× session_end | session_end not loading, or multiple pings on start |
session_start > 5× view_item | view_item should be higher in a healthy implementation |
view_category > 2× view_item | view_category firing on every scroll |
For example, if view_item and view_category consistently exceed page_visit, that's a sign of misconfigured tracking—page visits should be driving item and category views, not the reverse. Similarly, session_start and session_end counts should track closely together; a large gap suggests session_end isn't firing correctly.
Reduce MPE
-
Track only events you actively use for journeys, segmentation, or analytics.
-
Avoid multiple events for the same action — for example, redundant heartbeat or scroll events.
-
Use properties on a single event type instead of creating many similar types.
-
Use DELTA imports to bring in only new or updated data. Sending or importing the same event multiple times counts toward MPE even if deduplication later removes the duplicate.
Keep ad events in check
Ad events should constitute at most 10–20% of your total MPE. If you send ad audiences daily to segments of customers rather than to all of them, check the conditions in your scenarios to ensure you don't send the same data repeatedly.
Before sending an ad audience to the relevant segments, check whether the customer received one the previous day and whether their qualifying condition has changed in the last 24 hours. See the Ads Best Practices Guide for more detail.
Reduce MES
For more details on your stored events, create a report in Analyses > Reports counting each event to understand your current storage footprint before optimizing.
- Use EBQ: Move older events to EBQ. This frees up in-platform storage while keeping historical data available for analysis. By expiring events in the platform, you retain the data in EBQ without it counting toward your MES.
- Set expirations: Set data expirations to automatically delete unnecessary events. Without expirations, MES grows continuously. Apply shorter retention to high-volume, low-value events like
page_visit, and longer retention to high-value events likepurchaseandconsent. - Ensure consistent tracking: Inconsistent tracking can cause unexpected storage growth. Use the retention reference table to check whether your event volumes are in line with expected patterns.
- Delete obsolete data: Use the Data manager to delete events and properties you no longer need. This reduces MES but doesn't affect historical MPE.
- Storage benchmarks:
page_visit: Keep below ~5% of MES. It's high volume and often low value, so it's a good candidate for short expiry.campaignandbannerevents: Keep each below ~30% of MES. Expire old split tests, irrelevant statuses, and low-value banner actions like shows and closes.
Data deletionDeleting data reduces MES only—it has no effect on your MPE count.
Event tracking and retention reference
| Event | Main use | Track? | Recommended retention |
|---|---|---|---|
banner | Weblayer efficiency, A/B tests, scenario triggers | Always | See below |
campaign | Campaign efficiency, engagement triggers | Always | See below |
cart_update | Abandoned cart, recommendations | Always | 1 month |
checkout | Abandoned checkout, funnel analysis | Advanced use only — cart_update is usually enough | 1 month |
consent | Required for all communication | Always | Always |
double_opt_in | Consent campaigns, identification | Always in the EU; recommended elsewhere | 1 month |
first_session | Lifetime attribution | Always | Forever |
page_visit | Quality control | Only when needed | 1 month or less |
purchase | Commercial KPIs and journeys | Always | Forever |
purchase_item | Post-purchase campaigns, recommendations | Always | 13 months |
search and search_results | Funnel analysis | Advanced use only | 1 month |
session_end | Average time on site | Always | 1 month |
session_start | Visit frequency, campaign efficiency, ad attribution | Always | 13 months |
view_category | Recommendations, funnel analysis | Advanced use only — often replaceable by view_item | 1 month |
view_item | Abandoned browse, recommendations, funnel analysis | Always | 3 months |
Banner retention
| Status | Recommended retention |
|---|---|
| Other banners—click | 3 months |
| Other banners—show/close | 1 month |
| Subscription banner—click | 6 months |
| Subscription banner—show/close | 1 month |
Campaign retention
| Type | Recommended retention |
|---|---|
| Ad communication | 1 week |
| Email—other statuses | 1 month |
| Email delivered/opened/clicked | 13 months |
| Email enqueued | 3 months |
| Other channels | 3 months |
| Split (A/B test) | 1 month |
Updated 9 days ago
