Overview

A luxury apparel brand’s SMS program frustrated customers with restock alerts that didn’t match their interests. Back?in?stock messages fired whenever inventory changed in Shopify, regardless of whether a subscriber had shown affinity for that category, size, or style. We connected Shopify inventory events to Attentive, computed product affinities in BigQuery, and enforced a suppression rule for low?interest categories and variants. SMS messages felt timely and relevant, unsubscribes and support tickets eased, and marketers scheduled confidently without hand?built filters.

Client Profile

  • Industry: Luxury apparel and accessories (direct?to?consumer and boutiques)
  • Company size (range): Multi?market brand with eCommerce and retail footprint
  • Stage: Scaling CRM and lifecycle messaging with stronger personalization controls
  • Department owner: Marketing & Customer Engagement (CRM / Lifecycle)
  • Other stakeholders: eCommerce, Merchandising, Data & Analytics, Customer Support, Legal & Privacy, IT/Integrations, Retail Operations

The Challenge

Restock alerts triggered at the SKU level from Shopify without context. If a color or size came back, Attentive sent to broad lists tied to the product, not to people who had shown interest in that category or variant. Subscribers received messages for items they would never buy, especially in categories they rarely browsed, and some received multiple alerts as small quantities fluctuated. Support heard complaints about noise, and unsubscribes spiked after promotional periods when inventory changed frequently.

Manual fixes didn’t scale. Marketers tried to trim segments by recency windows or campaign tags, but those rules were blunt and inconsistent across launches. Merchandising shifted assortments weekly; the SMS team had no practical way to encode per?subscriber preferences for category, silhouette, or size at send time. The team wanted to keep Shopify for commerce and Attentive for SMS, while introducing a governed decision layer that respected interest and frequency without adding engineering friction for every drop.

Why It Was Happening

Signals and decisions were fragmented. Shopify produced inventory events, Attentive managed subscribers and sends, and customer behavior sat in the analytics and warehouse stack. No single place computed or enforced “who cares about what.” The Attentive flows used static triggers and broad audiences because affinity and variant preferences weren’t available in the channel tool.

Governance arrived late. Frequency caps were global, not category?aware. There was no preflight rule to veto alerts for low?interest categories, and no audit trail tying a restock SMS to a customer’s demonstrated intent. When inventory oscillated, the system re?alerted without checking whether a previous message had already reached the subscriber that week.

The Solution

We built a capacity?aware, intent?driven orchestration that put affinity and suppression in the path of each restock alert. Shopify webhooks streamed inventory changes to the warehouse and an event bus. BigQuery calculated per?subscriber category and variant affinities from purchases, browsing, wish lists, and waitlists. Attentive consumed those traits as custom attributes. A send?time rule suppressed alerts for categories below an interest threshold, applied variant and size filters, and respected a per?category frequency cap. High?visibility drops could override suppression via an approval queue with rationale. No replatforming was required; the new layer standardized signals and policy around Shopify and Attentive.

  • Inventory event ingestion from Shopify via webhooks, normalized to product, variant, and location (Shopify Webhooks)
  • Affinity scoring and segmentation logic authored and refreshed in BigQuery ML (category, style, size preferences; decay on stale signals)
  • Customer trait sync to Attentive as custom attributes for category affinity, preferred sizes, and last?alert stamps
  • Eligibility and suppression rules in Attentive flows to allow/hold based on affinity thresholds, variant match, and per?category cooldowns
  • Frequency governance: per?subscriber daily cap plus per?category cooldown to prevent repeated alerts during volatile restocks
  • Fallback logic to consolidate micro?restocks into a single alert window for the same product family
  • Dashboards showing alert volume, suppressions by reason, opt?outs, and category?level engagement in Looker
  • Role?based overrides for marquee launches with expiry and reason codes; access scoped by identity groups
  • Audit logging tying each alert to inventory events, affinity state, suppression decisions, and overrides
  • Privacy and consent alignment: phone numbers and attributes minimized to what was necessary for eligibility

