Bloomreach
What Is Bloomreach?
Bloomreach is a customer engagement and personalization platform that helps businesses deliver targeted marketing, commerce, and customer experience campaigns across digital channels. The Bloomreach Tracking API supports collecting customer interactions and behavioral events for audience building, personalization, analytics, and campaign orchestration. This starter kit enables MetaRouter to send server-side customer and commerce events directly to Bloomreach using the Bloomreach Tracking API. The integration supports web, iOS, and Android event collection workflows through MetaRouter event forwarding and identity synchronization capabilities.
Product Type: Customer Data Platform
Integration Type: Starter Kit & ID Sync
Event Source Type: Web and/or Mobile App
Event Scope: Full-Funnel Events
Capabilities
- Sends events to Bloomreach using the Tracking API
- Supports the following event types:
identify,page,order_completed,product_added,product_removed,product_viewed,checkout_step_completed - Supports web, iOS, and Android event sources
- Automatically uppercases currency values before delivery
- Defaults currency to
USDwhen no currency is provided - Maps customer identifiers globally across all supported events
- Supports Bloomreach ID sync workflows for attribution and customer recognition
Considerations
- The
BASE_URLvalue is organization-specific and may differ from the defaultapi.exponea.com - The
BASE_URLshould contain only the API hostname withouthttps://or trailing slashes - Bloomreach processes events asynchronously, so successful responses indicate receipt rather than processing completion
- The Bloomreach Sync must be configured before using the server-side starter kit
- Public and private API authorization methods are supported
- Public API access requires
Events > Setpermissions - The
identifyevent mapstraitsinto the Bloomreachpropertiesobject - The integration globally maps
anonymousIdtocustomer_ids.cookie - The integration globally maps
userIdtocustomer_ids.customer_id - Currency values are automatically converted to uppercase before delivery
- If
Load Bloomreach Tag From MetaRouter Scriptis enabled, the Bloomreach JavaScript tag loads automatically from the MetaRouter script - If
Load Bloomreach Tag From MetaRouter Scriptis disabled, the Bloomreach JavaScript tag must already exist on the page before MetaRouter loads - The
Track Sessionssetting only works when the Bloomreach JavaScript tag is enabled - The
Enable Experimentssetting only works when the Bloomreach JavaScript tag is enabled - Enabling
Fire On ReSynccauses the ID sync to run again whenever anidentify()call occurs - The integration appends Bloomreach sync status details into
context.providers.bloomreach
Limitations
- Event payloads must remain below 800 KB
- Individual event property values must remain below 16 KB
- Bloomreach enforces a rate limit of 6,000 requests per minute per IP
- Requests exceeding the rate limit return HTTP 429 responses and events are discarded
- The integration cannot recover discarded events caused by rate limiting
Identity Sync
-
Sync Available: Yes
-
Required for Starter Kit: Yes
-
Prerequisites: Bloomreach token, Bloomreach target URL, identify key configuration
-
Documentation: See Additional Bloomreach Documentation
Sync Details
- Captures Bloomreach identifiers required for attribution and customer recognition
- Supports loading the Bloomreach JavaScript tag through the MetaRouter script
- Allows Bloomreach session tracking and experiment support
- Can automatically re-trigger synchronization during identify events
Starter Kit Setup Guide
1. Deploy the Bloomreach Sync
- To collect the sync values, you must implement a Bloomreach ID sync. Refer to the following documentation to complete the setup: Bloomreach – ID Sync Guide.
2. Gather Credentials
PROJECT_TOKEN— Found in Bloomreach under: Project settings > Access management > APIAPI_TOKEN— Found in Bloomreach under: Project settings > Access management > APIBASE_URL— Found in Bloomreach under: Project settings > Access management > API
3. Add a Bloomreach Integration
- From the integration library, add a Bloomreach integration. Then, fill out the Connection Parameters:
| Connection Parameter | Description |
|---|---|
PROJECT_TOKEN | Bloomreach project identifier |
API_TOKEN | API token with tracking permissions |
BASE_URL | Bloomreach API hostname without protocol or trailing slash |
4. Configure Event Mapping
- MetaRouter provides all of the event mappings that Bloomreach integrations typically require. You may add custom events, parameters, or mappings in accordance with Bloomreach’s API documentation.
5. Deploy to Pipeline
-
In the Pipelines tab, add your Bloomreach integration.
-
Select the correct integration revision
-
Click Add Integration to finalize deployment.
Event Mappings
Global
Global mappings will be applied to all events. If your parameter names do not match the Expected Inputs provided, you will need to overwrite the Inputs provided with your own.
| Output Key | Description | Expected Input |
|---|---|---|
customer_ids.cookie | String: Anonymous browser identifier for customer matching. | anonymousId |
customer_ids.customer_id | String: Authenticated customer identifier for customer matching. | userId |
Event Specific
Page
| Output Key | Description | Expected Input |
|---|---|---|
properties | Object: Page event properties sent to Bloomreach. | properties |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
event_type | String: Bloomreach page event type. | Enrichment – hardcoded value 'page' |
Identify
| Output Key | Description | Expected Input |
|---|---|---|
properties | Object: Customer profile traits sent to Bloomreach. | traits |
update_timestamp | Integer: Profile update timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Order Completed
| Output Key | Description | Expected Input |
|---|---|---|
event_type | String: Bloomreach purchase event type. | Enrichment – hardcoded value 'purchase' |
properties.purchase_id | String: Unique purchase identifier. | properties.order_id |
properties.product_list | Array: Product objects associated with the order. | properties.products |
properties.product_ids | Array: Product IDs extracted from purchased items. | Expression – extract product_id values from products |
properties.total_price | Float: Total order value. | properties.total |
properties.local_currency | String: Uppercased transaction currency. | properties.currency |
properties.total_quantity | Integer: Sum of product quantities in the order. | Expression – sum product quantities |
properties.shipping_cost | Float: Shipping cost for the order. | properties.shipping |
properties.tax_value | Float: Tax amount for the order. | properties.tax |
properties.voucher_code | String: Coupon or voucher code applied to the order. | properties.coupon |
properties.location | String: URL where the purchase occurred. | context.page.url |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Product Added
| Output Key | Description | Expected Input |
|---|---|---|
event_type | String: Bloomreach cart update event type. | Enrichment – hardcoded value 'cart_update' |
properties.action | String: Cart action type. | Enrichment – hardcoded value 'add' |
properties.page_type | String: Bloomreach page classification. | Enrichment – hardcoded value 'product_added' |
properties.product_id | String: Product identifier. | properties.product_id |
properties.title | String: Product title. | properties.name |
properties.brand | String: Product brand name. | properties.brand |
properties.price | Float: Product price. | properties.price |
properties.category_1 | String: Product category. | properties.category |
properties.local_currency | String: Uppercased transaction currency. | properties.currency |
properties.location | String: URL where the event occurred. | context.page.url |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Product Removed
| Output Key | Description | Expected Input |
|---|---|---|
event_type | String: Bloomreach cart update event type. | Enrichment – hardcoded value 'cart_update' |
properties.action | String: Cart action type. | Enrichment – hardcoded value 'remove' |
properties.page_type | String: Bloomreach page classification. | Enrichment – hardcoded value 'product_removed' |
properties.product_id | String: Product identifier. | properties.product_id |
properties.title | String: Product title. | properties.name |
properties.brand | String: Product brand name. | properties.brand |
properties.price | Float: Product price. | properties.price |
properties.category_1 | String: Product category. | properties.category |
properties.local_currency | String: Uppercased transaction currency. | properties.currency |
properties.location | String: URL where the event occurred. | context.page.url |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Checkout Step Completed
| Output Key | Description | Expected Input |
|---|---|---|
event_type | String: Bloomreach checkout event type. | Enrichment – hardcoded value 'checkout' |
properties.product_list | Array: Product objects associated with checkout. | properties.products |
properties.product_ids | Array: Product IDs extracted from checkout items. | Expression – extract product_id values from products |
properties.total_price | Float: Checkout total value. | properties.value |
properties.local_currency | String: Uppercased transaction currency. | properties.currency |
properties.total_quantity | Integer: Sum of checkout product quantities. | Expression – sum product quantities |
properties.shipping_cost | Float: Checkout shipping cost. | properties.shipping |
properties.tax_value | Float: Checkout tax amount. | properties.tax |
properties.voucher_code | String: Coupon or voucher code applied at checkout. | properties.coupon |
properties.location | String: URL where checkout occurred. | context.page.url |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Product Viewed
| Output Key | Description | Expected Input |
|---|---|---|
event_type | String: Bloomreach product view event type. | Enrichment – hardcoded value 'view_item' |
properties.product_id | String: Product identifier. | properties.product_id |
properties.title | String: Product title. | properties.name |
properties.brand | String: Product brand name. | properties.brand |
properties.price | Float: Product price. | properties.price |
properties.category_1 | String: Product category. | properties.category |
properties.local_currency | String: Uppercased transaction currency. | properties.currency |
properties.location | String: URL where the event occurred. | context.page.url |
timestamp | Integer: Event timestamp in Unix epoch seconds. | Expression – convert RFC3339 timestamp to Unix epoch |
Required & Recommended Identifiers
These identifiers must be mapped to Bloomreach in order for successful user matching to occur. Without these IDs, any events sent to Bloomreach may not be accurately reflected in reporting.
| Attribute | Example | Sync Injector Required? |
|---|---|---|
customer_ids.cookie Required | anon_123456789 | Yes |
customer_ids.customer_id Recommended | customer_987654321 | No |
PROJECT_TOKEN Required | my-project-token | No |
API_TOKEN Required | my-api-token | No |
Integration Validation
-
Trigger a test event through the Bloomreach integration.
-
In Bloomreach, verify the event appears on the associated customer profile or within event activity views.
-
Confirm expected event properties and customer identifiers are populated correctly.
-
Validate that no authentication or rate limit errors are occurring during event delivery.
Additional Bloomreach Documentation
- https://documentation.bloomreach.com/engagement/docs
- https://documentation.bloomreach.com/engagement/docs/tracking-api
- https://documentation.bloomreach.com/engagement/docs/configuration
- https://documentation.bloomreach.com/engagement/docs/authentication
- https://documentation.bloomreach.com/engagement/docs/permissions