Compare Black Friday Prices Across Stores (Google Shopping)
Compare Black Friday prices across stores with Google Shopping: every seller's offer for one product, condition and shipping, automated per keyword.
Published · Updated · By Omar Eldeeb
To compare Black Friday prices across stores, search the exact model on Google Shopping for your country and read every seller's offer for that product: price, condition (new, refurbished or used), delivery and any was-price. Drop refurbished, used and bundle listings first, or the cheapest row is usually not the item you want. To do this for many products, scrape it per keyword and sort.
Google Shopping is the one place where Best Buy, Lowe's, Newegg and independent sellers appear next to Walmart and Target. This guide shows what that view returns, using real runs of E-commerce Product Scraper Pro's Google Shopping mode on 2026-10-18 and 2026-10-20, and the traps in comparing those rows.
Why Google Shopping for a cross-store comparison
Scraping each store's product pages gives you exact, per-store prices, and the Black Friday price tracker guide does that for Amazon, Walmart and Target. But several big US electronics and home retailers block scrapers: Best Buy, Home Depot, Lowe's, Costco and Newegg are all on the actor's unsupported list. Google Shopping's seller lists still include many of them. In our Sony WH-1000XM5 runs, the merchants were Best Buy, Sony, Lowe's, Target, Newegg sellers, an eBay seller, Woot, Macy's and others.
The tradeoff: Google's view is a summary of merchants' offers, not the stores' own pages. Use it to find which store is cheapest, then confirm on that store's page.
The modes
The actor has three working Google Shopping modes:
scrapeModeSearchEngine |
What you get | Google requests | Billed per |
|---|---|---|---|
Google Listing |
One row per product on the results page: price, merchant, was-price, badge, delivery | 1 per keyword | search-engine request + product row |
Products |
The same, plus each product's Google page: description, typical price range, number of offers | 1 + 1 per product | search-engine requests + product row |
Sellers |
Every store selling each product: merchant, price, old price, condition, delivery, returns, coupon, offer link | 1 + 1 per product | search-engine requests + seller entry |
Reviews isn't available: Google loads reviews in the browser only, so that mode returns an explanatory status row. Other limits from the README: up to 50 keywords per run, one search per keyword in the countryCode market (default us, with optional citySearchEngine and regionSearchEngine), and long titles may be cut off (titleTruncated tells you). An answer for the wrong country gets one retry, then it's reported as blocked and not billed.
Every seller for one product
The input for the Sellers mode:
{
"searchEngineKeyword": "Sony WH-1000XM5",
"scrapeModeSearchEngine": "Sellers",
"countryCode": "us",
"maxSearchEngineProducts": 4,
"maxSearchEngineSellersPerProduct": 5,
"maxSearchEngineResults": 20
}This is what it returned on 2026-10-18 (run FiUR4s8DgTfDEE02e). Each result row has a sellers[] array; here they're flattened, with offer links removed:
| Result | Seller | Price | Was | condition |
badge |
Delivery |
|---|---|---|---|---|---|---|
| 1 | Best Buy | $228.00 | $398 | — | — | Free delivery by Tue |
| 1 | Sony | $228.00 | $400 | — | — | Free delivery between Tue – Wed |
| 1 | Lowe's | $299.00 | — | — | — | Free delivery between Oct 19 – 26 |
| 1 | Target | $398.99 | — | — | — | Free delivery between Wed – Sat |
| 2 | Target | $189.99 | — | refurbished |
Refurbished | Free delivery between Wed – Sat |
| 3 | Newegg.com - Sybershop |
$279.00 | — | — | — | Free delivery |
| 3 | Electronic Express | $319.30 | $459 | used |
— | Delivery $0.01 |
| 3 | eBay - (seller name omitted) | $397.37 | — | — | — | Free delivery by Oct 27 |
| 4 | Target | $189.99 | — | refurbished |
Refurbished | Free delivery by Sat |
Result 1 also carried Google's price insight, "priceInsight": "Typically $199–$300", with offersCount: 4 and lowestOfferPrice: 228. The run billed 4 search-engine requests (one results page and three product pages; result 4 had no product page) and 9 seller entries.
What the table teaches:
- The cheapest row was refurbished. Target's $189.99 was "Target Certified Refurbished". The actor moves Google's "Refurbished", "Used" and "Pre-owned" badges out of the merchant name into
badge, and normalises them intocondition. Electronic Express's offer was titled "OPEN BOX" and came through ascondition: "used". - The row price isn't the best offer. Result 1's headline price was Best Buy at $254.99, but its seller list had Best Buy and Sony at $228. Use
lowestOfferPriceor thesellers[]prices, not the row price. - Was-prices are claims. $398 against a typical range of $199–$300 is a list price. The fake Black Friday discounts guide shows how to check a discount against real price history.
The script
This flattens the seller lists, drops refurbished and used offers, and sorts by price:
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
"searchEngineKeyword": "Sony WH-1000XM5",
"scrapeModeSearchEngine": "Sellers",
"countryCode": "us",
"maxSearchEngineProducts": 3,
"maxSearchEngineSellersPerProduct": 8,
"maxSearchEngineResults": 24,
}
run = client.actor("constructive_calm/ecommerce-product-scraper-pro").call(run_input=run_input)
offers = []
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("recordType") != "search-result":
continue
for s in row["sellers"]:
offers.append({
"product": row["title"][:38],
"catalogId": row.get("catalogId"),
"seller": s["merchantName"],
"price": s["price"],
"was": s["originalPrice"],
"condition": s["condition"] or "new",
"shipping": s["shipping"],
})
new_only = sorted((o for o in offers if o["condition"] == "new"), key=lambda o: o["price"])
for o in new_only:
print(f'{o["price"]:>8.2f} {o["seller"][:24]:<24} was={o["was"]} {o["shipping"]} [{o["product"]}]')
print(len(offers), "offers,", len(offers) - len(new_only), "refurbished/used dropped")An honest note from running it on 2026-10-20: Google's product pages timed out for two of the three products, twice in a row, so the script printed a single offer. Timed-out pages aren't billed (each run billed one search request and one seller), and the Status dataset marked the keyword partial with the reason. If that happens, run it again later, or fall back to the Listing mode below.
The quick version: one request per keyword
Google Listing reads only the results page, so it's one Google request per keyword. Same script shape, different mode:
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("constructive_calm/ecommerce-product-scraper-pro").call(run_input={
"searchEngineKeyword": "Sony WH-1000XM5",
"scrapeModeSearchEngine": "Google Listing",
"countryCode": "us",
"maxSearchEngineProducts": 10,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
for r in sorted(rows, key=lambda r: r["price"] or 1e9):
print(f'{r["price"]:>8.2f} {str(r["merchant"])[:22]:<22} was={r["originalPrice"]} '
f'badge={r["badge"]} condition={r["condition"]} {r["title"][:40]}')Output on 2026-10-20:
184.99 Entrepreneur was=None badge=LOW PRICE condition=None Sony WH-1000XM5 Wireless Headphones
189.99 Target was=None badge=Refurbished condition=refurbished Sony Wh-1000XM5 Noise-Canceling Wireless
189.99 Target was=None badge=Refurbished condition=refurbished Refurbished Sony WH-1000XM5 Bluetooth Wi
227.99 Woot was=None badge=Pre-owned condition=used Sony WH-1000XM5 Wireless Active Noise Ca
269.99 Best Buy was=398 badge=32% OFF condition=None Sony WH-1000XM5 Wireless Noise Canceling
280.99 Best Buy was=None badge=None condition=None Sony WH 1000XM5 Noise Canceling Wireless
284.00 Gadgets Online NZ was=None badge=None condition=None Sony WH-1000XM5 Wireless Noise-Canceling
298.00 ListenUp was=398 badge=25% OFF condition=None Sony WH-1000XM5 Wireless Noise Canceling
339.99 Best Buy was=400 badge=15% OFF condition=None Sony WH-1000XM5 Wireless Noise Canceling
399.99 Macy's was=None badge=None condition=None Sony WH-1000XM5 Wireless Noise CancelingThat run billed one search request and ten product rows. Of the ten rows, three were refurbished or pre-owned, and three of the Best Buy and Macy's rows were bundles: the full titles say "Pro Stand Kit", "with Truly Wireless Earbuds Bundle" and "JBL T110 in Ear Headphones". The cheapest new row came from a merchant named "Entrepreneur" with a "LOW PRICE" badge. Check an unfamiliar seller before you trust its price.
The Best Buy row with Google catalog ID 17755277695162489284 was $254.99 on October 18 and $269.99 on October 20, against the same $398 was-price. To track a product on Google Shopping over time, join snapshots on catalogId (or itemKey), not on the title.
What it costs
From the README's pay-per-event table, using the two real runs above:
| Run | FREE | GOLD |
|---|---|---|
| Listing, 1 keyword, 10 rows | $0.005 + $0.0045 + 10 × $0.0048 = $0.0575 | $0.005 + $0.0035 + 10 × $0.0008 = $0.0165 |
| Sellers, 1 keyword, 4 requests, 9 sellers | $0.005 + 4 × $0.0045 + 9 × $0.0024 = $0.0446 | $0.005 + 4 × $0.0035 + 9 × $0.0008 = $0.0262 |
The $0.005 is the per-run start fee. Several keywords in one run share it: put up to 50 keywords, one per line, in searchEngineKeyword. Failed or blocked Google requests aren't billed. Apify's free plan includes $5 of usage every month, and the actor has no free trial of its own.
A checklist for a fair comparison
- Search the model number, not a description. "WH-1000XM5" beats "Sony noise cancelling headphones", which returns the XM4, XM6 and accessories.
- Filter
conditionto new (null) and checkbadgefor "Refurbished", "Pre-owned" and similar labels. - Drop bundles by title: "bundle", "kit", "with", a second product name.
- Add delivery.
shipping/deliveryis text ("Free delivery", "Delivery $0.01"), so parse fees before you compare. - Expect tax at checkout. US offer prices generally don't include sales tax.
- Pin the market. Set
countryCode(and optionally city and region). Prices and stores differ by country. - Confirm on the store's page through the offer link before you buy. Google's offer data can lag a store's live price, especially on Black Friday when prices change several times a day.
For Black Friday week, run the same keywords every few hours from Thanksgiving to Cyber Monday; the Cyber Monday deal tracker guide works out schedule costs. For tracking competitors' prices all year, see competitor price monitoring, and for the whole sales calendar, the holiday sales calendar and price tracking guide. The free e-commerce price tracker page builds input for store pages.
Disclosure: I built the actor and this site. The comparison checklist works the same if you read Google Shopping by hand.
Sources: E-commerce Product Scraper Pro README (modes, limits, pricing), runs FiUR4s8DgTfDEE02e (2026-10-18) and G6rHaICs9Fc0Kd2MI (2026-10-20) of that actor.
Quick answers
How do I compare Black Friday prices across stores?
Search the exact model number on Google Shopping for your country, open the product's list of stores, and compare the offers for new items, including delivery. To do it for many products, scrape the same view per keyword and filter out refurbished, used and bundle listings before sorting by price.
Why is a Google Shopping price lower than the store's own website?
Often it isn't the same item: the cheapest rows are frequently refurbished, open-box, pre-owned or a different bundle. Google's offer data can also lag the store's page, so check the offer link before you buy.
Can I see Best Buy or Home Depot prices if a scraper can't reach their sites?
Through Google Shopping, often yes. In our runs, Google Shopping listed Best Buy, Lowe's, Newegg and eBay sellers alongside Target and Walmart, even though E-commerce Product Scraper Pro doesn't scrape those stores' own pages.
Does Google Shopping show prices including tax and shipping?
It shows delivery as a separate note, such as "Free delivery" or a fee, and the offer price usually doesn't include US sales tax, which depends on where you live. Compare price plus delivery, and expect tax at checkout.