If a reseller is advertising your product below your minimum advertised price, you can find every instance of it in about fifteen minutes and for less than the price of a coffee, without buying brand protection software. You need three things: your SKU list with the MAP price attached to each one, a scraper that checks the public offers on Amazon, eBay, Best Buy and Newegg, and a rule that separates a real violation from a refurbished unit or an accessory that merely shares your brand name. This guide covers all three, with the real output fields, the actual cost of a sweep, and the mistake that makes most first attempts useless.
What counts as a MAP violation, and why is it hard to find?
A MAP violation is a public advertisement of your product below the minimum advertised price in your reseller agreement. The hard part is not the definition, it is the scale. A catalogue of 200 SKUs sold across four marketplaces produces somewhere between 1,000 and 3,000 live offers at any moment, and the offers rotate daily. Checking that by hand is a job nobody does twice.
Three things make manual checking worse than slow. Marketplace prices are personalised by region, so the price you see in your browser is not the price a customer in another state sees. The Buy Box hides the offer list, so the violating seller is often two clicks below the price you first land on. And the search results for your brand are full of things that are not your product: accessories, third-party replacement parts, two-packs, and older model numbers that are legitimately discounted because they were discontinued. Every one of those inflates a naive violation count and destroys the credibility of your enforcement email.
How do you monitor MAP violations without brand protection software?
Run a scheduled scraper that takes your product identifiers plus your MAP price and returns only the public offers advertised below it. The MAP Violation Monitor does exactly this. You give it products and MAP prices, it checks Amazon, eBay, Best Buy and Newegg, and it returns one row per offer that sits below the price you set, with the seller identity attached.
- Build the input list. One line per SKU: product name, an identifier (ASIN, UPC or model number), and the MAP price as a number. A spreadsheet export is fine. This is the only part that takes real effort, and you do it once.
- Add your authorized sellers. List the storefront names that are allowed to sell your product. Anything not on that list is an unauthorized seller, which is a separate and usually more serious problem than the price cut itself.
- Run it once, manually. Read the first fifty rows before you schedule anything. You are checking whether the matches are your actual products.
- Tighten, then schedule. Once the output is clean, set it to run weekly. Most MAP programmes are enforced on a weekly cycle because that is how fast a warning letter moves anyway.
- Export and file. JSON, CSV or Excel. The evidence link on each row is what goes into the notice.
What data do you get back on each violation?
Each row is a single offer, priced against your MAP, with enough attached context to act on it without opening a browser. The fields are:
- Product and MAP price - the SKU as you defined it, so rows can be grouped per product
- Violating offer price - the advertised price found on the marketplace
- Discount below MAP - both as a percentage and as a dollar amount
- Severity grade - so a 2 percent slip and a 40 percent dump are not treated the same
- Marketplace - Amazon, eBay, Best Buy or Newegg
- Seller name and storefront - the entity you actually write to
- Authorized or unauthorized flag - matched against the seller list you supplied
- AI match confidence - how sure the matcher is that this listing is your exact product
- Evidence link - the direct URL to the offer, which is the attachment in your notice
- Detected timestamp - the proof of when it was live, which matters if the seller edits the price after you write
The two fields that make the difference between a dataset and an enforcement queue are the severity grade and the authorized flag. Sorting by severity descending, filtered to unauthorized sellers, gives you the ten rows worth a lawyer's time this week.
How much does a MAP sweep actually cost?
A weekly sweep of a 200 SKU catalogue costs roughly 15 to 25 dollars per month once you tune it. The actor is priced per result at 0.015 dollars, and a result is a matched offer, not a product you submitted. The arithmetic on a typical catalogue:
- 200 SKUs, checked across four marketplaces
- Around 5 matched offers per SKU on average, so about 1,000 results per sweep
- 1,000 results at 0.015 dollars is 15 dollars per full sweep
- Run weekly, that is around 60 dollars a month for continuous coverage
You can cut that hard by not sweeping everything every week. Most catalogues have a violation-prone tail: fifty SKUs that get hit constantly and one hundred and fifty that never do. Sweep the hot list weekly and the full catalogue monthly and the same programme costs under 25 dollars a month. New Apify accounts get 5 dollars of free credit, which is enough to run a real test sweep on a hundred SKUs before you commit to anything.
Compare that to a commercial brand protection suite, which is typically quoted in the four figures per month and sold on an annual contract. The suite gives you a dashboard, case management and someone to call. If you have one person doing enforcement part-time, a scheduled scraper plus a spreadsheet does the same job for the price of lunch.
What goes wrong in practice, and how do you fix it?
The failure that ruins the first run is counting used, refurbished and bundle offers as MAP violations. MAP policies almost always apply to new units sold individually. A refurbished unit at 40 percent off is not a violation, it is a used-goods listing, and a two-pack priced at 1.6 times a single unit is a discount per unit but not an advertised price below MAP. If you send an enforcement letter about one of those, the seller will tell you so, and everything else in your letter gets ignored.
The fix is a two-line filter before you look at anything. Drop every row where the condition is not new, and drop every row where the AI match confidence is below your threshold. Start the threshold high, look at what got dropped, and lower it only if you see genuine violations in the discarded pile. The match confidence exists precisely because brand-name search results are full of accessories and lookalikes, and a row you cannot defend is worse than a row you never saw.
The second thing to watch is a stale MAP list. If marketing ran a promotion and authorised a temporary price for a month, every reseller honouring that promotion shows up as a violation. Version your MAP file with a date, and update it the same day the promotion starts.
How do you run the sweep on a schedule?
Use the Apify scheduler in the console for the weekly cadence, and the API only if you want the results to land somewhere specific. The pattern below runs the actor, waits for it, and pulls the rows worth acting on. The exact input key names are shown on the actor's API tab, so copy them from there rather than guessing.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"products": [
{"name": "Pro Blender X200", "identifier": "B0ABCD1234", "mapPrice": 249.00},
{"name": "Pro Blender X100", "identifier": "B0EFGH5678", "mapPrice": 179.00},
],
"marketplaces": ["amazon", "ebay", "bestbuy", "newegg"],
"authorizedSellers": ["Acme Official Store", "BigBox Retail"],
}
run = client.actor("fayoussef/map-violation-monitor").call(run_input=run_input)
actionable = []
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("condition") not in (None, "new"):
continue
if (row.get("matchConfidence") or 0) < 0.85:
continue
actionable.append(row)
actionable.sort(key=lambda r: r.get("discountBelowMapPercent", 0), reverse=True)
for row in actionable[:20]:
print(row["sellerName"], row["violatingPrice"], row["evidenceUrl"])
Twenty rows sorted by depth of discount is a realistic weekly enforcement queue. Anything larger does not get worked, it gets ignored.
How do you know what your product should cost in the first place?
If you do not have a MAP policy yet, or you are resetting one, start from the real market price rather than your own list price. The Amazon, eBay, Best Buy and Newegg price checker takes ASINs, UPCs, model numbers or plain product names and returns the highest, lowest and typical price for that exact product on each marketplace, at 0.012 dollars per result. It uses the same match verification, so accessories and refurbs do not drag your typical price down.
That gives you two useful numbers per SKU: what your product actually sells for in the wild, and how far your intended MAP sits from it. A MAP set 30 percent above the typical street price is not a policy, it is a guarantee of a violation report you will never finish reading.
If your competitors sell on their own storefronts rather than marketplaces, the competitor price tracker works from a product URL instead and matches strictly on UPC, EAN, GTIN and MPN across Amazon, Walmart, Target, Best Buy, eBay and Shopify stores, at 0.003 dollars per result.
What about counterfeits and fake shops, not just price cuts?
Price cuts and counterfeits are separate problems that need separate tools, because a counterfeit is usually not listed under your identifiers at all. A fake shop on a typosquatted domain never appears in a marketplace offer list, so a MAP sweep will not find it. The brand protection and counterfeit detector covers that side: fake webshops, counterfeit marketplace listings, typosquatted domains and impersonation profiles, each with a risk score, a page snapshot saved as takedown evidence and the recommended report to file. It runs at 0.01 dollars per result and needs no API key.
The practical split is monthly for brand abuse and weekly for MAP. Counterfeit operations set up and disappear on a slower cycle than a reseller changing a price.
What if you only need to watch one specific page?
For a single competitor page, a pricing page or a terms of service page, a full sweep is overkill. The website change monitor watches any URL and returns a diff of what was added and removed, with a severity score and alerts to Slack, Discord, Telegram or a webhook, at 0.002 dollars per result. That is the right tool for "tell me when this one distributor changes their pricing page" and the wrong tool for a 200 SKU catalogue.
All four of these live under price and brand monitoring, and the full catalogue is at the actor list. If the marketplace you need to police is not covered, request it. Requests are free, and a marketplace one brand needs is usually a marketplace several do.
A realistic first week
Day one, export fifty of your most-copied SKUs with their MAP prices and run one sweep on free credit. Day two, read every row and write down which ones you would not have sent a letter about, then set the condition and confidence filters that remove them. Day three, add your authorized seller list and re-run, and the unauthorized column becomes the interesting one. By the end of the week you either have an enforcement queue worth working or proof that your MAP is being honoured, and both of those are worth knowing.
Frequently asked questions
Amazon, eBay, Best Buy and Newegg. Each violation row carries the marketplace name and a direct evidence link to the offer, so you can verify any row in one click.
Every listing is verified by AI as your exact product before it is reported, and each row carries a match confidence score. Filter on that score and on the condition field so used, refurbished and bundle offers never enter your enforcement queue.
Around 15 dollars per sweep for a 200 SKU catalogue, at 0.015 dollars per matched offer, so roughly 60 dollars a month for weekly coverage. Sweeping a violation-prone hot list weekly and the full catalogue monthly brings that under 25 dollars. New Apify accounts get 5 dollars of free credit to test with.
No. The actor runs in the Apify cloud and handles proxies, pagination and anti-bot measures itself. You supply a product list and a MAP price, and you can run it from the console without writing any code.
These actors read publicly listed offer pages, the same pages any shopper sees, with no login and no private data involved. What you do with the result is an ordinary contract matter between you and your resellers, which is why the evidence link and timestamp on each row matter more than the collection method.
Start here
Run the MAP Violation Monitor on fifty SKUs with the free credit before you plan anything larger. If it comes back clean, you have saved yourself a subscription. If it does not, you have a sorted, evidenced queue by tomorrow morning, and the seller dumping your product 40 percent below MAP is at the top of it.
โก Run this without building it
These actors already do what this guide describes. Free $5 credit on a new Apify account.
Get the Free Web Scraping Toolkit
Join the newsletter and get my curated list of scraping tools, proxy comparison cheatsheet, and Python automation templates.