---
title: "MAP monitoring"
description: "MAP monitoring across Amazon, Walmart, eBay, Google Shopping and reseller sites: advertised price, seller and a timestamped screenshot per violation."
canonical: https://www.zenrows.com/use-cases/map-monitoring
updated: 2026-10-18
---

# MAP monitoring

MAP monitoring is the process of checking that resellers advertise your products at or above the minimum advertised price, and recording proof when they do not. Zenrows fetches marketplace and reseller listings, extracts the advertised price and seller, and captures a timestamped screenshot of each violation, so your channel team can act on evidence.

## Sample output: one MAP violation record

```json
{
  "violation_id": "map-2026-10-17-0193",
  "sku": "KX-500-BLK",
  "map_price": 499.0,
  "advertised_price": 449.0,
  "gap": -50.0,
  "gap_pct": -10.0,
  "currency": "USD",
  "channel": "marketplace",
  "listing_url": "https://www.example-marketplace.com/item/kx-500-black",
  "seller": {
    "name": "Example Deals Store",
    "seller_id": "A1EXAMPLE42",
    "authorized": false
  },
  "price_location": "product_page",
  "evidence": {
    "screenshot": "evidence/map-2026-10-17-0193.png",
    "captured_at": "2026-10-17T14:32:07Z",
    "proxy_country": "us"
  },
  "first_seen": "2026-10-18T09:05:00Z",
  "times_seen": 3
}
```

An illustrative violation record: the price and seller come from fields named with CSS selectors, the screenshot from a Browser session connected from the US, and the history fields from your own store of past checks.

## What MAP enforcement teams collect

A MAP program needs two things from the web: every place your product is advertised, and proof of what each listing showed at a given moment. Channel and brand teams usually split the work like this.

| Job | Data you collect | Typical sources |
|---|---|---|
| Authorized reseller sweep | Advertised price per SKU on each authorized dealer's site | Reseller product pages, dealer stores built on Shopify and similar platforms |
| Marketplace seller scan | Every seller offering the SKU, their price and seller ID | Amazon offer listings, Walmart Marketplace, eBay, Newegg |
| Unknown seller discovery | Stores advertising your products that are not on your dealer list | Google Shopping results, marketplace search results |
| Evidence capture | Full-page screenshot, URL, price, seller, timestamp and country | The violating listing itself, at the moment of the check |
| Cart and email-for-price checks | Price shown only after "add to cart" or "see price in cart" | Reseller cart pages |
| Repeat offender history | Violations per seller over time, notice dates, time to fix | Your own violation log built from each run |

## Why MAP violation monitoring breaks

MAP checks have to be accurate per seller and defensible later. A missed violation costs you margin; a false one sends a notice to a dealer who did nothing wrong.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Seller disputes the evidence | "The price was never that" with nothing on file to show | A screenshot per violation, from a Browser session connected from the market's country, stored with the URL and timestamp |
| Marketplace protection | Offer listings return CAPTCHAs or empty pages after a few checks | Zenrows' stealth gets through AWS WAF, PerimeterX (HUMAN), Akamai and similar protections |
| Rotating offers | The featured seller and price change through the day, so one daily check misses them | Batch runs the full SKU and seller list several times a day as one job |
| Price below MAP only in the cart | The product page shows MAP, the cart shows the discounted price | Browser runs Playwright or Puppeteer to add the item to the cart and read the cart price |
| Regional listings | A reseller advertises a lower price only to one country | Geotargeting checks the listing from each country in your policy |
| Hundreds of reseller layouts | One scraper per dealer site, each breaking on redesign | Extract returns price and product fields without per-site selectors |

## How to set up MAP monitoring with Zenrows

1. **Load your MAP list.** Keep a table of SKU, MAP price, start date and the authorized sellers for each product.
2. **Find every listing.** Search each SKU on Google Shopping and the marketplaces, and add new seller URLs to your watch list.
3. **Check advertised prices.** Fetch each listing with Adaptive Stealth Mode, name the price and seller fields with CSS selectors (or use Extract for dealer sites with many layouts), and compare the price with MAP.
4. **Capture evidence on violations only.** When a price is below MAP, take a screenshot of the same URL, or capture it in a Browser session connected from the same country, and store it with the record.
5. **Check cart prices where needed.** For sellers that hide the price, add the item to the cart in Browser and read the cart total.

```python Python
# pip install requests
import json
from datetime import datetime, timezone
import requests

API = "https://api.zenrows.com/v1/"
LISTING_URL = "LISTING_URL"  # one seller's listing for the SKU
SKU, MAP_PRICE = "KX-500-BLK", 499.0

base = {"apikey": "YOUR_ZENROWS_API_KEY", "url": LISTING_URL}

# Example selectors: match them to the marketplace or dealer site
fields = {"price": ".offer-price", "seller": ".seller-name"}
offer = requests.get(API, params={**base, "mode": "auto", "proxy_country": "us",
                                  "css_extractor": json.dumps(fields)}).json()
price = float(offer["price"].replace("$", "").replace(",", ""))

if price < MAP_PRICE:
    # Evidence capture. For a screenshot pinned to one country, use the
    # Browser example below with proxy_country in the connection URL.
    # Screenshots need a full browser render.
    shot = requests.get(API, params={**base, "js_render": "true",
                                     "premium_proxy": "true",
                                     "screenshot": "true",
                                     "screenshot_fullpage": "true"})
    stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
    with open(f"evidence/{SKU}-{stamp}.png", "wb") as f:
        f.write(shot.content)
    print("violation", offer["seller"], price, stamp)
```

