Barcode Price Checker: UPC & EAN Price Compare avatar

Barcode Price Checker: UPC & EAN Price Compare

Pricing

from $2.40 / 1,000 product with offers

Go to Apify Store
Barcode Price Checker: UPC & EAN Price Compare

Barcode Price Checker: UPC & EAN Price Compare

Look up prices for any UPC, EAN or GTIN barcode across Amazon, Best Buy and Target, matched exactly, plus Walmart, eBay and any store on Google Shopping. Price comparison, MAP checks, your price position and change monitoring, with results in seconds.

Pricing

from $2.40 / 1,000 product with offers

Rating

0.0

(0)

Developer

CleanPull

CleanPull

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

This barcode price checker takes barcodes (UPC, EAN, GTIN) and shows every store's price, who is selling below your MAP, and where your own price ranks, in seconds: a UPC price comparison across Amazon, Best Buy, Walmart, Target, eBay and any store you name. Amazon and Best Buy are searched by the barcode itself; Walmart, Target, eBay and any store you name come from Google Shopping, matched by model number, with each marketplace seller by name. Run it once, through the API, or on a schedule to get only what changed: a new seller, a price drop, a new lowest price, a seller going below MAP.

How to check prices by barcode

  1. Open Barcode Price Checker on Apify and go to its input form.
  2. Paste UPC or EAN codes in Barcodes or product names, one per line.
  3. Pick the Sources, and the Stores on Google Shopping to search (Walmart and Target by default; add eBay, Home Depot or any store by its Google Shopping name).
  4. To check MAP or your own price, fill Minimum advertised prices (MAP) or My prices with {"barcode": price}.
  5. Start the run. Open the Products view to read each barcode's Lowest price, Cheapest at, Lowest new price, Stores and Offers, the Offers (one row per store) view for each store's Price and Seller, and the MAP and my price view for Below MAP.
  6. To monitor prices, turn on Changes only (monitoring), give it a Monitor name, save it as a task and schedule it daily. The Changes (monitoring) view then lists new and removed sellers, price drops and rises and new lowest prices.
Barcode price checker input: barcodes or product names, sources, Target and Best Buy through the data service, stores on Google Shopping

What the barcode price checker gives you

From our test runs on one barcode (UPC 027242923232, Sony WH-1000XM5): 21 offers from 16 stores in one record, lowest price and store at the top; with a $329.99 MAP, 15 sellers below it, each with its price, how far below, and a link.

  • Every offer, cheapest first: store, marketplace seller, price, was-price, condition, stock where the store states it, link, and the store's own id (Best Buy SKU, ASIN).
  • The lowest price and where, the highest, and the spread between them.
  • MAP violations: each seller below your minimum advertised price, by how much, with a link to the listing.
  • Your price position: how many offers undercut your price.
  • How each price was matched: barcode, model or name, with a confidence score, so you can trust a price at a glance.
  • Changes only, on a schedule: new and removed sellers, price drops and rises, stock changes, new lowest prices, tracked seller by seller.

Who it's for

  • Brands and distributors enforcing MAP: a daily list of who is below MAP, with links to send to the seller or marketplace.
  • Resellers and repricers: the market price of every SKU you carry, and alerts when a competitor moves.
  • Buyers, deal sites and procurement: the cheapest store for a product list, from barcodes you already have.

