# DemandLoop — Complete Documentation
> DemandLoop is a back-in-stock notification and demand capture platform for e-commerce merchants.
> It lets shoppers subscribe to out-of-stock products via a "Notify Me" button, sends automated
> restock alerts by email and web push, and tracks attributed revenue. Works with Shopify,
> WooCommerce, BigCommerce, Shopware, and PrestaShop. Built by Metigro.
Website: https://demandloop.metigro.io
Summary (llms.txt): https://demandloop.metigro.io/llms.txt
Help Center: https://demandloop.metigro.io/help-center
Sitemap: https://demandloop.metigro.io/sitemap.xml
The sections below contain the full text of all DemandLoop help center articles, in the same
order as the public Help Center navigation. Each article includes its canonical URL.
---
# Getting Started
## Quick Start Guide
Source: https://demandloop.metigro.io/help-center/getting-started/quick-start-guide
---
title: "Quick Start Guide"
description: "Get DemandLoop up and running in 5 minutes - verify installation, test the widget, and send your first notification"
category: "getting-started"
order: 0
updated_at: "2025-01-13"
estimated_time: "5 min"
related_feature_pages:
- label: "Back in Stock — Shopify"
url: "/shopify/feature/back-in-stock"
- label: "Back in Stock — WooCommerce"
url: "/woocommerce/feature/back-in-stock"
- label: "Back in Stock — BigCommerce"
url: "/bigcommerce/feature/back-in-stock"
- label: "Back in Stock — Shopware"
url: "/shopware/feature/back-in-stock"
- label: "Back in Stock — PrestaShop"
url: "/prestashop/feature/back-in-stock"
howto_steps:
- name: "Verify Installation"
text: "Navigate to DemandLoop in your Shopify Admin. Confirm the app shows Active status and the widget is listed as Installed in Settings → Installation."
- name: "Enable Widget on Theme"
text: "In Shopify Admin, go to Online Store → Themes → Customize → App Embeds. Find DemandLoop Back in Stock, toggle it on, and save."
- name: "Test Widget on Storefront"
text: "Visit an out-of-stock product page in your live store. You should see the Notify Me When Available button in place of Add to Cart."
- name: "Test Subscription Flow"
text: "Enter a test email and subscribe via the Notify Me button. Check the Subscriptions dashboard in DemandLoop to confirm the entry appears."
- name: "Send Test Notification"
text: "Use the Send Test button in the DemandLoop dashboard, or create a test restock event to trigger an automated notification to your test email."
- name: "Configure Basic Settings"
text: "Review Settings to set your notification sender email, configure notification delay, and enable web push notifications if desired."
---
# Quick Start Guide
Get DemandLoop operational in 5 minutes. This guide walks you through verifying your installation, testing the widget, and sending your first back-in-stock notification.
## What You'll Accomplish
In the next 5 minutes, you'll:
- Verify DemandLoop is properly installed
- Check the widget appears on storefront
- Test customer subscription flow
- Configure basic settings (optional)
- Send your first notification
**Time required:** 5-10 minutes
**Difficulty:** Beginner
**Prerequisites:** DemandLoop installed from Shopify App Store
---
## Before You Begin
### Required Access
You'll need:
- Shopify store admin access
- DemandLoop installed and active
- At least one product in your catalog
### Helpful to Have
- Your storefront URL handy
- Test email address (Gmail, Outlook, etc.)
- Incognito browser window for testing
---
## Step 1: Verify Installation (30 seconds)
### Check App Status
**Navigate to DemandLoop Dashboard:**
```
Shopify Admin → Apps → DemandLoop
```
**You should see:**
```
Welcome message or Dashboard overview
Navigation menu (Subscriptions, Notifications, Analytics, etc.)
No error messages or warnings
```
**If you see errors:**
- App may not be fully installed
- Try refreshing the page (Ctrl+R / Cmd+R)
- If persists → [Contact support](mailto:support@metigro.io)
### Check Installation Status
**Dashboard → Settings → Installation**
**Healthy installation shows:**
```
Widget Status: Installed
Theme: [Your theme name]
App Embed: Enabled
Last Sync: 2 minutes ago
```
**If any items show errors:**
- Click "Fix issues" button
- Or follow → [Widget Installation Guide](/help-center/getting-started/widget-installation)
---
## Step 2: Enable Widget on Theme (1 minute)
### Open Theme Editor
```
Shopify Admin → Online Store → Themes
→ Click "Customize" on your active theme
```
### Enable App Embed
**In Theme Editor:**
**Step 1: Find App Embeds section**
```
Left sidebar → Scroll to bottom
→ Click "App embeds"
```
**Step 2: Enable DemandLoop**
```
Find: "DemandLoop - Back in Stock"
Toggle: Turn ON (should be blue/enabled)
```
**Step 3: Save**
```
Top right → Click "Save"
Wait for confirmation: "Theme published"
```
**Verification:**
- Toggle is blue/enabled
- No error messages shown
- "Save" button no longer highlighted
---
## Step 3: Test Widget on Storefront (2 minutes)
### Find an Out-of-Stock Product
**Option A: Use existing out-of-stock product**
If you have products already sold out:
```
Shopify Admin → Products
→ Look for products with "0" inventory
→ Note the product name
```
**Option B: Create test out-of-stock product**
If all products in stock:
```
Shopify Admin → Products → [Pick any product]
→ Variants section
→ Set inventory to 0
→ Save product
```
**Important:** Make sure "Track quantity" is enabled and "Continue selling when out of stock" is disabled.
### View Product on Storefront
**Open product page:**
```
Click "View" on product (in Shopify admin)
→ Opens storefront product page in new tab
```
**Or manually navigate:**
```
Visit: your-store.com/products/[product-handle]
```
**Pro tip:** Use incognito/private browsing to avoid cache issues.
### Verify Widget Appears
**What you should see:**
Instead of "Add to Cart" button:
```
[Notify Me When Available]
```
**Widget characteristics:**
- Button clearly visible
- Replaces "Add to Cart" or shows where "Sold Out" was
- Button text may say "Notify Me" or "Get Notified"
- Matches your theme's button style
**If widget doesn't appear:**
- Is product actually out of stock? (Quantity = 0)
- Is "Track quantity" enabled for variant?
- Did you save theme after enabling app embed?
- Clear browser cache (Ctrl+Shift+R / Cmd+Shift+R)
- See → [Widget Not Showing troubleshooting](/help-center/troubleshooting/widget-not-showing)
---
## Step 4: Test Subscription Flow (2 minutes)
### Subscribe as Customer
**On the product page with widget:**
**Step 1: Click the button**
```
Click: "Notify Me When Available"
→ Modal window appears
```
**Step 2: Fill subscription form**
```
Email: your-test-email@gmail.com
☐ Also send me push notifications (optional)
Click: "Notify Me"
```
**Step 3: Verify success**
```
Success message: "You're on the list!"
or "We'll notify you when this item is back"
Modal closes automatically (or has close button)
```
**Expected result:**
- Modal opened smoothly
- Form accepted email
- Success message displayed
- No error messages
### Check Dashboard Subscription
**Return to DemandLoop Dashboard:**
```
Dashboard → Subscriptions → Active Subscriptions
```
**You should see your test subscription:**
```
Email: your-test-email@gmail.com
Product: [Your test product]
Variant: [Size/Color if applicable]
Status: Active
Subscribed: Just now
```
**Verification complete:**
- Subscription created successfully
- Appears in dashboard
- Status is "Active"
- Correct product/variant linked
---
## Step 5: Send Test Notification (2 minutes)
### Restock the Product
**Simulate product coming back in stock:**
```
Shopify Admin → Products → [Your test product]
→ Variants section
→ Set inventory: 10 (or any number > 0)
→ Save product
```
**What happens behind the scenes:**
1. Shopify sends restock webhook to DemandLoop
2. DemandLoop detects inventory change
3. Notification job queued
4. Email sent to subscriber (you)
### Wait for Notification
**Timeline:**
```
Product restocked: Now
Webhook received: Within 30 seconds
Email queued: Immediately
Email sent: 1-5 minutes (depends on queue settings)
```
**Check your email inbox:**
- Look in inbox for email from DemandLoop
- Subject: "[Product Name] - Back in Stock!" (or similar)
- Check spam folder if not in inbox
**Email should contain:**
- Product name
- Variant details (if applicable)
- "Shop Now" or "View Product" button
- Product image
- Unsubscribe link
### Verify in Dashboard
**Check notification was sent:**
```
Dashboard → Notifications → History
```
**You should see:**
```
Customer: your-test-email@gmail.com
Product: [Your test product]
Status: Delivered
Sent: 2 minutes ago
```
**Click notification for details:**
```
Email opened: Yes/No
Link clicked: Yes/No (if you clicked)
Delivery status: Success
```
---
## Step 6: Configure Basic Settings (Optional, 3 minutes)
### Customize Email Template
**Make notifications match your brand:**
```
Dashboard → Settings → Email Templates
→ Click "Customize restock notification"
```
**Quick customizations:**
```
Subject line: "[Product] is back in stock!"
Preview text: "Don't miss out - order now"
Button text: "Shop Now"
Button color: #FF5733 (your brand color)
```
**Preview before saving:**
```
Click "Preview" → See how email looks
Click "Send test" → Get sample in inbox
Click "Save" → Apply changes
```
### Adjust Fair Queue (Optional)
**Control notification speed:**
```
Dashboard → Settings → Fair Queue
```
**Default settings (recommended for most stores):**
```
Batch size: 50 emails
Batch delay: 2 hours
```
**For faster notifications:**
```
Batch size: 100 emails
Batch delay: 30 minutes
```
**For more fair distribution:**
```
Batch size: 25 emails
Batch delay: 3 hours
```
See [Fair Queue Settings](/help-center/notifications/fair-queue) for strategy.
### Set Notification Preferences
**Control when notifications send:**
```
Dashboard → Settings → Notifications
```
**Common preferences:**
```
[x] Send email notifications
[x] Send web push notifications
[ ] Pause notifications globally (if needed)
[ ] Require double opt-in (for stricter compliance)
```
---
## Verify Everything Works
### Final Checklist
Run through this quick verification:
```
□ Widget appears on out-of-stock products
□ Subscription modal opens when clicked
□ Test subscription created successfully
□ Test notification email received
□ Email looks professional and branded
□ Dashboard shows subscription and notification
□ No error messages anywhere
```
**If all checked:** You're ready to go live!
**If any unchecked:** Review the relevant step above or check troubleshooting section below.
---
## Quick Troubleshooting
### Widget Not Showing
**Quick fixes:**
1. Hard refresh page (Ctrl+Shift+R)
2. Check app embed is enabled (Theme Editor → App embeds)
3. Verify product inventory is actually 0
4. Clear browser cache
5. Try incognito/private browsing
**Still not working?**
→ [Full widget troubleshooting guide](/help-center/troubleshooting/widget-not-showing)
### Didn't Receive Notification Email
**Check these:**
1. Look in spam/junk folder
2. Verify email address spelled correctly
3. Dashboard shows "Delivered" status?
4. Wait 5 minutes (queue processing time)
5. Check Dashboard → Notifications → History
**Still no email?**
→ [Email delivery troubleshooting](/help-center/troubleshooting/emails-not-delivering)
### Subscription Not Appearing in Dashboard
**Possible causes:**
1. Form submission failed silently
2. Email validation error
3. JavaScript error on page
**Quick fix:**
```
1. Open browser console (F12)
2. Try subscribing again
3. Look for red error messages
4. Screenshot and contact support
```
### Modal Won't Open
**Quick fixes:**
1. Check JavaScript is enabled in browser
2. Disable other apps temporarily (test for conflicts)
3. Try different browser
4. Check console for errors (F12)
**Still broken?**
→ [Contact support](mailto:support@metigro.io) with:
- Product URL
- Browser type (Chrome, Safari, etc.)
- Screenshot of console errors
---
## What Happens Next?
### Automatic Operation
**DemandLoop now runs automatically:**
```
1. Products go out of stock
↓
2. Widget appears on product page
↓
3. Customers subscribe
↓
4. Products restock
↓
5. Notifications sent automatically
↓
6. Customers click and purchase
```
**No manual intervention required** after setup.
### Monitor Performance
**Check these dashboards regularly:**
**Subscriptions Dashboard:**
```
Dashboard → Subscriptions
→ See who's waiting
→ Monitor demand trends
→ Plan restocks accordingly
```
**Notifications Dashboard:**
```
Dashboard → Notifications
→ Track delivery rates
→ Monitor queue status
→ Verify emails sending
```
**Analytics Dashboard:**
```
Dashboard → Analytics
→ See top products by demand
→ Track email performance
→ View subscription trends
```
### Growth Plan Features (Optional)
**When ready to track revenue:**
```
Dashboard → Billing → Start 14-day trial
```
**Growth plan adds:**
- Revenue attribution tracking
- ROI analytics
- Advanced metrics (CTR, conversion)
- Unlimited subscriptions/notifications
See [Understanding Plans & Pricing](/help-center/billing/understanding-plans-pricing) for details.
---
## Common Next Steps
### Week 1: Monitor & Optimize
**Daily tasks:**
```
□ Check Dashboard → Overview (5 min)
□ Review new subscriptions
□ Verify notifications sending
□ Monitor any errors/issues
```
**By end of week:**
```
□ Review email open rates
□ Check if customers clicking links
□ Identify top-demand products
□ Adjust Fair Queue if needed
```
### Week 2-4: Refinement
**Customize experience:**
```
□ Brand email templates
□ Test different subject lines
□ Optimize widget button text
□ Configure advanced settings
```
**Analyze performance:**
```
□ Which products get most subscriptions?
□ What time of day are clicks highest?
□ Are notifications converting to sales?
□ Should you upgrade to Growth plan?
```
### Month 2+: Advanced Features
**Consider enabling:**
```
□ Web push notifications (instant alerts)
□ Revenue attribution (Growth plan)
□ Advanced analytics
□ Custom automation rules
```
---
## Pro Tips
### 1. Test Multiple Products
Don't just test one product:
```
Test on:
- Simple product (no variants)
- Product with size variants
- Product with color variants
- Product with multiple variants (size + color)
```
**Why:** Ensures widget works across all product types.
### 2. Test on Mobile
Most customers browse on mobile:
```
1. Open product page on phone
2. Verify widget displays properly
3. Test subscription form on mobile
4. Check email looks good on mobile
```
### 3. Subscribe with Multiple Emails
Test different email providers:
```
□ Gmail account
□ Outlook/Hotmail account
□ Yahoo account
□ Your business email
```
**Why:** Some providers have stricter spam filters.
### 4. Bookmark Key Dashboards
Quick access to important pages:
```
Bookmark:
- Dashboard → Subscriptions
- Dashboard → Notifications → History
- Dashboard → Analytics
- Dashboard → Settings
```
### 5. Set Up Notifications
Get alerts for issues:
```
Dashboard → Settings → Notifications
→ Enable email alerts for:
[x] Queue errors
[x] High bounce rates
[x] API issues
```
---
## FAQ
**Q: Do I need to do anything after initial setup for notifications to work?**
No. Once the widget is enabled and working, DemandLoop operates automatically. When a product restocks, subscribers are notified without any manual action required.
**Q: Can I test the full flow without affecting real customers?**
Yes. Use a personal email address and an out-of-stock product (or temporarily set inventory to 0) to test the entire subscription and notification flow in isolation.
**Q: How long does it take for a notification email to arrive after restocking?**
Typically 1-5 minutes, depending on your Fair Queue settings. The webhook is received within seconds, and email is queued immediately after.
---
## Getting Help
### Self-Service Resources
**Common questions:**
- [How Customers Subscribe](/help-center/getting-started/how-customers-subscribe)
- [Widget Installation](/help-center/getting-started/widget-installation)
- [How Notifications Work](/help-center/notifications/how-notifications-work)
**Troubleshooting:**
- [Widget Not Showing](/help-center/troubleshooting/widget-not-showing)
- [Emails Not Delivering](/help-center/troubleshooting/emails-not-delivering)
**Settings & customization:**
- [Fair Queue Settings](/help-center/notifications/fair-queue)
- [Customizing Email Templates](/help-center/notifications/email-templates)
### Contact Support
**Email support:**
```
Email: support@metigro.io
Response time: Within 24 hours
Include:
- Shop domain
- Specific issue
- Screenshots (if applicable)
- Steps you've already tried
```
**Live chat:**
```
Dashboard → Help icon (bottom right)
Available: 9am-5pm EST, Mon-Fri
For urgent issues
```
### Video Tutorials (Coming Soon)
We're creating video walkthroughs:
- Complete setup guide
- Widget customization
- Email template design
- Dashboard navigation
**Subscribe for updates:**
```
Dashboard → Settings → Notifications
→ [x] "Product updates and tutorials"
```
---
## Summary
**Congratulations!**
You've successfully:
- Verified DemandLoop installation
- Enabled widget on your theme
- Tested subscription flow
- Received your first notification
- Configured basic settings
**DemandLoop is now live** and will automatically:
- Show widget on out-of-stock products
- Collect customer subscriptions
- Send notifications when products restock
- Track performance in your dashboard
**Next steps:**
1. Let it run and collect real customer subscriptions
2. Monitor Dashboard → Overview daily
3. Review analytics weekly
4. Optimize based on performance
**Questions?** Check our [full help center](/help) or contact support@metigro.io
---
## Appendix: Keyboard Shortcuts
**Dashboard navigation:**
```
G then S = Go to Subscriptions
G then N = Go to Notifications
G then A = Go to Analytics
G then O = Go to Settings
? = Show keyboard shortcuts
```
**Theme Editor:**
```
Ctrl/Cmd + S = Save theme
Ctrl/Cmd + Z = Undo
Ctrl/Cmd + Shift + Z = Redo
```
---
**Setup time:** ~5-10 minutes
**Difficulty:** Beginner-friendly
**Support:** support@metigro.io
**Updated:** 2025-01-13
Happy selling!
## How Customers Subscribe
Source: https://demandloop.metigro.io/help-center/getting-started/how-customers-subscribe
---
title: "How Customers Subscribe"
description: "Learn how customers sign up for back-in-stock notifications and what happens when products restock"
category: "getting-started"
order: 1
updated_at: "2025-01-05"
estimated_time: "3 min"
related_feature_pages:
- label: "Notify Me Button — Shopify"
url: "/shopify/feature/notify-me-button"
- label: "Notify Me Button — WooCommerce"
url: "/woocommerce/feature/notify-me-button"
- label: "Notify Me Button — BigCommerce"
url: "/bigcommerce/feature/notify-me-button"
- label: "Notify Me Button — Shopware"
url: "/shopware/feature/notify-me-button"
- label: "Notify Me Button — PrestaShop"
url: "/prestashop/feature/notify-me-button"
---
# How Customers Subscribe
When customers find an out-of-stock product they want, DemandLoop lets them subscribe for a restock notification. Here's exactly how it works.
## What You'll Accomplish
- Understand the end-to-end customer subscription flow
- Learn what happens automatically when products restock
- Know how Fair Queue distributes notifications fairly
- Identify where to monitor subscriptions in your dashboard
## Requirements
- DemandLoop installed and the widget enabled on your theme
- At least one out-of-stock product to observe the widget behavior
- Available on all plans (Free and Growth)
---
## The Customer Experience
### 1. Customer Visits Out-of-Stock Product
When a product variant is sold out, your "Add to Cart" button is automatically replaced with a **"Notify Me When Available"** button.
No setup needed—DemandLoop detects inventory levels via Shopify and shows the widget automatically.
### 2. Customer Enters Email
Clicking the button opens a simple modal where customers enter their email address. That's it—no account creation, no complicated forms.
**What they see:**
- Product name and variant (size, color, etc.)
- Simple email input
- One-click subscribe button
**Time to subscribe:** Less than 10 seconds
### 3. Confirmation Email
Customers immediately receive a confirmation email with:
- Subscription confirmation
- Product details with image
- Link to manage/unsubscribe
This builds trust and reduces "did it work?" anxiety.
## What Happens When You Restock
### Automatic Detection
When you add inventory in Shopify, DemandLoop detects the change within seconds via webhook and queues notifications.
### Smart Notification Timing
Based on your [Fair Queue settings](/help-center/notifications/fair-queue), subscribers receive emails in controlled batches. This prevents:
- Inventory selling out to first few people
- Angry customers who got notified but product is gone again
- Fair distribution across all waiting customers
### One-Time Notification
Each subscription = one notification. After a customer gets their restock email, the subscription is marked as "notified" and won't send again.
If the product sells out again, customers need to resubscribe.
## FAQ
**Q: Can customers subscribe to multiple variants?**
Yes! If you sell t-shirts in multiple sizes, a customer can subscribe to S, M, and L separately. Each variant tracks subscriptions independently.
**Q: Do customers need a Shopify account?**
No. Any valid email works—no account required.
**Q: What if a customer changes their mind?**
Every email includes an unsubscribe link. One click removes them from the waitlist.
**Q: Can I see who subscribed?**
Yes. Go to **Subscriptions** in your dashboard to see all active subscriptions, filter by product, and export data.
**Q: What happens if I never restock the product?**
Subscriptions stay active until:
- Product restocks (sends notification)
- Customer unsubscribes
- You manually cancel subscriptions (recommended if discontinuing product)
## Why This Matters for Your Store
**Captures lost sales:** Instead of customers leaving disappointed, you capture their intent and contact info.
**Measures demand:** High subscription counts = strong demand signal for inventory planning.
**Builds customer relationships:** Proactive communication keeps customers engaged with your brand.
**Drives revenue:** When notified customers return, they're ready to buy—conversion rates are typically 15-25%.
## What Success Looks Like
To confirm subscriptions are working correctly in your store:
- **Widget visible**: Out-of-stock product pages show the "Notify Me When Available" button instead of "Add to Cart"
- **Subscription recorded**: After a customer subscribes, the entry appears in **Dashboard > Subscriptions > Active Subscriptions** within seconds
- **Notification delivered**: When you restock, subscribers receive an email within 1-5 minutes (depending on your Fair Queue batch settings)
- **Dashboard metrics updating**: Subscription count, notification delivery status, and open rates are visible in your dashboard
---
## Next Steps
- [Managing Subscriptions](/help-center/subscriptions/managing-subscriptions) - View and manage customer waitlists
- [Fair Queue Settings](/help-center/notifications/fair-queue) - Control notification timing
- [Understanding Analytics](/help-center/analytics/understanding-analytics) - Track performance
**Pro tip:** Check your subscriptions weekly. High subscription counts on specific products are your customers telling you what to restock!
## Widget Installation
Source: https://demandloop.metigro.io/help-center/getting-started/widget-installation
---
title: "Widget Installation"
description: "Install the Notify Me widget on your Shopify store in minutes"
category: "getting-started"
order: 2
updated_at: "2025-01-05"
estimated_time: "5 min"
related_feature_pages:
- label: "Notify Me Button — Shopify"
url: "/shopify/feature/notify-me-button"
howto_steps:
- name: "Install DemandLoop from the Shopify App Store"
text: "Open the Shopify App Store, find DemandLoop, and click Install. Shopify will request permission to access your store theme."
- name: "Approve theme access"
text: "Review the permission request and click Approve. DemandLoop uses Shopify Theme App Extensions to embed the widget without editing theme files."
- name: "Verify the Notify Me widget appears"
text: "Find a product with zero inventory, visit its page in your live store, and confirm the Notify Me When Available button appears in place of Add to Cart."
---
# Widget Installation
The DemandLoop widget automatically appears on out-of-stock product pages, replacing the "Add to Cart" button with "Notify Me When Available." No coding required.
## Requirements
- Shopify store with admin access
- DemandLoop app installed from the Shopify App Store
- A Shopify Online Store 2.0 compatible theme (for automatic installation)
- Available on all plans (Free and Growth)
---
## Automatic Installation (Recommended)
### How It Works
When you install DemandLoop, the widget is automatically added to your theme using Shopify's **Theme App Extensions**.
**What happens:**
1. You install DemandLoop from Shopify App Store
2. App asks for theme access permission
3. You approve
4. Widget is instantly live on all product pages
**Time to install:** Under 2 minutes
### Checking Installation
To verify the widget is working:
1. Find an out-of-stock product in your store
2. Visit the product page (in your live store, not admin)
3. You should see "Notify Me When Available" button
**If you don't see it:** Check [Troubleshooting](#troubleshooting) section below.
## Manual Installation (Advanced)
Only use manual installation if:
- You have a heavily customized theme
- Automatic installation didn't work
- You're using vintage/unsupported themes
### Steps for Manual Installation
**1. Go to Settings → Theme Customization**
In DemandLoop dashboard:
- Click "Settings" in sidebar
- Select "Widget Settings"
- Copy the widget code snippet
**2. Edit Your Theme Code**
In Shopify Admin:
- Go to **Online Store → Themes**
- Click **Actions → Edit code**
- Find `sections/product-template.liquid` (or similar)
**3. Add Widget Code**
Paste this where "Add to Cart" button is located:
```liquid
{% if product.available %}
{% else %}
{% endif %}
```
**4. Save and Test**
- Save theme changes
- Visit out-of-stock product page
- Verify widget appears
**Manual installation requires Liquid knowledge.** If you're not comfortable editing theme code, contact our support team for assistance at support@metigro.io
## Customizing the Widget
### Basic Customization
**Go to:** Settings → Widget Settings
**What you can customize:**
**Button Text**
```
Default: "Notify Me When Available"
Custom: "Join the Waitlist" or "Get Restock Alert"
```
**Button Colors**
- Primary color (button background)
- Text color
- Border color
- Hover state colors
**Modal Appearance**
- Header text: "Get notified when this item is back in stock"
- Success message: "Thanks! We'll email you when it's available"
- Input placeholder: "Enter your email address"
### Preview Changes
Use the **Preview** button to see changes before saving:
1. Make customization changes
2. Click "Preview"
3. See live preview in modal
4. Save when satisfied
## Widget Behavior
### When Widget Shows
The widget automatically appears when:
- Product inventory = 0
- Product is published and active
- Variant is available for purchase (not discontinued)
### When Widget Hides
Widget is hidden when:
- Product has inventory available
- Product is archived/draft
- Variant is discontinued
- Product type is excluded in settings
### Multi-Variant Products
For products with multiple variants (sizes, colors):
**Behavior:**
- Widget tracks inventory per variant
- Shows "Notify Me" only for out-of-stock variants
- If Red/Small is out but Red/Medium is available, customer can:
- Buy Red/Medium (Add to Cart shows)
- Subscribe to Red/Small (Notify Me shows)
**How it looks:**
```
Size selector: [S] [M] [L]
Color selector: [Red] [Blue] [Black]
Selected: Red / Small
Inventory: 0
Button: "Notify Me When Available" ← widget
Selected: Red / Medium
Inventory: 5
Button: "Add to Cart" ← default Shopify
```
## Theme Compatibility
### Fully Compatible Themes
DemandLoop works automatically with all modern Shopify themes:
**Shopify Official Themes**
- Dawn (2.0+)
- Sense
- Studio
- Craft
- All Online Store 2.0 themes
**Popular Third-Party Themes**
- Impulse
- Turbo
- Prestige
- Empire
- District
**Custom Themes**
- Built on Shopify 2.0 architecture
- Uses standard Liquid structure
### Partial Compatibility
Some older themes may need manual installation:
- Themes built before 2021
- Heavily customized themes
- Themes with non-standard product templates
**If your theme isn't working:** Contact support with your theme name, and we'll help with setup.
## Mobile Experience
The widget is fully responsive and works perfectly on:
- iPhone/iOS devices
- Android devices
- Tablets (iPad, etc.)
**Mobile optimizations:**
- Touch-friendly button size (min 44x44px)
- Simplified modal layout
- Optimized input fields for mobile keyboards
- Fast loading (< 100kb JavaScript)
## Translation & Localization
### Multi-Language Support
If you sell in multiple languages using Shopify Markets:
**Automatic translation:**
- Widget detects customer's language
- Displays in appropriate language automatically
- Supports 15+ languages
**Supported languages:**
- English, Spanish, French, German, Italian
- Portuguese, Dutch, Polish, Czech
- Swedish, Danish, Norwegian, Finnish
- Japanese, Korean
**Custom translations:**
Go to **Settings → Widget Settings → Translations** to customize text for each language.
## Performance
### Widget Loading
**Load time:** < 50ms
**File size:** 85kb (compressed)
**Impact on store:** Minimal (loads async, non-blocking)
**How it loads:**
1. Page loads normally
2. Widget script loads in background
3. Widget appears when ready
4. No impact on "Add to Cart" functionality
### Caching Friendly
Widget works with all caching solutions:
- Shopify CDN
- Cloudflare
- Third-party CDN providers
## Troubleshooting
### Widget Not Showing
**Check these items:**
**1. Product is actually out of stock**
- Go to Shopify Admin → Products
- Verify inventory = 0 for the variant
- Check if "Track quantity" is enabled
**2. Theme app extension is enabled**
- Go to Shopify Admin → Online Store → Themes
- Click "Customize"
- Check App Embeds section
- Ensure DemandLoop is toggled ON
**3. Widget is enabled in settings**
- Go to DemandLoop Settings
- Check "Widget Enabled" toggle is ON
- Verify product isn't excluded
**4. Browser cache**
- Hard refresh page (Cmd+Shift+R on Mac, Ctrl+Shift+R on Windows)
- Try incognito/private browsing mode
- Clear browser cache
**5. Theme conflicts**
- Check browser console for JavaScript errors (F12)
- Look for conflicting apps
- Try disabling other apps temporarily
### Widget Shows But Doesn't Work
**If clicking button does nothing:**
**Check these:**
1. JavaScript errors in console (F12)
2. Ad blockers or privacy extensions blocking widget
3. Theme JavaScript conflicts
4. Customer's browser outdated
**Solution:** Contact support with:
- Theme name and version
- Browser name and version
- Screenshot of issue
- Console error messages (if any)
### Widget Looks Broken
**Visual issues (wrong colors, misaligned):**
**Common causes:**
1. Theme CSS conflicts
2. Custom CSS overriding widget styles
3. Recent theme updates
**Quick fixes:**
1. Reset widget customization to defaults
2. Clear theme cache
3. Check for theme updates
4. Add custom CSS to fix specific issues
**Custom CSS example:**
```css
/* Fix widget alignment */
[data-demandloop-widget] {
margin-top: 1rem;
width: 100%;
}
```
Add this in **Settings → Widget Settings → Custom CSS**
## Testing the Widget
### Before Going Live
**Test checklist:**
- [x] Widget appears on out-of-stock product
- [x] Modal opens when button clicked
- [x] Email subscription works
- [x] Confirmation email arrives
- [x] Widget hides when product in stock
- [x] Mobile experience is good
- [x] Widget matches brand colors
### Test Mode
**Use test mode to verify without affecting real customers:**
1. Go to Settings → Widget Settings
2. Enable "Test Mode"
3. Test widget (subscriptions go to test inbox)
4. Disable test mode when ready
**Always test on multiple devices:** Desktop, mobile, and tablet. What looks good on desktop might need adjustment on mobile.
## FAQ
**Q: Can I use a different button text?**
Yes! Go to Settings → Widget Settings → Button Text and customize.
**Q: Does the widget slow down my store?**
No. Widget loads asynchronously and has minimal performance impact (< 85kb).
**Q: Can customers subscribe without seeing the widget?**
No. Widget must be visible on product page for customers to subscribe.
**Q: What if I have multiple "out of stock" apps?**
Only one can control the button. Disable other back-in-stock apps to avoid conflicts.
**Q: Can I hide widget on specific products?**
Yes. Go to Settings → Widget Settings → Excluded Products and add product IDs.
**Q: Does widget work with subscription products?**
Yes, but we recommend using widget for one-time purchases and handling subscriptions separately.
**Q: Can I A/B test different widget designs?**
Not built-in, but you can manually test different designs with different customer segments. Contact support for guidance.
## Next Steps
- [How Customers Subscribe](/help-center/getting-started/how-customers-subscribe) - Understand customer experience
- [Troubleshooting Guide](/help-center/troubleshooting/widget-not-showing) - Fix common issues
**Pro tip:** Use your brand's primary color for the widget button to maintain visual consistency. Customers are more likely to engage with familiar brand elements.
---
# Managing Subscriptions
## Managing Subscriptions
Source: https://demandloop.metigro.io/help-center/subscriptions/managing-subscriptions
---
title: "Managing Subscriptions"
description: "View, filter, and manage customer back-in-stock subscriptions in your dashboard"
category: "subscriptions"
order: 2
updated_at: "2025-01-05"
estimated_time: "5 min"
---
# Managing Subscriptions
Your Subscriptions page shows everyone waiting for products to come back in stock. Use it to track demand, plan restocks, and manage customer expectations.
## What you'll accomplish
- Navigate and understand the Subscriptions dashboard
- Search, filter, and take action on individual or bulk subscriptions
- Use notification history to verify delivery and troubleshoot issues
- Track plan usage limits and plan restocks based on demand data
## Requirements
- DemandLoop app installed and active on your Shopify store
- At least one customer subscription (via the "Notify Me" widget)
- Dashboard access (store owner or staff with app permissions)
## Accessing Subscriptions
**Dashboard → Subscriptions**
You'll see two tabs:
- **Active Subscriptions** - Customers currently waiting
- **Notification History** - Past notifications sent
## Understanding Active Subscriptions
### What You'll See
Each subscription shows:
- Customer email
- Product name + variant (size, color, etc.)
- Subscription date
- Status (Active, Paused, Cancelled)
### Why This Matters
**High subscriptions = high demand.** If 347 people are waiting for a specific product, that's a strong restock signal.
**Track wait times.** Been weeks since subscriptions started? Customers might be getting impatient.
## Finding Specific Subscriptions
### Search by Email
Type a customer's email to find their subscriptions. Useful for customer service inquiries.
### Filter by Product
See all subscriptions for a specific product. Great for:
- Planning restock quantities
- Deciding what to order
- Understanding variant demand (which sizes/colors are most wanted)
### Filter by Date Range
See subscriptions created in a specific period. Helps identify demand trends.
## Taking Action
### Single Subscription Actions
Click the ⋮ menu next to any subscription to:
**Pause** - Temporarily stop notifications (customer asked to delay)
**Cancel** - Remove subscription (product discontinued, customer requested)
**Resend Confirmation** - Customer didn't receive original email
### Bulk Actions
Select multiple subscriptions to:
**Export CSV** - Download data for analysis
**Pause Notifications** - Temporarily hold multiple subscriptions
**Cancel Subscriptions** - Remove multiple at once (use when discontinuing products)
**Cancelled subscriptions are permanent.** Customers need to resubscribe if they still want notifications.
## Notification History
Switch to **Notification History** tab to see past notifications sent.
### What You'll See
- Which emails were delivered successfully
- Bounce/failure reasons
- Opens and clicks (Growth plan only)
- Delivery timestamps
### Why Check This
**Deliverability issues:** High bounce rate? Email addresses might be invalid.
**Engagement tracking:** See which products generate most interest (Growth plan).
**Customer service:** Verify if a customer received their notification.
## Plan Usage Tracking
At the top of the page:
```
Free Plan: 247 of 500 active subscriptions • 143 of 200 emails this month
```
This shows:
- Active subscription count vs. limit
- Emails sent this month vs. limit
Usage resets on the 1st of each month. Upgrade to Growth plan for unlimited subscriptions and emails.
## Common Use Cases
### Planning Restocks
1. Go to Subscriptions
2. Filter by product
3. Check subscription count
4. Order inventory based on demand
**Example:** 150 subscriptions for Blue T-Shirt (Size M) → Order at least 150 units
### Discontinued Products
When discontinuing a product:
1. Filter subscriptions for that product
2. Select all subscriptions
3. Click "Cancel Subscriptions"
4. (Optional) Export emails first to offer alternatives
### Customer Service
Customer claims they didn't get notification:
1. Search their email in Subscriptions
2. Check Notification History
3. Verify delivery status
4. Resend if needed
## Best Practices
**Check weekly:** Monitor high-demand products for restock planning
**Clean up regularly:** Cancel subscriptions for discontinued products
**Export monthly:** Keep subscription data for trend analysis
**Watch patterns:** Subscriptions spike after marketing campaigns? Track the correlation
## Quick Tips
- [x] High subscription count = strong buy signal
- [x] Use filters to identify trends
- [x] Export data for inventory forecasting
- [x] Check notification history for delivery issues
- [ ] Don't ignore old subscriptions — cancel if product discontinued
## Verify
After exploring the Subscriptions page, confirm these work correctly:
- [ ] Active Subscriptions tab loads and shows current waitlisted customers
- [ ] Notification History tab displays past email delivery statuses
- [ ] Search by email returns the correct customer records
- [ ] Bulk actions (export, pause, cancel) complete without errors
## FAQ
**Q: Can a cancelled subscription be restored?**
No. Cancelled subscriptions are permanent. The customer must resubscribe through the widget on the product page.
**Q: How often does subscription data refresh?**
Subscription data updates in real time. Notification history refreshes every few minutes.
**Q: Does exporting subscriptions include customer names?**
Exports include email addresses, product/variant details, subscription dates, and statuses. Customer names are not stored by DemandLoop.
## Next Steps
- [How Customers Subscribe](/help-center/getting-started/how-customers-subscribe) - Understand the customer journey
- [Fair Queue Settings](/help-center/notifications/fair-queue) - Control notification timing
- [Understanding Analytics](/help-center/analytics/understanding-analytics) - Track performance metrics
**Pro tip:** Export subscriptions weekly and compare product demand trends. This data is gold for inventory planning!
---
# Notifications
## How Notifications Work
Source: https://demandloop.metigro.io/help-center/notifications/how-notifications-work
---
title: "How Notifications Work"
description: "Understand how DemandLoop detects restocks, selects subscribers with Fair Queue, and delivers notifications via email, web push, and SMS"
category: "notifications"
order: 1
updated_at: "2026-02-21"
estimated_time: "3 min"
related_feature_pages:
- label: "Back in Stock — Shopify"
url: "/shopify/feature/back-in-stock"
- label: "Back in Stock — WooCommerce"
url: "/woocommerce/feature/back-in-stock"
- label: "Back in Stock — BigCommerce"
url: "/bigcommerce/feature/back-in-stock"
- label: "Back in Stock — Shopware"
url: "/shopware/feature/back-in-stock"
- label: "Back in Stock — PrestaShop"
url: "/prestashop/feature/back-in-stock"
---
# How Notifications Work
When a product restocks, DemandLoop detects the inventory increase, selects a batch of waiting subscribers (Fair Queue), and sends notifications through the channels each customer opted into.
## What you'll accomplish
- Understand the end-to-end notification lifecycle from subscription to delivery
- Learn how Fair Queue selects which subscribers get notified per restock
- Know where to configure each notification channel (email, web push, SMS)
- Diagnose common delivery issues using Notification History
## Requirements
- **Plan:** Free plan or higher (email included on all plans; SMS requires Essentials)
- **Access:** DemandLoop dashboard access
- **For SMS:** A connected Twilio BYOT integration (see the Twilio SMS setup guide)
## The notification lifecycle
### 1) A customer subscribes (and chooses channels)
Customers can subscribe using one or more channels:
- **Email** (standard)
- **Web push** (optional; requires browser permission)
- **SMS** (optional; requires explicit SMS consent and an active Twilio BYOT integration)
**What success looks like**
- The customer sees a confirmation message on your storefront
- The subscription appears in your subscriptions list
### 2) A restock is detected
When your commerce platform reports that inventory for a variant increased, DemandLoop:
- identifies the product/variant that restocked
- checks how many subscribers are waiting
- prepares notification send records for the next batch
### 3) Fair Queue selects who gets notified
Fair Queue helps prevent “inventory rush” by notifying a controlled number of subscribers per restock event.
Fair Queue selection takes into account:
- available inventory at the time of the restock
- how many subscribers are waiting
- cooldown rules that prevent repeatedly notifying the same subscribers too frequently
Configure Fair Queue in:
- Navigation path: **Notifications → Fair Queue**
### 4) Notifications are queued (and visible in Notification History)
DemandLoop tracks each notification attempt, including the channel and delivery status.
Find this in:
- Navigation path: **Subscriptions → Notification History**

