The Problem: Shoppers Save Your Product and Never Come Back

You have seen it in your analytics. Someone visits a product page, clicks “Save to Wishlist,” and disappears. Weeks later you drop the price. The same person who was interested enough to save the item has no idea. No email. No notification. No reason to come back.

Most wishlist plugins charge a monthly fee for this exact feature. But if your store runs on Shopify, WooCommerce, or any platform with a wishlist function and email capability, you can build a price drop alert system yourself in about 45 minutes. No plugin. No extra subscription. Just a simple flow that watches your prices and emails the right people at the right moment.

What You Are Building

A system that does three things:

  1. Detects when a product price drops below its previous value
  2. Checks which customers have that product on their wishlist
  3. Sends each of those customers an email saying “Your saved item just dropped in price”

That is it. No discount codes, no complicated logic. Just a timely nudge that turns a passive wishlist into an active sale.

Step 1: Set Up Price Tracking on Your Products

Before you can notify anyone about a price drop, you need to know when a price actually dropped. This means tracking the previous price every time you update a product.

If you are on Shopify, you can use a metafield called previous_price on each product. Every time you change a product price, a simple automation (via Shopify Flow on Shopify Plus, or a small script for standard plans) copies the old price into that metafield before the new price takes effect.

For WooCommerce, a small PHP snippet in your functions.php file can hook into the woocommerce_update_product action and store the previous price in a custom field. Here is the logic:

// On product update, save the old price before it changes
add_action('woocommerce_before_product_object_save', 'save_previous_price');
function save_previous_price($product) {
    $current_price = $product->get_price();
    $stored_price = get_post_meta($product->get_id(), '_previous_price', true);
    if ($current_price != $stored_price && !empty($stored_price)) {
        update_post_meta($product->get_id(), '_previous_price', $stored_price);
    }
    // Store current as previous for next update
    update_post_meta($product->get_id(), '_previous_price', $current_price);
}

This gives you a “previous price” value to compare against every time you update a product.

Step 2: Connect Wishlists to Customer Records

Your wishlist system already knows which customers saved which products. The question is whether you can query that data.

On Shopify, wishlist apps like Wishlist King or Swym store wishlist data either as customer metafields or in their own database. If you are using a customer metafield approach, you can query it directly. If the data lives in an app, most wishlist apps expose an API or export function.

For WooCommerce, the YITH Wishlist plugin stores wishlist items in a custom database table. You can query it with a simple SQL call:

SELECT user_id, product_id FROM wp_yith_wcwl
WHERE product_id = {your_product_id}

The goal is simple: given a product ID, get a list of customer email addresses who have that product on their wishlist.

Step 3: Build the Price Drop Detection Flow

Now you need something that runs on a schedule, checks for price drops, and triggers the email. You have two options:

Option A: Shopify Flow (Shopify Plus only)

Create a workflow that triggers on “Product price updated.” Add a condition: if the new price is less than the previous_price metafield, proceed. Then use the “Send email” action to notify each customer who has the product on their wishlist.

Option B: Scheduled Script (Any platform)

Set up a daily cron job or scheduled task that runs this logic:

  1. Pull all products where the current price is less than the stored previous price
  2. For each product, query the wishlist table for customers who saved it
  3. For each customer, generate and send a price drop email
  4. Update the previous price metafield to match the current price (so you do not send duplicate alerts)

For WooCommerce, here is a simplified PHP version you can drop into a custom plugin or functions.php:

// Run daily via wp-cron
add_action('init', function() {
    if (!wp_next_scheduled('check_price_drops')) {
        wp_schedule_event(time(), 'daily', 'check_price_drops');
    }
});

add_action('check_price_drops', function() {
    $args = array(
        'status' => 'publish',
        'limit' => -1,
        'return' => 'ids'
    );
    $products = wc_get_products($args);
    
    foreach ($products as $product_id) {
        $product = wc_get_product($product_id);
        $current_price = $product->get_price();
        $previous_price = get_post_meta($product_id, '_previous_price', true);
        
        if ($previous_price && $current_price < $previous_price) {
            // Find wishlist users
            global $wpdb;
            $wishlist_users = $wpdb->get_col($wpdb->prepare(
                "SELECT user_id FROM {$wpdb->prefix}yith_wcwl WHERE product_id = %d",
                $product_id
            ));
            
            foreach ($wishlist_users as $user_id) {
                $user = get_user_by('id', $user_id);
                if ($user) {
                    $drop_amount = $previous_price - $current_price;
                    $drop_percent = round(($drop_amount / $previous_price) * 100);
                    
                    $subject = "Good news: Your saved item just dropped " . $drop_percent . "%";
                    $message = "A product on your wishlist just went on sale.\n\n";
                    $message .= "Product: " . $product->get_name() . "\n";
                    $message .= "Was: " . wc_price($previous_price) . "\n";
                    $message .= "Now: " . wc_price($current_price) . "\n";
                    $message .= "You save: " . wc_price($drop_amount) . "\n\n";
                    $message .= "Buy now before the price changes again.\n";
                    $message .= get_permalink($product_id);
                    
                    wp_mail($user->user_email, $subject, $message);
                }
            }
            
            // Update previous price to prevent duplicate alerts
            update_post_meta($product_id, '_previous_price', $current_price);
        }
    }
});

Step 4: Write the Email Template

The email itself should be short and direct. Five elements:

  • Subject line: “Your saved item just dropped [X]%”
  • Product image: The exact product they saved
  • Price comparison: Old price crossed out, new price bold
  • Buy button: Direct link to the product page
  • Scarcity line: “Prices can change anytime, buy now if you want it”

Do not add cross-sells, recommendations, or other products. This email works because it is about one thing: the product they already said they wanted, now cheaper. Keep it that focused.

Step 5: Test Before You Go Live

Before enabling this on your store, test with a single product:

  1. Add a test product at $50
  2. Save it to your own wishlist account
  3. Change the price to $40
  4. Run the script manually
  5. Check that you receive the email with the correct prices and product link

If the email arrives with the right product, the right prices, and a working buy link, you are ready to enable it for real customers.

What to Expect

Price drop alerts typically see open rates between 40% and 60%, which is roughly double a standard promotional email. The click-through rate is also high because the recipient already expressed interest in the specific product. You are not selling them on something new. You are giving them a reason to complete a purchase they were already considering.

The key is restraint. If you drop prices every week and spam your wishlist users, they will tune out. Use this for genuine price changes: seasonal sales, clearance, or competitive pricing adjustments. One or two alerts per month per customer is the sweet spot.

Want more like this? Join MOKU Club for free. Weekly resources, early access to new guides, and occasional templates you can actually use. Join below.

Stacked neon green tennis balls with dramatic studio lighting representing Luma Scenes storyboard-first AI video workflow
Luma Scenes Just Made AI Video Work Like a Storyboard. Review Every Frame Before You Render.AiDesignNews

Luma Scenes Just Made AI Video Work Like a Storyboard. Review Every Frame Before You Render.

HeraHeraAugust 12, 2026
AI for Demand Planning: How Small Businesses Stop Guessing What to Stock and Start Ordering With ConfidenceAiDesign

AI for Demand Planning: How Small Businesses Stop Guessing What to Stock and Start Ordering With Confidence

HeraHeraSeptember 3, 2026
AI for Email Marketing: How Small Businesses Send 50 Versions of One Campaign Without Writing 50 EmailsAiCreative

AI for Email Marketing: How Small Businesses Send 50 Versions of One Campaign Without Writing 50 Emails

HeraHeraJune 21, 2026