Barcode price matching

  • Exact by barcode. Amazon and Best Buy are searched with the barcode, so their price belongs to the barcode's product: the same item, colour and edition.
  • Any store on Google Shopping. Walmart and Target by default; add eBay, Home Depot, Lowe's, Newegg, Crutchfield, B&H Photo, or any store as named on Google Shopping. Marketplace sellers come with their names (Walmart · Secondipity).
  • Matched by model number. A Google listing is kept when its title carries the product's model number (WH-1000XM5, AF101), taken from the stores' own product data. Another colour (/S for /B), a bundle or add-on, a store outside the US, or a price far from the barcode-matched prices is set aside with the reason, never mixed into the lowest price or MAP.
  • Target and Best Buy through our data service (optional). With Target and Best Buy through the data service (slow), Target and Best Buy are looked up by the barcode through a third-party web data service that CleanPull holds the account for (nothing to set up, no key in your input). A store's offer is kept only when the store's own record states the same barcode. Target answers in seconds: its own search answer is read first (a protection page is read once more); a product whose barcode the answer does not state is checked on Target's own product answer, which states it (the variant with that barcode, at its own price, when the product has variants). Only a barcode still not answered clearly goes to the data service's search, with a note in the log. Best Buy goes to that search: every barcode of the run in one search, which takes 3 to 5 minutes per run whatever the number of barcodes, so it suits scheduled runs and lists more than one-off lookups.
  • Honest about every source. Each product says per store whether it was found, not found or failed, so an empty answer is never a silent failure.
  • Results in seconds. Products are checked in parallel and every record is complete when the run ends.

Barcode price checker input

FieldKeyWhat it does
Barcodes or product namesproductsUPC (12), EAN (13), GTIN-14 or EAN-8, or a product name (Google Shopping only)
Sourcessourcesamazon, bestbuy, google (default); target by barcode is optional (see Limits)
Target and Best Buy through the data service (slow)serviceStoresOptional, off by default: target, bestbuy looked up by barcode through CleanPull's marketplace data service. Target in seconds; Best Buy 3 to 5 minutes per run
Stores on Google ShoppinggoogleStoresStores to search on Google Shopping, one request each (default Walmart, Target)
Also search Google Shopping without a store filtergoogleNameSearchOne more Google request per product (other stores, marketplace sellers); default on
Conditionsconditionsnew (default), renewed, used, open-box (refurbished from saved inputs means renewed); offers of unknown condition are kept
Minimum match confidenceminConfidenceMatch threshold, 0 to 1 (default 0.7)
Include set-aside listingsincludeSetAsideAlso return set-aside listings with the reason
Minimum advertised prices (MAP)mapPrices{"barcode": price}: the offers below each product's MAP
My pricesmyPrices{"barcode": price}: how many offers are cheaper than you
Changes only (monitoring)monitorModeAfter the first run, only products whose offers changed, with what changed
Monitor namemonitorNameKeeps separate watches apart (default default)
Changes to reportchangeTypesnew-offer, offer-removed, price-down, price-up, stock, new-lowest (all by default)
Minimum price change (%)minPriceChangePercentSmaller price moves are not reported (default 1)
Max cost per run (USD)maxRunCostUsdOptional. No product starts once the run's charges plus what products in progress could still cost would pass this. For scheduled runs, which may have no spending limit of their own
Output formatoutputFormatproducts (one record per product) or offers (one row per offer)
FieldsfieldsReturn only these fields
Products at oncemaxConcurrencyProducts checked in parallel (default 5, up to 20)
ProxyproxyConfigurationOptional; the actor picks proxies itself
History storestateStoreNameThe key-value store that keeps each monitor's last prices (default: its own store, cleanpull-barcode-prices); pick one when you run with a scoped API token

barcodes, gtins, eans and upcs are accepted as names for the product list too.

Example inputs

Prices for three products, with eBay as well:

{
"products": ["027242923232", "045496590475", "017817846141"],
"googleStores": ["Walmart", "Target", "eBay"]
}

MAP check, daily, reporting only changes:

{
"products": ["027242923232"],
"mapPrices": { "027242923232": 329.99 },
"monitorMode": true,
"monitorName": "sony-map",
"changeTypes": ["new-offer", "price-down", "new-lowest"]
}

Exact barcode prices only (Amazon and Best Buy), the cheapest way:

{ "products": ["027242923232"], "sources": ["amazon", "bestbuy"] }

Barcode price checker output

Barcode price checker output: Products and Offers views with lowest price, cheapest store, lowest new price, stores, offers, seller and match

Example rows