**What success looks like**
- You can filter by **channel** (Email / Web push / SMS)
- You can see timestamps such as **Queued**, **Accepted/Sent**, and **Delivered** (when available)
### 5) Delivery happens independently per channel
Each channel sends independently. A failure in one channel does not block the others.
#### Email
- Sends to subscribers with an email address
- Includes an unsubscribe mechanism
#### Web push
- Sends only to customers who opted in to web push in their browser/device
- May be delayed for timing rules (for example, daytime delivery in the customer’s timezone)
Configure web push in:
- Navigation path: **Notifications → Push Notifications**
#### SMS (Twilio BYOT)
- Requires Twilio BYOT to be connected and enabled
- Sends only when the customer explicitly consented to SMS
- May be delayed during quiet hours to avoid late-night delivery
- Includes the required opt-out instruction (“Reply STOP to unsubscribe”)
Configure SMS in:
- Navigation path: **Modules → SMS (Twilio) → Settings** (connect Twilio)
- Navigation path: **Notifications → SMS Notifications** (enable SMS + template)
## Where to configure notification settings

- **Notifications → Email Settings** (sender + templates)
- **Notifications → Push Notifications** (enablement + content)
- **Notifications → SMS Notifications** (enablement + template)
- **Modules → SMS (Twilio) → Settings** (Twilio connection)
- **Notifications → Fair Queue** (batching rules)
- **Subscriptions → Notification History** (monitor delivery)
## Understanding delivery statuses
Notification History shows a delivery status per notification attempt. These statuses represent the system’s best available signal from the delivery channel/provider.
Common statuses you may see:
- **Scheduled**: queued for sending
- **Accepted**: handed off to the delivery provider (or sent, depending on channel)
- **Delayed**: postponed by timing rules
- **Delivered**: provider confirmed delivery (when the channel supports callbacks)
- **Bounced**: recipient address rejected (email)
- **Failed**: could not be delivered (after error/retry rules)
- **Complaint / Suppressed**: provider indicates the address should no longer be messaged
- **Unknown**: status could not be determined
## If a customer says they didn’t get a notification
1) Check **Subscriptions → Notification History**
- Search by customer email and product/variant
- Confirm the **channel** and **status**
2) Confirm they were eligible for this restock batch
- With Fair Queue enabled, not every subscriber is notified on every restock
- Subscribers not selected remain waiting for the next restock
3) Confirm channel prerequisites
- **Email:** address is valid, and the customer didn’t unsubscribe
- **Web push:** customer opted in on the same browser/device and web push is enabled
- **SMS:** Twilio BYOT is active, SMS notifications are enabled, and the customer provided SMS consent
4) Check for timing-related delays
- Web push can be delayed by timing rules
- SMS can be delayed during quiet hours
## FAQ
**Q: Does DemandLoop retry failed notifications?**
Yes. Failed delivery attempts are retried according to the channel's retry rules. Check Notification History for the latest status.
**Q: Can a customer receive notifications on multiple channels at once?**
Yes. If a customer opted into email and SMS, both channels send independently for the same restock event.
**Q: How quickly are notifications sent after a restock?**
Notifications are queued within seconds of a restock event. Actual delivery timing depends on Fair Queue settings and channel-specific rules (such as quiet hours for SMS).
## Next steps
- [Fair Queue](/help-center/notifications/fair-queue)
- [Email Templates](/help-center/notifications/email-templates)
- [Twilio SMS Setup Guide](/help-center/notifications/twilio-sms-byot-setup-guide)
- [Emails Not Delivering](/help-center/troubleshooting/emails-not-delivering)
## Fair Queue Settings
Source: https://demandloop.metigro.io/help-center/notifications/fair-queue
---
title: "Fair Queue Settings"
description: "Control how notifications are sent to ensure fair distribution and prevent inventory rushes"
category: "notifications"
order: 2
updated_at: "2025-01-05"
estimated_time: "3 min"
related_feature_pages:
- label: "Fair Queue — Shopify"
url: "/shopify/feature/fair-queue"
- label: "Fair Queue — WooCommerce"
url: "/woocommerce/feature/fair-queue"
- label: "Fair Queue — BigCommerce"
url: "/bigcommerce/feature/fair-queue"
- label: "Fair Queue — Shopware"
url: "/shopware/feature/fair-queue"
- label: "Fair Queue — PrestaShop"
url: "/prestashop/feature/fair-queue"
---
# Fair Queue Settings
Fair Queue controls how notifications are distributed when products restock. Instead of notifying everyone at once, it sends emails in controlled batches—giving all customers a fair chance to purchase.
## What you'll accomplish
- Understand why Fair Queue exists and what problem it solves
- Configure batch size and interval for your inventory patterns
- Monitor queue performance and adjust settings over time
## Requirements
- **Plan:** Free plan or higher (Fair Queue is available on all plans)
- **Access:** DemandLoop dashboard access
- **Prerequisite:** At least one active subscription so you can observe queue behavior
## The Problem Without Fair Queue
### Inventory Rush Scenario
**Situation:** 200 customers waiting, 20 units restocked
**Without Fair Queue:**
```
10:00 AM - All 200 customers notified simultaneously
10:02 AM - First 50 customers rush to store
10:05 AM - All 20 units sold
Result:
+ 20 happy customers
- 180 disappointed customers (notified but product already gone)
- Potential negative reviews
- Frustrated customers unsubscribe
```
**With Fair Queue:**
```
10:00 AM - First 20 customers notified
12:00 PM - Next 20 customers notified
Result:
+ 20 happy customers (purchased)
+ 20 customers notified but not disappointed (stock sold before their turn)
+ 160 customers still waiting for next restock (not disappointed)
+ Fair distribution maintained
```
## How Fair Queue Works
### Batch Processing
Notifications are sent in **batches** instead of all at once.
**Key settings:**
**Batch Size** - How many customers per batch
**Batch Interval** - Time between batches
**Example configuration:**
```
Batch Size: 10 customers
Batch Interval: 2 hours
Timeline:
10:00 AM - First 10 customers notified
12:00 PM - Next 10 customers notified
2:00 PM - Next 10 customers notified
4:00 PM - Next 10 customers notified
...continues until all notified or stock runs out
```
### Automatic Pause
**Smart inventory tracking:**
When inventory reaches zero, the queue **automatically pauses**:
- Remaining subscribers stay in queue
- No more notifications sent
- Queue resumes when product restocks again
**Example:**
```
Subscribers: 50 customers
Inventory: 15 units
Queue: Batch size 10, interval 2 hours
10:00 AM - Notify first 10 customers
10:30 AM - 8 units sold (7 remaining)
12:00 PM - Notify next 10 customers
12:45 PM - 7 units sold (0 remaining)
Queue PAUSES - 30 remaining customers NOT notified
Next Week:
Inventory: 25 units added
Queue RESUMES - Continue notifying remaining 30 customers
```
## Configuring Fair Queue
### Access Settings
**Go to:** Notifications → Fair Queue Settings
### Basic Settings
**Enable/Disable Fair Queue**
- Toggle ON: Notifications sent in batches (recommended)
- Toggle OFF: All notifications sent immediately
**Batch Size**
```
Recommended: 10-20 customers per batch
Minimum: 5 customers
Maximum: 100 customers
```
**Batch Interval**
```
Recommended: 1-4 hours between batches
Minimum: 30 minutes
Maximum: 24 hours
```
### Default Configuration
When you first install DemandLoop:
```
Fair Queue: Enabled
Batch Size: 10 customers
Batch Interval: 2 hours
```
These defaults work well for most stores.
## Choosing the Right Settings
### Small Restocks (< 50 units)
**Recommended:**
```
Batch Size: 10 customers
Batch Interval: 2 hours
```
**Why:** Gives each batch enough time to purchase before next batch arrives.
**Example:**
```
Restock: 30 units
Subscribers: 100 customers
Result: First 3 batches (30 customers) get notified
Remaining 70 customers wait for next restock
```
### Medium Restocks (50-200 units)
**Recommended:**
```
Batch Size: 20 customers
Batch Interval: 3 hours
```
**Why:** Faster notification with still-fair distribution.
**Example:**
```
Restock: 100 units
Subscribers: 200 customers
Result: 5 batches over 15 hours
~100 customers notified
Stock likely sells out before all notified
```
### Large Restocks (200+ units)
**Recommended:**
```
Batch Size: 50 customers
Batch Interval: 4 hours
```
**Why:** High confidence you have enough stock for all subscribers.
**Example:**
```
Restock: 300 units
Subscribers: 150 customers
Result: 3 batches over 8 hours
All 150 customers notified
Stock remaining for walk-in customers
```
### High-Demand/Limited Items
**Recommended:**
```
Batch Size: 5 customers
Batch Interval: 1 hour
```
**Why:** Maximum fairness, everyone has equal chance.
**Example:**
```
Product: Limited Edition Sneakers
Restock: 25 pairs
Subscribers: 500 customers
Result: 5 batches (25 customers) notified
Each batch has great chance to purchase
Remaining 475 customers not falsely alerted
```
## Advanced Strategies
### Priority Queue (Coming Soon)
**VIP customers first:**
```
Tier 1: VIP customers (first 2 batches)
Tier 2: Repeat customers (next 5 batches)
Tier 3: New customers (remaining batches)
```
Currently all customers are treated equally (first-come, first-served).
### Product-Specific Settings (Manual)
Different settings for different products:
**Example:**
```
Regular T-Shirt (restocks weekly):
Batch Size: 50
Interval: 6 hours
Limited Hoodie (restocks monthly):
Batch Size: 5
Interval: 1 hour
```
**How to implement:** Contact support for custom configuration.
### Time-of-Day Optimization
**Best times to send notifications:**
- **Morning:** 8-10 AM (high open rates)
- **Evening:** 6-8 PM (high conversion)
- **Night:** 11 PM-6 AM (low engagement, avoid)
**Current behavior:** Batches send regardless of time
**Workaround:** Set batch interval to align with business hours
**Example:**
```
Restock detected at 11 PM
Batch Interval: 10 hours
First batch: 9 AM next day (perfect timing)
```
## Monitoring Queue Performance
### Queue Dashboard
**Go to:** Notifications → Fair Queue
**What you'll see:**
- Active queues (products currently notifying)
- Customers notified vs remaining
- Next batch send time
- Estimated completion time
**Example display:**
```
Product: Premium Hoodie - Black / Large
Queue Status: Active
Notified: 30 of 120 customers (25%)
Next Batch: 2:00 PM (in 45 minutes)
Estimated Completion: 8:00 PM (6 hours)
```
### Notification History
**Go to:** Subscriptions → Notification History
**Filter by:**
- Date range
- Product
- Batch number
**Use this to:**
- Verify batches are sending
- Check conversion rates per batch
- Identify optimal batch sizes
## Real-World Examples
### Example 1: Fashion Boutique
**Store:** Small fashion boutique
**Product:** Designer jeans (popular item)
**Challenge:** Limited inventory (10-30 units per restock)
**Configuration:**
```
Batch Size: 5 customers
Batch Interval: 1 hour
```
**Results:**
- 95% of notified customers purchase
- Very few "sold out" complaints
- Customers feel they have fair chance
### Example 2: Electronics Store
**Store:** Tech accessories
**Product:** Phone cases (regular restocks)
**Challenge:** High volume (100-200 units per restock)
**Configuration:**
```
Batch Size: 30 customers
Batch Interval: 3 hours
```
**Results:**
- All subscribers notified within 24 hours
- Inventory almost always sufficient
- Fast notification cycle = happy customers
### Example 3: Limited Edition Drops
**Store:** Streetwear brand
**Product:** Limited sneakers (monthly drops)
**Challenge:** Extreme demand (1000+ subscribers, 50 units)
**Configuration:**
```
Batch Size: 5 customers
Batch Interval: 30 minutes
```
**Results:**
- 50 customers notified over 5 hours
- Each batch has high purchase rate
- Remaining 950 customers not disappointed
- Fair perception maintained
## Best Practices
### Start Conservative
**First time setup:**
```
Batch Size: 10 customers
Batch Interval: 2 hours
```
Monitor performance for 2-3 restocks, then adjust.
### Monitor Conversion Rates
**Track these metrics:**
- Notifications sent vs purchases made
- Inventory remaining after queue completes
- Customer complaints about "sold out"
**Adjust based on data:**
- High conversion (>50%) → Increase batch size
- Low inventory remaining → Decrease batch size
- Many complaints → Decrease batch size or interval
### Communicate the Policy
**Add to FAQ:**
```
Q: Why didn't I get notified immediately?
A: We use a fair queue system to ensure everyone has
an equal chance to purchase limited items.
Notifications are sent in batches over several hours.
```
**Benefits of transparency:**
- Customers understand delays
- Reduces support inquiries
- Builds trust in fairness
### Test Before Launch
**Before enabling Fair Queue:**
1. Set up configuration
2. Use test product with controlled inventory
3. Subscribe test emails
4. Monitor batch sends
5. Verify timing and behavior
6. Adjust settings if needed
### Review Monthly
**Set calendar reminder to:**
- Check queue performance metrics
- Review customer feedback
- Adjust settings based on inventory patterns
- Test different configurations seasonally
## Disabling Fair Queue
### When to Disable
**Consider disabling if:**
- You always have abundant inventory
- Products restock very frequently (daily)
- Customer base is small (< 100 subscribers)
- Speed is more important than fairness
**Example scenario:**
```
Store: Grocery delivery app
Product: Organic milk
Restock: Daily, 500 units
Subscribers: 50 customers
Decision: Disable Fair Queue (plenty of stock)
```
### How to Disable
1. Go to Notifications → Fair Queue Settings
2. Toggle "Enable Fair Queue" to OFF
3. Save changes
**Behavior after disabling:**
- All notifications sent immediately when product restocks
- No batching or delays
- First-come-first-served (fastest customers win)
## Troubleshooting
### Queue Not Processing
**Problem:** Batches not sending
**Check:**
1. Fair Queue enabled in settings
2. Product actually restocked (inventory > 0)
3. Subscribers exist for the product
4. No Shopify API issues (check status page)
**Solution:**
- Manually trigger queue from dashboard
- Check system status
- Contact support if issue persists
### Queue Too Slow
**Problem:** Taking too long to notify all customers
**Current settings:**
```
Batch Size: 10
Batch Interval: 4 hours
Subscribers: 200
Time: 80 hours (3+ days!)
```
**Solution:**
```
Increase batch size to 25
Reduce interval to 2 hours
New time: 16 hours (much better)
```
### Queue Too Fast
**Problem:** Inventory selling out before queue completes
**Current settings:**
```
Batch Size: 50
Batch Interval: 1 hour
Inventory: 30 units
Result: First batch buys everything
```
**Solution:**
```
Decrease batch size to 10
Increase interval to 2 hours
Better distribution across more batches
```
## FAQ
**Q: Can I pause an active queue?**
Yes. Go to Notifications → Fair Queue → Find active queue → Click "Pause."
**Q: Can I manually trigger the next batch?**
Yes. Go to active queue → Click "Send Next Batch Now."
**Q: What if product sells out mid-queue?**
Queue automatically pauses. Remaining subscribers stay queued for next restock.
**Q: Do I need Fair Queue if I have unlimited inventory?**
No. If you always have 100+ units, you can disable Fair Queue and notify everyone immediately.
**Q: Can I prioritize certain customers?**
Not currently. All customers are treated equally (first-come-first-served by subscription date).
**Q: Does Fair Queue work with preorders?**
No. Preorders don't use Fair Queue since all customers can purchase immediately (no inventory limits).
**Q: Can I see which customers are in which batch?**
Yes. Go to Notifications → Fair Queue → View Queue → See batch assignments.
## Next Steps
- [How Notifications Work](/help-center/notifications/how-notifications-work) - Understand notification flow
- [Email Templates](/help-center/notifications/email-templates) - Customize notification content
- [Understanding Analytics](/help-center/analytics/understanding-analytics) - Track queue performance
**Pro tip:** Start with smaller batch sizes and shorter intervals. You can always increase later if inventory allows. It's easier to speed up than to handle disappointed customers!
## Customizing Emails
Source: https://demandloop.metigro.io/help-center/notifications/email-templates
---
title: "Customizing Email Templates"
description: "Personalize notification emails to match your brand and improve customer engagement"
category: "notifications"
order: 3
updated_at: "2025-01-05"
estimated_time: "5 min"
related_feature_pages:
- label: "Back in Stock — Shopify"
url: "/shopify/feature/back-in-stock"
- label: "Back in Stock — WooCommerce"
url: "/woocommerce/feature/back-in-stock"
- label: "Back in Stock — BigCommerce"
url: "/bigcommerce/feature/back-in-stock"
- label: "Back in Stock — Shopware"
url: "/shopware/feature/back-in-stock"
- label: "Back in Stock — PrestaShop"
url: "/prestashop/feature/back-in-stock"
---
# Customizing Email Templates
DemandLoop sends several types of emails to customers. Customize these templates to match your brand voice, colors, and messaging—improving engagement and conversion rates.
## What you'll accomplish
- Understand the three email types DemandLoop sends
- Customize templates with your brand colors, logo, and copy
- Use template variables to personalize messages
- Apply best practices for subject lines, CTAs, and mobile rendering
## Requirements
- **Plan:** Free plan or higher (email is included on all plans)
- **Access:** DemandLoop dashboard access
- **For custom domain:** DNS access to add SPF, DKIM, and DMARC records
## Email Types
DemandLoop sends three main email types:
### 1. Subscription Confirmation
**Sent:** Immediately after customer subscribes
**Purpose:** Confirm subscription, set expectations
**Default subject:** "You're on the waitlist for {product_name}"
**Contains:**
- Subscription confirmation
- Product image and details
- Expected restock timeframe (if known)
- Manage subscription link
- Unsubscribe link
### 2. Restock Notification
**Sent:** When product comes back in stock (via Fair Queue)
**Purpose:** Alert customer, drive purchase
**Default subject:** "{product_name} is back in stock!"
**Contains:**
- Product image and details
- "View Product" button (with tracking)
- Limited stock urgency message
- Unsubscribe link
### 3. Preorder Confirmation
**Sent:** After customer places preorder
**Purpose:** Confirm order, provide expected ship date
**Default subject:** "Preorder confirmed: {product_name}"
**Contains:**
- Order confirmation
- Product details
- Expected ship date
- Order number and tracking
- Manage order link
## Customization Options
### Access Email Settings
**Go to:** Settings → Email Templates
### Basic Customization
**Logo**
- Upload your store logo (recommended: 200x60px PNG)
- Appears at top of all emails
- Falls back to store name if no logo
**Brand Colors**
```
Primary Color: Button background
Text Color: Body text
Link Color: Clickable links
Background: Email background
```
**From Name**
```
Default: [Your Store Name]
Custom: "The [Store] Team" or "[Founder Name] from [Store]"
```
**From Email**
```
Default: notifications@demandloop.app
Custom: hello@yourstore.com (requires DNS setup)
```
### Subject Lines
**Restock Notification:**
```
Default: "{product_name} is back in stock!"
Alternatives:
- "{product_name} is back!"
- "We restocked {product_name} just for you"
- "Your wait is over: {product_name} available now"
- "Hurry! {product_name} back in stock (limited quantity)"
```
**Confirmation Email:**
```
Default: "You're on the waitlist for {product_name}"
Alternatives:
- "✓ Confirmed: We'll notify you about {product_name}"
- "You're first in line for {product_name}"
- "We'll email you when {product_name} is back"
```
### Email Body
**Greeting:**
```
Default: "Hi there,"
Custom: "Hey {first_name}," or "Hello!"
```
**Main Message (Restock Notification):**
```
Default:
"{product_name} is back in stock!
Click below to view the product and complete your purchase."
Custom examples:
"Good news! {product_name} just restocked.
Stock is limited—grab yours before it's gone!"
"You asked, we restocked! {product_name} is available now.
We saved one with your name on it (but only for the next 48 hours)."
```
**Call-to-Action Button:**
```
Default: "View Product"
Alternatives:
- "Shop Now"
- "Get Yours"
- "Buy Now"
- "See Product"
- "Grab It Before It's Gone"
```
**Footer Message:**
```
Default:
"You received this email because you subscribed to
restock notifications for this product."
Custom:
"We only send you emails about products you want.
Reply to this email if you have questions!"
```
## Using Variables
### Available Variables
Use these placeholders—they auto-fill with real data:
**Product Variables:**
```
{product_name} - Product title
{variant_name} - Variant details (e.g., "Blue / Large")
{product_price} - Price with currency
{product_url} - Direct product link
{product_image} - Product image URL
```
**Customer Variables:**
```
{customer_email} - Customer's email
{first_name} - Customer's first name (if available)
{subscription_date} - When they subscribed
```
**Store Variables:**
```
{store_name} - Your store name
{store_url} - Your store homepage
{support_email} - Your support email
```
**Example usage:**
```
Subject: {product_name} is back, {first_name}!
Body:
Hi {first_name},
Great news! {product_name} ({variant_name}) just came
back in stock at {product_price}.
You subscribed on {subscription_date}, and we wanted
you to be the first to know!
[View Product]
Thanks,
The {store_name} Team
```
## Design Best Practices
### Mobile-First Design
**70% of emails opened on mobile** - optimize for small screens:
- [x] Single-column layout
- [x] Large buttons (min 44x44px)
- [x] Font size 14px+ for body text
- [x] Clear hierarchy (big headline, short paragraphs)
- [x] Fast-loading images (< 100KB)
### Subject Line Optimization
**Best practices:**
**Length:** 40-50 characters (mobile truncates at ~30)
```
Good: "{product_name} is back!"
Bad: "We're excited to let you know that the product you've been waiting for is finally back in stock and available for purchase!"
```
**Front-load important info:**
```
Good: "Premium Hoodie restocked - grab yours!"
Bad: "Just wanted to let you know Premium Hoodie is back"
```
**Use emojis sparingly:**
```
Good: "{product_name} is back in stock"
Good: "New drop: {product_name}"
Bad: "OMG! {product_name}"
```
**Create urgency (when true):**
```
Good: "Limited restock: {product_name} (only 15 left)"
Good: "{product_name} back - won't last long"
Bad: "URGENT!!! BUY NOW OR MISS OUT FOREVER!!!"
```
### Email Body Copy
**Keep it concise:**
```
Good:
"Good news! {product_name} is back in stock.
[Shop Now]"
Bad:
"We hope this email finds you well. We wanted to take
a moment to inform you that after careful consideration
and extensive planning, we have successfully restocked
the product you expressed interest in..."
```
**Focus on benefits, not features:**
```
Good: "Get the comfort you've been waiting for"
Bad: "This product has 100% cotton fabric construction"
```
**Use social proof (when available):**
```
"Join 500+ happy customers who love this product"
"Our #1 bestseller is back"
"Rated 4.9/5 stars by 200+ reviews"
```
### Call-to-Action
**Make it obvious:**
- Large button (not just text link)
- Contrasting color (stands out from background)
- Action-oriented text ("Shop Now" not "Click Here")
- Single primary CTA (don't overwhelm with choices)
**Button placement:**
- Above the fold (visible without scrolling)
- Repeated at bottom (for long emails)
- Mobile thumb-friendly (bottom of screen)
## Testing Your Emails
### Preview Mode
**Before sending:**
1. Go to Settings → Email Templates
2. Select template to edit
3. Make changes
4. Click **Preview**
5. See exactly how customers will see it
**Check these:**
- Logo displays correctly
- Colors match brand
- Variables populate correctly
- Buttons work (click to test)
- Mobile rendering looks good
### Send Test Email
**Send to yourself:**
1. Edit email template
2. Click "Send Test Email"
3. Enter your email address
4. Check inbox (arrives in ~30 seconds)
**Test on multiple devices:**
- Desktop email client (Gmail, Outlook)
- Mobile phone (iOS Mail, Gmail app)
- Tablet
- Dark mode (if your customers use it)
### A/B Testing (Manual)
**Test different subject lines:**
**Week 1:** Use subject line A
**Week 2:** Use subject line B
**Compare:** Open rates in Analytics (Growth plan)
**Example:**
```
Subject A: "{product_name} is back in stock"
Open rate: 42%
Subject B: "{product_name} restocked - limited quantity!"
Open rate: 58%
Winner: Subject B (16% improvement)
```
## Email Deliverability
### Best Practices for Inbox Placement
**Avoid spam triggers:**
- [ ] ALL CAPS SUBJECT LINES
- [ ] Excessive punctuation!!!!
- [ ] Spammy words (FREE, URGENT, LIMITED TIME ONLY)
- [ ] Too many emojis in subject lines
- [ ] Shortened URLs (bit.ly, tinyurl)
**Do include:**
- [x] Clear unsubscribe link (required by law)
- [x] Physical address in footer (CAN-SPAM requirement)
- [x] Consistent from name/email
- [x] Relevant, expected content
- [x] Plain text version (auto-generated by DemandLoop)
### Custom Domain Email (Advanced)
**Benefits of custom domain:**
- Builds trust (emails from @yourstore.com)
- Better deliverability (your reputation)
- Professional appearance
**Setup required:**
1. Verify domain ownership
2. Add DNS records (SPF, DKIM, DMARC)
3. Warm up domain (gradually increase send volume)
**Go to:** Settings → Email Settings → Custom Domain
Custom domain setup requires technical knowledge. Contact support for step-by-step guidance or domain verification help.
## Real-World Examples
### Example 1: Minimal & Clean
**Store:** Modern furniture brand
**Subject:** "Atlas Sofa restocked"
**Body:**
```
Hi Sarah,
Good news — the Atlas Sofa in Charcoal is back.
[Shop Now]
Thanks,
The Furn Team
```
**Why it works:**
- Simple, direct
- No fluff
- Clear CTA
- Brand-appropriate minimalism
### Example 2: Friendly & Conversational
**Store:** Sustainable fashion
**Subject:** "Your favorite jeans are back!"
**Body:**
```
Hey there!
Remember those organic jeans you wanted? They're
finally back in stock (and they won't last long).
We got a small batch this time, so grab your size
before they're gone again!
[Get Your Pair]
Sustainably yours,
Emma @ EcoThreads
```
**Why it works:**
- Personal tone
- Creates urgency (honestly)
- Brand voice consistent
- Friendly, human touch
### Example 3: Premium & Elegant
**Store:** Luxury jewelry
**Subject:** "The Diamond Collection has returned"
**Body:**
```
Dear Valued Customer,
We are pleased to announce the return of our
signature Diamond Solitaire Collection.
Each piece is handcrafted and available in
limited quantities.
[Explore Collection]
With appreciation,
Maison Bijoux
```
**Why it works:**
- Matches premium positioning
- Elegant language
- Exclusivity implied
- Brand-appropriate formality
## Common Mistakes to Avoid
### Mistake 1: Generic, Boring Emails
**Bad:**
```
Subject: Product notification
Body: A product is now available.
```
**Good:**
```
Subject: Premium Sneakers back in stock!
Body: The kicks you wanted are here. Limited sizes remaining.
```
### Mistake 2: Too Much Text
**Bad:**
```
We're thrilled to announce that after weeks of
anticipation and careful planning, we've successfully
secured additional inventory of the product you
expressed interest in. This restock represents our
commitment to customer satisfaction and...
[300 more words]
```
**Good:**
```
Great news! Premium Hoodie is back.
[Shop Now]
```
### Mistake 3: Weak Call-to-Action
**Bad:**
```
[Click here] [View] [Go] [More info]
```
**Good:**
```
[Shop Now] [Get Yours] [Grab Your Size]
```
### Mistake 4: No Mobile Optimization
**Bad:**
- Tiny font (12px or smaller)
- Tiny buttons (20x20px)
- Multi-column layout
- Large images (slow loading)
**Good:**
- Readable font (16px+)
- Large buttons (44x44px minimum)
- Single-column
- Optimized images (<100KB)
### Mistake 5: False Urgency
**Bad:**
```
"ONLY 2 LEFT!!!" (when there are 200)
"EXPIRES IN 1 HOUR!" (no actual deadline)
"ONCE IN A LIFETIME!" (restocks weekly)
```
**Good:**
```
"Limited restock" (if true)
"While supplies last" (always true)
"Back for a short time" (if seasonal)
```
## Troubleshooting
### Emails Going to Spam
**Check these:**
1. **Subject line** - Remove spam trigger words
2. **Sender reputation** - Use custom domain with proper DNS
3. **Content** - Avoid excessive caps, punctuation, emojis
4. **Unsubscribe link** - Must be present and working
5. **Email authentication** - Verify SPF/DKIM records
**Ask customers to:**
- Add your email to contacts
- Mark as "Not Spam" if it's in spam folder
- Whitelist your domain
### Variables Not Populating
**Problem:** Email shows `{product_name}` instead of actual name
**Causes:**
- Typo in variable name (case-sensitive)
- Invalid variable used
- Template cache needs clearing
**Solution:**
1. Check variable spelling exactly: `{product_name}` not `{product-name}`
2. Use only approved variables (see list above)
3. Save template and send test email to verify
### Images Not Loading
**Problem:** Product images broken in email
**Causes:**
- Image URL invalid
- Image too large (>1MB)
- Email client blocking images
**Solution:**
1. Verify image URL is publicly accessible
2. Compress images (<100KB recommended)
3. Add alt text for accessibility
4. Include text description as backup
### Low Open Rates
**Problem:** Emails sent but nobody opening
**Check:**
- Subject line (boring? too long?)
- From name (recognizable?)
- Send time (middle of night?)
- Email frequency (too many emails?)
**Improve:**
- Test different subject lines
- Send during business hours
- Reduce email frequency
- Personalize with {first_name}
## Advanced Tips
### Personalization Boosts Opens
**Generic:**
```
Subject: Product back in stock
Open rate: 28%
```
**Personalized:**
```
Subject: {first_name}, your {product_name} is back!
Open rate: 42%
```
**Improvement:** +50% open rate
### Urgency Increases Clicks
**No urgency:**
```
Body: {product_name} is back in stock.
Click rate: 15%
```
**With urgency:**
```
Body: {product_name} is back! Limited stock—won't last long.
Click rate: 28%
```
**Improvement:** +87% click rate
### Social Proof Boosts Conversion
**No social proof:**
```
Body: {product_name} is available now.
Conversion: 18%
```
**With social proof:**
```
Body: {product_name} is back! Join 500+ happy customers. 4.8/5 rating.
Conversion: 26%
```
**Improvement:** +44% conversion
## FAQ
**Q: Can I use HTML in email templates?**
No. Templates use a simple text editor with variables. HTML could break email deliverability.
**Q: Can I send different emails to different customer segments?**
Not currently. All customers receive the same template. Segmentation is planned for future release.
**Q: How do I add my logo?**
Go to Settings → Email Templates → Upload Logo (recommended size: 200x60px PNG with transparent background).
**Q: Can I schedule when emails send?**
Emails send automatically when products restock. Use Fair Queue settings to control timing/batches.
**Q: Will email changes affect past notifications?**
No. Template changes only apply to future emails. Past emails remain unchanged.
**Q: Can customers reply to notification emails?**
Yes, if you set up custom domain. Replies go to your support email. With default sending, replies go to no-reply@ address.
**Q: How do I test emails without sending to real customers?**
Use "Send Test Email" button in template editor to send to your own email address.
## Next Steps
- [How Notifications Work](/help-center/notifications/how-notifications-work) - Understand email delivery flow
- [Fair Queue Settings](/help-center/notifications/fair-queue) - Control notification timing
- [Understanding Analytics](/help-center/analytics/understanding-analytics) - Track email performance
**Pro tip:** Copy competitors' restock emails that you personally engage with. What made you click? Borrow those strategies (but use your own words and brand voice).
## Twilio SMS (BYOT) Setup Guide
Source: https://demandloop.metigro.io/help-center/notifications/twilio-sms-byot-setup-guide
---
title: "Twilio SMS (BYOT) Setup Guide"
description: "Connect your Twilio account to send back-in-stock notifications via SMS, configure webhooks for delivery tracking and customer replies, and verify end-to-end delivery"
category: "notifications"
order: 4
updated_at: "2026-02-22"
estimated_time: "12 min"
howto_steps:
- name: "Get Twilio credentials and enter them in DemandLoop"
text: "Copy your Account SID and Auth Token from the Twilio Console. In DemandLoop, paste them into Modules → SMS (Twilio) → Settings and save to display the webhook URLs."
- name: "Create a Messaging Service in Twilio"
text: "In Twilio Console, go to Develop → Messaging → Services, create a new Messaging Service, add your SMS-capable phone number as a sender, and complete the wizard."
- name: "Connect webhooks and sending method"
text: "Copy the Incoming Messages and Delivery Status webhook URLs from DemandLoop and enter them in the Twilio Messaging Service integration settings. Copy the Messaging Service SID back to DemandLoop."
- name: "Enable SMS and set the message template"
text: "In DemandLoop, enable the SMS (Twilio BYOT) channel and customize your back-in-stock SMS template with your store name and product details."
- name: "Configure storefront to collect phone and consent"
text: "In DemandLoop widget settings, enable the phone number field and the explicit SMS consent checkbox so subscribers can opt in to SMS notifications."
- name: "Send a test SMS and verify end-to-end delivery"
text: "Subscribe with a real phone number via your storefront, trigger a test restock event in DemandLoop, and confirm the SMS is received and logged in Twilio."
---
# Twilio SMS (BYOT) Setup Guide
This guide walks you through connecting your **own Twilio account** to DemandLoop so you can send back-in-stock notifications via SMS.
## What you'll accomplish
- Connect DemandLoop to Twilio using your Account SID + Auth Token
- Create a **Messaging Service** in Twilio with webhook integration
- Configure incoming-message and delivery-status webhooks so DemandLoop can track SMS delivery and handle customer replies
- Enable SMS (Twilio BYOT) and customize the message template
- Verify delivery in DemandLoop and in Twilio
## Requirements
- **Plan:** SMS (Twilio BYOT) is available on the **Essentials plan** (or higher)
- **Twilio account:** Admin access to your Twilio Console
- **Sender identity (one of the following):**
- **Messaging Service SID** (recommended), *or*
- A Twilio **SMS-capable phone number**
- **Compliance:** For US sending, Twilio may require **A2P 10DLC** registration for your brand/campaign
- **Customer consent:** Your storefront subscription flow must collect **explicit SMS consent** before sending
## Quick checklist
Before you start, make sure you have the following ready:
- [ ] Twilio **Account SID** + **Auth Token**
- [ ] DemandLoop on the **Essentials** plan (or higher)
- [ ] At least one **SMS-capable phone number** in your Twilio account
- [ ] Storefront widget configured to collect **phone number** + **SMS consent**
- [ ] Time to run an **end-to-end test** after setup
## Step 1 — Get Twilio API credentials and enter them in DemandLoop
### Get your credentials from Twilio
Open your **Twilio Console** and go to the **Account Dashboard**.
Under **Account Info**, copy:
- **Account SID** (format: `AC` + 32 hex characters)
- **Auth Token** (32 hex characters — click **Show** to reveal it)

### Enter credentials in DemandLoop
In DemandLoop, go to **Modules → SMS (Twilio) → Settings**.
> Can't find it? Open the left sidebar and look under **Modules**.
Paste your **Account SID** and **Auth Token** into the corresponding fields and save.
After saving, DemandLoop displays two webhook URLs at the bottom of the settings page:
- **Incoming Messages Webhook URL** — receives re-opt-in keywords from customers (START, YES, UNSTOP) so DemandLoop can resume sending SMS
- **Delivery Status Webhook URL** — receives delivery confirmations and failures from Twilio, including carrier-level blocks when a customer replies STOP (error 21610)
> Keep this page open — you will need both URLs in the next step.
**What success looks like**
- Both fields accepted without validation errors
- Two webhook URLs are displayed on the page
## Step 2 — Create a Messaging Service in Twilio
### Option A (recommended): Messaging Service
In Twilio Console, navigate to **Develop → Messaging → Services** and click **Create Messaging Service**.
Twilio guides you through a four-step wizard:
#### Twilio Step 1 — Create Messaging Service
1. In the **Messaging Service friendly name** field, enter a name (for example, `DemandLoop`).
2. Under **What do you want to use this Messaging Service for?**, select **Notify my users**.
3. Click **Create Messaging Service**.

#### Twilio Step 2 — Add senders
1. Click **Add Senders**.
2. Select **Phone Number** as the sender type and click **Continue**.
3. Select at least one **SMS-capable phone number** from the list and click **Add Phone Numbers**.
**What success looks like**
- At least one phone number appears in the sender pool
#### Twilio Step 3 — Set up integration
This step connects Twilio to DemandLoop so that customer replies and delivery updates are processed automatically.
**Incoming Messages**
1. Select **Send a webhook** (invoke an HTTP webhook for all incoming messages).
2. In Twilio's **Request URL** field, paste the **Incoming Messages Webhook URL** from DemandLoop (**Modules → SMS → Settings**).
3. Leave the method as **HTTP Post**.
4. Leave **Fallback URL** empty — Twilio retries the primary URL automatically if it fails to respond.
**Delivery Status Callback**
In Twilio's **Callback URL** field, paste the **Delivery Status Webhook URL** from DemandLoop (**Modules → SMS → Settings**).
**Validity Period**
Leave the default value (`36000` seconds / 10 hours). Twilio will stop attempting to deliver a queued message after this period.
> **Why these webhooks matter:**
> - **Incoming Messages Webhook** allows DemandLoop to process re-opt-in keywords (START, YES, UNSTOP). When a customer texts START, DemandLoop resumes SMS delivery for that phone number.
> - **Delivery Status Webhook** allows DemandLoop to track whether each SMS was delivered, failed, or undelivered. If a customer replies STOP, Twilio blocks further messages at the carrier level and returns error 21610 — DemandLoop records this and prevents further sends until the customer re-opts in. Without this webhook, Notification History will not show delivery status for SMS.
#### Twilio Step 4 — Add compliance info
For many stores, no changes are required here. If Twilio prompts you for compliance registration (for example, A2P 10DLC for US sending), complete it before proceeding.
Click **Complete Messaging Service Setup**.
### Copy the Messaging Service SID
After the wizard finishes, go to **Develop → Messaging → Services**. Copy the **SID** of the service you just created (format: `MG...`).
**What success looks like**
- Messaging Service exists with at least one sender number
- You can see a Messaging Service SID starting with `MG`
### Option B: Single phone number
If you prefer not to use a Messaging Service:
1. In Twilio Console, purchase (or select) an **SMS-capable** phone number.
2. Copy the phone number in **E.164** format (example: `+14155551234`).
3. On the phone number's configuration page in Twilio Console, set the **Incoming Messages Webhook URL** and **Delivery Status Webhook URL** using the same values from DemandLoop (**Modules → SMS → Settings**).
**What success looks like**
- The number is SMS-capable in Twilio
- You have the full E.164 number starting with `+`
- Incoming message and status callback webhooks are configured on the number
## Step 3 — Connect sending method and enable
Return to DemandLoop **Modules → SMS (Twilio) → Settings**.
### Choose a sending method
Choose **one** sending method:
- **Messaging Service SID** (recommended): paste your `MG...` SID, or
- **From Number**: paste your Twilio number in **E.164** format (example: `+14155551234`)
> Fill in only one field. If you use a Messaging Service SID, leave From Number empty (and vice versa).
### Test connection
Click **Test Connection**.
**What success looks like**
- "Connection successful" badge is shown
- No field-level validation errors are displayed
### Confirm compliance and enable
Check **I confirm compliance with SMS regulations**, then click **Enable SMS Integration**.
**What success looks like**
- SMS (Twilio BYOT) enables successfully
- The page shows **Connected**
- Your Account SID and sender identity display as read-only values
## Step 4 — Enable SMS notifications and set your template
Go to **Notifications → SMS Notifications**.
### Enable SMS notifications
Turn on **Enable SMS Notifications**.
### Customize the message template
Use these variables:
- `{store_name}`
- `{product_title}`
- `{variant_title}`
- `{url}`
- `{discount_code}`
- `{discount_percent}`
Notes:
- DemandLoop automatically appends an opt-out line: `Reply STOP to unsubscribe`
- Templates are limited to **320 characters** in the dashboard
- Non‑GSM characters (for example, emoji) reduce the characters per segment and may cause truncation
**What success looks like**
- Saved successfully
- Segment counter looks reasonable for your message length
## Step 5 — Ensure the storefront collects phone + consent
SMS is sent only when a customer provides a phone number **and** explicitly opts in to SMS.
Go to **Settings → Widget → Subscription fields** and set **Phone field** to **Optional** or **Required**.
**What success looks like**
- Phone field is available to set (not forced to "Hidden")
- The storefront subscription form shows a phone input and an SMS consent checkbox
## Step 6 — Send a test SMS (end-to-end)
> **Test Connection** (Step 3) validates your Twilio credentials but does **not** send an actual SMS. To verify that messages reach real phones, run the end-to-end test below.
1. Pick a test product/variant on your storefront.
2. Subscribe with your own phone number and check the SMS consent box.
3. Restock the item in your commerce platform (so DemandLoop processes a restock event).
4. Confirm delivery:
- In DemandLoop: **Subscriptions → Notification History**, filter **Channel = SMS**
- In Twilio: **Message Logs** for your account/service
**What success looks like**
- "SMS" appears as the channel in **Notification History**
- Delivery tracking updates (for example: a Delivered timestamp appears)
- Test SMS is delivered to your phone
- The message is visible in Twilio Message Logs
## Verify delivery
After your end-to-end test, use these two places to monitor ongoing SMS delivery:
- **DemandLoop:** Subscriptions → **Notification History** (Channel = SMS)
- **Twilio:** Message Logs (per-message delivery details and error codes)
## Troubleshooting
### 1) SMS (Twilio BYOT) is locked / can't enable the integration
- Cause: Your store is on the **Free plan**
- Fix: Upgrade to **Essentials** (or higher), then return to **Modules → SMS (Twilio)**
### 2) "Invalid Account SID/Auth Token format"
- Account SID must start with `AC` and be 34 characters total
- Auth Token is 32 hexadecimal characters (letters `a–f` and numbers)
### 3) Connection test passes, but SMS fails to send
- Cause: Sender identity isn't usable (Messaging Service has no sender, or number isn't SMS-capable)
- Fix: In Twilio, confirm your Messaging Service has a sender number, or verify the number supports SMS
### 4) From Number is rejected
- Fix: Use **E.164** format (example: `+14155551234`) and ensure the number belongs to your Twilio account
### 5) Messaging Service SID is rejected
- Fix: Confirm the SID starts with `MG` and comes from the same Twilio account you connected in DemandLoop
### 6) US messages show "Undelivered" or are filtered by carriers
- Cause: Missing/unfinished **A2P 10DLC** registration (US)
- Fix: Complete A2P 10DLC registration in Twilio Console (Messaging → Compliance)
### 7) Messages are unexpectedly short or split into multiple segments
- Cause: Template is long or uses Unicode characters (emoji, non‑Latin characters)
- Fix: Shorten the template and prefer GSM-7 characters when possible
### 8) SMS doesn't arrive at night
- Cause: DemandLoop respects quiet hours to protect the customer experience. SMS is not delivered between **10 PM and 8 AM** in the customer's local timezone. Messages queued during this window are automatically sent the next morning at **9 AM** local time.
- Fix: This is expected behavior — no action required. If you're testing, wait until after 9 AM in the recipient's timezone, or test with a phone number in a timezone where it's currently daytime.
### 9) Customer says they didn't get an SMS
- Check consent: SMS is only sent when the customer opted in via the checkbox
- Check delivery: **Notification History** (Channel = SMS) + Twilio Message Logs
### 10) Customer replied STOP and now SMS fails
- Cause: The customer opted out at the carrier level
- Fix: The customer must text **START** to your Twilio number to re‑opt‑in, then re-subscribe on your storefront
### 11) Delivery status not updating in Notification History
- Cause: **Delivery Status Webhook URL** is not configured (or is incorrect) in Twilio
- Fix: In Twilio Console, go to your Messaging Service (**Develop → Messaging → Services → your service**) and paste the **Delivery Status Webhook URL** from DemandLoop into the **Callback URL** field
### 12) Customer replied START but SMS is still not sending
- Cause: **Incoming Messages Webhook URL** is not configured in Twilio, so DemandLoop never received the re-opt-in request
- Fix: In Twilio Console, go to your Messaging Service, select **Send a webhook** under Incoming Messages, and paste the **Incoming Messages Webhook URL** from DemandLoop into the **Request URL** field
## Billing & responsibility
- **Twilio billing is your responsibility.** Your Twilio account is billed directly by Twilio for messages, carrier fees, and compliance programs.
- DemandLoop provides the integration, message formatting, queuing, and delivery status tracking.
- You are responsible for compliance with applicable messaging laws and carrier policies.
## FAQ
### Do you recommend Messaging Services or a single From Number?
Messaging Service is recommended. It supports better routing and is a more scalable setup for most businesses.
### Can I send SMS without customer consent?
No. DemandLoop only sends SMS when a customer explicitly opts in.
### Is MMS supported?
No. DemandLoop sends SMS text messages only.
### Where can I see SMS delivery failures?
Check **Subscriptions → Notification History** (Channel = SMS), then review error details in Twilio Message Logs.
### Are there quiet hours for SMS?
Yes. DemandLoop does not deliver SMS between 10 PM and 8 AM in the customer's local timezone. Queued messages are sent automatically at 9 AM. This protects the customer experience and helps maintain healthy delivery rates.
### What happens when a customer replies STOP?
Twilio blocks further messages at the carrier level. DemandLoop marks all SMS subscriptions for that phone number as opted out. The customer must text **START** to re-opt-in, then re-subscribe on your storefront.
### Do I need to configure webhooks in Twilio?
Yes. Without the **Incoming Messages Webhook URL** and **Delivery Status Webhook URL**, DemandLoop cannot process customer re-opt-ins or track SMS delivery. Copy both URLs from **Modules → SMS → Settings** and follow Step 2 of this guide to configure them in Twilio.
---
# Analytics & Insights
## Understanding Analytics
Source: https://demandloop.metigro.io/help-center/analytics/understanding-analytics
---
title: "Understanding Analytics"
description: "Track performance with detailed analytics, metrics, and insights on your back-in-stock campaigns"
category: "analytics"
order: 1
updated_at: "2025-01-05"
estimated_time: "5 min"
related_feature_pages:
- label: "Analytics — Shopify"
url: "/shopify/feature/analytics"
- label: "Analytics — WooCommerce"
url: "/woocommerce/feature/analytics"
- label: "Analytics — BigCommerce"
url: "/bigcommerce/feature/analytics"
- label: "Analytics — Shopware"
url: "/shopware/feature/analytics"
- label: "Analytics — PrestaShop"
url: "/prestashop/feature/analytics"
---
# Understanding Analytics
DemandLoop provides comprehensive analytics to help you understand how back-in-stock notifications impact your store. Track subscriptions, email performance, and revenue attribution all in one place.
## What you'll accomplish
- Understand each KPI on the analytics dashboard and what it signals
- Use Top Products data to inform inventory and marketing decisions
- Read email performance metrics and Growth plan advanced analytics
- Export reports and apply insights to grow your store
## Requirements
- DemandLoop app installed with at least some subscription or notification activity
- Free plan for basic metrics; Growth plan for CTR, time-to-click, and revenue attribution
- Dashboard access (store owner or staff with app permissions)
## Analytics Dashboard Overview
Access analytics from the main navigation:
**Dashboard → Analytics**
The analytics dashboard is organized into several sections:
- Overview Metrics (KPIs)
- Top Products by Demand
- Email Performance
- Revenue Attribution (Growth plan)
## Key Performance Indicators (KPIs)
At the top of your analytics dashboard, you'll see four main metrics:
### Total Subscriptions
The total number of customer subscriptions ever created in your store.
**What it tells you:** Overall demand for your back-in-stock service
**Growth indicators:**
- Increasing - Growing customer interest
- Steady - Consistent demand
- Decreasing - May need promotion
### Active Subscriptions
Number of subscriptions currently waiting for restock.
**What it tells you:** Current pent-up demand
**Why it matters:**
- High number = significant demand waiting
- Low number = most products in stock
- Trend shows inventory management effectiveness
A high active subscription count is actually good — it means customers are eager to buy when products restock!
### Emails Sent This Month
Total back-in-stock notifications sent in the current billing period.
**What it tells you:** Notification activity level
**Plan tracking:**
- Free plan: 500 emails/month limit
- Growth plan: Unlimited
### Email Success Rate
Percentage of emails successfully delivered (not bounced or failed).
**What it tells you:** Email deliverability health
**Benchmarks:**
- 95%+ - Excellent
- 90-95% - Good
- Below 90% - Needs attention
**Low success rate causes:**
- Invalid email addresses
- Spam complaints
- Temporary delivery issues
## Top Products by Demand
This section shows which products generate the most subscription interest.
### Metrics Displayed
For each product variant, you'll see:
| Metric | Description |
|--------|-------------|
| **Product Name** | Product and variant details |
| **Subscriptions** | Total subscriptions for this variant |
| **Emails Sent** | Total notifications sent |
| **Avg Wait Time** | Average time from subscription to notification |
### How to Use This Data
**Inventory Planning:**
Products with high subscription counts should be restocked more frequently or in larger quantities.
**Marketing Focus:**
High-demand products are good candidates for:
- Featured collections
- Marketing campaigns
- Increased ad spend
**Product Development:**
Patterns in top products can inform:
- New product ideas
- Color/size expansions
- Pricing strategy
## Email Performance (Free Plan)
### Basic Email Metrics
Available on all plans:
**Delivery Rate** - Percentage of emails successfully delivered
```
Delivered: 1,247 / 1,250 (99.8%)
```
**Bounce Rate** - Emails that couldn't be delivered
```
Hard Bounces: 2 (0.2%)
Soft Bounces: 1 (0.1%)
```
**Error Rate** - Temporary delivery failures
```
Temporary Errors: 3 (0.2%)
```
Free plan shows delivery status only. Upgrade to Growth for click tracking, CTR, and time-to-click analytics.
## Advanced Analytics (Growth Plan)
Unlock detailed performance metrics with Growth plan:
### Click-Through Rate (CTR)
**What it is:** Percentage of delivered emails where customer clicked the product link
**Formula:**
```
CTR = (Clicks ÷ Delivered Emails) × 100
```
**Example:**
```
Delivered: 1,000 emails
Clicks: 247
CTR: 24.7%
```
**Industry Benchmarks:**
- 20%+ - Excellent
- 15-20% - Above average
- 10-15% - Average
- Below 10% - Below average
### Time-to-Click Analytics
**What it is:** How quickly customers click after receiving notification
**Metrics tracked:**
- **Average time** - Mean time from send to first click
- **Median time** - Middle value (more accurate for outliers)
- **Fastest products** - Which products get clicked quickest
**Example insights:**
```
Average: 2.5 hours
Median: 45 minutes
Fastest: 8 minutes (Premium Sneakers - Limited Edition)
```
**Why it matters:**
- Fast clicks = high urgency/demand
- Slow clicks = may need better email copy
- Product-specific patterns = customer behavior insights
### Revenue Attribution
Track which back-in-stock notifications lead to actual purchases.
**How it works:**
1. Customer clicks product link in email
2. Attribution token saved to their cart
3. If they purchase within 7 days, order is attributed
4. You see revenue and commission in dashboard
**Metrics shown:**
- **Attributed Orders** - Orders from BIS emails
- **Attributed Revenue** - Total sales attributed
- **Attribution Rate** - % of clicks that convert
- **Average Order Value** - Revenue per attributed order
Attribution uses 7-day last-click model. If a customer clicks your product link and purchases within 7 days, you'll see the revenue tracked!
## Reading Your Analytics
### Daily vs Monthly View
Toggle between views to see:
- **Daily:** Day-by-day trends, spot patterns
- **Monthly:** Long-term trends, year-over-year comparison
### Date Range Selector
Analyze any time period:
- Last 7 days
- Last 30 days
- Last 90 days
- Custom range
### Export Analytics
Download CSV reports for:
- Subscription data
- Email performance
- Top products
- Revenue attribution (Growth)
## Using Analytics for Growth
### Identify Best Sellers
Products with high subscriptions + high conversion = winners
→ Stock more, promote more, expand line
### Optimize Email Timing
Check time-to-click data:
- Fast clicks = good timing
- Slow clicks = try different send times
### Improve Email Content
Low CTR? Try:
- More compelling subject lines
- Better product images
- Urgency messaging ("Limited stock!")
### Plan Restocks
High active subscriptions = restock priority
```
Product A: 347 waiting
Product B: 89 waiting
Product C: 12 waiting
→ Restock A first for maximum impact
```
## Growth Plan Analytics Features
Upgrade to unlock:
- **Click tracking** - See who clicks your emails
- **CTR analytics** - Compare performance by product
- **Time-to-click** - Understand customer urgency
- **Revenue attribution** - Track sales from BIS emails
- **Advanced segmentation** - Filter by multiple dimensions
- **Custom date ranges** - Any period you want
- **Unlimited history** - Keep data forever
[Start 14-day trial](/billing?trial=growth) - no credit card required
## Verify
After reviewing your analytics dashboard, confirm:
- [ ] KPI cards at the top display current totals for subscriptions and emails
- [ ] Top Products section shows products ranked by subscription count
- [ ] Date range selector updates the displayed data correctly
- [ ] (Growth plan) CTR and revenue attribution sections are visible and populated
## FAQ
**Q: Why don't I see revenue data?**
Revenue attribution is only available on Growth plan. Free plan shows delivery metrics only.
**Q: What counts as a "click"?**
Any time a customer clicks the product link in the notification email. Multiple clicks from same person count once.
**Q: Why is my CTR low?**
Several factors affect CTR:
- Email deliverability issues
- Weak subject lines
- Products not compelling enough
- Customers already purchased elsewhere
**Q: Can I export raw data?**
Yes! Click the "Export" button on any analytics section to download CSV with full data.
## Troubleshooting
**Problem:** Analytics not updating
**Solution:** Analytics refresh every hour. Wait up to 60 minutes for latest data.
**Problem:** Numbers don't match Shopify
**Solution:** We track subscriptions and emails, not store sales. Check attribution dashboard for sales data.
**Problem:** Can't see Growth plan analytics
**Solution:** These features require Growth plan subscription. [Upgrade here](/billing)
## Next Steps
- [Managing Subscriptions](/help-center/subscriptions/managing-subscriptions) - View and manage subscriptions
- [Fair Queue Settings](/help-center/notifications/fair-queue) - Control notification timing
- [Revenue Attribution](/help-center/billing/usage-based-billing) - Understand how attribution works
Want help interpreting your analytics? Contact our team at support@metigro.io
---
# Smart Wishlist
## Understanding Smart Wishlist
Source: https://demandloop.metigro.io/help-center/wishlist/understanding-wishlist
---
title: "Understanding Smart Wishlist"
description: "Let customers save products for later and automatically receive restock, price drop, and reminder notifications"
category: "wishlist"
order: 1
updated_at: "2026-03-02"
estimated_time: "5 min"
---
# Understanding Smart Wishlist
Smart Wishlist lets your customers save products for later with a single click. Unlike traditional wishlists that become forgotten lists, DemandLoop automatically notifies customers when saved items restock, drop in price, or run low on inventory — turning passive interest into purchases.
## What you'll accomplish
- Understand how Smart Wishlist works for customers and merchants
- Set up the wishlist widget on your product pages
- Configure auto-subscribe behavior and notification preferences
- Know which features are available on Free vs Growth plans
## Requirements
- DemandLoop app installed on your store
- Products with inventory tracking enabled
- Free plan for basic wishlist; Growth plan for price drop alerts, low stock alerts, reminders, and analytics
## How Smart Wishlist Works
### For Customers
When a customer visits a product page, they see a **Save for Later** button (heart icon by default).
**Saving an item:**
1. Customer clicks the wishlist button on a product page
2. If logged in — item is saved immediately
3. If guest — a short email modal appears, customer enters their email
4. Button changes to a filled heart confirming the save
5. A toast notification confirms: "Added to wishlist"
**What happens behind the scenes:**
- If the item is **out of stock**, the customer is automatically subscribed to restock notifications (no extra step needed)
- The customer's email is remembered for future saves (stored locally in the browser)
- All saved items are accessible through the "My Saved Items" customer page
**Removing an item:**
1. Customer clicks the filled heart button again
2. Item is removed from the wishlist
3. Button returns to its default outline state
### For Merchants
**From the admin dashboard** (Wishlist section):
- View all saved items across customers
- See which products generate the most wishlist interest
- Configure widget appearance and notification behavior
- Export wishlist data for analysis (Growth plan)
**Automatic notifications** — DemandLoop sends emails to customers when:
| Notification | Trigger | Plan |
|-------------|---------|------|
| **Restock** | Saved item is back in stock | Free |
| **Price Drop** | Price decreased on a saved item | Growth |
| **Low Stock** | Saved item is running low on inventory | Growth |
| **Reminder** | Configurable days since saving (e.g. 7 days) | Growth |
No manual work required. Notifications fire automatically based on inventory and price changes.
## Setting Up the Widget
### Add the Wishlist Button (Shopify)
1. Go to **Shopify Admin** → **Online Store** → **Themes** → **Customize**
2. Navigate to your **Product page** template
3. Click **Add block**
4. Select **Apps** → **DemandLoop: Wishlist Button**
5. Drag the block to your preferred position (typically near the "Add to Cart" button)
6. Customize appearance in the block settings
7. Click **Save**
### Block Settings
| Setting | Options | Default |
|---------|---------|---------|
| **Enable Smart Wishlist** | On / Off | On |
| **Button Style** | Heart icon, Bookmark icon, Text only | Heart icon |
| **Button Text** | Custom text | "Save for Later" |
| **Button Position** | Inline (next to cart), Below | Inline |
## Configuring Wishlist Settings
Access merchant-level settings from **Wishlist** → **Settings** in the DemandLoop admin.
### General
- **Enable Wishlist** — turn the feature on or off for your entire store
- **Button Style** — default icon style for the storefront widget
- **Button Text** — default text displayed on the button
### Auto-Subscribe Options
- **Auto-notify on restock** (default: on) — when a customer saves an out-of-stock item, they are automatically subscribed to a restock notification. No extra opt-in step needed.
- **Auto-notify on price drop** (Growth plan, default: off) — subscribe customers to price drop alerts when they save any item.
### Customer Portal
- **Enable "My Saved Items" page** — gives customers a dedicated page to view and manage their wishlist
- **Allow multiple lists** (Growth plan) — let customers organize items into named lists (e.g. "Birthday", "Home Renovation")
## Widget States
The wishlist button has four visual states on the storefront:
**Default** — empty heart icon, ready to save
**Loading** — spinner while the API call is in progress
**Saved** — filled heart icon, item is in the wishlist
**Saved + Out of Stock** — filled heart with a message: "We'll notify you when back in stock"
For guest customers who haven't provided an email yet, clicking the button opens a compact email modal instead of saving immediately.
## Free vs Growth Plan
| Feature | Free | Growth |
|---------|------|--------|
| Save to Wishlist button | Yes | Yes |
| "My Saved Items" customer page | Yes | Yes |
| Auto-subscribe to restock notifications | Yes | Yes |
| Restock email notifications | Yes (within email limits) | Yes (unlimited) |
| Total saved items per store | 2,000 | Unlimited |
| Price drop alerts | — | Yes |
| Low stock alerts | — | Yes |
| Custom reminder notifications | — | Yes |
| Wishlist analytics dashboard | — | Yes |
| Export wishlist data (CSV) | — | Yes |
| Multiple lists per customer | — | Yes |
## Verify
After setting up Smart Wishlist, confirm:
- [ ] The wishlist button appears on product pages in your storefront
- [ ] Clicking the button as a guest shows the email modal
- [ ] After entering an email, the item is saved and the button shows a filled heart
- [ ] Saving an out-of-stock item displays the "We'll notify you when back in stock" message
- [ ] Clicking the filled heart removes the item and reverts the button to its default state
- [ ] Saved items appear in the Wishlist section of your DemandLoop admin
## FAQ
**Q: Does the wishlist button slow down my store?**
The widget loads approximately 14 KB (gzipped). It loads asynchronously and does not block page rendering.
**Q: What happens if a customer saves an out-of-stock item?**
The item is added to their wishlist and they are automatically subscribed to a restock notification (if auto-subscribe is enabled). When the item restocks, they receive an email — no extra action needed.
**Q: Can customers see their wishlist across devices?**
Yes. Wishlist data is stored on the server, tied to the customer's email address. As long as they use the same email, their wishlist is consistent across devices. Locally cached state (filled hearts on product pages) syncs on page load.
**Q: What if I disable the wishlist — are saved items lost?**
No. Disabling the wishlist hides the button from the storefront, but all saved items and subscriptions remain in the database. Re-enabling restores everything.
**Q: Do wishlist notifications count toward my email limits?**
Yes. On the Free plan, wishlist restock emails count toward the monthly email limit. Growth plan has unlimited emails.
**Q: Can I use wishlist and back-in-stock subscriptions together?**
Yes. They complement each other. The "Notify Me" widget captures intent from customers who specifically want restock alerts. The wishlist captures broader interest — customers saving items they like. When an out-of-stock item is wishlisted, DemandLoop auto-creates a restock subscription behind the scenes, so there is no duplication.
## Troubleshooting
**Problem:** Wishlist button does not appear on the product page
**Likely cause:** Block not added in theme editor, or widget is disabled in settings
**Fix:** Open Shopify theme editor → verify the DemandLoop Wishlist Button block is present on the product template. Check Wishlist → Settings to confirm the feature is enabled.
**How to confirm:** Visit a product page in your storefront; the button should appear near "Add to Cart."
**Problem:** Clicking the button shows "Smart Wishlist requires Growth plan"
**Likely cause:** Your store is on the Free plan and the Growth-only enforcement is active on the backend
**Fix:** This message appears when the backend returns a locked response. On the Free plan, the basic wishlist (save + restock auto-subscribe) should work within plan limits. If you see this error unexpectedly, contact support.
**How to confirm:** Check your current plan under Billing → Plans in the DemandLoop admin.
**Problem:** Customer does not receive a restock notification after saving an OOS item
**Likely cause:** Auto-subscribe to restock is disabled, or the email was not delivered
**Fix:** Verify that **Auto-notify on restock** is enabled in Wishlist → Settings. Check the notification logs in Notifications → Activity for delivery status.
**How to confirm:** The customer's email should appear in Subscriptions → Active with a restock subscription for that product.
**Problem:** Toast notification does not appear after saving
**Likely cause:** JavaScript conflict with the theme or a content security policy blocking inline styles
**Fix:** Open the browser developer console (F12) and check for JavaScript errors. If a CSP error appears, contact your theme developer to whitelist DemandLoop scripts.
## Next Steps
- [How Notifications Work](/help-center/notifications/how-notifications-work) — understand the full notification lifecycle
- [Understanding Plans & Pricing](/help-center/billing/understanding-plans-pricing) — compare Free and Growth plans
- [Widget Installation](/help-center/getting-started/widget-installation) — set up the back-in-stock "Notify Me" widget
- [Understanding Analytics](/help-center/analytics/understanding-analytics) — track performance and revenue
Smart Wishlist works best alongside the "Notify Me" widget. Use both to capture customer demand at every stage — casual browsing (wishlist) and urgent restock interest (subscriptions).
---
# Low Stock Alerts
## Understanding Low Stock Alerts
Source: https://demandloop.metigro.io/help-center/low-stock/understanding-low-stock-alerts
---
title: "Understanding Low Stock Alerts"
description: "Get notified when inventory runs low — automatic alerts for merchants and urgency notifications for customers"
category: "low-stock"
order: 1
updated_at: "2026-03-02"
estimated_time: "5 min"
---
# Understanding Low Stock Alerts
Low Stock Alerts give you two layers of inventory protection. First, you receive automatic email alerts when any product drops below your configured threshold — so you can reorder before it sells out. Second, DemandLoop sends urgency notifications to your back-in-stock subscribers to drive conversions while inventory is still available.
## What you'll accomplish
- Understand how merchant alerts and customer alerts work together
- Configure global and per-product stock thresholds
- Set up daily digest emails for consolidated inventory monitoring
- Control alert frequency with cooldown and daily cap settings
## Requirements
- DemandLoop app installed on your store
- Products with inventory tracking enabled
- Essentials plan or higher (Low Stock Alerts is not available on the Free plan)
## How Low Stock Alerts Work
DemandLoop monitors your inventory levels in real time. When a product's quantity drops below the threshold you set, two things can happen:
### 1. Merchant Alert
You receive an email immediately when stock falls below the threshold. The email includes the product name, current quantity, your threshold, and suggested actions (reorder, adjust marketing, update settings).
**Flow:**
1. Inventory changes in your store (sale, manual adjustment, sync)
2. DemandLoop checks the quantity against your threshold
3. If below threshold and not in cooldown — alert email is sent to you
4. Alert is recorded in history to prevent duplicate notifications
### 2. Customer Alert
Your back-in-stock subscribers who already received a restock notification — but haven't purchased yet — get an urgency email: "Only X left!" This creates a natural sense of urgency that drives conversions.
**Flow:**
1. Same inventory threshold triggers the check
2. DemandLoop identifies eligible subscribers (active BIS subscription, already notified about restock, not in cooldown)
3. Urgency email and/or web push notification is sent
4. Attribution token is included to track conversions
Customer alerts only reach subscribers who already received a restock notification but haven't purchased yet. This ensures urgency messages go to genuinely interested, engaged customers — not cold contacts.
## Threshold Configuration
### Global Threshold
Set a single threshold that applies to all products in your store.
**Go to:** Low Stock → Settings
- **Threshold quantity** — the inventory level that triggers an alert (default: 10 units, range: 1–1,000)
- **Alert cooldown** — minimum time between alerts for the same product (default: 24 hours, range: 1–168 hours)
**Example:**
```
Global threshold: 10 units
Cooldown: 24 hours
Product "Blue Sneakers" drops to 9 units → Alert sent
Same product drops to 8 units 2 hours later → Skipped (cooldown active)
Same product drops to 5 units 25 hours later → Alert sent again
```
### Per-Product Overrides
Not all products need the same threshold. A high-volume product might need a threshold of 50, while a slow-moving item only needs 3.
**Go to:** Low Stock → Thresholds
Create a product-specific override:
1. Search for the product or variant
2. Set a custom threshold quantity
3. Optionally set a different cooldown period
4. Save
**Threshold resolution order** (highest priority first):
1. Variant-specific threshold (if set)
2. Product-specific threshold (if set)
3. Global threshold
4. No threshold configured — no alert
### Multi-Location Support
If your store uses multiple inventory locations, you can set location-specific thresholds. A warehouse with 5 units might be fine, while a retail store with 5 units needs immediate attention.
## Merchant Alert Email
When inventory drops below your threshold, you receive an email containing:
- **Product name and variant** — which item is running low
- **Current quantity** — how many units remain
- **Threshold** — the level you configured
- **Suggested actions** — reorder inventory, update listings, pause marketing, adjust settings
- **Link to dashboard** — go directly to your Low Stock products page
## Daily Digest
Instead of (or in addition to) individual alerts, you can receive a single daily summary of all low stock products.
**Go to:** Low Stock → Settings → Daily Digest
- **Enable daily digest** — on/off toggle
- **Send time** — choose when to receive the digest (default: 9:00 AM)
**What the digest includes:**
- Total count of products below thresholds
- Count of critical items (very low stock)
- Product table with current stock, threshold, and severity badge
- CSV attachment for bulk reorder planning
The daily digest pairs well with individual alerts. Use real-time alerts for critical, fast-moving products and the digest for a morning overview of everything else.
## Customer Urgency Notifications
### Who Receives Them
Customer low stock alerts are sent only to subscribers who meet all three criteria:
1. **Active BIS subscription** for the low-stock variant
2. **Already received a restock notification** (they know the item is back)
3. **Not in cooldown** (haven't received a low stock alert recently)
### What They Receive
**Email:**
- Subject: "Hurry! Only X left: [Product Name]"
- Urgency banner highlighting the remaining quantity
- Product image, name, variant, and price
- "Shop Now" call-to-action with attribution tracking
- Unsubscribe link
**Web Push (if enabled):**
- Browser notification with product name and stock count
- Click leads to product page with attribution token
### Rate Limiting
To protect your customers from notification fatigue:
- **Daily cap:** Maximum 3 low stock alerts per customer per 24 hours (across all products)
- **Per-product cooldown:** Same product cannot trigger a repeat alert to the same customer within the cooldown window
## Setting Up Low Stock Alerts
### Step 1: Enable Merchant Alerts
1. Go to **Low Stock** → **Settings** in the DemandLoop admin
2. Toggle **Enable low stock email alerts** to on
3. Set your **global threshold** (e.g., 10 units)
4. Set your **alert cooldown** (e.g., 24 hours)
5. Save
### Step 2: Add Product Overrides (Optional)
1. Go to **Low Stock** → **Thresholds**
2. Click **Add threshold**
3. Search for a product or variant
4. Enter the custom threshold quantity
5. Save
### Step 3: Enable Daily Digest (Optional)
1. Go to **Low Stock** → **Settings** → **Daily Digest**
2. Toggle **Enable daily digest** to on
3. Set your preferred send time
4. Save
### Step 4: Enable Customer Alerts (Optional)
1. In **Low Stock** → **Settings**, find the **Customer Alerts** section
2. Toggle **Enable customer low stock alerts** to on
3. Customer alerts will be sent automatically when thresholds are crossed and eligible subscribers exist
## Free vs Paid Plans
| Feature | Free | Essentials+ |
|---------|------|-------------|
| View low stock products (read-only) | Yes | Yes |
| Merchant email alerts | — | Yes |
| Global threshold configuration | — | Yes |
| Per-product threshold overrides | — | Yes |
| Alert cooldown settings | — | Yes |
| Daily digest with CSV | — | Yes |
| Multi-location thresholds | — | Yes |
| Customer urgency alerts | — | Yes |
| Web push notifications | — | Yes |
| Attribution tracking | — | Yes |
On the Free plan, you can browse the Low Stock settings page and see preview cards, but all modification actions require an Essentials plan or higher.
## Verify
After setting up Low Stock Alerts, confirm:
- [ ] Merchant alerts are enabled in Low Stock → Settings and a global threshold is set
- [ ] A test product with inventory at or below the threshold triggers an alert email to your inbox
- [ ] Per-product overrides (if created) appear in the Thresholds list and take priority over the global threshold
- [ ] The daily digest arrives at your configured time with a summary of low stock products
- [ ] Cooldown prevents duplicate alerts for the same product within the configured window
- [ ] (If customer alerts enabled) Eligible BIS subscribers receive the urgency email when stock drops
## FAQ
**Q: How quickly do alerts arrive after inventory changes?**
Alerts are triggered in real time by inventory change webhooks. Merchant alert emails typically arrive within a few minutes of the inventory update.
**Q: Will I get an alert every time someone buys a unit?**
No. The cooldown period prevents repeated alerts for the same product. If your cooldown is 24 hours, you receive at most one alert per product per day — regardless of how many units sell.
**Q: Can I set different thresholds for different variants of the same product?**
Yes. Per-variant overrides are supported. For example, you can set a threshold of 5 for "Size S" and 20 for "Size M" of the same product.
**Q: Do customer alerts go to all my subscribers?**
No. Only subscribers who have an active back-in-stock subscription for that specific variant, have already received a restock notification, and haven't purchased yet. This ensures urgency messages reach genuinely interested customers.
**Q: What happens if I'm on the Free plan?**
You can view the Low Stock settings and product pages in read-only mode. To enable alerts, thresholds, and digest emails, upgrade to the Essentials plan or higher.
**Q: Do customer low stock alerts count toward my email limits?**
Yes. On plans with email limits, customer low stock alerts count toward your monthly email quota.
## Troubleshooting
**Problem:** No merchant alert email received after stock dropped below threshold
**Likely cause:** Cooldown is still active from a previous alert, or merchant alerts are disabled
**Fix:** Check Low Stock → Settings to confirm alerts are enabled. Verify the cooldown period — if a previous alert was sent recently, the next alert is suppressed until the cooldown expires.
**How to confirm:** Check your email (including spam folder) and review alert history in the DemandLoop admin.
**Problem:** Customer subscribers did not receive a low stock notification
**Likely cause:** No eligible subscribers exist (none have received a prior restock notification), or the daily cap was reached
**Fix:** Customer alerts only target subscribers who already received a restock email but haven't converted. If no subscribers match this criteria, no alerts are sent. Check event logs for `low_stock.no_eligible_subscribers`.
**How to confirm:** Go to Subscriptions → Active and verify that matching subscribers exist with a restock notification in their history.
**Problem:** Getting too many alerts for the same product
**Likely cause:** Cooldown period is set too low
**Fix:** Increase the alert cooldown in Low Stock → Settings. For most stores, 24 hours is a good default. High-volume stores may prefer 48–72 hours.
**Problem:** Daily digest email not arriving
**Likely cause:** Digest is disabled, or no products are currently below threshold
**Fix:** Verify the toggle is enabled in Low Stock → Settings → Daily Digest. The digest is only sent when at least one product is below its threshold. Also check your spam folder.
## Next Steps
- [How Notifications Work](/help-center/notifications/how-notifications-work) — understand the full notification lifecycle
- [Understanding Smart Wishlist](/help-center/wishlist/understanding-wishlist) — save products and auto-subscribe to alerts
- [Understanding Plans & Pricing](/help-center/billing/understanding-plans-pricing) — compare plan features
- [Understanding Analytics](/help-center/analytics/understanding-analytics) — track performance and revenue
Low Stock Alerts work best when paired with back-in-stock subscriptions. Subscribers who already received a restock notification are highly engaged — the urgency of "Only X left!" can be the final push they need to complete a purchase.
---
# Billing & Plans
## Understanding Plans & Pricing
Source: https://demandloop.metigro.io/help-center/billing/understanding-plans-pricing
---
title: "Understanding Plans & Pricing"
description: "Learn about DemandLoop's Free and Growth plans, what's included, and how to choose the right plan for your store"
category: "billing"
order: 1
updated_at: "2025-01-13"
estimated_time: "3 min"
---
# Understanding Plans & Pricing
DemandLoop offers two plans designed to grow with your business: **Free** for getting started, and **Growth** for scaling stores that want advanced analytics and unlimited usage.
## What you'll accomplish
- Understand what each plan includes and its usage limits
- Compare Free vs Growth features side-by-side
- Learn how Growth plan pricing and the $500 monthly cap work
- Identify when upgrading makes financial sense for your store
## Requirements
- **Plan:** Free (to review upgrade options) or Growth (to understand current billing)
- **Access:** Shopify store with DemandLoop installed
- **No additional setup needed** — this is a reference article
## Plan Comparison
### Free Plan — $0/month
Perfect for testing DemandLoop or stores with moderate traffic.
**What's included:**
- Back-in-stock email notifications
- Web push notifications
- Subscription management dashboard
- Basic analytics (subscriptions, emails sent)
- Fair Queue system
- Event logging
- Unlimited products/variants
**Usage limits:**
- 500 active subscriptions
- 200 email notifications per month
- 200 push notifications per month
**Best for:**
- New stores testing demand
- Stores with 1-2 out-of-stock products
- Low-traffic stores (< 10K monthly visitors)
---
### Growth Plan — $19/month + 2% commission
For stores serious about capturing lost revenue from out-of-stock products.
**Everything in Free, plus:**
- **Unlimited subscriptions** — no caps
- **Unlimited email notifications** — no monthly limits
- **Unlimited push notifications** — send as many as needed
- **Revenue attribution tracking** — see which subscriptions convert to sales
- **Advanced analytics** — CTR, time-to-click, conversion rates
- **14-day free trial** — test everything risk-free
**Pricing model:**
- **Base fee:** $19/month (recurring)
- **Commission:** 2% of attributed order value
- **Monthly cap:** $500 maximum (including base + commission)
**Best for:**
- Stores with frequent stockouts
- High-traffic stores (10K+ visitors/month)
- Merchants who want ROI visibility
- Stores generating $5K+ monthly revenue
---
## How Free Plan Limits Work
### Active Subscriptions Limit (500)
**What counts as "active":**
- Customer waiting for a product to restock
- Subscription created but not yet notified
**What doesn't count:**
- Completed subscriptions (notification sent)
- Cancelled subscriptions
- Expired subscriptions (older than 90 days)
**Example scenario:**
```
You have 400 active subscriptions
Product restocks → 100 notifications sent
Now you have 300 active subscriptions (100 freed up)
```
### Email Limit (200/month)
Counts every email successfully delivered to customers.
**Resets:** 1st of each month at midnight UTC
**What happens when limit is reached:**
- Queued notifications pause automatically
- Dashboard shows clear warning
- Widget continues collecting subscriptions
- Notifications resume next month or after upgrade
### Push Notification Limit (200/month)
Counts every web push notification sent (not clicks).
**Resets:** 1st of each month
Push notifications match email limits for simplicity, and 200 covers typical usage for Free plan stores.
---
## Why These Limits Are Generous
Our Free plan beats competitors significantly:
| Feature | DemandLoop | Competitor A | Competitor B |
|---------|-----------|--------------|--------------|
| Active subscriptions | 500 | 100 | 50 |
| Email notifications | 200/month | 100/month | 50/month |
| Push notifications | 200/month | Not available | Not available |
| Products supported | Unlimited | 5 products | 10 products |
**Our philosophy:** We want you to succeed on the Free plan. Most stores won't hit these limits. When you do, it means DemandLoop is working—and Growth plan makes sense.
---
## Growth Plan Pricing Explained
### Base Fee: $19/month
Covers unlimited usage:
- Unlimited subscriptions
- Unlimited notifications (email + push)
- Full analytics dashboard
- Attribution tracking infrastructure
**Charged:** Monthly recurring via Shopify billing
### Commission: 2% of Attributed Orders
Only pay when DemandLoop drives sales.
**How attribution works:**
1. Customer clicks link in back-in-stock email
2. Customer completes purchase within 7 days
3. Order is "attributed" to DemandLoop
4. You pay 2% of that order's value
**Example:**
```
Order total: $100
Your commission: $2 (2%)
Customer paid: $100 (you keep $98)
```
### Monthly Cap: $500 Maximum
You'll never pay more than $500/month total (base + commission combined).
**Protection scenarios:**
**Scenario 1: Small store**
- Base fee: $19
- Attributed revenue: $500 → $10 commission
- **Total: $29**
**Scenario 2: Busy month**
- Base fee: $19
- Attributed revenue: $10,000 → $200 commission
- **Total: $219**
**Scenario 3: Very busy month**
- Base fee: $19
- Attributed revenue: $50,000 → $1,000 commission
- **Cap reached: $500** (you save $519!)
**Why this matters:** As your store grows, DemandLoop costs stay predictable. Even if you attribute $100K in orders, you pay maximum $500.
---
## When Should You Upgrade?
### Clear Upgrade Signals
**You're hitting Free limits consistently:**
- Subscription limit reached multiple times
- Email queue frequently paused
- Growing faster than Free plan allows
**You want to measure ROI:**
- Need to see which notifications convert
- Want to track attributed revenue
- Need data for inventory planning
**You're leaving money on the table:**
- Can't notify all waiting customers
- Missing sales opportunities
- Queue delays causing customer frustration
### ROI Calculator
**Example store:**
- 1,000 active subscriptions (hitting Free limit)
- Average order value: $50
- Conservative 5% conversion rate
**Without upgrade:**
- Can only notify 500 customers (Free limit)
- Potential sales: 500 × 5% = 25 orders
- Revenue: 25 × $50 = **$1,250**
**With Growth plan:**
- Notify all 1,000 customers
- Potential sales: 1,000 × 5% = 50 orders
- Revenue: 50 × $50 = **$2,500**
- Growth cost: ~$69 (base + 2% commission)
- **Extra profit: $1,181**
The upgrade pays for itself if you attribute just 2-3 orders per month.
---
## Changing Plans
### Upgrading to Growth
**Two ways to start:**
**1. Start 14-day trial** (recommended)
- Immediate access to all Growth features
- No charges during trial
- Billing starts after 14 days
- Cancel anytime during trial
**2. Subscribe directly**
- Skip trial, start immediately
- First charge: base $19 fee
- Commission charges as orders attribute
**How to upgrade:**
```
Dashboard → Billing → Upgrade to Growth → Confirm
```
### Downgrading to Free
You can downgrade anytime from Billing page.
**What happens:**
- Usage charges stop immediately
- Data keeps collecting in background
- Dashboard shows locked states for Growth features
- Can re-upgrade anytime to see historical data
**Your data is safe:**
- All subscriptions remain active
- Historical data preserved
- Analytics data saved (visible on re-upgrade)
See [Plan Limits & Upgrades](/help-center/billing/plan-limits-upgrades) for details on managing limits.
---
## Billing Through Shopify
All DemandLoop charges appear on your Shopify invoice—never separate payments.
**How it works:**
- Charges created in DemandLoop
- Billed through Shopify's system
- Appears on your Shopify bill
- Pay alongside your Shopify plan
**Benefits:**
- Single payment for all apps
- Manage subscriptions in Shopify
- Shopify's billing protection
- Easy expense tracking
---
## What success looks like
After reading this article, you should be able to:
- [ ] Explain the difference between Free and Growth plans
- [ ] Calculate your projected Growth plan cost using the pricing formula
- [ ] Identify whether your store's usage patterns justify upgrading
- [ ] Understand how the $500 monthly cap protects your costs
---
## Frequently Asked Questions
### Can I cancel anytime?
**Yes.** Both Free and Growth plans have no long-term commitment.
- Free plan: Nothing to cancel, it's free forever
- Growth plan: Cancel anytime from Billing page
- Pro-rated refunds per Shopify policy
### What happens to my data if I uninstall?
Per GDPR, we delete customer data within 30 days of uninstallation. You can export subscriptions before uninstalling.
### Do you offer custom enterprise plans?
Not yet. Our Growth plan with $500 monthly cap covers most stores. If you need higher limits, contact us at support@metigro.io.
### Can I pause my subscription temporarily?
Not directly, but you can:
- Downgrade to Free (keeps features with limits)
- Pause notification queues (keeps charging, stops sending)
- Uninstall (stops all charges and deletes data)
### Is the trial really free?
**Yes.** 14 days, no credit card charges. Full Growth features. Cancel before trial ends = $0 charged.
### What if I forget to cancel the trial?
You'll be charged $19 base fee on day 15. Commission charges only apply when orders are attributed. You can still cancel anytime after.
---
## Next Steps
- **Ready to upgrade?** [Start your 14-day trial](/help-center/billing/starting-trial)
- **Questions about billing?** [Usage-based billing explained](/help-center/billing/usage-based-billing)
- **Hitting limits?** [Plan limits & upgrades guide](/help-center/billing/plan-limits-upgrades)
Need help choosing? Contact us at support@metigro.io — we're happy to review your store and recommend the best fit.
## Usage-Based Billing
Source: https://demandloop.metigro.io/help-center/billing/usage-based-billing
---
title: "Usage-Based Billing Explained"
description: "Understand how DemandLoop's 2% commission model works, what counts as attributed revenue, and how monthly charges are calculated"
category: "billing"
order: 2
updated_at: "2025-01-13"
estimated_time: "3 min"
---
# Usage-Based Billing Explained
Growth plan uses **usage-based billing**: you pay based on the revenue DemandLoop helps you recover. This guide explains exactly how attribution tracking and billing work.
## The Billing Model
### Two Components
**1. Base Fee: $19/month**
- Fixed monthly charge
- Covers unlimited usage (subscriptions, notifications)
- Charged on your Shopify billing cycle
**2. Commission: 2% of Attributed Orders**
- Variable charge based on performance
- Only charged when DemandLoop drives sales
- Capped at $500/month total (base + commission)
**Formula:**
```
Monthly charge = $19 + (2% × Attributed Revenue)
Maximum charge = $500/month
```
---
## What Is "Attributed Revenue"?
An order is **attributed to DemandLoop** when:
1. Customer receives back-in-stock email
2. Customer clicks the product link in email
3. Customer completes purchase **within 7 days**
4. Order is paid (not cancelled or refunded)
This is called **7-day last-click attribution** — industry-standard for email marketing.
### Real-World Example
**Timeline:**
```
Monday 10:00am — Product restocks
Monday 10:01am — Customer receives email: "Nike Shoes back in stock!"
Monday 11:30am — Customer clicks link
Monday 11:45am — Customer completes $120 purchase
```
**Result:**
- Order attributed to DemandLoop
- Your commission: $120 × 2% = **$2.40**
---
## The 7-Day Attribution Window
### Why 7 Days?
Customers don't always buy immediately:
- They compare prices
- They wait for payday
- They think about the purchase
- They check reviews
**7 days** is fair and industry-standard:
- Long enough to capture genuine conversions
- Short enough to avoid false attribution
- Matches email marketing benchmarks
### Window Examples
**Scenario 1: Quick buyer**
```
Day 1, 10am — Email sent & clicked
Day 1, 11am — Purchase completed
Attributed (1 hour conversion)
```
**Scenario 2: Thoughtful buyer**
```
Day 1 — Email sent & clicked
Day 3 — Customer returns and buys
Attributed (within 7 days)
```
**Scenario 3: Window expired**
```
Day 1 — Email sent & clicked
Day 9 — Customer finally purchases
Not attributed (8 days = outside window)
```
**Scenario 4: No click**
```
Day 1 — Email sent (never clicked)
Day 2 — Customer visits store and buys
Not attributed (no click)
```
### Multiple Clicks
If customer clicks multiple times within 7 days, the window extends from the **last click**.
**Example:**
```
Day 1 — Click #1 (starts 7-day window)
Day 5 — Click #2 (resets window, now expires Day 12)
Day 8 — Purchase completed
Attributed (within 7 days of last click)
```
---
## What Counts Toward Commission?
### Included in Attribution
**Order subtotal** — Product prices only
**Product variants** — All variants in order
**Multiple products** — Full cart value if contains restocked item
**Discounts applied** — Counted at final price paid
### Excluded from Attribution
**Shipping costs** — Not included in commission base
**Taxes** — Not included in commission base
**Tips** — Not included in commission base
**Refunded orders** — Commission refunded if order refunded
### Order Value Calculation
**Customer's cart:**
```
Nike Shoes (restocked item): $100
Socks (added to cart): $15
Subtotal: $115
Shipping: $10
Tax: $12
Total: $137
```
**Your commission:**
```
Commission base: $115 (subtotal only)
Commission: $115 × 2% = $2.30
```
**Important:** Even though customer paid $137, commission is calculated on $115 product subtotal—shipping and tax are excluded.
---
## Multi-Product Orders
If customer adds multiple products to cart, the **entire order** is attributed if any product was from a back-in-stock notification.
### Example Scenario
**Customer journey:**
```
1. Receives email: "Shirt back in stock!"
2. Clicks link, views shirt
3. Adds shirt ($50) to cart
4. Continues shopping, adds jeans ($80)
5. Completes purchase: $130 total
```
**Attribution:**
- Full order attributed: $130
- Your commission: $130 × 2% = **$2.60**
**Why full order?**
The back-in-stock email brought the customer to your store. Without that notification, they wouldn't have made any purchase.
This is **fair to you** as a merchant—DemandLoop helped recover the entire sale, not just one product.
---
## Monthly Cap Protection
### The $500 Maximum
You'll **never** pay more than $500/month, regardless of attributed revenue.
**Real-world scenarios:**
**Low revenue month:**
```
Base fee: $19
Attributed revenue: $1,000
Commission: $1,000 × 2% = $20
Total: $39
```
**Medium revenue month:**
```
Base fee: $19
Attributed revenue: $10,000
Commission: $10,000 × 2% = $200
Total: $219
```
**High revenue month:**
```
Base fee: $19
Attributed revenue: $50,000
Commission: $50,000 × 2% = $1,000
Cap applied: $500 maximum
Total: $500 (you save $519!)
```
**Very high revenue month:**
```
Base fee: $19
Attributed revenue: $100,000
Commission: $100,000 × 2% = $2,000
Cap applied: $500 maximum
Total: $500 (you save $1,519!)
```
### When Cap Matters
The cap protects you when DemandLoop performs exceptionally well.
**Break-even point:**
```
$500 cap reached when:
$19 + (Revenue × 2%) = $500
Revenue × 2% = $481
Revenue = $24,050
```
**Meaning:** Once you attribute $24,050+ in a month, the cap kicks in. Everything above that is free.
---
## How Charges Appear
### Shopify Billing Integration
All DemandLoop charges flow through Shopify—you never pay us directly.
**Charge Types:**
**1. Recurring Charge (Base Fee)**
```
Charge: $19.00
Description: "DemandLoop Growth Plan"
Frequency: Monthly
Appears: On Shopify invoice
```
**2. Usage Charges (Commission)**
```
Charge: $45.32
Description: "DemandLoop Usage - Attributed Orders"
Period: January 1-31, 2025
Appears: On Shopify invoice
```
### Charge Timing
**Base fee ($19):**
- Charged immediately on upgrade
- Recurring monthly on billing date
- Pro-rated if you upgrade mid-cycle
**Usage charges:**
- Created when orders attribute
- Batched and charged monthly
- Appears as single line item on Shopify bill
**Example monthly Shopify invoice:**
```
DemandLoop Growth Plan: $19.00
DemandLoop Usage (34 orders): $127.50
Total DemandLoop charges: $146.50
```
---
## Viewing Your Usage
### Attribution Dashboard
Access detailed billing breakdown:
**Dashboard → Billing & Attribution**
You'll see:
**Current Month Usage:**
- Total attributed orders
- Attributed revenue
- Current usage charges
- Progress toward $500 cap
**Usage Ledger:**
- Individual attributed orders
- Order dates and values
- Commission per order
- Running total
**Example view:**
```
Current Month: January 2025
Attributed Orders: 23
Attributed Revenue: $3,450.00
Usage Charges: $69.00 (2%)
Base Fee: $19.00
Total This Month: $88.00
Cap Status: 17.6% ($88 / $500)
```
---
## Refunds & Adjustments
### Order Refunded
If customer refunds an attributed order, your commission is refunded too.
**Process:**
1. Customer requests refund
2. You process refund in Shopify
3. DemandLoop detects refund webhook
4. Usage charge credited back
5. Shows in next month's billing
**Example:**
```
Order attributed: $100 → Commission $2.00
Order refunded fully
Credit applied: -$2.00
Net commission: $0
```
### Partial Refunds
If customer returns some items, commission is adjusted proportionally.
**Example:**
```
Original order: $100 → Commission $2.00
Partial refund: $30 returned
Adjusted order value: $70
Adjusted commission: $1.40
Credit applied: -$0.60
```
---
## Comparing to Flat-Rate Pricing
### Why Usage-Based Is Better
Many apps charge flat rates ($49/mo, $99/mo) regardless of performance.
**DemandLoop's model:**
**Small store example:**
- Attributed revenue: $1,000/month
- Your cost: $19 + $20 = **$39/month**
- Competitor flat rate: $49/month
- **You save: $10/month**
**Growing store example:**
- Attributed revenue: $10,000/month
- Your cost: $19 + $200 = **$219/month**
- Competitor flat rate: $99/month
- **You pay more, but getting 100x more value**
**Large store example:**
- Attributed revenue: $50,000/month
- Your cost: **$500/month** (cap)
- Competitor flat rate: $249/month
- **You pay more, but unlimited scale**
**The benefit:** You only pay more when DemandLoop is clearly delivering value. If it doesn't drive sales, you pay minimal cost.
---
## Frequently Asked Questions
### What if I have no attributed orders?
You pay only the base $19 fee. Zero commission.
This can happen in slow months or if your products stay in stock. You still get unlimited notifications and full analytics.
### Can I see attribution before charges?
**Yes.** Dashboard shows real-time attribution:
- Today's attributed orders
- This week's running total
- Month-to-date usage
- Projected monthly charge
No surprises—you always know what you'll pay.
### How do I know attribution is accurate?
**Transparency features:**
1. **Click tracking** — Dashboard shows every email click
2. **Order details** — See exact orders attributed with Shopify order IDs
3. **Timeline view** — See customer journey from email to purchase
4. **Audit log** — Every attribution event logged
You can verify any attributed order against your Shopify orders.
### What if I dispute an attribution?
Contact support@metigro.io with the order ID. We'll review:
- Click timestamps
- Order timestamps
- Attribution window calculation
- Any technical issues
If attribution was incorrect, we'll credit your account.
### Do test orders count?
**No.** Test orders (marked as test in Shopify) are never attributed or charged.
### What about cancelled orders?
Orders cancelled before payment don't attribute. Orders cancelled after payment are treated as refunds (commission credited back).
---
## Fair & Transparent Billing
### Our Principles
1. **Pay for performance** — Commission only when we drive sales
2. **Full transparency** — See every attributed order with details
3. **Capped costs** — Never pay more than $500/month
4. **Fair attribution** — Industry-standard 7-day window
5. **No surprises** — Real-time usage tracking
### Why 2% Commission?
Industry comparison:
| Service | Model | Rate |
|---------|-------|------|
| Email marketing | Pay per email | $0.10 - $0.50 per email |
| Abandoned cart | Percentage | 2-5% of recovery |
| Facebook Ads | CPC | $0.50 - $2.00 per click |
| Google Ads | CPC | $1.00 - $5.00 per click |
| **DemandLoop** | **Commission** | **2% per attributed order** |
Our 2% is competitive and fair:
- Lower than most performance marketing
- Only charged on confirmed sales
- Capped to protect scaling stores
---
## Next Steps
- **View your usage:** Dashboard → Billing & Attribution
- **Start tracking:** [Start your Growth trial](/help-center/billing/starting-trial)
- **See all plans:** [Understanding plans & pricing](/help-center/billing/understanding-plans-pricing)
Questions about a specific charge? Contact support@metigro.io with your shop domain and we'll review your usage together.
## Starting Your 14-Day Trial
Source: https://demandloop.metigro.io/help-center/billing/starting-trial
---
title: "Starting Your 14-Day Trial"
description: "Activate Growth plan trial, explore advanced features risk-free, and learn what happens after trial ends"
category: "billing"
order: 3
updated_at: "2025-01-13"
estimated_time: "3 min"
---
# Starting Your 14-Day Trial
Test Growth plan features completely free for 14 days—no credit card charges, cancel anytime.
## What's Included in Trial
### Full Growth Features
During your trial, you get **everything** Growth plan offers:
**Unlimited usage**
- Unlimited subscriptions (no 500 limit)
- Unlimited email notifications (no 200/month limit)
- Unlimited push notifications (no 200/month limit)
**Revenue attribution tracking**
- 7-day last-click attribution
- Attributed orders dashboard
- Revenue metrics
- ROI analytics
**Advanced analytics**
- Click-through rate (CTR)
- Time-to-click analysis
- Conversion rates
- Email performance
**Usage-based billing dashboard**
- Real-time usage tracking
- Attributed order ledger
- Commission calculator
- Monthly cap progress
**No restrictions.** No "trial-only" limitations. This is the full Growth experience.
---
## How to Start Trial
### From Free Plan
**Step 1: Open Billing**
```
Dashboard → Billing & Plans
```
**Step 2: Click "Start 14-day trial"**
You'll see a confirmation modal:
```
Start Growth Trial
✓ Full Growth features for 14 days
✓ No charges until trial ends
✓ Cancel anytime, no commitment
✓ Instant activation
[Start Trial Now] [Maybe Later]
```
**Step 3: Confirm**
Click "Start Trial Now"—instant activation, no payment info needed.
**Step 4: You're in**
Dashboard reloads with Growth features unlocked. Attribution tracking starts immediately.
### From New Installation
If you just installed DemandLoop:
**Option 1: Start trial immediately**
- Welcome modal offers "Start 14-day Growth trial"
- Click to activate instantly
- Skip Free plan entirely (you can downgrade later)
**Option 2: Start with Free**
- Click "Got it, let's go!" to use Free plan first
- Upgrade to trial anytime from Billing page
**Recommendation:** Start trial immediately if you have frequent stockouts or high traffic. You'll want attribution data from day one.
---
## Trial Timeline
### What Happens When
**Day 1 (Trial Start):**
- Growth features activate
- Attribution tracking begins
- Free plan limits removed
- Advanced analytics accessible
- No charges yet
**Days 2-13 (Active Trial):**
- Use all Growth features
- Collect attribution data
- Test unlimited notifications
- View real-time usage
- No charges
**Day 14 (Last Trial Day):**
- Trial expires at 11:59pm
- Reminder email sent
- Review trial performance
- Decide: Subscribe or Cancel
**Day 15 (Trial Ends):**
**If you do nothing:**
- Automatically converts to paid Growth
- First charge: $19 base fee
- Usage charges for attributed orders during trial
**If you cancel:**
- Growth features lock
- Revert to Free plan limits
- No charges at all
---
## During Your Trial
### Test These Features
**1. Check attribution tracking**
```
Dashboard → Billing & Attribution
```
See which back-in-stock emails drive sales:
- Attributed orders list
- Revenue per product
- Conversion rates
- ROI metrics
**2. Monitor advanced analytics**
```
Dashboard → Analytics
```
Unlock Growth-only metrics:
- Click-through rates
- Time-to-click analysis
- Advanced product insights
- Revenue attribution
**3. Send unlimited notifications**
No limits during trial:
- Test high-volume sending
- Notify all waiting customers
- See real delivery capacity
**4. Track usage & billing**
```
Dashboard → Billing & Plans
```
Watch your trial progress:
- Days remaining
- Attributed orders so far
- Projected first month charge
- ROI calculator
### Trial Best Practices
**Week 1: Setup & Learning**
- Explore all Growth dashboards
- Set up attribution tracking
- Send first notifications
- Understand analytics
**Week 2: Measure & Decide**
- Review attributed orders
- Calculate ROI
- Estimate monthly cost
- Decide if Growth is worth it
**Questions to ask yourself:**
1. Did attribution tracking provide valuable insights?
2. Are attributed orders justifying the cost?
3. Are unlimited notifications helping scale?
4. Do I need this after trial ends?
---
## Trial Reminder System
We send helpful reminders so you're never surprised:
### Day 7 (Halfway Point)
**Email subject:** "Your DemandLoop trial - 7 days left"
**Content:**
- Trial progress summary
- Attributed orders so far
- How to cancel if needed
- Tips for week 2
### Day 12 (2 Days Left)
**Email subject:** "Trial ending soon - 2 days left"
**Content:**
- Final reminder
- Your trial performance
- Estimated first month charge
- Cancel instructions (if desired)
### Day 14 (Last Day)
**Email subject:** "Your trial ends today"
**Content:**
- Last chance to cancel
- What happens tomorrow
- Your trial results
- Subscribe or cancel options
**In-app banner:**
```
Trial ends today at 11:59pm
Cancel now to avoid charges
Or let it convert to paid Growth
```
---
## Cancelling Your Trial
### Before Trial Ends
Cancel anytime during 14 days—no questions asked.
**How to cancel:**
**Step 1: Open Billing**
```
Dashboard → Billing & Plans
```
**Step 2: Click "Cancel Trial"**
You'll see confirmation:
```
Cancel Growth Trial?
If you cancel:
- Trial ends immediately
- Revert to Free plan limits
- No charges at all
- Can upgrade again anytime
[Cancel Trial] [Keep Trial]
```
**Step 3: Confirm**
Click "Cancel Trial"—instant downgrade to Free plan.
### What Gets Cancelled
When you cancel trial:
**Your data stays safe:**
- Subscriptions remain active
- Historical data preserved
- Analytics data saved
- Can access after re-upgrade
**Growth features lock:**
- Attribution dashboard locked
- Advanced analytics hidden
- Free plan limits apply
- Usage tracking stops
**Can re-upgrade anytime:**
- No penalties
- Historical data visible again
- Can start new trial (if eligible)
### Cancel vs Downgrade
**Cancel trial:**
- Available only during trial period
- Instant, no charges ever
- Returns to Free plan
**Downgrade after trial:**
- Available after trial converts to paid
- May have pro-rated charges
- Returns to Free plan
---
## After Trial Ends
### Auto-Convert to Paid (Default)
If you do nothing, trial automatically converts:
**Day 15 (First Paid Day):**
**Shopify charge created:**
```
DemandLoop Growth Plan: $19.00
Description: Monthly base fee
Status: Pending approval
```
**You see this in Shopify:**
- Charge appears in Shopify billing
- You approve or decline
- Must approve to keep Growth features
**If you approve:**
- Growth features continue
- $19 charged
- Usage charges for trial period attributed orders
- Next charge in 30 days
**If you decline:**
- Growth features lock immediately
- Revert to Free plan
- No charges
- Can upgrade later
### Trial Attribution Charges
**Important:** Orders attributed during trial are still charged commission—even though trial was "free."
**Example scenario:**
```
Trial: January 1-14
Orders attributed: 10 orders = $1,000 revenue
Commission: $1,000 × 2% = $20
On Day 15:
- Base fee charge: $19
- Usage charge: $20
- Total first charge: $39
```
**Why?** Those attributed orders generated real revenue for your store. The trial let you see attribution value before paying base fee.
### First Month Billing
Your first paid month includes:
**1. Base fee: $19**
- For Days 15-45 (next 30 days)
**2. Trial period usage: Variable**
- Commission on orders attributed during trial
- Could be $0 if no attributed orders
**3. Post-trial usage: Variable**
- Commission on new attributed orders
- Added to first month charge
**Example first invoice:**
```
Base Fee (Jan 15 - Feb 14): $19.00
Usage (Trial Period): $20.00
Usage (Jan 15-31): $35.00
Total: $74.00
```
---
## Trial Eligibility
### Who Can Start Trial
**Can start trial if:**
- Currently on Free plan
- New DemandLoop user
- Never used Growth trial before
- Shopify account in good standing
**Cannot start trial if:**
- Already used trial once
- Currently on paid Growth plan
- Previous Growth subscription cancelled
- Shopify billing issues
### One Trial Per Shop
Each Shopify shop gets **one 14-day trial**—ever.
**If you cancel and want to try again:**
- Must upgrade directly to paid Growth
- No second trial available
- Historical data still accessible
**Why one trial?**
Trials are generous (14 days, full features, no charges). One trial lets you make an informed decision without trial-hopping.
---
## Making Your Decision
### Signs You Should Subscribe
**Attribution data is valuable**
- You see clear ROI from attributed orders
- Revenue tracking helps inventory planning
- You want to optimize notification timing
**You're hitting Free limits**
- Regularly reaching 500 subscriptions
- Email queue pausing frequently
- Need unlimited sending
**Advanced analytics help**
- CTR data guides email copy
- Time-to-click shows urgency
- Product insights drive decisions
**Projected cost is worth it**
- Monthly charge < 10% of attributed revenue
- ROI is clearly positive
- Cost fits your budget
### Signs You Should Cancel
**No attributed orders yet**
- Trial didn't track any conversions
- Need more time to see results
- Consider staying on Free plan longer
**Cost doesn't justify value**
- Attributed revenue too low
- Free plan limits aren't a problem
- Basic analytics are enough
**Timing isn't right**
- Not ready to commit monthly charge
- Need to focus on other priorities
- Can always try again later
---
## ROI Calculator
Use this to decide if Growth is worth it:
### Break-Even Analysis
**Question:** How much attributed revenue do I need to justify $19/month?
**Conservative scenario:**
```
Your average order: $50
Typical conversion: 5%
Break-even: $19 ÷ 5% = $380 in sales needed
Orders needed: $380 ÷ $50 = 7.6 → 8 orders
If you attribute 8+ orders/month, Growth pays for itself.
```
**During trial, check:**
```
Dashboard → Billing & Attribution
```
**If you see:**
- 8+ attributed orders — Growth makes sense
- 3-7 attributed orders — Consider usage patterns
- 0-2 attributed orders — Stick with Free for now
### Monthly Cost Estimator
**If trial showed:**
- 20 attributed orders
- $2,000 total revenue
**Estimated monthly cost:**
```
Base fee: $19
Commission: $2,000 × 2% = $40
Total: $59/month
```
**Is this worth it?**
- You recovered $2,000 in revenue
- Cost: $59 (3% of recovery)
- **ROI: 3,300%**
---
## Frequently Asked Questions
### Do I need a credit card to start trial?
**No.** Trial starts instantly with no payment info required. Shopify handles billing after trial ends.
### What if I forget to cancel?
You'll be charged $19 base fee on Day 15. You can still cancel immediately after and get pro-rated refund per Shopify policy.
We send 3 reminder emails (Day 7, 12, 14) so you don't forget.
### Can I extend my trial?
**No.** Trial is fixed at 14 days. This is fair and gives enough time to evaluate Growth features.
If you need more time, cancel trial and use Free plan longer, then upgrade when ready.
### Will I lose data if I cancel trial?
**No.** All data is preserved:
- Subscriptions remain active
- Historical analytics saved
- Attribution data stored
- Visible again if you re-upgrade
### Can I start trial mid-month?
**Yes.** Trial starts immediately regardless of calendar date. You get full 14 days from the moment you activate.
### What if I have issues during trial?
Contact support@metigro.io immediately:
- We'll extend trial if technical issues
- We'll help resolve any problems
- No charges until issues fixed
---
## After You Decide
### If You Subscribe
**Welcome to Growth!**
Next steps:
1. Review [usage-based billing](/help-center/billing/usage-based-billing)
2. Set up custom email templates
3. Explore advanced analytics
4. Monitor your usage dashboard
### If You Cancel
**No problem!** Free plan is generous.
You can:
1. Continue using Free plan
2. Upgrade anytime when ready
3. Access historical data on re-upgrade
4. Contact us with feedback
---
## Need Help Deciding?
**Questions about trial:**
- Email: support@metigro.io
- Include: Your shop domain, trial concerns
**During trial:**
- Check Dashboard → Billing for live ROI
- Review attributed orders daily
- Compare against your goals
**Ready to start?**
```
Dashboard → Billing → Start 14-Day Trial
```
No risk, no commitment, full features. See if Growth is right for your store.
## Plan Limits & Upgrades
Source: https://demandloop.metigro.io/help-center/billing/plan-limits-upgrades
---
title: "Plan Limits & Upgrades"
description: "Manage Free plan limits, understand upgrade triggers, and learn how to switch between plans smoothly"
category: "billing"
order: 4
updated_at: "2025-01-13"
estimated_time: "3 min"
---
# Plan Limits & Upgrades
Learn how Free plan limits work, what happens when you reach them, and how to upgrade or downgrade seamlessly.
## Free Plan Limits Overview
### Three Core Limits
**1. Active Subscriptions: 500**
- Maximum customers waiting at once
- Resets as notifications send
**2. Email Notifications: 200/month**
- Maximum emails sent per calendar month
- Resets 1st of each month
**3. Push Notifications: 200/month**
- Maximum web push sent per calendar month
- Resets 1st of each month
**What's unlimited on Free:**
- Products/variants
- Restock events
- Dashboard access
- Analytics (basic)
- Widget displays
---
## Active Subscriptions Limit (500)
### How It Works
**What counts as "active":**
```
Customer subscribed, product still out of stock
↓
Status: Active
↓
Counts toward 500 limit
```
**What doesn't count:**
```
Customer notified, product restocked
↓
Status: Completed
↓
Freed from limit (back to capacity)
```
### Real-World Example
**Scenario 1: Normal Flow**
```
Monday:
- 400 active subscriptions
- 100 slots available
Tuesday: Product restocks
- 100 notifications sent
- 100 subscriptions completed
- 300 active subscriptions
- 200 slots available
```
**Scenario 2: Hitting Limit**
```
Week 1:
- Growing to 480 active subscriptions
- 20 slots remaining
Week 2:
- Reached 500 subscriptions
- Limit hit
- New subscriptions paused
```
### What Happens at Limit
**Customer experience:**
When they click "Notify Me":
```
[Modal shows]
Subscription limit reached
We're currently at capacity for this product.
Please check back later or upgrade to notify all customers.
[Close]
```
**Merchant dashboard:**
Warning banner appears:
```
Free plan limit reached (500/500 subscriptions)
New subscriptions are paused. Upgrade to Growth for unlimited subscriptions.
[Upgrade Now] [Dismiss]
```
**Widget behavior:**
- Widget still displays on storefront
- New subscriptions rejected
- Existing subscriptions remain active
- Capacity frees as notifications send
### Freeing Up Capacity
**Natural reduction:**
As products restock and notifications send, capacity returns:
```
Current: 500/500 (full)
↓
5 products restock → 75 notifications sent
↓
New capacity: 425/500
↓
Can accept 75 new subscriptions
```
**Manual cleanup:**
Cancel old subscriptions to free space:
```
Dashboard → Subscriptions → Select old ones → Cancel
```
Useful for:
- Subscriptions older than 60 days
- Discontinued products
- Test subscriptions
---
## Email Notification Limit (200/month)
### How It Works
**What counts:**
- Every email successfully sent
- Delivered to customer inbox
- Failed deliveries (count toward limit)
**What doesn't count:**
- Queued but not sent
- Subscription confirmations
- Unsubscribe pages
**Reset timing:**
```
January 1, 12:00am UTC → Counter resets to 0
February 1, 12:00am UTC → Counter resets to 0
```
### Monthly Usage Tracking
**View your usage:**
```
Dashboard → Overview
Email Notifications This Month
136 / 200 sent (68% used)
[View Details]
```
**Detailed breakdown:**
```
Dashboard → Notifications → History
[Filter: This Month]
Jan 1-15: 136 emails sent
Jan 16-31: 64 remaining
```
### What Happens at Limit
**When you reach 200 emails:**
**1. Notifications pause automatically**
```
Queue status: Paused (limit reached)
Pending: 47 notifications waiting
Resume: February 1st
```
**2. Dashboard warning**
```
Monthly email limit reached (200/200)
Email notifications paused until next month.
Upgrade to Growth for unlimited notifications.
[Upgrade Now] [Learn More]
```
**3. Existing subscriptions safe**
All subscriptions remain active:
- Customers stay subscribed
- Widget continues collecting
- Notifications resume next month
### Managing Email Limits
**Strategic batching:**
Use Fair Queue to control send rate:
```
Dashboard → Settings → Fair Queue
Batch size: 20 emails
Batch delay: 2 hours
= 10 emails per hour maximum
= 240 emails per day maximum
```
Lower batch size = slower sending = longer monthly capacity.
**Prioritize high-value products:**
Focus on products that convert best:
```
Dashboard → Analytics → Top Products
Disable notifications for:
- Low-margin items
- Slow-selling products
- Test products
```
**Plan ahead for restocks:**
If expecting major restock:
```
100 waiting customers
× 1 restock
= 100 emails needed
Check: 150 already sent this month
Remaining: 50 ← Not enough!
Solution: Wait until next month or upgrade
```
---
## Push Notification Limit (200/month)
### How It Works
**What counts:**
- Every push notification sent
- To all user's devices
- Successful or failed delivery
**What doesn't count:**
- Push permission requests
- Test notifications
- Service worker registrations
**Reset:** 1st of each month, 12:00am UTC
### Same as Email
Push notifications match email limits for simplicity:
- Instant delivery
- Higher visibility (device notification)
- Higher engagement (open rates 3-5x email)
- More valuable (immediate action)
Most Free plan stores use 50-100 push notifications per month, making 200 a comfortable limit.
### What Happens at Limit
**When you reach 200 push:**
**1. Push sending stops**
```
Push notifications: Disabled
Email continues: Still active
Subscriptions: Still collecting
```
**2. Customers see email-only option**
```
[Subscription Modal]
Email: john@example.com
Also send push notifications (unavailable)
"Push notifications paused. Upgrade for unlimited."
```
**3. Dashboard notification**
```
Push notification limit reached (200/200)
Push notifications paused until next month.
Email notifications continue normally.
[Upgrade to Growth]
```
---
## Upgrade Warning System
### Progressive Alerts
We notify you before limits hit—never surprises.
**At 80% capacity:**
```
Approaching limit
Email notifications: 160/200 (80%)
You have 40 emails remaining this month.
Consider upgrading to avoid disruptions.
[Upgrade] [Dismiss]
```
**At 90% capacity:**
```
Limit almost reached
Email notifications: 180/200 (90%)
Only 20 emails left this month.
Upgrade now for unlimited notifications.
[Upgrade Now] [View Usage]
```
**At 100% capacity:**
```
Limit reached
Email notifications: 200/200 (100%)
Notification queue paused.
Upgrade to Growth to resume immediately.
[Upgrade Now] [Learn More]
```
### Where Alerts Appear
**1. Dashboard banner**
- Top of every page
- Can be dismissed (reappears daily)
- Action buttons included
**2. Relevant pages**
- Subscriptions page
- Notifications page
- Queue status page
**3. Email notifications**
- Sent at 90% and 100%
- Includes usage details
- Direct upgrade links
**4. In-app modals**
- On critical actions
- When limit blocks operation
- Clear next steps
---
## Upgrading to Growth
### When to Upgrade
**Clear signals you need Growth:**
**Hitting limits regularly**
```
Subscriptions: Hit 500 twice this month
Emails: Reached 200 for 3 months straight
Push: Using full 200 each month
```
**Missing opportunities**
```
47 customers can't subscribe (limit full)
Queue paused for 15 days (email limit)
Products restocking but can't notify
```
**Need attribution data**
```
Want to know which emails drive sales
Need ROI visibility
Planning inventory based on demand
```
**Growing faster than Free allows**
```
Traffic increasing monthly
More products going out of stock
Customer base expanding
```
### Upgrade Process
**Step 1: Choose trial or direct**
**Option A: Start 14-day trial (recommended)**
```
Dashboard → Billing → Start 14-day trial
✓ Free for 14 days
✓ Full Growth features
✓ Cancel anytime
✓ No charges during trial
```
**Option B: Subscribe directly**
```
Dashboard → Billing → Upgrade to Growth
✓ Skip trial
✓ Instant activation
✓ Charged $19 immediately
✓ Cancel anytime after
```
**Step 2: Instant activation**
Growth features unlock immediately:
- Limits removed
- Attribution starts tracking
- Advanced analytics accessible
- Usage dashboard available
**Step 3: Use unlimited features**
```
Before: 500 subscription limit
After: ∞ Unlimited
Before: 200 emails/month
After: ∞ Unlimited
Before: 200 push/month
After: ∞ Unlimited
```
### Timing Your Upgrade
**Best time to upgrade:**
**Early in month:**
```
Date: January 5th
Remaining: 26 days in month
Logic: Full month of unlimited usage
```
**Before major restock:**
```
Expected: 2,000 customers waiting
Free limit: 500 emails/month
Solution: Upgrade before restock event
```
**After hitting limit:**
```
Status: Limit reached, queue paused
Effect: Upgrade resumes notifications immediately
Benefit: No lost opportunities
```
**Worst time to upgrade:**
```
Date: January 28th
Remaining: 3 days in month
Better: Wait until February 1st
```
---
## Downgrading to Free
### How to Downgrade
**Step 1: Open Billing**
```
Dashboard → Billing & Plans
```
**Step 2: Click "Downgrade to Free"**
Confirmation modal appears:
```
Downgrade to Free Plan?
You'll lose:
- Unlimited subscriptions (back to 500)
- Unlimited notifications (back to 200/month)
- Revenue attribution features
- Advanced analytics
You'll keep:
- All existing subscriptions
- Historical data (locked but saved)
- Basic analytics
- Core features
[Downgrade] [Cancel]
```
**Step 3: Confirm downgrade**
Effective immediately:
- Growth features lock
- Limits apply
- Usage charges stop
- No pro-rated refunds
### What Happens After Downgrade
**Immediate effects:**
**1. Limits reinstate**
```
Active subscriptions: 623 → Over limit!
New subscriptions: Paused until < 500
Email sends: Subject to 200/month limit
Push sends: Subject to 200/month limit
```
**2. Features lock**
```
Attribution dashboard: Locked (view-only)
Advanced analytics: Locked
Revenue metrics: Locked (preview shown)
```
**3. Data preserved**
```
Attribution data: Saved (can view if re-upgrade)
Historical analytics: Saved
Subscription data: Fully accessible
```
### Managing Over-Limit Situations
**If you have > 500 active subscriptions:**
```
Current: 623 active subscriptions
Limit: 500 on Free plan
Over by: 123 subscriptions
What happens:
All 623 remain active
Notifications still send for existing
New subscriptions blocked until < 500
```
**Gradual reduction:**
```
Week 1: Products restock, 100 notify → 523 active
Week 2: More restocks, 50 notify → 473 active
Week 3: Can accept new subscriptions again
```
### Downgrade Timing
**End of billing cycle:**
If you downgrade mid-cycle:
- No pro-rated refund
- Growth features lost immediately
- Can re-upgrade anytime
**Better approach:**
```
Current: January 15th
Billed through: February 14th
Wait until: February 14th to downgrade
Benefit: Use paid features until billing ends
```
---
## Re-Upgrading After Downgrade
### Coming Back to Growth
**Easy re-activation:**
```
Dashboard → Billing → Upgrade to Growth
```
**What returns immediately:**
- Unlimited limits
- Attribution dashboard (with historical data)
- Advanced analytics (full access)
- All Growth features
**Historical data restored:**
```
Attribution from April-June: Visible again
Advanced analytics: Full history shown
Usage ledger: Complete records
```
**New trial eligibility:**
- No second 14-day trial
- Can subscribe directly
- Charged $19 immediately
---
## Limit Best Practices
### Maximizing Free Plan
**1. Clean up old subscriptions**
```
Monthly task: Cancel subscriptions > 60 days old
Benefit: Free up capacity
Tool: Dashboard → Subscriptions → Bulk Actions
```
**2. Strategic email usage**
```
Prioritize:
High-margin products
Fast-selling items
Proven converters
Deprioritize:
Low-margin clearance
Slow movers
Test products
```
**3. Smart Fair Queue settings**
```
For staying under 200 emails:
Batch size: 15-20 emails
Batch delay: 3-4 hours
Result: ~75-100 emails/month
```
**4. Monitor usage weekly**
```
Every Monday:
- Check subscription count
- Review email usage
- Project end-of-month totals
- Adjust strategy if needed
```
### Planning for Growth
**Indicators it's time:**
**Usage patterns**
```
Month 1: 150 subscriptions, 75 emails
Month 2: 250 subscriptions, 120 emails
Month 3: 400 subscriptions, 180 emails
Month 4: 500 subscriptions ← Time to upgrade
```
**Revenue impact**
```
Estimated attributed orders: 15/month
Average order value: $60
Potential recovery: $900/month
Growth cost: ~$37/month ($19 + 2% of $900)
ROI: 2,333%
```
**Business growth**
```
Traffic: +50% month-over-month
Stockouts: Increasing frequency
Demand: Growing wait lists
Conclusion: Upgrade to capture opportunity
```
---
## Frequently Asked Questions
### Can I upgrade mid-month?
**Yes.** Upgrade takes effect immediately:
- Limits removed instantly
- Pro-rated billing for first month
- Full month starts from upgrade date
### What if I downgrade by accident?
**Contact support immediately:**
- Email: support@metigro.io
- We can restore Growth within 24 hours
- Pro-rated charges may apply
### Do limits stack month to month?
**No.** Limits reset monthly:
- Unused emails don't carry over
- Each month is fresh 500/100 allocation
- Can't "save up" capacity
### Can I increase Free limits without upgrading?
**No.** Free limits are fixed:
- 500 subscriptions
- 200 emails/month
- 200 push/month
Only Growth offers unlimited.
### What happens to queued notifications when I hit limit?
**They pause:**
- Stay in queue
- Resume next month automatically
- Or resume immediately on upgrade
### Can I temporarily upgrade for busy season?
**Yes!** Common strategy:
```
October-November: Upgrade (holiday stockouts)
December-January: Downgrade (post-holiday lull)
February-March: Re-upgrade (spring season)
```
No penalties for seasonal upgrading.
---
## Getting Help
**Questions about limits:**
- Email: support@metigro.io
- Live chat: Dashboard → Help
**Before upgrading:**
- Read [Usage-based billing](/help-center/billing/usage-based-billing)
- Calculate ROI using your data
- Start trial to test features
**Need custom limits:**
- Contact us for enterprise needs
- We'll review your requirements
- Custom solutions available
---
## Next Steps
- **Hit a limit?** [Start your 14-day trial](/help-center/billing/starting-trial)
- **Understanding costs?** [Usage-based billing explained](/help-center/billing/usage-based-billing)
- **Compare plans:** [Plans & pricing overview](/help-center/billing/understanding-plans-pricing)
Ready to upgrade? Dashboard → Billing → Start 14-Day Trial
---
# Troubleshooting
## Widget Not Showing
Source: https://demandloop.metigro.io/help-center/troubleshooting/widget-not-showing
---
title: "Widget Not Showing"
description: "Troubleshoot why the DemandLoop 'Notify Me' widget isn't appearing on your product pages"
category: "troubleshooting"
order: 1
updated_at: "2025-01-13"
estimated_time: "5 min"
---
# Widget Not Showing
If the "Notify Me When Available" button isn't appearing on out-of-stock products, follow this systematic troubleshooting guide to identify and fix the issue.
## What you'll accomplish
- Systematically diagnose why the widget is not appearing
- Verify inventory settings, theme app embed, cache, and JavaScript
- Resolve theme compatibility and variant-specific issues
- Confirm the widget works correctly across devices and browsers
## Quick Diagnostic Checklist
Before diving into detailed troubleshooting, verify these basics:
- [ ] App is installed and active
- [ ] Product variant is actually out of stock
- [ ] Theme app embed is enabled
- [ ] No browser cache issues
- [ ] JavaScript is enabled in browser
If all checked, proceed to detailed diagnostics below.
---
## Step 1: Verify Product Is Out of Stock
### Check Inventory Status
The widget **only appears** when a variant is out of stock. Verify in Shopify:
**Method 1: Admin panel**
```
Shopify Admin → Products → [Your Product]
→ Check "Quantity" for each variant
→ Must be 0 for widget to show
```
**Method 2: Product page**
Visit product page in incognito browser:
- If "Add to Cart" button shows → Product is IN STOCK- If "Sold Out" or custom text shows → Product is OUT OF STOCK- If nothing shows → Potential theme issue
### Inventory Tracking Must Be Enabled
**Critical requirement:** Shopify must track inventory for the variant.
**Check in Shopify:**
```
Product → Variant → Inventory section
→ "Track quantity" must be checked→ "Continue selling when out of stock" must be unchecked```
**If unchecked:**
- Shopify doesn't report variant as out-of-stock
- DemandLoop can't detect stockout
- Widget won't show
**Fix:**
1. Enable "Track quantity"
2. Set quantity to 0
3. Uncheck "Continue selling"
4. Save product
5. Refresh storefront page
---
## Step 2: Check Theme App Embed
DemandLoop uses **Theme App Extensions** (recommended Shopify approach). The embed must be enabled in your theme.
### Enable App Embed
**Step 1: Open Theme Editor**
```
Shopify Admin → Online Store → Themes
→ Click "Customize" on active theme
```
**Step 2: Check App Embeds**
```
Left sidebar → Click "App embeds" (bottom section)
→ Find "DemandLoop - Back in Stock"
→ Toggle must be ON (blue)```
**Step 3: Save Changes**
```
Click "Save" (top right)
→ Widget activates immediately
```
### Common App Embed Issues
**Issue: Can't find "App embeds" section**
**Solution:**
- You're on older Shopify theme (pre-2.0)
- See "Manual Installation" section below
- Consider upgrading to Shopify 2.0 theme
**Issue: DemandLoop not in list**
**Possible causes:**
1. App not fully installed
2. Browser cache issue
3. Theme incompatibility
**Fix:**
```
1. Dashboard → Settings → Reinstall app embed
2. Wait 2 minutes
3. Hard refresh theme editor (Ctrl+Shift+R)
4. Check app embeds again
```
**Issue: Toggle is ON but widget still not showing**
**Proceed to Step 3** (cache and JavaScript checks)
---
## Step 3: Clear Cache Issues
### Browser Cache
Old cached pages may not show the widget even after enabling.
**Clear browser cache:**
**Chrome:**
```
1. Press Ctrl+Shift+Delete (Windows) or Cmd+Shift+Delete (Mac)
2. Select "Cached images and files"
3. Click "Clear data"
4. Reload product page
```
**Safari:**
```
1. Preferences → Privacy → Manage Website Data
2. Remove all for your store domain
3. Reload product page
```
**Firefox:**
```
1. Ctrl+Shift+Delete → Cache
2. Clear
3. Reload
```
**Universal method (works on all browsers):**
```
Visit product page in Incognito/Private mode
→ If widget shows: Cache issue→ If widget doesn't show: Proceed to Step 4
```
### Shopify Theme Cache
Some themes cache product pages aggressively.
**Clear theme cache:**
**Method 1: Theme settings**
```
Theme Editor → Theme Settings
→ Look for "Performance" or "Cache" section
→ Click "Clear cache" or "Purge cache"
```
**Method 2: Contact theme developer**
If your theme has custom caching:
- Contact theme support
- Ask how to clear product page cache
- Mention DemandLoop widget issue
### CDN Cache (Advanced)
If using external CDN (Cloudflare, Fastly):
**Cloudflare:**
```
1. Cloudflare dashboard → Caching
2. "Purge Everything" or "Purge by URL"
3. Enter product page URL
4. Wait 5 minutes
5. Check product page
```
---
## Step 4: Check JavaScript Errors
The widget requires JavaScript to load. Check browser console for errors.
### Open Developer Console
**Chrome/Edge:**
```
Press F12 or Ctrl+Shift+I
→ Click "Console" tab
```
**Safari:**
```
Develop → Show JavaScript Console
(Enable Developer menu in Preferences first)
```
**Firefox:**
```
Press F12 or Ctrl+Shift+K
→ Click "Console" tab
```
### Look for DemandLoop Errors
**Reload product page with console open.**
**Successful loading looks like:**
```
[DemandLoop] Widget initialized
[DemandLoop] Product variant: 123456789
[DemandLoop] Status: out_of_stock
```
**Error indicators:**
```
[DemandLoop] Failed to load widget
Uncaught TypeError: Cannot read property 'init'
404 Not Found: widget.js
```
### Common JavaScript Issues
**Issue: Script blocked by Content Security Policy**
**Error message:**
```
Refused to load script from 'https://demandloop.metigro.io/widget.js'
because it violates Content Security Policy
```
**Solution:**
1. Contact support@metigro.io with this error
2. We'll provide CSP whitelist instructions
3. Add to your theme's CSP headers
**Issue: jQuery conflict**
**Error message:**
```
$ is not defined
or
jQuery is not defined
```
**Solution:**
- Widget loads its own dependencies
- Usually self-resolves after cache clear
- If persists: Dashboard → Settings → "Legacy jQuery mode"
**Issue: Theme JavaScript breaks widget**
**Symptoms:**
- Console shows theme errors unrelated to DemandLoop
- Widget doesn't initialize
**Solution:**
1. Disable other apps one by one
2. Identify conflicting app
3. Contact conflicting app support
4. Request compatibility fix
---
## Step 5: Theme Compatibility Check
### Supported Themes
DemandLoop works with **all Shopify 2.0 themes** automatically.
**Compatible themes (tested):**
- Dawn (Shopify default)- Sense- Craft- Studio- Most 2.0 themes
**Legacy themes (pre-2.0):**
- May require manual installation
- Some require theme code edits
- Contact support for guidance
### Check Theme Version
**Determine your theme version:**
```
Shopify Admin → Online Store → Themes
→ Click "..." on active theme → "Edit code"
→ Open theme.liquid
→ Look for {% schema %} blocks
```
**If you see {% schema %}:**
- Shopify 2.0 theme
- Full widget support
- App embeds should work
**If no {% schema %}:**
- Legacy theme (pre-2.0)
- See "Manual Installation" below
- Consider theme upgrade
### Theme-Specific Issues
**Issue: Custom product templates**
Some themes use custom product templates that override widget placement.
**Check:**
```
Theme code → Templates → product.custom-name.liquid
```
**If custom template exists:**
- Widget might not show on custom template products
- Dashboard → Settings → "Force widget on all templates"
- Or assign products to default template
**Issue: Quick view modals**
Many themes have quick view/quick shop modals.
**Expected behavior:**
- Widget shows in quick view for out-of-stock products- If not showing, it's a known theme limitation
- Customers can still click to full product page
**Workaround:**
```
Dashboard → Settings → Widget Settings
→ "Disable in quick view modals" (optional)
```
---
## Step 6: Manual Installation (Legacy Themes)
If theme doesn't support App Embeds, use manual installation.
### Check If Manual Installation Needed
**You need manual installation if:**
- Pre-2.0 theme (no App Embeds)
- Widget doesn't show despite all checks
- Theme developer recommends it
### Installation Steps
**Step 1: Get widget snippet**
```
DemandLoop Dashboard → Settings → Installation
→ Click "Manual installation instructions"
→ Copy provided code snippet
```
**Step 2: Edit theme code**
```
Shopify Admin → Online Store → Themes → Edit code
→ Open: Snippets → [create new] bis-widget.liquid
→ Paste widget code
→ Save
```
**Step 3: Include in product template**
```
Open: Sections/product-template.liquid (or product.liquid)
→ Find the "Add to Cart" button section
→ Add after the form:
{% render 'bis-widget' %}
→ Save
```
**Step 4: Test**
```
Visit out-of-stock product page
→ Widget should appear```
**If still not showing:**
- Contact support@metigro.io
- Include theme name and version
- We'll provide custom installation
---
## Step 7: Variant-Specific Issues
### Multiple Variants
**Issue:** Widget shows for some variants but not others.
**Check in Dashboard:**
```
Dashboard → Subscriptions → Queue Status
→ Filter by product
→ Verify all variants listed
```
**If variant missing:**
- Shopify may not be syncing variant properly
- Dashboard → Settings → "Resync products"
- Wait 5 minutes, check again
### Variant Inventory Policies
**Issue:** Variant has inventory but shows widget anyway.
**Check Shopify:**
```
Product → Variant → Inventory
→ Verify quantity is actually 0
→ Check "Continue selling when out of stock" is OFF
→ Check "Track quantity" is ON
```
**Multiple locations:**
```
If using multiple inventory locations:
→ Variant must be 0 at ALL locations
→ Or set specific location in DemandLoop settings
```
### Pre-Order Confusion
**Issue:** Product is available for pre-order, widget shouldn't show.
**Expected behavior:**
- Widget only shows when truly out of stock
- Pre-orders are separate feature (see roadmap)
**Current workaround:**
- Use Shopify's "Continue selling when out of stock"
- Widget won't show (by design)
- Or disable DemandLoop for pre-order products
---
## Step 8: Advanced Diagnostics
### Check Widget API Response
**For technical users:**
Open browser console and run:
```javascript
fetch('https://demandloop.metigro.io/api/widget/check', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
shop: 'YOUR-SHOP.myshopify.com',
productId: PRODUCT_ID,
variantId: VARIANT_ID
})
})
.then(r => r.json())
.then(console.log)
```
**Expected response:**
```json
{
"shouldShow": true,
"variantStatus": "out_of_stock",
"widgetEnabled": true,
"subscriptionCount": 5
}
```
**If shouldShow: false:**
- Check "reason" field in response
- Address specific issue mentioned
### Network Tab Investigation
**Check if widget resources load:**
**Browser DevTools → Network tab:**
```
Reload product page
→ Filter by "widget" or "demandloop"
→ Check status codes:
200 OK 404 Not Found 403 Forbidden```
**If 404 errors:**
- Widget script not loading
- Check app installation status
- Dashboard → Settings → "Reinstall widget"
**If 403 errors:**
- Domain authentication issue
- Contact support@metigro.io
- Include shop domain
---
## Common Scenarios & Solutions
### Scenario 1: Widget Worked Yesterday, Gone Today
**Likely causes:**
- App embed accidentally disabled
- Theme was updated/changed
- Shopify maintenance
**Fix:**
```
1. Check app embed is still ON
2. Clear cache (browser + theme)
3. Check theme version (wasn't changed)
4. If theme updated → reinstall app embed
```
### Scenario 2: Shows on Some Products, Not Others
**Likely causes:**
- Products use different templates
- Inventory tracking inconsistent
- Variant-level settings
**Fix:**
```
1. Verify inventory tracking ON for all variants
2. Check product templates (use default)
3. Dashboard → Settings → "Force on all products"
4. Resync products from settings
```
### Scenario 3: Shows in Desktop, Not Mobile
**Likely causes:**
- Theme has separate mobile template
- Mobile cache issue
- Theme's mobile CSS hides widget
**Fix:**
```
1. Clear mobile browser cache
2. Check theme's mobile product template
3. Contact theme developer
4. Dashboard → Settings → "Mobile widget placement"
```
### Scenario 4: Shows on Storefront, Not in Theme Preview
**This is expected behavior.**
**Explanation:**
- Theme preview mode has limitations
- Widget only fully works on live storefront
- Preview shows placeholder
**Verification:**
```
Visit actual storefront (not preview)
→ Widget should work normally```
### Scenario 5: Custom "Out of Stock" Button Conflicts
**Issue:** Theme has custom "Out of Stock" styling that conflicts.
**Solution:**
```
Dashboard → Settings → Widget Appearance
→ "Match theme's out-of-stock styling"
→ Or customize colors to avoid clash
```
---
## When to Contact Support
Reach out to support@metigro.io if:
**1. Completed all troubleshooting steps**- Everything checked, still not working
**2. Error messages in console**- Provide screenshots of errors
- Include product URL
**3. Theme-specific issues**
- Mention theme name and version
- Tried manual installation, didn't work
**4. Recent changes broke widget**
- Mention what changed (theme update, other app)
- When it stopped working
**5. Custom theme needs help**
- Complex custom theme code
- Need developer-level assistance
### Information to Include
When contacting support, provide:
- Shop domain (your-shop.myshopify.com)
- Affected product URL
- Theme name and version
- Screenshots of:
- Product admin (inventory settings)
- App embeds section
- Browser console errors
- Steps you've already tried
---
## Prevention Tips
### Avoid Future Issues
**1. Before theme changes:**
```
Screenshot your app embed settings
Note which customizations you have
Test widget after theme update
```
**2. Regular checks:**
```
Weekly: Spot-check 2-3 out-of-stock products
Monthly: Full widget audit on all products
After app updates: Verify widget still works
```
**3. Development/staging themes:**
```
Test widget on staging theme first
Only push to production after verification
Keep rollback-ready theme backup
```
**4. Documentation:**
```
Keep notes on:
- Custom widget placements
- Theme code edits (if any)
- Integration settings
- Support ticket resolutions
```
---
## Testing Checklist
After fixing the issue, verify everything works:
**[ ] Widget appears on out-of-stock products**
- Test on desktop browser
- Test on mobile browser
- Test in incognito/private mode
**[ ] Widget doesn't show on in-stock products**
- Verify "Add to Cart" shows when in stock
- Widget only appears when quantity = 0
**[ ] Subscription modal opens**
- Click "Notify Me" button
- Modal appears with email form
- Form submits successfully
**[ ] Multiple variants work**
- Test different color/size options
- Widget updates per variant status
- Each variant shows correct status
**[ ] JavaScript console clean**
- No red errors related to DemandLoop
- Successful initialization messages
- No 404/403 network errors
---
## Additional Resources
- **Widget installation guide:** [Widget Installation](/help-center/getting-started/widget-installation)
- **Theme compatibility list:** Dashboard → Settings → Supported Themes
- **Manual installation docs:** Dashboard → Settings → Installation
**Still stuck?**
Email support@metigro.io with:
- Your shop domain
- Product URL showing the issue
- Console error screenshots
We'll respond within 24 hours with a solution.
## Emails Not Delivering
Source: https://demandloop.metigro.io/help-center/troubleshooting/emails-not-delivering
---
title: "Emails Not Delivering"
description: "Troubleshoot email delivery issues, spam problems, and ensure back-in-stock notifications reach customers"
category: "troubleshooting"
order: 2
updated_at: "2025-01-13"
estimated_time: "5 min"
---
# Emails Not Delivering
If customers aren't receiving back-in-stock notification emails, follow this systematic guide to diagnose and fix delivery issues.
## What you'll accomplish
- Diagnose why notification emails are not being delivered
- Fix queue, authentication, spam, and bounce issues
- Verify email delivery with test sends and log analysis
- Prevent future deliverability problems with monitoring best practices
## Quick Diagnostic Questions
Answer these to narrow down the problem:
```
1. Are ANY emails being delivered? (Some vs None)
2. Are emails going to spam/junk folders?
3. Do test emails work?
4. Is the queue paused or active?
5. Are emails showing as "sent" in Dashboard?
```
Based on answers, jump to relevant section below.
---
## Check Email Delivery Status
### Dashboard → Notifications → History
**Step 1: View recent sends**
```
Dashboard → Notifications → History tab
→ Shows last 100 email notifications
```
**Step 2: Check status column**
**Successful delivery:**
```
Status: DeliveredSent: 2 minutes ago
Customer: john@example.com
Product: Nike Shoes - Size 10
```
**Failed delivery:**
```
Status: FailedError: Invalid email address
Sent: 5 minutes ago
Customer: invalid@@email
```
**Pending/queued:**
```
Status: QueuedPosition: 23 in queue
Expected: 45 minutes
```
### Understanding Status Types
**"Delivered"**
- Email successfully sent to recipient's mail server
- Does NOT guarantee inbox delivery
- May still land in spam folder
**"Failed"**
- Email rejected by recipient's server
- Common reasons: Invalid address, blocked domain
- Customer won't receive notification
**"Bounced"**
- Email returned by recipient's server
- Soft bounce: Temporary issue (mailbox full)
- Hard bounce: Permanent failure (email doesn't exist)
**"Queued"**
- Waiting to send (Fair Queue batching)
- Normal status, will send soon
- Check queue settings if too slow
---
## Problem 1: No Emails Sending At All
### Check Queue Status
**Dashboard → Notifications → Queue Status**
**Normal status:**
```
Queue: ActivePending notifications: 23
Next batch: 15 minutes
```
**Paused queue:**
```
Queue: PausedReason: Manual pause
Pending: 47 notifications waiting
Action: Resume queue
```
**Issue: Queue manually paused**
**Fix:**
```
Dashboard → Notifications → Queue Status
→ Click "Resume Queue"
→ Notifications start sending immediately
```
**Issue: Free plan limit reached**
**Fix:**
```
Dashboard → Overview
→ Check: "Email notifications: 500/500"
→ Options:
1. Wait until next month (resets 1st)
2. Upgrade to Growth (unlimited)
```
See [Plan Limits & Upgrades](/help-center/billing/plan-limits-upgrades) for details.
### Check Email Service Integration
**Dashboard → Settings → Email Integration**
**Healthy status:**
```
Email provider: Resend
Status: ConnectedLast test: 2 hours ago
Success rate: 98.7%
```
**Connection issue:**
```
Email provider: Resend
Status: DisconnectedLast successful send: 3 days ago
Action needed: Reconnect service
```
**If disconnected:**
```
1. Click "Reconnect email service"
2. Authorize Resend connection
3. Send test email
4. Verify test arrives
```
### Check System Health
**Dashboard → Settings → Health Checks**
Look for warnings:
**Email service health:**
```
Resend API: Operational
DNS records: Valid
Sending quota: 95% available
Bounce rate: 2.1% (normal)
```
**Red flags:**
```
Resend API: Rate limit exceeded
DNS records: SPF missing
Sending quota: 0% available
Bounce rate: 45% (critical)
```
**If API rate limited:**
- Temporary service slowdown
- Emails queued, will send when quota resets
- Usually resolves within 1 hour
- Contact support if persists > 24 hours
---
## Problem 2: Emails Going to Spam
### Why Emails Land in Spam
**Common causes:**
**1. Domain reputation issues**
- New domain (no sending history)
- Previous spam complaints
- Low engagement rates
**2. Missing authentication**
- SPF record not configured
- DKIM signature missing
- DMARC policy absent
**3. Content triggers**
- Spammy subject lines
- Too many links
- ALL CAPS text
- Excessive punctuation!!!
**4. Recipient behavior**
- Customer marked previous email as spam
- Low email engagement historically
- Inactive email address
### Check Email Authentication
**Dashboard → Settings → Email Authentication**
**Properly configured:**
```
SPF Record: Valid
DKIM Signature: Signing emails
DMARC Policy: Configured
Domain: demandloop.metigro.io
Status: All checks passing
```
**Configuration issues:**
```
SPF Record: Not found
DKIM Signature: Not verified
DMARC Policy: Missing
Action: Configure DNS records
```
### Configure DNS Records (Advanced)
**If you have custom domain (custom-domain.com):**
**Step 1: Get DNS records**
```
Dashboard → Settings → Email Authentication
→ Click "Setup custom domain"
→ Copy provided DNS records
```
**Step 2: Add to DNS provider**
**SPF Record:**
```
Type: TXT
Host: @
Value: v=spf1 include:resend.com ~all
TTL: 3600
```
**DKIM Record:**
```
Type: TXT
Host: resend._domainkey
Value: [provided by DemandLoop]
TTL: 3600
```
**DMARC Record:**
```
Type: TXT
Host: _dmarc
Value: v=DMARC1; p=none; rua=mailto:dmarc@your-domain.com
TTL: 3600
```
**Step 3: Verify in Dashboard**
```
Dashboard → Settings → Email Authentication
→ Click "Verify DNS records"
→ Wait 24-48 hours for propagation
→ Should show all```
**Note:** DNS changes can take 24-48 hours to propagate globally.
### Improve Email Content
**Subject line best practices:**
**Good examples:**
```
"Nike Air Max - Back in Stock!"
"Your requested item is available"
"Size 10 restocked - order now"
```
**Spam-triggering examples:**
```
"BUY NOW!!! HURRY!!!"
"FREE SHIPPING - CLICK HERE"
"You won a prize! Open immediately!"
```
**Customize in Dashboard:**
```
Dashboard → Settings → Email Templates
→ Edit subject line
→ Avoid: ALL CAPS, excessive !!!, "free", "buy now"
→ Use: Product name, simple call-to-action
```
### Test Spam Score
**Use mail-tester.com:**
**Step 1: Send test email**
```
Dashboard → Settings → Email Testing
→ Click "Send test email"
→ Enter: test@mail-tester.com
```
**Step 2: Check score**
```
Visit: https://www.mail-tester.com
→ View your score (aim for 8+/10)
→ Read specific recommendations
→ Fix flagged issues
```
**Common issues flagged:**
- Missing authentication records
- Poor sender reputation
- Spammy content detected
- Broken links
- Image-heavy email
---
## Problem 3: Emails Delayed
### Check Fair Queue Settings
**Dashboard → Settings → Fair Queue**
**Current settings:**
```
Batch size: 50 emails
Batch delay: 2 hours
Rate: ~25 emails/hour
```
**If delays too long:**
**Increase send rate:**
```
Batch size: 100 emails (from 50)
Batch delay: 1 hour (from 2 hours)
New rate: ~100 emails/hour
```
**Trade-off:**
- Faster sending = less "fair" (first subscribers notified first)
- Slower sending = more "fair" (everyone gets chance)
See [Fair Queue Settings](/help-center/notifications/fair-queue) for strategy.
### Check Email Queue
**Dashboard → Notifications → Queue Status**
**Heavy backlog:**
```
Pending notifications: 347
Current position: 147 in queue
Estimated wait: 6 hours
```
**If backlog too large:**
**Option 1: Increase send rate**
- Adjust Fair Queue settings (above)
- Temporarily increase batch size
- Reset to normal after catching up
**Option 2: Upgrade plan**
- Growth plan has higher sending capacity
- No artificial delays
- Faster infrastructure
**Option 3: Prioritize products**
```
Dashboard → Settings → Product Priorities
→ Disable notifications for low-priority items
→ Focus on high-value products
→ Reduces queue size
```
---
## Problem 4: Specific Email Addresses Failing
### Check Bounce List
**Dashboard → Notifications → Bounced Emails**
**Hard bounces (permanent):**
```
Email: typo@gmial.com (should be gmail)
Reason: Domain doesn't exist
Status: Permanently failed
Action: Customer must resubscribe with correct email
```
**Soft bounces (temporary):**
```
Email: full@inbox.com
Reason: Mailbox full
Status: Will retry 3 times
Action: Wait for retry or customer clears inbox
```
### Retry Failed Emails
**Soft bounces retry automatically:**
```
Attempt 1: Failed (mailbox full)
Wait: 1 hour
Attempt 2: Failed (still full)
Wait: 6 hours
Attempt 3: Success```
**Manual retry:**
```
Dashboard → Notifications → History
→ Find failed email
→ Click "Retry"
→ Attempts immediate resend
```
### Unsubscribed Emails
**Check unsubscribe list:**
```
Dashboard → Subscriptions → Unsubscribed
→ Search customer email
```
**If customer unsubscribed:**
- Emails won't send (legal requirement)
- Customer must resubscribe via widget
- Can't manually re-add them
**If wrongly unsubscribed:**
```
1. Verify customer wants emails
2. Ask customer to resubscribe via website
3. Or Dashboard → Subscriptions → Reactivate
(only with customer's explicit consent)
```
---
## Problem 5: Emails Delivered But Not Received
### Common Recipient Issues
**1. Spam/junk folder**
**Ask customer to check:**
```
Gmail: Check "Spam" folder
Outlook: Check "Junk Email" folder
Yahoo: Check "Bulk" folder
Apple Mail: Check "Junk" mailbox
```
**If found in spam:**
```
1. Customer marks as "Not Spam"
2. Adds sender to contacts/safe list
3. Future emails deliver to inbox```
**2. Email filters/rules**
Some customers have filters that auto-delete/move emails.
**Ask customer to check:**
```
Email settings → Filters/Rules
→ Look for rules moving "no-reply@" emails
→ Disable or adjust filter
→ Add exception for demandloop domain
```
**3. Aggressive corporate filters**
Enterprise email systems (Microsoft Exchange, Google Workspace) may block external notifications.
**Solutions:**
- Customer asks IT to whitelist demandloop.metigro.io
- Customer uses personal email instead
- Customer checks quarantined emails
**4. Email forwarding issues**
If customer forwards notifications to another address:
- Original may get filtered
- Forwarded email may lose formatting
- Tracking may break
**Fix:**
- Subscribe with final email directly
- Don't rely on forwarding
---
## Testing Email Delivery
### Send Test Email
**Dashboard → Settings → Email Testing**
**Step 1: Enter test email**
```
Your email: your-email@example.com
→ Click "Send Test Notification"
```
**Step 2: Check inbox (within 1 minute)**
**What to verify:**
- Email arrives in inbox (not spam)
- Subject line renders correctly
- Product link works
- Unsubscribe link works
- Images load (if any)
**Step 3: Test multiple providers**
Send tests to:
```
- Gmail account
- Outlook account
- Yahoo account
- Corporate email (if applicable)
```
Different providers have different spam filters.
### Check Email Logs
**Dashboard → Settings → Email Logs**
**Detailed delivery timeline:**
```
12:00:00 - Email queued
12:00:15 - Sent to Resend API
12:00:18 - Accepted by API
12:00:22 - Delivered to recipient server
12:00:25 - Inbox placement confirmed```
**Look for errors:**
```
12:00:00 - Email queued
12:00:15 - Sent to Resend API
12:00:18 - Rejected by APIError: "Recipient email blocked due to previous bounces"
```
---
## Email Provider Issues
### Resend API Status
**Check service status:**
```
Visit: https://status.resend.com
→ All systems operational```
**If Resend has issues:**
- Emails automatically queued
- Will retry when service restored
- No action needed on your end
**Dashboard shows:**
```
Email service degraded
Notifications queued for later delivery
Estimated resolution: 2 hours
```
### Rate Limits
**Free tier limits (rare issue):**
```
Resend free tier: 100 emails/day
If exceeded: Emails queue until next day
Upgrade: Growth plan uses paid Resend tier
```
**Check current usage:**
```
Dashboard → Settings → Email Quota
→ Shows: 87/100 emails today
→ Resets: Tomorrow at midnight UTC
```
**If hitting limit:**
- Upgrade to Growth (unlimited)
- Or spread notifications across multiple days
- Or adjust Fair Queue to send slower
---
## Advanced Diagnostics
### Email Headers Analysis
**For technical users:**
**Step 1: Get email source**
```
Gmail: Open email → Three dots → "Show original"
Outlook: Open email → File → Properties
Yahoo: Open email → More → "View raw message"
```
**Step 2: Check SPF/DKIM results**
**Look for:**
```
Authentication-Results: spf=pass; dkim=pass; dmarc=pass```
**Issues:**
```
Authentication-Results: spf=fail→ SPF record not configured or incorrect
```
```
Authentication-Results: dkim=neutral→ DKIM signature missing or invalid
```
**Step 3: Check delivery path**
```
Received: headers show email journey
→ From: demandloop.metigro.io
→ Through: resend.com
→ To: recipient's mail server
→ Each hop should be < 1 second
```
**Long delays indicate:**
- Greylisting (recipient server delaying)
- Spam analysis in progress
- Server issues
### SMTP Responses
**Email logs show SMTP codes:**
**Success codes:**
```
250 OK - Message accepted```
**Temporary failures:**
```
421 - Service not available (try again later)
450 - Mailbox unavailable (mailbox full)
451 - Server error (temporary issue)
```
**Permanent failures:**
```
550 - Mailbox not found (email doesn't exist)
551 - User not local (forwarding failed)
554 - Message rejected (spam/policy violation)
```
**If seeing persistent 5xx errors:**
- Contact support with SMTP logs
- May indicate domain blacklist
- Requires investigation
---
## Common Scenarios & Solutions
### Scenario 1: Worked Before, Stopped Now
**Likely causes:**
- Queue manually paused
- Email service disconnected
- DNS records expired
- Plan limit reached
**Fix:**
```
1. Check queue status (Dashboard → Notifications)
2. Verify email integration (Dashboard → Settings)
3. Check DNS records (Dashboard → Email Auth)
4. Review usage limits (Dashboard → Overview)
```
### Scenario 2: Some Customers Get Emails, Others Don't
**Likely causes:**
- Email provider differences (Gmail works, Yahoo doesn't)
- Some customers' addresses bouncing
- Spam filter variance
**Fix:**
```
1. Check bounce list for failing addresses
2. Send test to failing provider type
3. Improve email authentication
4. Review spam score (mail-tester.com)
```
### Scenario 3: Test Emails Work, Real Ones Don't
**Likely causes:**
- Queue settings prevent real emails
- Test emails bypass queue
- Fair Queue delay too long
**Fix:**
```
1. Check Fair Queue settings
2. Reduce batch delay
3. Verify queue not paused
4. Check pending notifications count
```
### Scenario 4: Emails Arrive Hours Late
**Expected behavior:**
- Fair Queue intentionally delays emails
- Ensures fair distribution
- Not a bug, it's a feature
**If too slow:**
```
Dashboard → Settings → Fair Queue
→ Reduce batch delay (2 hours → 30 minutes)
→ Increase batch size (50 → 100)
→ Faster delivery (less fair)
```
See [Fair Queue Settings](/help-center/notifications/fair-queue) for strategy.
---
## Prevention Tips
### Regular Monitoring
**Weekly checks:**
```
□ Review email delivery rate (Dashboard → Analytics)
□ Check bounce rate (aim for < 5%)
□ Monitor spam complaints (aim for < 0.1%)
□ Verify queue not backed up
```
**Monthly maintenance:**
```
□ Clean bounce list (remove old hard bounces)
□ Review email template performance
□ Check DNS records still valid
□ Test across major email providers
```
### Best Practices
**1. Keep email list clean**
```
- Remove persistent hard bounces
- Don't import old/stale email lists
- Only collect opt-in subscriptions
```
**2. Maintain sender reputation**
```
- Keep spam complaints low
- Respond to unsubscribes quickly
- Never send to purchased lists
- Honor opt-outs immediately
```
**3. Monitor metrics**
```
Dashboard → Analytics → Email Performance
→ Track:
- Delivery rate (aim for > 95%)
- Open rate (aim for > 20%)
- Click rate (aim for > 5%)
- Bounce rate (aim for < 5%)
```
**4. Test before major changes**
```
Before changing:
- Email templates
- DNS settings
- Domain configurations
→ Send tests to multiple providers
→ Verify delivery before going live
```
---
## When to Contact Support
Contact support@metigro.io if:
**1. Widespread delivery failure**
- No emails delivering for > 6 hours
- All recipients affected
- Queue active but nothing sending
**2. Persistent authentication issues**
- DNS records configured correctly
- Still failing SPF/DKIM checks
- 48+ hours since DNS changes
**3. Unexpected bounces**
- Valid emails bouncing
- Same customer email bounced 3+ times
- Bounce reason unclear
**4. Service integration broken**
- Can't reconnect email service
- API errors persisting > 24 hours
- Health checks showing ongoing issues
**5. Spam problem not resolving**
- Followed all spam fixes
- Still landing in spam folder
- Mail-tester score < 5/10
### Information to Include
```
Shop domain
Example email addresses affected
Email delivery logs (Dashboard → Logs)
Screenshots of errors
When issue started
Recent changes (DNS, templates, settings)
Test email results
```
---
## Additional Resources
- **Email templates guide:** [Customizing Email Templates](/help-center/notifications/email-templates)
- **Fair Queue explained:** [Fair Queue Settings](/help-center/notifications/fair-queue)
- **Notification flow:** [How Notifications Work](/help-center/notifications/how-notifications-work)
**Still experiencing issues?**
Email support@metigro.io with:
- Detailed description
- Affected customer emails
- Delivery logs/screenshots
We'll diagnose and resolve within 24 hours.
## GDPR & Data Privacy
Source: https://demandloop.metigro.io/help-center/troubleshooting/gdpr-data-privacy
---
title: "GDPR & Data Privacy"
description: "Understand how DemandLoop protects customer data, complies with GDPR, and handles privacy requirements"
category: "troubleshooting"
order: 3
updated_at: "2025-01-13"
estimated_time: "3 min"
---
# GDPR & Data Privacy
DemandLoop is built with privacy-first principles and full GDPR compliance. This guide explains how we handle customer data, what rights customers have, and how merchants can ensure compliance.
## What you'll accomplish
- Understand what data DemandLoop collects and why
- Know your obligations as a data controller under GDPR
- Handle customer data access, rectification, and deletion requests
- Ensure your store's privacy policy and cookie banner are compliant
## Requirements
- DemandLoop app installed on your Shopify store
- A published privacy policy on your storefront
- Cookie consent banner if serving EU customers (for attribution tracking)
## Quick Summary
**What DemandLoop collects:**
- Customer email addresses (subscriptions)
- Product preferences (variant subscriptions)
- Click activity (attribution tracking on Growth plan)
- Web push tokens (if customer opts in)
**What DemandLoop does NOT collect:**
- Payment information (never stored)
- Personal identification numbers
- Browsing history outside back-in-stock flows
- Social media profiles or connections
**Data processing basis:**
- **Legitimate interest** for back-in-stock service
- **Explicit consent** for web push notifications
- **Contract fulfillment** for merchant dashboard features
---
## GDPR Compliance Overview
### What Is GDPR?
**General Data Protection Regulation (GDPR)** is EU law protecting personal data and privacy.
**Applies to:**
- Stores with EU customers
- Stores operated from EU
- Any processing of EU residents' data
**Key principles:**
1. **Lawfulness** - Legal basis for processing
2. **Transparency** - Clear about data usage
3. **Purpose limitation** - Use only for stated purpose
4. **Data minimization** - Collect only what's needed
5. **Accuracy** - Keep data correct and current
6. **Storage limitation** - Don't keep longer than necessary
7. **Integrity & confidentiality** - Protect data security
**DemandLoop complies with all seven principles.**
### Legal Basis for Processing
**1. Email subscriptions: Legitimate interest**
```
Customer wants: Product availability notification
Our interest: Provide back-in-stock service
Balance: Transparent, minimal data, easy opt-out
```
**2. Web push: Explicit consent**
```
Customer action: Checks "Send me push notifications"
Browser prompt: "Allow notifications from this site?"
Consent: Two-step, explicit, revocable anytime
```
**3. Click tracking: Legitimate interest (Growth plan)**
```
Merchant needs: Attribution for performance measurement
Processing: Anonymized where possible, 7-day window
Balance: Business need vs minimal privacy impact
```
---
## Data We Collect
### Customer Data (Shopify Customers)
**1. Email addresses**
```
Purpose: Send back-in-stock notifications
Collected: When customer subscribes via widget
Stored: Encrypted in database
Retention: Until subscription completed/cancelled/expired
```
**2. Product preferences**
```
Purpose: Know which products customer wants
Collected: Product ID + Variant ID from subscription
Stored: Database records, non-personal
Retention: With subscription record
```
**3. Subscription metadata**
```
Purpose: System operation and troubleshooting
Collected: Subscription date, status, notification history
Stored: Database logs
Retention: 90 days after subscription closes
```
**4. Web push tokens (optional)**
```
Purpose: Deliver instant push notifications
Collected: Only if customer opts in via checkbox
Stored: Browser-generated token, not personally identifiable
Retention: Until customer unsubscribes or token expires
```
### Merchant Data (Store Owners)
**1. Shop information**
```
Purpose: App installation and billing
Collected: Shop domain, owner email, Shopify plan
Stored: Application database
Retention: Duration of app installation + 30 days
```
**2. Product catalog**
```
Purpose: Display correct products in widget
Collected: Product titles, prices, images, inventory
Stored: Cached for performance
Retention: Refreshed daily, purged on uninstall
```
**3. Analytics & usage**
```
Purpose: Service improvement and billing
Collected: Subscription counts, email metrics, attribution data
Stored: Aggregated where possible
Retention: 12 months for reporting, then anonymized
```
### Click Tracking (Growth Plan Only)
**1. Attribution tokens**
```
Purpose: Track which emails drive sales
Collected: Signed token with subscription ID + timestamp
Stored: In URL parameter, then cart attributes
Retention: 7-day attribution window, then deleted
```
**2. Click events**
```
Purpose: Calculate CTR and attribution rates
Collected: Click timestamp, email ID, success/failure
Stored: Event logs
Retention: 90 days for analytics, then anonymized
```
**Important:** Attribution tracking uses subscription IDs, not customer PII directly. Email addresses never appear in URLs.
---
## Data Security Measures
### Technical Safeguards
**1. Encryption at rest**
```
Database: AES-256 encryption
Backups: Encrypted with separate keys
Email addresses: Hashed for certain operations
```
**2. Encryption in transit**
```
All connections: TLS 1.3
API endpoints: HTTPS only
Webhooks: Signed and verified
```
**3. Access controls**
```
Staff access: Role-based, minimal privilege
Logs: All data access logged
Authentication: Multi-factor required
API keys: Rotated regularly
```
**4. Infrastructure security**
```
Hosting: SOC 2 certified data centers (Hetzner)
Monitoring: 24/7 intrusion detection
Patches: Automated security updates
Backups: Daily, encrypted, off-site
```
### Organizational Safeguards
**1. Privacy by design**
```
- Minimal data collection from start
- Clear purpose for every data point
- Regular privacy impact assessments
- Data protection in all features
```
**2. Staff training**
```
- GDPR compliance training for all staff
- Secure data handling procedures
- Incident response protocols
- Regular privacy audits
```
**3. Data processing agreements**
```
- Signed DPA with all subprocessors
- GDPR-compliant service agreements
- Regular vendor audits
- EU-based alternatives preferred
```
---
## Customer Rights Under GDPR
### Right to Access (Art. 15)
**Customers can request:**
- What personal data we hold
- Why we're processing it
- Who we've shared it with
- How long we'll keep it
**How to fulfill:**
```
Customer emails: support@metigro.io
Request type: "Data access request"
Response time: Within 30 days
Format: Machine-readable (JSON/CSV)
```
**Merchants can help:**
```
Dashboard → Subscriptions → Search by email
→ Shows all customer subscriptions
→ Export as CSV for customer
```
### Right to Rectification (Art. 16)
**Customers can request:**
- Correction of incorrect data
- Update of outdated information
**How it works:**
```
Customer resubscribes with correct email
→ System creates new subscription
→ Old one can be cancelled
Or customer contacts support
→ We update on their behalf
→ Verify identity first
```
### Right to Erasure / "Right to Be Forgotten" (Art. 17)
**Customers can request:**
- Complete deletion of their data
**How it works:**
```
Method 1: Self-service unsubscribe
→ Customer clicks unsubscribe link in email
→ All subscriptions cancelled
→ Data deleted after 30 days
Method 2: Support request
→ Customer emails support@metigro.io
→ We verify identity
→ Manual data deletion
→ Confirmation sent within 48 hours
```
**What gets deleted:**
```
Email address
All subscriptions
Web push tokens
Click history
Preferences
```
**What's retained (legal requirements):**
```
Anonymized analytics (subscription counts)
Billing records (attributed orders, no PII)
Audit logs (compliance, security)
```
### Right to Data Portability (Art. 20)
**Customers can request:**
- Their data in machine-readable format
- Transfer to another service
**How to fulfill:**
```
Dashboard → Subscriptions → Export
→ Filtered by customer email
→ Download CSV with:
- Email address
- Subscribed products
- Subscription dates
- Notification history
```
**Format:**
```csv
email,product,variant,subscribed_at,status
john@example.com,Nike Shoes,Size 10,2025-01-13,active
```
### Right to Object (Art. 21)
**Customers can object to:**
- Processing based on legitimate interest
- Direct marketing
**How it works:**
```
Automatically honored via unsubscribe link
→ No further emails sent
→ Processing stopped immediately
→ Data deleted after 30 days
```
### Right to Restrict Processing (Art. 18)
**Customers can request:**
- Pause processing while dispute resolved
- Keep data but don't use it
**Rare in our context, but supported:**
```
Customer requests restriction
→ Subscription marked "restricted"
→ No emails sent
→ Data preserved but not processed
→ Lifted when resolved
```
---
## Merchant Obligations
### As Data Controller
**Merchants are responsible for:**
**1. Customer consent management**
```
Widget includes:
Clear subscription purpose
Easy unsubscribe mechanism
Link to privacy policy
Transparent about data use
```
**2. Privacy policy compliance**
```
Your privacy policy should mention:
- Back-in-stock subscription service
- Email collection and notification use
- Third-party processor (DemandLoop)
- Customer rights (access, deletion, etc.)
- Retention period (90 days)
```
**Sample privacy policy language:**
```
"When you sign up for back-in-stock notifications, we collect your
email address and product preferences. We use DemandLoop, a
third-party service, to send notifications when products restock.
You can unsubscribe anytime via the link in notification emails.
Your data is deleted 90 days after subscription ends."
```
**3. Responding to customer requests**
```
Customer rights requests should be forwarded to:
- Email: support@metigro.io
- Include: Customer email, request type
- We'll handle within GDPR timelines
```
### As Data Processor (DemandLoop's Role)
**We handle data on your behalf:**
**1. Follow your instructions**
```
- Process only for back-in-stock service
- Don't use data for other purposes
- Delete on your instruction
- Assist with rights requests
```
**2. Data Processing Agreement (DPA)**
```
Automatically in place when you install DemandLoop
Covers:
- Processing purposes
- Security measures
- Subprocessor list
- Data deletion terms
- Liability and indemnification
```
**View DPA:**
```
Dashboard → Settings → Legal → Data Processing Agreement
```
---
## Subprocessors & Data Transfers
### Our Subprocessors
**1. Resend (Email delivery)**
```
Purpose: Send notification emails
Data shared: Email addresses, email content
Location: USA (Standard Contractual Clauses)
DPA: In place
Certification: SOC 2 Type II
```
**2. Hetzner (Infrastructure hosting)**
```
Purpose: Database and application hosting
Data shared: All application data
Location: EU (Germany)
DPA: In place
Certification: ISO 27001
```
**3. Shopify (E-commerce platform)**
```
Purpose: Product sync, billing, webhooks
Data shared: Shop data, product catalog
Location: USA/Canada (Standard Contractual Clauses)
DPA: In place (via Shopify app terms)
```
### International Data Transfers
**Transfers outside EU:**
```
Resend (USA) - Email service
Shopify (USA/Canada) - Platform provider
```
**Safeguards in place:**
```
Standard Contractual Clauses (SCCs)
Additional security measures
Right to object to transfers
Alternative EU processor available on request
```
**For EU merchants requiring EU-only processing:**
```
Contact: support@metigro.io
Subject: "EU-only data processing request"
→ We can configure EU-only email service
→ May involve additional costs
```
---
## Data Retention & Deletion
### Automatic Retention Policies
**Active subscriptions:**
```
Retained: While subscription active
Purpose: Fulfill notification service
Deleted: 90 days after completion/cancellation
```
**Completed subscriptions:**
```
Status: Notification sent, subscription fulfilled
Retained: 90 days (for analytics and disputes)
Then: Permanently deleted
```
**Cancelled subscriptions:**
```
Status: Customer unsubscribed
Retained: 30 days (for accidental cancellations)
Then: Permanently deleted
```
**Expired subscriptions:**
```
Status: No restock after 90 days
Retained: 30 days after expiry
Then: Automatically deleted
```
**Attributed orders (Growth plan):**
```
Status: Order attributed to DemandLoop
Retained: 12 months (for financial records)
PII removal: Email addresses anonymized after 90 days
Order ID + revenue kept: For billing transparency
```
### App Uninstallation
**When you uninstall DemandLoop:**
**Immediate actions (Day 0):**
```
Widget disabled on storefront
Webhooks unsubscribed
Notification sending stopped
API access revoked
```
**Grace period (Days 1-30):**
```
Data retained for potential reinstallation
Customer requests still processed
No new data collected
```
**Final deletion (Day 30):**
```
All customer subscriptions deleted
All email addresses purged
All product data removed
All logs anonymized/deleted
Anonymized analytics retained (legal requirement)
```
**Billing records:**
```
Retained: Per tax law (7 years typical)
PII status: Anonymized (no customer emails)
Contains: Order IDs, revenue amounts, dates
Purpose: Legal and accounting compliance
```
---
## Cookies & Tracking
### Cookies Used by DemandLoop
**1. Session cookies (Required)**
```
Name: bis_session
Purpose: Widget functionality
Duration: Session only (cleared on browser close)
Contains: No personal data
```
**2. Attribution token (Growth plan)**
```
Name: bis_attribution
Purpose: Track email clicks to sales
Duration: 7 days
Contains: Subscription ID (hashed), timestamp
```
**3. Push notification permission**
```
Name: bis_push_permission
Purpose: Remember permission choice
Duration: 90 days
Contains: Boolean (granted/denied)
```
### Cookie Consent Requirements
**For EU merchants:**
**You must obtain consent via cookie banner:**
```
Sample banner text:
"We use cookies to provide back-in-stock notifications.
By clicking 'Notify Me', you consent to necessary cookies
for this service. [Learn more]"
```
**DemandLoop cookies are:**
- **Strictly necessary** (session cookies)
- **Performance** (attribution - requires consent in EU)
- **Not** marketing or advertising cookies
**Configuring cookie consent:**
```
Dashboard → Settings → Privacy
→ "Respect cookie consent signals"
→ If enabled: DemandLoop checks for consent before attribution
→ Works with: OneTrust, Cookiebot, etc.
```
---
## Privacy Best Practices for Merchants
### 1. Transparent Communication
**Do:**
- Explain back-in-stock service clearly
- Link to privacy policy in widget
- Use plain language (not legal jargon)
- Make unsubscribe obvious
**Don't:**
- Hide subscription in checkout flow
- Use pre-checked opt-in boxes
- Collect more data than needed
- Share customer data with others
### 2. Regular Data Audits
**Monthly checklist:**
```
□ Review active subscriptions (any unusual growth?)
□ Check bounce rates (clean invalid emails)
□ Verify unsubscribe link works
□ Test customer data export
□ Confirm privacy policy up-to-date
```
### 3. Staff Training
**Train your team on:**
- What customer data DemandLoop collects
- How to handle customer rights requests
- Who to contact for privacy questions
- When to escalate privacy concerns
### 4. Incident Response
**If data breach suspected:**
```
1. Immediate: Contact support@metigro.io (priority)
2. Within 24h: Document what happened
3. Within 72h: Notify relevant authorities (GDPR requirement)
4. Inform affected customers if high risk
```
**DemandLoop's breach notification:**
- We notify merchants within 24 hours
- Provide incident details and scope
- Assist with customer notifications
- Implement remediation measures
---
## Customer FAQs (For Merchants to Share)
### "How do you use my email?"
```
"We only use your email to notify you when this specific product
restocks. We won't send marketing emails, and you can unsubscribe
anytime by clicking the link in our notification email."
```
### "Can I see what data you have about me?"
```
"Yes. Email us at [your-support-email] requesting your data.
We'll send you a complete list of your subscriptions and any
notification history within 30 days."
```
### "Can you delete my data?"
```
"Absolutely. Click the unsubscribe link in any notification email,
or email us at [your-support-email] requesting deletion. We'll
remove your information within 30 days."
```
### "Do you share my data with anyone?"
```
"We use DemandLoop, a secure third-party service, to manage
back-in-stock notifications. They don't use your data for any
other purpose and delete it 90 days after your subscription ends."
```
### "Is my data secure?"
```
"Yes. Your email is encrypted and stored securely. Only authorized
staff can access it, and we use industry-standard security measures
to protect against unauthorized access."
```
---
## Compliance Resources
### Documentation
**Available in Dashboard:**
```
Settings → Legal → Documents
- Data Processing Agreement (DPA)
- Privacy Policy
- Subprocessor List
- Security Whitepaper
```
### Contact for Privacy Matters
**General privacy questions:**
- Email: support@metigro.io
- Subject: "Privacy Question"
**Data Protection Officer (DPO):**
- Email: dpo@metigro.io
- For formal GDPR matters only
**Customer rights requests:**
- Email: support@metigro.io
- Include: Customer email, request type
- Response: Within 30 days
**Data breach reporting:**
- Email: security@metigro.io
- Mark: "URGENT - Security Issue"
- Response: Within 24 hours
---
## Regional Compliance
### GDPR (EU)
- Full compliance with all GDPR requirements
- DPA available
- EU hosting option available
- Standard Contractual Clauses for transfers
### CCPA (California)
- Honors "Do Not Sell" requests
- Provides data access/deletion
- Clear privacy notices
- No sale of personal information
### LGPD (Brazil)
- Complies with data protection principles
- Transparent data processing
- Customer rights honored
- Secure data transfers
### PIPEDA (Canada)
- Consent-based processing
- Limited data collection
- Secure data handling
- Access and correction rights
---
## Summary Checklist
**For merchants to ensure compliance:**
```
□ Privacy policy mentions back-in-stock service
□ Widget includes clear subscription purpose
□ Unsubscribe mechanism tested and working
□ Staff trained on handling privacy requests
□ Cookie banner includes DemandLoop (if EU)
□ Customer rights request process in place
□ Regular data audits scheduled
□ Incident response plan documented
□ DemandLoop DPA reviewed and understood
□ Contact information for privacy matters saved
```
---
## Verify
After reviewing your privacy setup, confirm:
- [ ] Your store's privacy policy mentions DemandLoop as a third-party data processor
- [ ] The unsubscribe link in notification emails works correctly
- [ ] Cookie consent banner covers DemandLoop attribution cookies (if serving EU customers)
- [ ] Your team knows how to handle a customer data access or deletion request
## FAQ
**Q: Do I need a DPA with DemandLoop?**
A DPA is automatically in place when you install DemandLoop. You can view it at Dashboard > Settings > Legal > Data Processing Agreement.
**Q: What happens to customer data if I uninstall the app?**
Data is retained for 30 days (grace period for potential reinstallation), then permanently deleted. Anonymized analytics are kept for legal compliance.
**Q: Does DemandLoop sell customer data to third parties?**
No. Customer data is used exclusively to provide the back-in-stock notification service. It is never sold, shared for marketing, or used for any other purpose.
## Need Help?
**Privacy compliance questions:**
- Email: support@metigro.io
- We'll help ensure your setup is compliant
**Legal review needed:**
- Consult your legal counsel
- We provide technical documentation
- Cannot provide legal advice
**Specific privacy concern:**
- Contact our DPO: dpo@metigro.io
- Include shop domain and specific issue
**Further reading:**
- [GDPR Official Site](https://gdpr.eu)
- [ICO Guidelines](https://ico.org.uk)
- [EDPB Recommendations](https://edpb.europa.eu)
---
DemandLoop takes privacy seriously. We're committed to transparent data handling, robust security, and full compliance with privacy regulations worldwide.
---
# Collection Subscriptions
## Understanding Collection Subscriptions
Source: https://demandloop.metigro.io/help-center/collections/understanding-collection-subscriptions
---
title: "Understanding Collection Subscriptions"
description: "Let customers subscribe to entire collections and receive automatic notifications when out-of-stock items restock"
category: "collections"
order: 1
updated_at: "2026-03-05"
estimated_time: "6 min"
---
# Understanding Collection Subscriptions
Collection Subscriptions extend DemandLoop's standard "Notify Me" feature from individual products to entire collections. A customer subscribes once to a collection and automatically receives a notification whenever any out-of-stock item in that collection becomes available — without needing to track each product manually.
## What you'll accomplish
- Understand how collection subscriptions differ from product-level "Notify Me"
- Enable and configure collection subscriptions per collection
- Know how deduplication prevents customers from receiving duplicate notifications
- Verify the feature is working correctly in your storefront
## Requirements
- DemandLoop app installed on your store
- **Performance plan** — Collection Subscriptions are not available on Free or Essentials plans
- Collections with inventory tracking enabled in Shopify
Collection Subscriptions require the Performance plan. If you are on Free or Essentials, you will see a locked state in the Collections section of your DemandLoop admin. Upgrade at Billing → Plans to unlock this feature.
## How Collection Subscriptions Work
### For Customers
When a customer visits a collection page, they see a **"Notify Me About This Collection"** button (rendered by the DemandLoop widget). The subscription flow is:
1. Customer clicks the subscribe button on a collection page
2. A compact email modal appears
3. Customer enters their email address and confirms
4. Subscription is created — the customer is now watching the entire collection
5. A confirmation message is displayed: "You'll be notified when items in this collection restock"
From this point on, whenever **any out-of-stock product or variant in that collection** comes back in stock, the customer receives an automatic notification email.
**What the notification email includes:**
- The specific product that restocked
- Product image, name, variant, and price
- "Shop Now" call-to-action with attribution tracking
- Unsubscribe link (from this collection)
Customers can manage all their collection subscriptions through the customer subscription dashboard, available at `/apps/demandloop/my-subscriptions`.
### For Merchants
From the DemandLoop admin under **Collections**:
- View all collections in your store with subscription counts
- Enable or disable subscriptions per individual collection
- Monitor notification history and delivery status
- Review attributed revenue and conversion data per collection
Notifications are dispatched automatically — no manual action is needed once the collection is enabled.
## Setting Up Collection Subscriptions
### Step 1: Enable the Feature
1. Go to **Collections** in the DemandLoop admin
2. You will see a list of all collections synced from your Shopify store
3. Toggle **Enable collection subscriptions** on for each collection you want to support
Start with your highest-demand collections — the ones customers browse most when items are out of stock. You can enable more collections at any time.
### Step 2: Add the Widget to Your Collection Pages (Shopify)
1. Go to **Shopify Admin** → **Online Store** → **Themes** → **Customize**
2. Navigate to your **Collection page** template
3. Click **Add block**
4. Select **Apps** → **DemandLoop: Collection Subscribe Button**
5. Drag the block to your preferred position (typically above or below the product grid)
6. Customize the button text and appearance in block settings
7. Click **Save**
### Step 3: Verify the Widget Appears
1. Visit one of your enabled collection pages in your storefront
2. Confirm the subscribe button is visible
3. Test the subscription flow using a test email address
4. Check **Collections** → select the collection → **Subscribers** to confirm the subscription was recorded
## Per-Collection Configuration
Each collection has its own settings, accessible from **Collections** → click any collection.
| Setting | Description | Default |
|---------|-------------|---------|
| **Enable subscriptions** | Allow customers to subscribe to this collection | On |
| **Restock notifications** | Notify subscribers when items in this collection restock | On |
| **Use Fair Queue** | Batch and pace notifications to protect inventory | On (inherits global settings) |
| **Custom batch size** | Override global Fair Queue batch size for this collection | Inherit |
| **Custom delay** | Override global Fair Queue delay between batches | Inherit |
If you leave Fair Queue settings at "Inherit", the collection uses your store's global Fair Queue configuration. Override per collection only if a specific collection has different inventory dynamics — for example, a high-volume limited-edition collection where you want smaller batch sizes.
## Notification Deduplication
If a customer is subscribed **both** to a specific product (via the "Notify Me" widget) **and** to a collection that contains that product, DemandLoop sends them **only one notification** — not two.
This deduplication is automatic. The system checks for overlapping subscriptions before dispatching and suppresses the duplicate.
**Example:**
```
Customer subscribes to:
1. "Blue Denim Jacket, Size M" — via product page Notify Me widget
2. "New Arrivals" collection — via collection subscribe button
Product "Blue Denim Jacket, Size M" restocks →
→ Customer receives ONE notification (not two)
```
This protects your customers from inbox fatigue and keeps your sending reputation clean.
## Fair Queue and Collection Notifications
Collection subscriptions integrate with DemandLoop's Fair Queue system. When a restock event triggers notifications for a collection:
1. All active subscribers for that collection are queued
2. Notifications are sent in controlled batches (configurable size and delay)
3. If inventory sells out between batches, remaining subscribers are held until the next restock
This prevents a surge of notifications from overwhelming inventory immediately after a restock, and ensures that early subscribers have a realistic chance to purchase.
Fair Queue settings for collection notifications are managed at **Notifications** → **Fair Queue**, with per-collection overrides available as described above.
## Analytics
Collection Subscriptions include full analytics on the **Performance plan**:
| Metric | Where to Find |
|--------|---------------|
| Total subscribers per collection | Collections → select collection |
| Notification open rate | Collections → select collection → Notifications |
| Click-through rate (CTR) | Collections → select collection → Notifications |
| Attributed revenue | Collections → select collection → Analytics |
| Conversion rate | Collections → Analytics (overview) |
Attribution uses the same token-based system as product-level notifications. When a subscriber clicks through and purchases, the order is attributed to the collection subscription.
## Plan Comparison
| Feature | Free | Essentials | Performance |
|---------|------|------------|-------------|
| Collection subscribe widget | — | — | Yes |
| Enable/disable per collection | — | — | Yes |
| Automatic restock notifications | — | — | Yes |
| Notification deduplication | — | — | Yes |
| Fair Queue integration | — | — | Yes |
| Per-collection Fair Queue overrides | — | — | Yes |
| Attribution tracking | — | — | Yes |
| Collection analytics dashboard | — | — | Yes |
| Revenue reporting per collection | — | — | Yes |
## Verify
After setting up Collection Subscriptions, confirm:
- [ ] The subscribe button appears on your enabled collection pages in the storefront
- [ ] Entering an email and subscribing shows a confirmation message
- [ ] The new subscriber appears in **Collections** → select collection → **Subscribers**
- [ ] When a product in the collection restocks, an email is sent to active subscribers
- [ ] A customer subscribed to both a product and its collection receives only one notification
- [ ] Collection analytics update after notifications are sent
## FAQ
**Q: Does a collection subscription cover all variants of a product in the collection?**
Yes. If any variant in the collection restocks, all active collection subscribers are notified — regardless of which specific variant they may be interested in. For variant-specific interest, the product-level "Notify Me" widget is more targeted.
**Q: Can a customer subscribe to multiple collections?**
Yes. There is no limit on how many collections a single customer can subscribe to. Each collection subscription is independent.
**Q: What if I add a new product to a collection after customers have subscribed?**
Phase 1 of Collection Subscriptions covers restock notifications only. When a new product is added to the collection, existing subscribers are not notified unless that product is also out of stock and subsequently restocks. New arrival notifications are planned for a future release.
**Q: Can I disable collection subscriptions for a single collection without affecting others?**
Yes. Each collection has its own enable/disable toggle. Disabling subscriptions for one collection does not affect other collections.
**Q: Do collection subscription emails count toward my monthly email limit?**
The Performance plan includes 100,000 emails per month. Collection subscription notifications count toward this limit. Overages are billed at $2.50 per 1,000 emails.
**Q: What happens to existing subscribers if I disable a collection?**
Existing subscribers are preserved in the database. No new notifications are sent while the collection is disabled. If you re-enable the collection, subscribers become active again and will be notified on the next restock event.
**Q: Can customers unsubscribe from a specific collection without losing other subscriptions?**
Yes. The unsubscribe link in each notification is scoped to the specific collection. Clicking it removes only the collection subscription and does not affect product-level "Notify Me" subscriptions or other collection subscriptions.
## Troubleshooting
**Problem:** Collection subscribe button does not appear on the collection page
**Likely cause:** Block not added in theme editor, or the collection is disabled in DemandLoop settings
**Fix:** Open Shopify theme editor → verify the DemandLoop Collection Subscribe Button block is present on the collection template. Check **Collections** in DemandLoop admin to confirm the collection has subscriptions enabled.
**How to confirm:** Visit the collection page in your storefront — the subscribe button should be visible above or below the product grid.
**Problem:** "Collection Subscriptions require the Performance plan" message in the admin
**Likely cause:** Your store is on the Free or Essentials plan
**Fix:** Upgrade to the Performance plan at **Billing** → **Plans**. The feature unlocks immediately after the plan change is confirmed.
**How to confirm:** After upgrading, the Collections section in the DemandLoop admin should show your collections list with enable/disable toggles.
**Problem:** Subscribers exist but no notifications were sent after a restock
**Likely cause:** Fair Queue is batching notifications and the next batch has not yet been dispatched, or the collection's restock notifications are disabled
**Fix:** Check **Collections** → select the collection → confirm **Restock notifications** is toggled on. Check **Notifications** → **Activity** to see if notifications are queued. If Fair Queue delay is long, notifications may still be in progress.
**How to confirm:** Notification status in Collections → Notifications should move from "queued" to "sent" as batches are dispatched.
**Problem:** A customer received two notifications for the same restock (from a product subscription and a collection subscription)
**Likely cause:** Deduplication may not have matched the subscriptions due to different email formats (e.g., uppercase vs lowercase)
**Fix:** Deduplication uses SHA-256 hash of the normalized (lowercase) email. If the customer subscribed with different email casing, this can cause a miss. Contact support with the customer email and subscription IDs so we can investigate.
**How to confirm:** Check the subscriber record in both the product subscriptions list and the collection subscriptions list to verify the email addresses match exactly.
**Problem:** Collection analytics show zero attributed revenue despite confirmed purchases
**Likely cause:** Attribution token was not included in the click (customer navigated to the store directly rather than through the email link), or the attribution window expired
**Fix:** Attribution requires the customer to click the "Shop Now" link in the notification email. Direct navigation to the store is not attributable. The default attribution window is 7 days from notification send.
**How to confirm:** Check Notifications → Activity for the specific notification and look at the "Clicked" and "Converted" status columns.
## Next Steps
- [How Notifications Work](/help-center/notifications/how-notifications-work) — understand the full notification lifecycle including Fair Queue
- [Fair Queue Settings](/help-center/notifications/fair-queue) — configure batch size and delay for all notification types
- [Understanding Analytics](/help-center/analytics/understanding-analytics) — track performance and revenue attribution
- [Understanding Plans & Pricing](/help-center/billing/understanding-plans-pricing) — compare plan features and limits
Collection Subscriptions capture demand at scale — one subscription covers every product in a collection. Pair them with the product-level "Notify Me" widget for complete coverage: customers who know exactly what they want subscribe at the product level, while those browsing a category subscribe at the collection level.
---
# Preorders
## Understanding Preorders
Source: https://demandloop.metigro.io/help-center/preorders/understanding-preorders
---
title: "Understanding Preorders"
description: "Capture revenue from out-of-stock items before they restock with preorder functionality"
category: "preorders"
order: 1
updated_at: "2025-01-05"
estimated_time: "3 min"
---
# Understanding Preorders
Preorders let customers purchase out-of-stock items now and receive them later when inventory arrives. This captures revenue immediately instead of just collecting email subscriptions.
## What you'll accomplish
- Understand how preorders work for customers and merchants
- Learn when to use preorders versus back-in-stock subscriptions
- Set up, manage, and fulfill preorder products
- Apply pricing strategies and best practices for preorder success
## Requirements
- DemandLoop app installed on your Shopify store
- Products with inventory tracking enabled in Shopify
- Growth plan (preorders are a Growth plan feature)
## How Preorders Work
### For Customers
Instead of seeing "Out of Stock" or "Notify Me," customers see **"Preorder Now"** button with expected delivery date.
**The purchase flow:**
1. Customer clicks "Preorder Now"
2. Adds to cart like a normal product
3. Completes checkout immediately
4. Receives order confirmation with expected ship date
5. Gets notified when item ships
**What they pay:** Full product price (or discounted preorder price, if you set one)
### For Merchants
**Revenue capture:**
- Money collected immediately via Shopify checkout
- Order appears in Shopify Orders as "unfulfilled"
- DemandLoop tracks preorder status
**When inventory arrives:**
1. Fulfill preorder orders from Shopify Orders
2. DemandLoop marks orders as fulfilled
3. Customers receive tracking info
**Key difference vs subscriptions:**
- **Preorder:** Customer pays NOW, you fulfill LATER
- **Subscription:** Customer gets notified, pays LATER (if they return)
## Why Use Preorders
### Guaranteed Revenue
**Problem with subscriptions:**
```
100 customers subscribed → You notify → 20 return and buy = 20% conversion
```
**Advantage with preorders:**
```
50 customers preorder → 50 guaranteed sales = 100% conversion
```
### Cash Flow Management
Preorders provide upfront capital to:
- Purchase inventory
- Fund production runs
- Reduce financial risk
### Demand Validation
Before ordering 1,000 units, let customers preorder:
- 200 preorders = strong demand, order more
- 20 preorders = weak demand, order less
### Customer Commitment
Customers who preorder are highly committed:
- Already paid (no cold feet)
- Actively waiting (engaged)
- Less likely to cancel
## Setting Up Preorders
### 1. Enable Preorder on Products
**Go to:** Preorders → Products
**For each product:**
1. Toggle "Enable Preorder"
2. Set expected ship date
3. Set preorder quantity limit (optional)
4. Set preorder price (optional discount)
5. Customize preorder button text
**Example:**
```
Product: Premium Sneakers
Status: Out of Stock
Preorder: Enabled
Expected Ship: March 15, 2025
Preorder Limit: 100 units
Preorder Price: $120 (regular $140)
Button Text: "Preorder - Ships March 15"
```
### 2. Configure Display Settings
**Preorder badge:** Shows "Preorder" badge on product cards
**Expected date display:** Shows ship date on product page
**Quantity limits:** Stop preorders at specific quantity
### 3. Set Notification Preferences
**Customer emails:**
- Order confirmation (with expected date)
- Shipping notification (when fulfilled)
- Delay notification (if ship date changes)
## Managing Preorder Orders
### Viewing Orders
**Go to:** Preorders → Orders
**What you'll see:**
- Customer name and email
- Product + variant
- Order date
- Expected ship date
- Order status
- Shopify order number
### Order Statuses
**Pending** - Awaiting fulfillment
**Processing** - Being prepared for shipment
**Fulfilled** - Shipped to customer
**Cancelled** - Order cancelled (refund issued)
### Fulfilling Preorders
**When inventory arrives:**
1. Go to Shopify Orders
2. Find preorder orders (tagged "preorder")
3. Fulfill orders normally
4. DemandLoop auto-updates status
**Or bulk fulfill from DemandLoop:**
1. Preorders → Orders
2. Filter by product
3. Select orders to fulfill
4. Click "Mark as Fulfilled"
5. Customers receive shipping notification
### Updating Ship Dates
**If delivery is delayed:**
1. Preorders → Products
2. Update expected ship date
3. Save changes
4. Customers automatically notified of delay
**Always notify customers of delays ASAP.** Transparency builds trust, surprises kill it.
## Pricing Strategies
### Full Price Preorder
**Strategy:** Charge regular price for preorder
**When to use:**
- High-demand items
- Limited editions
- Established products
**Example:** iPhone launches, limited sneakers
### Discounted Preorder
**Strategy:** Offer 10-20% discount for preorders
**When to use:**
- New product launches
- Uncertainty about demand
- Incentivize early commitment
**Example:**
```
Regular Price: $100
Preorder Price: $85 (15% off)
Message: "Save 15% when you preorder!"
```
### Tiered Pricing
**Strategy:** Price increases as inventory nears
**When to use:**
- Crowdfunding-style launches
- Building urgency
**Example:**
```
First 50 preorders: $80 (20% off)
Next 100 preorders: $90 (10% off)
Final 50 preorders: $100 (regular price)
```
## Best Practices
### Set Realistic Ship Dates
**Don't overpromise:**
- Add buffer time (ship dates often slip)
- Under-promise, over-deliver
- Better to ship early than late
**Example:**
```
Bad: Inventory arrives March 1 → Set ship date March 1
Good: Inventory arrives March 1 → Set ship date March 15
```
### Communicate Proactively
**Keep customers updated:**
- Order confirmation: "Expected ship date: March 15"
- Weekly updates: "Your order is on track!"
- Delay notifications: "New expected date: March 22"
### Set Quantity Limits
**Prevent overselling:**
```
Expected inventory: 200 units
Preorder limit: 150 units (75% of expected)
Safety margin: 50 units buffer
```
This prevents situations where you have 200 preorders but only 180 units arrive.
### Offer Easy Cancellation
**Build trust with flexible policy:**
- Allow cancellations anytime before ship
- Full refund, no questions asked
- Better to lose one sale than one customer
### Use Preorder Data
**Inform inventory decisions:**
- High preorders = order more inventory
- Low preorders = reduce order size
- Variant distribution = which sizes/colors to order
## FAQ
**Q: What if customer wants to cancel preorder?**
Process refund through Shopify Orders. DemandLoop automatically updates status when order is cancelled.
**Q: Can I offer both preorder and notify me?**
No. When preorder is enabled, "Notify Me" is replaced with "Preorder Now." Choose one strategy per product.
**Q: What if inventory arrives earlier than expected?**
Update ship date and notify customers of good news! Customers love early delivery.
**Q: How do preorders work with Shopify inventory?**
Preorder products have inventory = 0 in Shopify but are purchasable. DemandLoop overrides "Add to Cart" button to allow purchase despite zero inventory.
**Q: What happens if inventory never arrives?**
Cancel all preorders through Shopify and issue refunds. Send apology email with explanation. Consider offering discount on future purchase.
**Q: Can I partially fulfill preorders?**
Yes. If 100 preorders but only 80 units arrive, fulfill 80 orders and update remaining 20 customers with new ship date.
**Q: Do preorders count toward my order limits?**
Yes. Preorders are real Shopify orders and count toward your plan limits and Shopify transaction fees.
## Preorder vs Subscription
### When to use Preorders
- High-confidence in delivery date
- Want guaranteed revenue now
- Limited edition or hyped products
- Need cash flow for production
- Product has proven demand
### When to use Subscriptions
- Uncertain delivery timeline
- Regular restocking cycles
- Lower customer commitment needed
- Testing demand first
- Commodity products
### Can you use both?
Yes! Use for different products:
- **Preorder:** New iPhone case (launching next month)
- **Subscription:** Classic t-shirt (restocks weekly)
## Real-World Example
**Product:** Limited Edition Hoodie
**Regular Price:** $85
**Strategy:** Preorder with early bird discount
**Timeline:**
```
Jan 5: Announce preorder launch
Jan 10: Open preorders at $70 (early bird)
Jan 15: Price increases to $75
Jan 20: Final price $80
Jan 25: Preorders close
Jan 30: Order inventory (based on preorder count)
Mar 1: Inventory arrives
Mar 5: Start fulfilling preorders
Mar 10: All preorders shipped
```
**Results:**
- 247 preorders captured
- $18,765 revenue collected upfront
- Used revenue to order 300 units (247 preorders + 53 extras)
- 100% fulfillment rate
- Zero risk of overstock
## Troubleshooting
**Problem:** Customers can't complete preorder checkout
**Check:** Preorder limit reached? Product still enabled? Shopify accepting orders?
**Problem:** Ship date passed but inventory not arrived
**Action:** Update ship date immediately, send delay notification to customers
**Problem:** Too many preorders, not enough inventory
**Action:** Fulfill in order received, update remaining customers with new timeline
**Problem:** Low preorder conversion
**Check:** Price too high? Ship date too far out? Poor product description? Add preorder discount?
## Verify
After setting up preorders, confirm:
- [ ] "Preorder Now" button appears on the product page for out-of-stock items with preorder enabled
- [ ] Customers can complete checkout and the order appears in Shopify Orders as "unfulfilled"
- [ ] Expected ship date displays correctly on the product page and in order confirmation
- [ ] Preorder quantity limit stops new orders when the cap is reached
## Next Steps
- [Quick Start Guide](/help-center/getting-started/quick-start-guide) - Get started with DemandLoop setup
- [Managing Subscriptions](/help-center/subscriptions/managing-subscriptions) - View and manage customer subscriptions
- [Understanding Plans & Pricing](/help-center/billing/understanding-plans-pricing) - Compare plans and features
**Pro tip:** Start with small preorder batch (50-100 units) to test demand before committing to large inventory orders. Use preorder data to make confident purchasing decisions!