Customer wishlist

Give every customer a wishlist that follows them

Store product handles in a Shopify customer metafield so a signed-in shopper can add, revisit, and remove wishlist items from the storefront.

30,000+
wishlist saves processed for one fashion-store implementation.
Why they built it

A saved product is useful customer data

The fashion store wanted the wishlist to do more than hold products on a page. Each save showed interest in a specific item, so the data needed to survive the next session and device.

They stored the wishlist on the Shopify customer and could configure the Raven to queue that eligible customer field for Klaviyo.

The storefront could load the list when the shopper returned. The marketing team could use the same signal for follow-up around saved products when the integration was configured.

The result

Purchase intent, stored where the rest of your stack can read it.

30,000+
Wishlist saves processed

A FieldsRaven processing count, not a count of unique customers or saved lists.

Same pattern
Favorites and reorder lists

The merchant controls the product experience and can reuse the customer-owned JSON shape.

30,000+ wishlist saves processed. The wishlist lives on the customer record, supporting the storefront experience and, when configured, later customer follow-up without claiming that every downstream sync has already completed.

Copy the starter code

An array of product handles, and one call.

snippets/customer-wishlist.liquid
const cfg = window.FR_CUSTOM__CUSTOMER_WISHLIST;
const payload = [
  { product_handle: "linen-shirt" },
  { product_handle: "oak-side-table" }
];

await fetch("/apps/raven/create_metafield", {
  method: "PUT",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    raven: {
      raven_id: cfg.ravenId,
      resource_id: cfg.resourceId,
      raven_mac: cfg.ravenMac,
      value: JSON.stringify(payload)
    }
  })
});

Call this after the shopper adds or removes an item. Defining the starter does not write the example list on page load.

A JSON save replaces the full metafield value. Read the current list, prevent duplicates, apply the change, then send the complete next array.

Get Code supplies the configuration and inline HMAC. Change local wishlist state only after FieldsRaven accepts the request.

Common questions

Before you wire it up.

Does FieldsRaven render the wishlist page?
No. The merchant theme controls the buttons and wishlist page; FieldsRaven accepts the verified write to the customer value.
Can I store product references instead of JSON?
FieldsRaven supports the value type configured for the Raven. This starter begins with JSON because the list is easy to inspect and adapt.
Can a guest use the wishlist?
This customer pattern needs the shopper to sign in before the generated configuration can identify the customer resource.
How does Klaviyo receive the list?
An eligible customer Raven can queue a configured Klaviyo update after the Shopify save. The merchant decides whether that integration is enabled.

Give saved products a permanent home

Start with the JSON version, prove the experience on your theme, then add the customer follow-up you need.