← All use cases
E-commerce & PricingCSSRegex

MAP Pricing Compliance Monitoring

Catch resellers advertising your product below your Minimum Advertised Price - per listing, within hours, before it erodes your channel pricing.

Verid Use Cases·5 min read

The scenario

You set a Minimum Advertised Price of $199 for your flagship product and your reseller agreements require everyone to honor it. Then one distributor quietly lists it at $169 to win the buy box. Within days, two more match them to stay competitive, and your carefully maintained channel pricing is in a race to the bottom - all while your brand team is none the wiser.

MAP compliance is the inverse of competitor price tracking: instead of watching what rivals charge, you watch whether your own resellers are advertising below the floor you set.

The problem

MAP enforcement is a volume problem. You might have one product across 40 reseller and marketplace listings, and a violation is only a violation if you can point to the page, the price, and the timestamp. Manually checking dozens of third-party URLs is the kind of chore that gets done once a quarter - which is to say, too late to matter. And reseller pages bury the price among stock counters, review counts, and "people are viewing this" widgets that change constantly.

How Verid solves it

Create one monitor per reseller listing. Extract the advertised price as a numeric field with a CSS (or regex) extractor, then use a threshold predicate that fires the moment the price drops below your MAP floor - not on every cosmetic change. Each violation arrives as a dated webhook you can attach to an enforcement notice.

For a reseller network of a few hundred listings, the Scale plan's monitor count covers it directly. Past a few thousand listings, pair this approach with a dedicated retail-intelligence feed.

Build the monitor

Extraction config

{
  "method": "css",
  "fields": {
    "advertised_price": "span.product-price"
  }
}

If the price isn't cleanly isolated in its own element, pull it with regex instead:

{
  "method": "regex",
  "fields": {
    "advertised_price": "\\$([0-9]+(?:\\.[0-9]{2})?)"
  }
}

Predicate

Fire only when the advertised price falls below your $199 MAP floor:

{ "type": "field_decreases_by_absolute", "field": "advertised_price", "threshold": 0 }

For a hard floor that fires on any value under MAP regardless of the previous price, use a regex assertion on the extracted number instead, or a composite that combines a change with a below-floor check:

{
  "type": "composite",
  "operator": "AND",
  "conditions": [
    { "type": "field_changes", "field": "advertised_price" },
    { "type": "field_matches_regex", "field": "advertised_price", "pattern": "^\\$(1[0-8][0-9]|[0-9]{1,2})(\\.[0-9]{2})?$" }
  ]
}

The regex above matches any dollar value below $190 - adjust the pattern to your exact floor.

Create the monitor

curl -X POST https://api.verid.dev/v1/monitors \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MAP watch - reseller.com flagship SKU",
    "url": "https://reseller.com/products/your-flagship-sku",
    "schedule_interval_seconds": 14400,
    "fetch_mode": "browser",
    "extract_config": {
      "method": "css",
      "fields": { "advertised_price": "span.product-price" }
    },
    "diff_predicate": {
      "type": "composite",
      "operator": "AND",
      "conditions": [
        { "type": "field_changes", "field": "advertised_price" },
        { "type": "field_matches_regex", "field": "advertised_price", "pattern": "^\\$(1[0-8][0-9]|[0-9]{1,2})(\\.[0-9]{2})?$" }
      ]
    },
    "deliveries": [
      { "type": "email", "to": "brand-compliance@yourcompany.com" }
    ]
  }'

SDK:

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

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

await client.monitors.create({
  name: 'MAP watch - reseller.com flagship SKU',
  url: 'https://reseller.com/products/your-flagship-sku',
  schedule_interval_seconds: 14400,
  fetch_mode: 'browser',
  extract_config: {
    method: 'css',
    fields: { advertised_price: 'span.product-price' },
  },
  diff_predicate: {
    type: 'composite',
    operator: 'AND',
    conditions: [
      { type: 'field_changes', field: 'advertised_price' },
      {
        type: 'field_matches_regex',
        field: 'advertised_price',
        pattern: '^\\$(1[0-8][0-9]|[0-9]{1,2})(\\.[0-9]{2})?$',
      },
    ],
  },
  deliveries: [{ type: 'email', to: 'brand-compliance@yourcompany.com' }],
});

What the webhook delivers

{
  "id": "del_01H...",
  "fired_at": "2026-05-08T11:30:00Z",
  "monitor": "MAP watch - reseller.com flagship SKU",
  "url": "https://reseller.com/products/your-flagship-sku",
  "diff": {
    "fields_changed": ["advertised_price"],
    "before": { "advertised_price": "$199.00" },
    "after": { "advertised_price": "$169.00" }
  }
}

The page, the price, and the timestamp - everything you need to send an enforcement notice the same day, not the same quarter.

Caveats & tips

  • One monitor per listing. A reseller's product page and their marketplace storefront are different URLs that violate independently. Name each monitor with the reseller and SKU so a fired alert is self-explanatory.
  • Watch the strike-through trick. Some resellers show MAP as a struck-through "list price" and the real (lower) price elsewhere. Pin your selector to the actual advertised/checkout price, not the crossed-out one.
  • Browser mode for marketplaces. Marketplace and big-box reseller pages render prices via JavaScript - use fetch_mode: 'browser' so you extract the displayed number, not an empty shell.
  • Tune frequency to your channel. Every 4 hours catches most violations fast without generating noise. Reserve hourly for high-velocity marketplace listings.
  • Monitoring is evidence, not enforcement. Verid documents the violation with a timestamp; acting on it (warning, suspension, termination) remains a commercial decision under your reseller agreement.

Related use cases

For watching what competitors charge rather than what your resellers advertise, see competitor price tracking. For Amazon listing prices and availability, see Amazon product watch. For Shopify storefront stock and price, see Shopify product stock & price.

Ship this monitor today

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

Get started free