A product record (real, shortened to three of its 21 offers):

{
"recordType": "product",
"barcode": "027242923232",
"title": "Sony - WH-1000XM5 Wireless Noise Cancelling Over-the-Ear Headphones - Black",
"brand": "Sony",
"model": "WH1000XM5/B",
"lowestPrice": 183.99,
"lowestPriceStore": "Amazon",
"lowestPriceCondition": "unknown",
"lowestNewPrice": 198,
"lowestNewPriceStore": "Best Buy",
"conditionCounts": { "new": 20, "renewed": 0, "used": 0, "open-box": 0, "unknown": 1 },
"highestPrice": 399.99,
"priceSpreadPercent": 117.4,
"storeCount": 16,
"offerCount": 21,
"sources": { "amazon": "found", "bestbuy": "found", "google": "found" },
"mapViolations": [],
"mapUnconfirmed": [],
"mapOtherCondition": [],
"offers": [
{
"source": "amazon",
"store": "Amazon",
"price": 183.99,
"condition": "unknown",
"conditionBasis": "none",
"offerType": "lowest-offer",
"offerCount": 19,
"url": "https://www.amazon.com/dp/B0CFSD4TSQ",
"urlSource": "store",
"matchType": "barcode",
"confidence": 1,
"isInternationalVersion": false
},
{
"source": "bestbuy",
"store": "Best Buy",
"price": 198,
"wasPrice": 398,
"condition": "new",
"conditionBasis": "label",
"inStock": true,
"offerCount": 1,
"familyOfferCount": 43,
"url": "https://www.bestbuy.com/product/…/sku/6505727",
"urlSource": "store",
"matchType": "barcode",
"confidence": 1,
"isInternationalVersion": false
},
{
"source": "google",
"store": "Walmart",
"seller": "1ShopDirect",
"price": 198,
"wasPrice": 287,
"title": "Sony WH-1000XM5 Noise Canceling Wireless Headphones",
"condition": "new",
"conditionBasis": "unlabelled",
"url": "https://www.google.com/search?q=…&udm=28&prds=…",
"urlSource": "google",
"googleUrl": "https://www.google.com/search?q=…&udm=28&prds=…",
"matchType": "model",
"confidence": 0.94,
"isInternationalVersion": false
}
]
}

The same Walmart offer with Output format offers, one row per offer:

{
"recordType": "offer",
"input": "027242923232",
"barcode": "027242923232",
"productTitle": "Sony - WH-1000XM5 Wireless Noise Cancelling Over-the-Ear Headphones - Black",
"brand": "Sony",
"source": "google",
"store": "Walmart",
"seller": "1ShopDirect",
"price": 198,
"wasPrice": 287,
"title": "Sony WH-1000XM5 Noise Canceling Wireless Headphones",
"condition": "new",
"conditionBasis": "unlabelled",
"url": "https://www.google.com/search?q=…&udm=28&prds=…",
"urlSource": "google",
"matchType": "model",
"confidence": 0.94,
"isInternationalVersion": false,
"isLowest": false,
"belowMap": null,
"mapViolation": null
}

Offer fields and set-aside listings