Implementation

  • Discovery: Mapped current restock flows, Shopify event cadence, and Attentive segment logic. Cataloged behavior signals available for affinity (orders, browse, wish lists, waitlists) and reviewed support tickets to pinpoint categories causing frustration. Documented consent, opt?out handling, and regional send windows.
  • Design: Defined the event schema from Shopify (product, variant, quantity, timestamp), the affinity model features and decay rules, and thresholds per category. Authored suppression and frequency policies, variant matching logic for size/color, and a consolidation window for micro?restocks. Planned attribute mappings to Attentive, dashboards, and audit fields.
  • Build: Implemented Shopify webhooks to land inventory events; built BigQuery models and scheduled affinity refresh; created sync jobs to post custom attributes to Attentive; updated flow logic to reference affinity and cooldowns; added consolidation logic; and stood up Looker dashboards and audit logging.
  • Testing and QA: Replayed historical restocks to compare “would send” versus “suppressed” outcomes; validated size and variant matching on common items; exercised frequency caps and consolidation windows; and verified attribute sync and privacy scopes. Ran inbox tests to confirm flows honored suppression and that overrides captured reason codes.
  • Rollout: Started in advisory mode, logging suppressions without blocking. Enabled enforcement on a subset of categories with high complaint volume, then expanded across the catalog. Kept a documented override path for marquee drops with expiry and review.
  • Training and hand?off: Delivered guides for CRM on flow changes and dashboards, for Merchandising on override requests and lead times, and for Support on explaining eligibility decisions. Established a change?control cadence for thresholds, categories, and consolidation windows.
  • Human?in?the?loop review: Routed new categories, ambiguous variants, and special collections to a reviewer queue. Approved decisions updated mappings, thresholds, or allowlists to reduce future exceptions.

Results

Restock SMS felt relevant. Subscribers received alerts for products and variants they cared about, not for every inventory blip. Category and size filters stopped messages that would never convert, and consolidation reduced noise from rapid, small quantity changes. Unsubscribes and support complaints tapered as alerts aligned with interest and cadence expectations.

Operationally, launches became predictable. Marketers planned sends with clear thresholds and caps, Merchandising used a simple override process for marquee items, and Support could trace any message back to the inventory event and the affinity state that justified it. The team shifted time from triage and list surgery to creative and sequencing.

What Changed for the Team

  • Before: Every restock triggered broad alerts. After: Eligibility checked category and variant affinity before sending.
  • Before: Frequency caps were global and blunt. After: Per?category cooldowns and consolidation windows kept cadence sane.
  • Before: Size and color mismatches annoyed customers. After: Variant?level matching respected preferred sizes and hues.
  • Before: Manual segmentation tried to fix noise. After: Attentive flows referenced synced attributes and suppression policy.
  • Before: Exceptions were ad hoc. After: Overrides required rationale, carried expiry, and were logged for review.

Key Takeaways

  • Use behavioral data to compute product affinity; restock alerts should reflect what each subscriber is likely to value.
  • Evaluate eligibility at send time; suppression and per?category cooldowns prevent noisy bursts during volatile inventory.
  • Match at the variant level; size and color preferences matter as much as the product itself.
  • Keep Shopify and Attentive; layer webhooks, warehouse models, and attribute syncs to coordinate policy, not replace tools.
  • Instrument decisions; dashboards and audit logs turn suppression from guesswork into an intentional strategy.

FAQ

What tools did this integrate with?
Inventory changes flowed from Shopify via webhooks. Affinity scores were computed in BigQuery ML and synced as custom attributes to Attentive. Flows in Attentive used those attributes to allow or suppress restock alerts. Monitoring and outcomes were visualized in Looker.

How did you handle quality control and governance?
We encoded suppression and frequency rules centrally, applied variant?level matching, and required reason codes for overrides. Affinity models refreshed on a set cadence with decay to avoid stale interests. Every send decision logged the inventory event, attributes used, and the rule version applied. Access to thresholds and overrides was role?based, and privacy scopes limited the attributes synced to only what was needed for eligibility.

How did you roll this out without disruption?
We ran in advisory mode first, logging “would suppress” outcomes while sends continued. After comparing logs to complaints and unsubscribe patterns, we enabled enforcement on high?noise categories, then expanded. An override lane supported marquee launches with expiry and post?send review.

How were affinity scores calculated and updated?
Signals included purchase history, browse events, wish lists, and waitlist activity. BigQuery models assigned category and style scores with time?based decay, plus preferred size signals from transaction data. Scores refreshed on a fixed schedule and on key events (such as a purchase), and were pushed to Attentive as simple attributes the flows could read.

How did you handle rapid, repeated restocks?
A consolidation window grouped micro?restocks for the same product family so a subscriber received a single alert in a defined period. Per?category cooldowns and last?alert stamps prevented repeats, and flows checked both affinity and cooldown before sending. This reduced noise without blocking legitimate high?interest alerts.

You need a similar solution?

Get a FREE
Proof of Concept
& Consultation

No Cost, No Commitment!