Track your products across all retailers where they're sold. Flag any listing below your MAP threshold and generate compliance reports for your sales team.
Minimum Advertised Price (MAP) is the lowest price a retailer is allowed to advertise your product at. Brands set MAP policies to protect margins across their retail channel and prevent a race to the bottom that devalues the brand.
MAP violations are rampant. A 2025 industry study found that 30-40% of products have at least one MAP violation at any given time. The problem is detection — brands with hundreds of products sold across dozens of retailers can't manually check every listing.
Automated MAP monitoring solves this. You maintain a list of authorized (and known unauthorized) retailer URLs for each product, check them regularly with PriceFetch, and flag any price below your MAP threshold. The output is a compliance report that your sales team uses to enforce the policy.
A MAP monitoring system tracks product-retailer-price triples against your MAP policy.
For each product, you need: - Your internal SKU and MAP price - A list of retailer URLs where the product is sold - The current advertised price at each retailer
The system checks each URL, compares the price to MAP, and generates a violation report.
import requests
from datetime import datetime
from dataclasses import dataclass
@dataclass
class MAPViolation:
sku: str
product_name: str
retailer_url: str
retailer: str
map_price: float
actual_price: float
violation_pct: float
detected_at: str
def check_map_compliance(products: list[dict], api_key: str) -> list[MAPViolation]:
"""Check all product URLs against MAP policy."""
violations = []
for product in products:
for url in product["retailer_urls"]:
resp = requests.get(
"https://api.pricefetch.dev/v1/price",
params={"url": url},
headers={"X-API-Key": api_key},
timeout=30,
)
data = resp.json()
if not data["success"]:
continue
actual_price = data["data"]["price"]
map_price = product["map_price"]
if actual_price < map_price:
violation_pct = round(
((map_price - actual_price) / map_price) * 100, 1
)
violations.append(MAPViolation(
sku=product["sku"],
product_name=product["name"],
retailer_url=url,
retailer=data["data"]["retailer"],
map_price=map_price,
actual_price=actual_price,
violation_pct=violation_pct,
detected_at=datetime.utcnow().isoformat(),
))
return violationsDetection without action is just expensive monitoring. Build an enforcement pipeline:
**Daily violation report** — generate a summary showing which retailers are below MAP, by how much, and for how long. Send this to your sales or channel management team every morning.
**Violation severity tiers** — not all violations are equal. A retailer at $0.50 below MAP might be a rounding issue. A retailer at 20% below MAP is a serious problem. Tier your response: - Tier 1 (1-5% below MAP): flag for review, could be temporary - Tier 2 (5-15% below MAP): send automated warning email to retailer - Tier 3 (15%+ below MAP): escalate to channel management immediately
**Violation history** — track how long each violation persists. Chronic violators need different treatment than first-time offenders. A retailer who has been 10% below MAP for 30 days is signaling that they don't respect your MAP policy.
**Evidence collection** — store the raw price data with timestamps. If you need to terminate a retailer relationship, you want documented evidence of repeated violations.
MAP monitoring pays for itself quickly. The math:
If you have 500 products sold across 10 retailers, that's 5,000 URLs to check. At 2 checks per day, that's 10,000 API credits daily. At PriceFetch pricing, this costs a fraction of what a dedicated MAP monitoring SaaS charges ($500-2,000/month).
The revenue impact is harder to quantify but significant. When one retailer advertises at 20% below MAP, other retailers notice and either match the low price or stop carrying the product. A single unchecked MAP violation can trigger a cascade that compresses margins across your entire retail channel.
Brands that actively enforce MAP typically see 5-15% higher average selling prices across their retail channel compared to brands that don't. On a product line doing $1M in annual retail sales, that's $50K-150K in recovered margin.
Sign up in 30 seconds. No credit card required. One credit per successful API call.