```javascript Node.js
// npm install playwright  (save as check-cart.mjs)
import { chromium } from "playwright";

const browser = await chromium.connectOverCDP(
  "wss://browser.zenrows.com?apikey=YOUR_ZENROWS_API_KEY&proxy_country=us"
);
const page = await browser.newPage();
// Example URLs and selectors: match them to the reseller's store
await page.goto("RESELLER_PRODUCT_URL");
await page.click("button.add-to-cart");
await page.goto("RESELLER_CART_URL");
const cartPrice = await page.textContent(".cart-line-price");
await page.screenshot({ path: "evidence/cart-price.png", fullPage: true });
console.log({ cartPrice, checkedAt: new Date().toISOString() });
await browser.close();
```

```bash CLI
npx -y @zenrows/cli init
zenrows extract LISTING_URL --css '{"price":".offer-price","seller":".seller-name"}'
zenrows fetch LISTING_URL --proxy-country us --screenshot --out evidence/KX-500-BLK.png
# listings.jsonl: one {"url": "LISTING_URL"} per seller and SKU
zenrows batch create listings.jsonl --wait
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to open each Amazon and Walmart listing in listings.txt for SKU KX-500-BLK,
return the seller name and advertised price for each, and take a full-page screenshot
of any listing priced below our $499 MAP.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Check one listing and capture a screenshot | [Fetch](/products/fetch) | CSS selectors read price and seller; a screenshot records what the page showed |
| Read prices across many dealer site layouts | [Extract](/products/extract) | Returns price and product fields without per-site selectors |
| Check every SKU and seller several times a day | [Batch](/products/batch) | The full watch list runs as one job with a result per URL |
| Read prices hidden behind "add to cart" | [Browser](/products/browser) | A real browser session, connected from the country you choose, clicks through to the cart and screenshots it |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Detection lag | A new violation is flagged within one check cycle | Compare `first_seen` with the time the listing changed, on test listings you control |
| Evidence completeness | Every violation has URL, price, seller, timestamp, country and screenshot | Share of violation records with all six fields |
| False positives | Almost no notices go to sellers who were at or above MAP | Review every disputed notice and log the cause |
| Seller coverage | Every seller advertising your top SKUs is on the watch list | Compare marketplace seller counts per SKU with your list each week |
| Repeat offender tracking | Each seller's violation history is one query away | Violations per seller per month from your log |
| Cycle run time | A full check of every SKU and seller finishes before the next cycle starts | Log start and end time per Batch job |

## MAP monitoring FAQ

### What is MAP monitoring?

MAP monitoring is tracking the prices that retailers and marketplace sellers advertise for your products and comparing them with your minimum advertised price policy. It covers authorized dealers, marketplace sellers and unknown stores, and it produces a record of each listing below MAP with the evidence your team needs to follow up.

### What is the difference between MAP monitoring and MAP enforcement?

Monitoring finds and documents violations. Enforcement is what you do next under your policy: a notice to the seller, a warning, then the steps your policy sets out for repeat violations. Good monitoring data makes enforcement faster because each notice already includes the URL, price, seller, time and a screenshot.

### How do I find unauthorized sellers?

Search each SKU on Google Shopping and on every marketplace where your category sells, then compare the sellers you find with your authorized dealer list. Run the search on a schedule, since unauthorized sellers often appear for a few days at a time. Store each seller ID so you can tell a returning seller from a new one.

### How often should I check for MAP violations?

Daily is the usual starting point. Marketplaces where the featured seller rotates benefit from several checks a day on your top SKUs. Weekly checks are usually enough for slow-moving dealer sites.

### What evidence do I need for a MAP violation?

At least the listing URL, the advertised price, the seller name or ID, the date and time, and a screenshot showing the price on the page. Record the country the check came from as well, since some sellers advertise different prices by region.

### What should MAP monitoring software report?

A useful report lists each violation with SKU, MAP price, advertised price, the gap, seller, marketplace, country, first seen and last seen, plus a link to the screenshot. Add a seller view that counts violations per seller per month, so repeat offenders stand out, and a SKU view that shows which products are discounted most often. Export both as CSV or feed them to your BI tool from the stored records.

### Is it allowed to collect reseller prices for MAP monitoring?

Advertised prices are public by design, and brands commonly monitor them. MAP policies themselves are a matter of competition law, which differs between countries, so ask your legal team how your policy and its enforcement should work in each market. Collect listing data only, not personal data about sellers' customers.

## Related use cases

- [Competitor price scraping](https://www.zenrows.com/use-cases/price-scraping.md): Competitor prices, promotions, shipping and stock per SKU from retailers and marketplaces, refreshed on your schedule.
- [Brand protection](https://www.zenrows.com/use-cases/brand-protection.md): Unauthorized sellers, trademark misuse and impersonation stores across marketplaces, with screenshot evidence for every takedown.
- [Ecommerce web scraping](https://www.zenrows.com/use-cases/ecommerce-web-scraping.md): Product, price, stock, review and seller data from Amazon, Walmart, eBay and Shopify stores, as JSON.
- [Digital shelf analytics](https://www.zenrows.com/use-cases/digital-shelf-analytics.md): Search rank, share of shelf, content compliance, ratings and availability for CPG brands, per retailer and region.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