Every offer has source, store, seller, price, wasPrice, currency, condition, conditionBasis, inStock, offerType (listing, or lowest-offer when Amazon shows only its lowest marketplace offer), offerCount (offers on that listing when the store shows how many: Amazon's "N used & new offers"; 1 for Best Buy, whose SKUs have one seller each), title, url, urlSource, storeId (SKU, ASIN, Google offer id), rating, reviews, matchType, confidence and isInternationalVersion. url is the store's own page (urlSource: "store"); for a Google Shopping listing whose results page gives no store link it is Google's listing, and urlSource is "google". Google Shopping offers also carry googleUrl, Google's listing, whichever url is. isInternationalVersion is true when the title says "International Version", "Global Version" or "Intl" (a unit made for another country, whose warranty may differ); it is a clue only and sets nothing aside. Best Buy offers carry familyOfferCount: the rows Best Buy groups under the same product family (its own SKU, marketplace sellers' SKUs and refurbished ones), not offers of this SKU. Set-aside listings (returned in setAside with Include set-aside listings) carry a flag with the reason: other colour (…), other variant (/…) (the model with another colour code, also written without a separator, as "WH 1000XM5SA" for WH1000XM5/B), bundle or accessory (…), store outside the US, price far below the others (…) or price far above the others (…) (against the median), low confidence (…) or condition … (a condition not among Conditions). In monitoring, changes lists each change with the store, from and to. A barcode no store has comes back as one not-found row; when every source failed, a failed row.

Offer condition

condition is new, renewed (refurbished, reconditioned, certified pre-owned), used, open-box or unknown, and conditionBasis says where it came from:

conditionBasisMeaning
labelThe store's own condition (Best Buy's condition, Google's "Refurbished" or "Pre-owned" label, Amazon's "new offers")
titleA condition word in the offer's title: "(Renewed)", "Refurbished", "Open Box", "Pre-Owned", "Used - Good", "Like New", also in Spanish
listingThe store's own featured listing, sold new (Amazon's featured price, Target, a data-service record that states no condition)
unlabelledA Google Shopping listing with no condition label and no condition word in its title: Google labels only items that are not new
store-listingA Google product card shows the catalog's title; the same store's own listing on the same page, at the same price, states the condition in its title, given as conditionListingTitle
noneNothing states it: unknown (Amazon's lowest offer over "used & new" offers)

A store's label that is not new wins; otherwise a condition word in the title does, so a "(Renewed)" listing is renewed even where Google shows no label; otherwise the same store's own listing at the same price (Google showed StackSocial's open-box Sony WH-1000XM5 at $184.99 under the catalog's title, with no label). unknown is never counted as new.

  • lowestPrice and lowestPriceStore are the lowest of every offer kept, whatever its condition, with lowestPriceCondition; lowestNewPrice and lowestNewPriceStore cover confirmed-new offers only. conditionCounts counts the offers by condition.
  • mapViolations lists confirmed-new offers below MAP only, each with its title, condition, conditionBasis, seller, url, urlSource, googleUrl and isInternationalVersion. Offers below MAP whose condition is unknown are in mapUnconfirmed; renewed, used and open-box ones in mapOtherCondition. A new offer far below MAP is a violation all the same: nothing is classified by price. In offer rows, belowMap is any offer below MAP and mapViolation a confirmed-new one.

The run's final status message summarises the key numbers in plain text after "Done: N results.": per product the lowest new price and store (flagged when it is Amazon's Buy Box with other sellers unread), a cheaper offer in another condition, the offer and store counts with the highest price, and how many undercut your price, ending "More in the dataset." when not everything fits.

Every run writes RUN_SUMMARY to the key-value store: the outcome (COMPLETE, PARTIAL, NO_CHANGES, EMPTY or FAILED), products with offers, any source failures, Google requests, charges, the requests sent through the page reader (pageReads) and the records bought from the data service (serviceRecords). The final status ends with the pages read (and records bought) for the rows charged.

Pricing

Pay per product with offers and per Google Shopping search.

