{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"MAP Monitoring — kwery Docs","siteUrl":"https://docs.kwery.co","description":"Watch seller identity and price data for MAP monitoring — what kwery returns, what it doesn't store, and how to wire up change-event delivery."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"map-monitoring","__idx":0},"children":["MAP Monitoring"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["kwery observes seller identity and pricing across the marketplaces you watch. Applying"," ","that data to a MAP (Minimum Advertised Price) policy — evaluating it, deciding what"," ","counts as a violation, and acting on it — is yours to build. This guide covers the"," ","fields relevant to MAP monitoring specifically, the boundary between what kwery does and"," ","doesn't do, and how change-event delivery wires into it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"fields","level":2,"__idx":1},"children":["What kwery returns "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every offer observation relevant to MAP monitoring includes:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["seller_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Marketplace-issued seller identifier, where the marketplace exposes one. Source-specific — not unified into one identity across marketplaces."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["seller_name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The seller's display name on that marketplace."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["price"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The observed selling price, per offer."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["shipping"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The observed shipping cost, per offer — relevant for sources where ranking or landed price includes shipping. On Idealo each offer also carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total"]},", the landed price (see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sources/idealo#offer-fields"},"children":["Idealo source guide"]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["country"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which marketplace and market the observation came from (on the result's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["query"]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["observed_at"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the observation was made — on every result, alongside ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/audit-and-provenance"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["served_from"]}]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Seller identity, price, and shipping are returned together on every offer — you don't"," ","need a separate request to resolve who's selling at what price. See the real captured"," ","responses on the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sources"},"children":["source pages"]}," for exactly how this looks per"," ","marketplace."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"boundaries","level":2,"__idx":2},"children":["What kwery does not do "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Stated plainly, once, so this doesn't need to be inferred from anywhere else:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["kwery does not store your MAP floor."]}," There's no policy-storage feature — your"," ","price floor per product lives in your own system."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["kwery does not evaluate policy or classify violations."]}," A response includes the"," ","observed price; whether that price breaks your policy is a comparison you make, not"," ","something kwery flags."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["kwery does not capture evidentiary screenshots."]}," If you need a defensible visual"," ","record for a legal or contractual conversation with a reseller, that's a"," ","headless-browser capture layer you build separately — kwery returns structured data,"," ","not images."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["kwery does not attribute first-mover causality."]}," Identifying which seller changed"," ","price first when several move in sequence isn't a capability this API exposes today."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["kwery does not re-verify a detected change from a second network route."]}," If you"," ","need confirmation a violation wasn't a caching artifact before acting on it, that"," ","verification step is yours to add. (Every result does carry its"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/audit-and-provenance"},"children":["crawl trail"]}," and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/trust"},"children":["confidence score"]},", which cover"," ","the most common false-signal causes.)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you need the full evidence chain — screenshots, first-mover attribution, verified"," ","detections — pair kwery's data with a dedicated MAP enforcement tool, or build that"," ","layer on top of what's documented here."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"watching","level":2,"__idx":3},"children":["Watching a product for MAP-relevant changes "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["MAP monitoring builds on ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events"},"children":["change events"]},": any product you query is"," ","eligible for watching, and a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["subscription"]}," ties your watch list to a delivery"," ","endpoint and the event types you care about. For MAP the relevant events are:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["price.delta"]}]}," — the product's representative price moved. Set a"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events#thresholds"},"children":["threshold"]}," at your MAP floor's distance so you're only"," ","notified on meaningful moves."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["buybox.change"]}]}," — Amazon only: the buy-box ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["seller"]}," or buy-box ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["price"]}," ","changed. This is the MAP event for Amazon — a violation there usually surfaces as a"," ","new seller taking the buy-box at a lower price."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rolling out."]}," Change-event subscriptions are being enabled account by account —"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://kwery.co/contact"},"children":["contact us"]}," to join the rollout; we'll configure your"," ","watch list, event types, and thresholds with you. The delivery contract below is"," ","final and will not change."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a watched product moves, the change event delivered to your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["callback_url"]}," looks"," ","like this (product identity from a real capture; the prices illustrate a below-MAP"," ","drop):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"event\": \"price.delta\",\n  \"delivered_at\": \"2026-09-14T09:41:12.000Z\",\n  \"product\": {\n    \"source\": \"idealo\",\n    \"country\": \"de\",\n    \"key\": \"gtin\",\n    \"value\": \"4006381333962\",\n    \"name\": \"STABILO point 88 ocker\"\n  },\n  \"changes\": {\n    \"price\": { \"old\": 17.40, \"new\": 14.90 }\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["changes"]}," carries each moved field as an ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["old → new pair"]},", so you can branch logic"," ","without diffing snapshots yourself. By default the event also includes the full current"," ","record — every offer with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["seller_name"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["seller_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["price"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["shipping"]}," — so you"," ","can compare the offending offer (landed price included, if your MAP policy is"," ","landed-price-inclusive) against your own floor without a follow-up lookup. Deliveries"," ","are signed and retried exactly like ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/webhooks"},"children":["stream webhooks"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"multi-market","level":2,"__idx":4},"children":["Multi-market sources "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sources with multi-country reach are queried independently per market — Amazon's"," ","21 country codes and Kaufland's 7 markets each need their own watch per country. A"," ","seller holding their price in one market while undercutting in another won't surface"," ","unless both markets are being watched separately. Per-source market lists are on each"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sources"},"children":["source page"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"id":"credits","level":2,"__idx":5},"children":["Credit cost "]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["MAP monitoring is billed the same way as any other kwery lookup — each freshly crawled"," ","result costs the source's ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/pricing#source-weights"},"children":["credit weight"]},"; cache re-serves"," ","are free, and event deliveries themselves are never billed. Nothing about MAP"," ","monitoring changes the underlying billing model."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":6},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/webhooks"},"children":["Webhooks"]}," — full delivery mechanics: signing, retries, and replay."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/change-events"},"children":["Change events"]}," — the general change-detection system this guide"," ","builds on: event catalog, thresholds, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delta_only"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/trust"},"children":["Confidence score"]}," — a low-confidence product match can produce a false"," ","MAP signal; worth checking before treating an observation as reliable."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/pricing"},"children":["Pricing"]}," — credit cost and the source-weighting table."]}]}]},"headings":[{"value":"MAP Monitoring","id":"map-monitoring","depth":1},{"value":"What kwery returns","id":"fields","depth":2},{"value":"What kwery does not do","id":"boundaries","depth":2},{"value":"Watching a product for MAP-relevant changes","id":"watching","depth":2},{"value":"Multi-market sources","id":"multi-market","depth":2},{"value":"Credit cost","id":"credits","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"MAP Monitoring — kwery Docs","description":"Watch seller identity and price data for MAP monitoring — what kwery returns, what it doesn't store, and how to wire up change-event delivery."}},"lastModified":"2026-09-15T14:28:15.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/map-monitoring","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}