- Metrics sent
- Eight: Viewed Product, Added to Cart, Started Checkout, Placed Order, Ordered Product, Cancelled Order, Fulfilled Order and Refunded Order
- Names
- Each ends with - SignalBridge SS and is separate from Klaviyo's own metrics
- Credential
- A private API key with Accounts Read and Events Write
- Matching
- Email, phone number in international format, or external ID. Without one the event is skipped
- Product and cart events
- Only for signed-in customers on a Shopify store
- Browser order
- No order number, discount codes or addresses on an app-only install
- Lifecycle events
- Cancelled, Fulfilled and Refunded are sent from webhooks without a consent hold
- Duplicates
- One event per order, because the event ID is the same on every copy
Where each Klaviyo metric comes from on Shopify
This is what the code does for a store that has installed the SignalBridge app and nothing else.
| Metric | Source | Needs |
|---|---|---|
| Viewed Product - SignalBridge SS | Web Pixel, when a product is viewed | A signed-in customer and marketing use allowed. Anonymous visitors cannot be matched. |
| Added to Cart - SignalBridge SS | Web Pixel, when an item is added | The same as Viewed Product. |
| Started Checkout - SignalBridge SS | Web Pixel, when checkout starts or contact details are entered | An email or phone number on the checkout, and marketing use allowed. |
| Placed Order - SignalBridge SS | Web Pixel, when the order confirmation page loads | An email or phone number, and marketing use allowed. |
| Ordered Product - SignalBridge SS | One event for each line item of the placed order | The same as Placed Order. |
| Cancelled, Fulfilled and Refunded Order - SignalBridge SS | Shopify webhooks for the order | An email, phone number or customer ID on the order. Not held back by consent. |
What the browser copy of an order carries, and what it does not
Shopify's Web Pixel reports the checkout total and currency, the line items with product ID, variant, SKU, title, quantity, price, image, URL, vendor and type, and the shopper's email, phone and names. It does not receive the shipping or billing address, the discount codes or the customer-facing order number.
The richer fields come from the order webhook: addresses, discount codes and the order number. SignalBridge treats a webhook purchase as unconsented unless the storefront saved a consent decision on the order, and a store using only the Shopify app does not save one. So on an app-only install the Placed Order event has $value, Currency, Items, ItemNames, item_count and campaign details, and no OrderId, Discount Codes, BillingAddress or ShippingAddress. Build flows and segments on the fields that exist, not on those.
Cancelled, Fulfilled and Refunded Order are different. They correct an order that already exists, so SignalBridge sends them without waiting for a consent decision, and because they come from the webhook they carry the order number, discount codes and addresses.
How profiles are matched
Klaviyo's Events API needs at least one profile identifier: an email, a phone number or an external ID. SignalBridge builds the profile from what the event has. The email is lowercased. The phone number is converted to international format when it can be, because Klaviyo requires a valid E.164 number and rejects an event whose only identifier is an invalid phone number. The external ID is the Shopify customer ID, set when the customer has an email address. First and last names come from the checkout address.
The conversion of a local phone number uses the country ending of the page's domain, such as .de. A Shopify store on a .com or a myshopify.com address has no country to infer, so a number entered without a country code is left off the profile. Ask for international numbers at checkout if SMS matters to you.
Location on the profile is set only from a billing address, and the browser copy has none, so a store using only the app does not add cities and regions to profiles through SignalBridge. SignalBridge sends events and profile details only. It does not subscribe anyone to marketing, so Klaviyo's own consent and list settings still decide who you may email.
Set it up
Create a private API key in Klaviyo
Open Settings, API keys, and create a private key with Accounts Read and Events Write and nothing else. SignalBridge does not need Full Access.
Install the SignalBridge app
Install it from the Shopify App Store and approve the permissions. The Web Pixel starts reporting storefront and checkout events and the order webhooks are registered.
Connect Klaviyo
Open the pixel's settings, choose Connect Klaviyo and paste the key, which must start with pk_. Use the test button. It confirms the key can read the account. Writing is confirmed by the first event Klaviyo accepts.
Check which customers can be identified
Place a test order with a real email address that you can open. Do not use an example.com or test.com address, because Klaviyo documents that events from such domains may be silently dropped.
Duplicate your abandoned checkout flow
Create a copy of the flow, change its trigger to Started Checkout - SignalBridge SS and set its exit conditions as described below. Keep the original until you have compared them.
Set the exit condition on both metrics
Make the flow stop when the shopper has either Klaviyo's own Placed Order or Placed Order - SignalBridge SS since starting it. The SignalBridge event comes from the confirmation page, so a shopper who pays and closes the tab early would not produce it.
Test it in Klaviyo
Find the metrics
Open Analytics, then Metrics, and search for SignalBridge SS. Each metric from the table that has been triggered should be listed.
Open the profile of your test order
Search for the email you used. The activity feed should show Started Checkout, Placed Order and one Ordered Product for each line item, with their properties.
Cancel or refund the test order
In Shopify cancel or refund it. Cancelled Order or Refunded Order should appear on the same profile, and it should carry the order number and addresses that the browser copy does not.
Compare with the native metric
Compare Placed Order - SignalBridge SS with Klaviyo's own Placed Order over a week. They are different sources, so small differences are normal. A large gap points to orders without a consented identity.
Problems that are specific to Shopify
Viewed Product and Added to Cart appear only for some visitors
On Shopify they are sent only for signed-in customers, because a product page gives the pixel no email address. Klaviyo's own onsite tracking handles anonymous browse behaviour.
Placed Order has no OrderId or discount codes
The browser copy does not receive them and the webhook copy is held back without a saved consent decision. Use $value, Items and item_count instead.
Customers get an abandoned checkout email after buying
Add Klaviyo's own Placed Order to the flow's exit condition. The SignalBridge Placed Order comes from the confirmation page, which a shopper may never reach.
A phone number is missing from the profile
It was not in international format and the store domain gives no country to infer. Collect numbers with a country code.
Nothing appears for shoppers in the EU
Shopify's Customer Privacy status decides. A shopper who has not accepted marketing use produces no identity and no event.
Events are held and not delivered
Klaviyo needs to be reconnected, or the key was rejected. Reconnect it and held events resume.
What to know before you rely on it
- Only the eight metrics in the table are sent. Page views and other events are not.
- Events from before a visitor was identified are not sent afterwards.
- The SignalBridge metrics do not feed Klaviyo's built-in Shopify metrics, so existing flows keep using those until you change their triggers.
- Klaviyo keeps the first event it processes for a given profile, metric and unique ID, so a retry never creates a duplicate.
- Klaviyo processes events asynchronously. A successful response means the event was accepted for processing, not that it is already in the profile.
Questions about this setup
Do I still need Klaviyo's own Shopify integration?
Yes. Keep it for customer and order syncing, subscriptions and its built-in metrics. The SignalBridge metrics are separate additions that do not change anything already in your account.
Why is Viewed Product missing for anonymous visitors?
Klaviyo needs a profile identifier. On a product page Shopify gives the Web Pixel an email only when the customer is signed in, so anonymous visits cannot be attached to anyone.
Can the same order appear twice?
No. Every copy of an order carries the event ID shopify_order_ plus the order ID, and Klaviyo records only the first event for a profile, metric and unique ID.
Does SignalBridge subscribe people to my email marketing?
No. It sends events and profile details only. Whether you may email someone is still decided by their subscription status in Klaviyo.
What API permissions does the key need?
Accounts Read and Events Write. Anything broader is unnecessary and should not be granted.
Can I use the metrics for SMS flows?
Yes, where the profile has a valid phone number in international format. Klaviyo rejects an event whose only identifier is an invalid number.
Sources
The vendor documents this guide relies on. Statements about SignalBridge come from the product itself.
- Klaviyo Developers: Events API overviewThe unique ID rule, the required profile identifier and the E.164 phone number requirement.
- Klaviyo Developers: Create EventThe events:write scope, the 202 response and the rate limits.
- Klaviyo Developers: Set up API-based transactional eventsMetric name and unique ID combinations, and how profile properties are set from an event.