← All use cases
E-commerce & Pricing

Restock Alerts for Out-of-Stock Products

Catch the exact moment a sold-out product becomes available again - for concert merch, limited drops, or any high-demand SKU.

Verid Use Cases·4 min read

The scenario

A graphics card you've wanted for three months goes out of stock every time it's listed. The retailer's "notify me" form sends an email two hours after the restock, by which point everything is gone again. You'd happily pay a small monthly fee to be the first person notified, automatically, the second the page changes from "Out of Stock" to "Add to Cart."

The same pattern fits concert merch drops, limited sneaker releases, vaccine appointment slots, and high-demand DTC products that sell out in minutes.

The problem

Most retailer "back in stock" emails are slow on purpose - they're batched. Browser extensions that scrape on your behalf either run only when your laptop is open or get blocked by Cloudflare. You want a server-side watcher that runs while you sleep and pings your phone the instant the page state flips.

How Verid solves it

The page already tells you the answer in one of two places: a stock label like "In stock" / "Sold out", or the presence of a buyable price. Verid extracts that label as a named field and uses a field_equals predicate to fire only when the value transitions to the in-stock string.

Run it every two to five minutes. Deliver to whichever channel pings you fastest - webhook into your phone-notification service, Discord, or email.

Build the monitor

Extraction config

{
  "method": "css",
  "fields": {
    "availability": ".product-availability-label",
    "price": ".price"
  }
}

Predicate

The cleanest signal is "this field is now equal to the in-stock string":

{ "type": "field_equals", "field": "availability", "value": "In stock" }

If the page hides the price element entirely when sold out, an even simpler predicate is "the price field is now present":

{ "type": "field_changes", "field": "price" }

Create the monitor

curl:

curl -X POST https://api.verid.dev/v1/monitors \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Restock - GPU Model X",
    "url": "https://retailer.com/products/gpu-model-x",
    "schedule_interval_seconds": 180,
    "extract_config": {
      "method": "css",
      "fields": {
        "availability": ".product-availability-label",
        "price": ".price"
      }
    },
    "diff_predicate": { "type": "field_equals", "field": "availability", "value": "In stock" },
    "deliveries": [
      { "type": "discord", "webhookUrl": "https://discord.com/api/webhooks/..." }
    ]
  }'

SDK:

import { VeridClient } from '@verid.dev/sdk';

const client = new VeridClient({ apiKey: 'vrd_your_api_key' });

await client.monitors.create({
  name: 'Restock - GPU Model X',
  url: 'https://retailer.com/products/gpu-model-x',
  schedule_interval_seconds: 180,
  extract_config: {
    method: 'css',
    fields: { availability: '.product-availability-label', price: '.price' },
  },
  diff_predicate: { type: 'field_equals', field: 'availability', value: 'In stock' },
  deliveries: [{ type: 'discord', webhookUrl: 'https://discord.com/api/webhooks/...' }],
});

What the webhook delivers

{
  "id": "del_01H...",
  "version": "2026-05-01",
  "monitor_id": "9b1c…",
  "fired_at": "2026-05-08T12:00:00Z",
  "diff": {
    "fields_changed": ["availability", "price"],
    "before": { "availability": "Sold out",  "price": "" },
    "after":  { "availability": "In stock", "price": "$1,599.00" }
  }
}

Caveats & tips

  • The in-stock string has to match exactly. field_equals is strict - "In stock" and "In Stock" are different. Check the page output once before deciding what to compare against, or use field_matches_regex with ^(In stock|Available|Add to cart)$.
  • Fast intervals on the right tier. A three-minute interval needs a plan tier that allows it. Verid's free tier supports a slower minimum; check the pricing page for the cutoffs.
  • Pages that hide everything behind a queue. Some high-demand retailers gate the product page behind a virtual waiting room. Verid will see the queue page, not the product - for those, use appointment & calendar slot availability which monitors a queue position separately.
  • No first-run fire. The first run records "out of stock" as the baseline. The second run is when alerts can start. So leave the monitor running before the restock window.

Related use cases

For pricing-aware monitoring of the same product, see competitor price tracking. For shop-wide new listings, see Etsy shop new listings. For event ticket availability specifically, see appointment & calendar slot availability.

Ship this monitor today

5 monitors free, no credit card. Set up takes about a minute.

Get started free