Which wishlist events does Wishlist Hero fire?
This is the complete catalog of wishlist events, grouped by destination: Klaviyo onsite events, Klaviyo and Omnisend server triggers, pixel events, storefront document events, and the internal action log. Use it to wire tracking, build flows, and answer “does the app fire an event when…” without reading source.
Plan gates: Klaviyo onsite events and pixel events require Silver and above, and each has its own enable toggle in the app.
Klaviyo onsite events
Sent client side from your storefront through Klaviyo’s onsite script, attached to the logged in shopper’s Klaviyo profile. Enabled by Enable Klaviyo Onsite Tracking.
| Metric name | Trigger |
|---|---|
Added To Wishlist (WH) |
Shopper saves a product |
Removed From Wishlist (WH) |
Shopper un-saves a product |
Cleared Wishlist (WH) |
Shopper empties the list with Remove All |
Event properties:
| Property | Type | Contents |
|---|---|---|
Name |
string | Product title |
ImageURL |
string | Product image URL |
URL |
string | Absolute product URL |
Price |
number | Price at event time |
PriceFormatted |
string | Price formatted with currency |
CurrencyCode |
string | Store currency |
ProductID |
string | Shopify product ID |
VariantID |
string | Shopify variant ID |
SKU |
string | Variant SKU |
Vendor |
string | Product vendor |
Tags |
string[] | Product tags |
Quantity |
number | Always 1 |
WishlistProductIDs |
string[] | All products in the list after the action |
WishlistUrl |
string | Link to the shopper’s wishlist |
CategoryViewed |
string | Product type or category, when available |
The same calls send a Klaviyo identify with two profile properties: MyWishlistProductIDs (array) and MyWishlistLink (wishlist URL).
Klaviyo and Omnisend server triggers
Fired server side instead of app sent emails when Klaviyo or Omnisend is the selected email provider. Event names are identical on both platforms:
| Event name | Fires when |
|---|---|
Wishlisthero-pricedrop |
Reminder engine: wishlisted product dropped past your percentage |
Wishlisthero-lowstock |
Reminder engine: wishlisted product fell under your stock threshold |
Wishlisthero-sharewishlist |
A shopper shares a wishlist by email |
Wishlisthero-testconnection |
You run the provider connection test |
Reminder payload:
| Property | Contents |
|---|---|
ProductsCount |
Number of products in this reminder |
Products |
Array of: ProductID, ProductName, ProductPrice, ProductStock, ProductQuantity, VariantID, ProductURL, ImageURL |
WishlistHash |
The shopper’s wishlist hash |
EventTime |
ISO timestamp |
| First product fields | Also copied to the top level for single product emails |
The trigger profile is the shopper’s email. Share payload adds: SenderName , SenderEmail , ReceiverEmail , ShareURL , SenderMessage , with the receiver as the profile.
Pixel events
All three fire the platform’s standard wishlist event, guarded by the presence of the platform’s own script on your storefront:
| Platform | Call | Key properties |
|---|---|---|
| Meta Pixel | fbq("track", "AddToWishlist", …) |
content_name, content_category, content_ids, contents, currency, value, content_type: "product" |
| Google Analytics 4 | gtag("event", "add_to_wishlist", …) |
currency, value, items array with item_id, item_name, item_brand, item_category, item_variant, price, quantity |
| TikTok Pixel | ttq.track("AddToWishlist", …) |
content_type: "product", currency, value, contents with content_id, content_name, content_brand, content_category, content_variant_id, price, quantity |
Enable each from its settings page: Meta Pixel, Google Tag, and TikTok Pixel under Settings. They use the pixel already installed by your Facebook, Google, and TikTok channels; no pixel ID is entered in Wishlist Hero.
Storefront document events
The storefront app dispatches custom events on document . Listen with document.addEventListener . Names are stable strings, all prefixed wishlist-hero- :
| Event | Meaning |
|---|---|
wishlist-hero-wishlist-sdk-ready |
The SDK object finished loading |
wishlist-hero-wishlist-updated |
The wishlist changed (add, delete, clear, server reload) |
wishlist-hero-wishlist-show |
Request to open the wishlist |
wishlist-hero-open-popup |
Request to open the wishlist popup |
wishlist-hero-open-login-popup |
Request to show the login popup |
wishlist-hero-open-share-popup |
Request to open the share popup |
wishlist-hero-add-to-custom-element |
A custom button element was initialized |
wishlist-hero-cart-updated |
Add to cart from the wishlist completed |
wishlist-hero-wishlist-hash |
The wishlist hash changed or became known |
wishlist-hero-wishlist-hash-generated |
A new guest wishlist hash was created |
wishlist-hero-wishlist-hash-create |
Request to create a wishlist |
wishlist-hero-wishlist-items-count |
Items count changed |
wishlist-hero-wishlist-items |
Local items snapshot changed |
wishlist-hero-wishlist-items-from-server |
Server items arrived |
wishlist-hero-wishlist-load-items |
Request to reload items |
wishlist-hero-wishlist-add-item |
Request to add an item |
wishlist-hero-wishlist-delete-item |
Request to delete an item |
wishlist-hero-wishlist-delete-all-items |
Request to clear the list |
wishlist-hero-reload-from-server |
Request to resync from the server |
wishlist-hero-links-binded |
Internal: wishlist links were bound on the page |
wishlist-hero-customer-id |
The logged in customer ID became known |
Example:
document.addEventListener("wishlist-hero-wishlist-updated", (event) => {
console.log("wishlist changed", event.detail);
});
The app also re-dispatches Shopify’s ajaxProduct:added theme event after a wishlist add to cart, so theme cart drawers refresh as they do for normal adds.
The internal action log
Independent of all the above, the admin records every action as one of four types, which power the dashboard, reports, and exports:
| Action type | Meaning |
|---|---|
| Added To Wishlist | A save |
| Removed From Wishlist | An un-save |
| New Wishlist | First save that created a list |
| Added To Cart | Item moved to the cart from the wishlist |
There are no order or checkout events: order attribution is out of scope for these events by design. See How activity is tracked for the reporting model.