EventFreeBronzeSilverGold
Product with offers$3.00$3.00$2.70$2.40
Google Shopping request (per store searched, per product)$4.00$4.00$3.60$3.20
Product with changes (changes only)$2.00$2.00$1.80$1.60
Provider record (an exact barcode match from Target or Best Buy through the data service, delivered as an offer)$6.00$3.00$2.70$2.40
Provider search (one data-service search that answered: one store, all the run's barcodes)$40.00$20.00$20.00$20.00

Prices are per 1,000. With the defaults (an unfiltered search plus Walmart and Target) a product costs about $15 per 1,000 on the Free and Bronze plans; Amazon and Best Buy alone cost $3 per 1,000. The product event is charged only for a product with offers; Google requests are charged as made, also for a barcode no store knows (one web search for its name, then the Shopping searches). Each run also has a $0.00005 start fee. With Target and Best Buy through the data service (slow), each store adds one provider search per run ($0.02 on Bronze, flat: it covers the near matches the service returns and the wait) and one provider record for each barcode it sells, delivered as an offer ($0.003 on Bronze): 100 barcodes on Target and Best Buy add at most $0.04 + $0.60 on Bronze, and twice that on the Free plan. Near matches are not charged, and a search that failed or was blocked charges nothing. A run restarted after a platform migration never charges a record or a search again. Max cost per run (USD) counts the search fees and one record per barcode and store before any search starts; barcodes past that are not looked up through the service, with a note.

Limits

  • US stores and US-dollar prices.
  • Google Shopping does not look products up by barcode, so its listings are matched by model number or name, as each offer says. Products without a model number (games, toys, drinkware) are matched by name, with lower confidence.
  • Amazon sometimes shows only its lowest marketplace offer ("19 used & new offers"), not a featured price: such offers are marked lowest-offer. Over "used & new" offers the condition is unknown, so unless used is among the conditions it is listed but left out of the lowest price and price position; below MAP it is in mapUnconfirmed.
  • Google's results pages (as read up to November 2026) open a listing's store link only in the product viewer, after the page loads, so a Google Shopping offer's url is usually Google's listing (urlSource: "google"). When a card does link to the store's page, that page is the url.
  • Google shows one price per listing; it does not list every seller of a product in one place, so smaller sellers appear when Google ranks them.
  • Target's own API often refuses automated requests, so Target prices come from Google Shopping by default. target in sources tries Target by barcode first, as a best effort; when Target refuses that request, its answer is read through the data service's page reader instead, at no extra charge.
  • When amazon.com refuses a barcode's search on every proxy tier, its search page is read through the data service's page reader instead, with the same exact-match rules, at no extra charge. A bot step in its place is asked once more, then Amazon is reported as failed for that barcode with both reasons. Once the first two barcodes of a run are both refused on every tier, the rest go to the page reader straight away (while it is available), without the slower proxy tiers.
  • Best Buy's search page states no UPC. Its offer is taken only when its search for the barcode, uncorrected, finds exactly one product whose details are on the page, and that product's model or name does not contradict the barcode (a number in it holding only part of the barcode means Best Buy matched text, not the UPC: Best Buy is then reported as failed for that barcode, never as a match). Such an offer is near certain, not proven, so its confidence is 0.95, as for a Target offer whose barcode Target does not state; offers whose store states the barcode have 1. Both pass the default Minimum match confidence (0.7).
  • Stock is known for Best Buy; Google listings do not state it.
  • Through the data service, a run waits 3 to 5 minutes for Best Buy (and for a Target barcode its own answer did not settle), and a barcode the store does not sell costs only its share of the search fee. A store that refuses the service's crawler is reported as failed for that run.
  • Nothing found: a product no source lists still gets one free recordType: "not-found" row with a reason (a product every source failed for, a free failed row), and the run succeeds; the product event is not charged, though its Google requests are. With Changes only (monitoring), such a product gives no row. A run near its time limit stops starting products, delivers what it checked and gives each product left a free recordType: "unreadable" row. Only a run in which every source failed for every product fails.

FAQ

How much does a barcode price check cost per product per day?

With the default sources (Amazon, Best Buy, and Google Shopping for Walmart and Target plus one unfiltered search), one product checked once a day costs $0.015 a day on the Free and Bronze plans (about $0.45 a month): $0.003 for the product with offers and $0.012 for three Google requests. Each store added to Stores on Google Shopping adds $0.004; Amazon and Best Buy alone cost $0.003. A barcode no store lists costs only its Google requests. With Changes only (monitoring), the first run bills each product as usual; after that an unchanged product costs only its Google requests ($0.012 with the defaults, nothing with Amazon and Best Buy alone), a product that changed costs $0.003 plus $0.002 for its changes, and one that changed by losing all its offers costs only the $0.002 change event (the product event is charged only for a product with offers). Target and Best Buy through the data service (slow) adds a provider search per store and run and a provider record per exact match (see Pricing above). Each run also has the start fee, and higher Apify plans pay less.

How often should I check prices by barcode?

Daily suits MAP enforcement and repricing. With Changes only (monitoring) and a schedule, each run returns only the products whose offers changed, with each change; Changes to report picks which count, and Minimum price change (%) (1 by default) keeps smaller moves out. A source that could not be read on a run keeps its last offers, so they are not reported as removed.

What is the difference between the lowest price and the lowest new price?

lowestPrice is the lowest of every offer kept, whatever its condition, with lowestPriceCondition; lowestNewPrice covers confirmed-new offers only. In the same way, mapViolations lists confirmed-new offers below MAP, while offers of unknown condition below it are in mapUnconfirmed and renewed, used or open-box ones in mapOtherCondition.

Why is a store's price missing?

  • Set aside: another colour or variant, a bundle, a store outside the US, a price far from the others, low confidence or another condition; turn on Include set-aside listings to see each with its flag.
  • Not listed by Google: Google shows one price per listing and does not list every seller in one place.
  • Target: by default Target's prices come from Google Shopping; add target to Sources, or use Target and Best Buy through the data service (slow), for Target by barcode.
  • Best Buy: its offer is taken only when its search for the barcode finds exactly one product; otherwise Best Buy is reported as failed for that barcode.
  • A source failed: sources says per store whether it was found, not-found or failed.
  • Stock: inStock is known for Best Buy; Google listings do not state it.

Which stores and countries does it support?

US stores and US-dollar prices: Amazon and Best Buy by barcode, Target by barcode as an option, and Walmart, Target, eBay, Home Depot, Lowe's, Newegg, Crutchfield, B&H Photo or any store as named on Google Shopping.

Can I use the barcode price checker through the API?

Yes. Start runs through the Apify API or an API client, and read the dataset through its Products, Offers (one row per store), MAP and my price and Changes (monitoring) views, or the RUN_SUMMARY record with the outcome, source failures and charges. Output format offers gives one row per offer, and Fields (fields) trims each row to the keys you need.

Does it work with Google Sheets, Make, Zapier or Claude?

Yes. Apify's integrations send each run's results to Google Sheets, Make, Zapier, webhooks and other tools, and a schedule keeps them updated. From Claude, the MarketMage plugin compares every store's price for a barcode, or watches sellers against your MAP, in a chat.

Is it allowed to check prices by barcode?

The actor reads public store and Google Shopping pages as a signed-out visitor sees them: no login, no account and no customer data. Seller names are the store and marketplace seller names the pages show. How you use the data, and following the laws and terms that apply to you, is your responsibility. This is not legal advice.

Other CleanPull actors for monitoring:

Use it from Claude

The MarketMage plugin runs these actors from a Claude chat.

Found it useful? A rating on the Store helps others find it.

Changelog

  • 0.3.13, status summary (2026-11-06): the final status message now summarises each product's key numbers after "Done: N results." (lowest new price and store, Amazon Buy Box flag, a cheaper other-condition offer, offer and store counts, offers under your price), so a reader can often skip the dataset read. Prices and events unchanged.
  • 0.3.x, evidence clues (2026-11-04): every offer and MAP entry says where its link leads (urlSource: store or google); Google Shopping offers keep Google's listing in googleUrl and use the store's own page as url when the card links to it. Best Buy's offerCount is now the matched SKU's (1), not its product family's; the family's rows are in familyOfferCount. New isInternationalVersion from the title. A Google listing of the same model with another colour code written without a separator ("WH 1000XM5SA" for WH1000XM5/B) is set aside as other variant (/SA), as "/S" was, so it is no longer counted in prices or in mapViolations. Prices and events unchanged. Saved monitors: such a listing may show once as removed on the first run after the update.
  • 0.3.x, fewer blocked Target tries (2026-10-31): when Target blocks the actor's own requests on every proxy tier for the first 2 barcodes of a run (none read), the rest of the run reads Target straight through the page reader, without trying again. With the page reader available, a residential proxy is tried twice per barcode instead of six times before handing over; the datacenter tries, which cost nothing extra, stay as they were. The run summary gains directPageReads (the actor's own requests per store, blocked tries included) and targetPageReads. Same rows, prices and events.
  • 0.3.x, fewer reads (2026-10-30): a Target answer whose product does not state the barcode is checked on that product's own answer (one more request, seconds) instead of a data service search (3 records and minutes); a product with variants gives the variant with that barcode. A Target protection page is read once more before the data service is asked. The run summary gains pageReads and serviceRecords, and the final status says how many pages were read and records bought for the rows charged. Prices and events unchanged.
  • 0.3.x, Target in seconds (2026-10-26): Target by barcode is read from its own search answer through the data service's page reader: with serviceStores first (seconds instead of 3 to 5 minutes; a barcode it does not answer clearly goes to the data service's search as before, barcodes missing close together sharing one search), and with target in sources when Target refuses the actor's own request. With serviceStores, a product is taken from that answer only when Target states its barcode (the same GTIN, however written); otherwise the barcode goes to the search, unless the run is too near its time limit for one (then it is reported as not checked). Best Buy's new search page is read the same way as before (one uncorrected result for the barcode), with confidence 0.95 since the page states no UPC. Same events and prices: one provider search per store and run, whether Target answered by page or search, and a provider record per exact match delivered; the rescue under sources charges nothing more. A run resumed after a migration delivers the answers it had without reading again. Walmart and Best Buy were tested the same way and stay as they are: Walmart's search page does not show a barcode to confirm a match, and Best Buy's often did not answer in time.
  • 0.3.x, reliability (2026-10-24): not-found and failed rows carry a reason; input naming no product ends SUCCEEDED with a free unreadable row instead of FAILED; a run stops starting products before its time limit and ends with what it checked, never TIMED-OUT. Prices and events unchanged.
  • 0.3 (2026-10-16): Offer condition from the title too, and for a Google product card from the same store's own listing at the same price ("(Renewed)", "Open Box", "Pre-Owned"…, in English and Spanish), as new, renewed, used, open-box or unknown, with conditionBasis; unknown is never taken for new. New fields lowestPriceCondition, lowestNewPrice, lowestNewPriceStore, conditionCounts, mapUnconfirmed, mapOtherCondition, and title, condition, conditionBasis in each MAP entry. Correctness fix: mapViolations now lists confirmed-new offers only; renewed, used and open-box offers below MAP moved to mapOtherCondition, unknown ones to mapUnconfirmed. A listing whose title says renewed (or used, open box) is now set aside when its condition is not among conditions (default new). Field names and inputs are unchanged: refurbished in conditions means renewed, and saved monitors keep their offer keys. Saved monitors: an offer whose condition is newly detected (from its title or the store's own listing) may show a one-time change on the first run after the update: removed under its old key and new under its condition, or no longer counted when its condition is not among conditions.
  • 0.2 (2026-10-15): Target and Best Buy by barcode through CleanPull's marketplace data service (serviceStores, optional), one search per store for all the run's barcodes, exact barcode matches only. New events: provider record (an exact match delivered, $0.003 on Bronze, $0.006 on the Free plan) and provider search ($0.02 per store per run on Bronze, $0.04 on Free, only when the search answered). Off by default: runs without it are unchanged.
  • 0.1.x (2026-10-14): Max cost per run (maxRunCostUsd), so a scheduled run stays within a budget even without a spending limit.
  • 0.1 (October 2026): Amazon and Best Buy by barcode; Google Shopping by store filter for any store, matched by model number or name; set-aside rules for colours, variants, bundles, foreign stores and outlier prices; MAP and own-price checks; changes-only monitoring by store; product and offer outputs.