# Google Shopping Scraper & API ($2/1k) 🛍️ (`unitbytes/google-shopping-scraper`) Actor

⚡ Fast & Affordable ($2/1k): Scrape Google Shopping products, live prices, discounts, seller offers, ratings, reviews & direct store checkout links across 80+ countries. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/unitbytes/google-shopping-scraper.md
- **Developed by:** [UnitBytes | Enterprise Web Data](https://apify.com/unitbytes) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🛍️ Google Shopping Scraper & Price Comparison API: Live Prices, Merchant Offers, Deals & Direct Checkout Links

<div align="center">

[![Available on Apify](https://img.shields.io/badge/Available_on-Apify-28B52A?style=for-the-badge\&logo=apify\&logoColor=white)](https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w\&fp_sid=gh_gshop)
[![Speed](https://img.shields.io/badge/Speed-50%2B_Products_in_Seconds-brightgreen?style=for-the-badge)](#)
[![Price Monitor](https://img.shields.io/badge/24%2F7_Cron-MAP_%26_Competitor_Price_Monitor-critical?style=for-the-badge)](#)
[![Pricing](https://img.shields.io/badge/Price-From_$2.00_%2F_1%2C000_Products-orange?style=for-the-badge)](#)
[![Store Checkout Links](https://img.shields.io/badge/Direct_Checkout-Multi--Seller_Offers_%26_URLs-purple?style=for-the-badge)](#)
[![80+ Countries](https://img.shields.io/badge/Localization-80%2B_Countries_%26_Currencies-blue?style=for-the-badge)](#)
[![Zero Login](https://img.shields.io/badge/Account_Required-None-blue?style=for-the-badge)](#)

**The fastest and most affordable Google Shopping scraper & real-time competitor price monitoring API for e-commerce brands, MAP compliance teams, dropshippers, retail analysts, and AI shopping agents. Extract live product prices, strike-through discounts, star ratings, exact review counts, shipping badges, product specifications, and direct store checkout URLs across Amazon, Walmart, Best Buy, Target, eBay, Shopify brands, and thousands of global retailers in seconds.**

[**🚀 Try it Live on Apify**](https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w\&fp_sid=gh_gshop) • [**💰 From $2.00 / 1,000 Products**](#-transparent-pay-per-event-pricing-from-200--1000-products) • [**🔗 Multi-Seller Offers & Checkout URLs**](#-direct-merchant-checkout-urls--multi-seller-comparison-offers) • [**💬 Support**](https://apify.com/unitbytes/google-shopping-scraper/issues)

</div>

***

<p align="center">
  <a href="https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w&fp_sid=gh_gshop">
    <img src="https://img.shields.io/badge/Try_It_Free_on_Apify-~1%2C240_Products_Free%2FMo-28B52A?style=for-the-badge&logo=apify&logoColor=white" height="42" alt="Try it for Free on Apify">
  </a>
  <br>
  <sub>⚡ <b>1-Click Free Trial:</b> Extract up to ~1,240 Google Shopping products every month free with Apify's $5 monthly credit (up to ~2,490 per $5 on volume plans) • No credit card required</sub>
</p>

***

### 📖 Overview

**Google Shopping** is the world's largest real-time retail price comparison engine, indexing live inventory, promotional pricing, shipping speeds, and customer ratings across **Amazon**, **Walmart**, **Best Buy**, **Target**, **eBay**, **Home Depot**, **B\&H Photo**, **Newegg**, **Zalando**, **MediaMarkt**, and millions of independent **Shopify**, **WooCommerce**, and **Magento** D2C brand storefronts across 80+ countries.

However, extracting clean, structured e-commerce intelligence from Google Shopping at scale has traditionally been expensive and brittle:

- Legacy browser-based scrapers take 60–180 seconds per search, consume gigabytes of memory, or fail on verification screens with `0 results`.
- Traditional SERP APIs charge **$15.00 to $25.00 per 1,000 searches** regardless of whether a query returns products, and require separate paid API calls to retrieve direct retailer checkout links or multi-seller comparison offers.
- Unparsed regional currency strings (`"$129.99"`, `"89,99 €"`, `"£74.95"`, `"₹4,999"`, `"R$ 349,90"`) and rounded UI review counts (`"1.3K"`) force teams to maintain fragile regex parsers before loading data into SQL, PostgreSQL, Excel, or repricing engines.

**Google Shopping Scraper by UnitBytes** solves all of these bottlenecks. It streams paginated Google Shopping listings **in seconds** (~40–50 products on Page 1 in ~3 seconds) starting **from `$2.00` per 1,000 products (`$0.002/product` on Gold+, and `$0.00` for empty searches or duplicates)** — complete with parsed numeric prices, ISO currencies, exact integer review counts, permanent product images, native upstream sorting/filtering, and optional **multi-seller price comparison tables + direct merchant checkout URLs**.

<table>
  <tr>
    <td colspan="3" style="padding:10px 14px;background:#0284C7;color:#FFFFFF;font-size:13px;font-weight:700;border-radius:6px 6px 0 0">
      ⚡ UnitBytes · Google Shopping, Search, Travel, News, Trends &amp; Local Intelligence Ecosystem
    </td>
  </tr>
  <tr>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FFF4ED;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🛍️ <b><a href="https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#C2410C;text-decoration:none;font-size:13px">Google Shopping Scraper</a></b></span><br><span style="color:#EA580C;font-size:11px;font-weight:700">📍 You are here (From $2/1K)</span><br>
      <span style="color:#64748B;font-size:11px">Live prices, deals, multi-seller offers &amp; store checkout URLs</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🛒 <b><a href="https://apify.com/unitbytes/google-shopping-trends-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Google Shopping Trends</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">From $0.30/1K • Product Spikes</span><br>
      <span style="color:#64748B;font-size:11px">Breakout e-commerce search trends &amp; seasonal <a href="https://apify.com/unitbytes/google-trends-scraper?fpr=939u3w&fp_sid=ecosystem">Google Trends</a></span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">📰 <b><a href="https://apify.com/unitbytes/google-news-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Google News Scraper</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">From $1/1K • Brand &amp; PR</span><br>
      <span style="color:#64748B;font-size:11px">Direct publisher URLs, topic feeds &amp; clean full-article text</span>
    </td>
  </tr>
  <tr>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">💼 <b><a href="https://apify.com/unitbytes/google-jobs-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Google Jobs Scraper</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">From $4/1K • Hiring Signals</span><br>
      <span style="color:#64748B;font-size:11px">Parsed salaries, employer logos &amp; direct ATS apply links</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">✈️ <b><a href="https://apify.com/unitbytes/google-flights-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Google Flights &amp; Hotels</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">From $2.50/1K • Travel Rates</span><br>
      <span style="color:#64748B;font-size:11px"><a href="https://apify.com/unitbytes/google-flights-scraper?fpr=939u3w&fp_sid=ecosystem">Airfares &amp; CO2</a> + <a href="https://apify.com/unitbytes/google-hotels-scraper?fpr=939u3w&fp_sid=ecosystem">Hotels &amp; OTA Parity</a></span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">📍 <b><a href="https://apify.com/unitbytes/google-maps-leads-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Google Maps Suite</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">From $0.20/1K • Retail &amp; Reviews</span><br>
      <span style="color:#64748B;font-size:11px"><a href="https://apify.com/unitbytes/google-maps-leads-scraper?fpr=939u3w&fp_sid=ecosystem">B2B Emails</a>, <a href="https://apify.com/unitbytes/google-maps-reviews-scraper?fpr=939u3w&fp_sid=ecosystem">10K Reviews</a> &amp; <a href="https://apify.com/unitbytes/google-maps-photos-scraper?fpr=939u3w&fp_sid=ecosystem">Photos</a></span>
    </td>
  </tr>
  <tr>
    <td colspan="3" style="padding:10px 14px;background:#1E293B;color:#FFFFFF;font-size:13px;font-weight:700">
      📦 UnitBytes · Global E-Commerce Sourcing, Wholesale & Marketplace Ecosystem
    </td>
  </tr>
  <tr>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🇨🇳 <b><a href="https://apify.com/unitbytes/1688-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">1688 Factory Direct</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">China Wholesale & FBA</span><br>
      <span style="color:#64748B;font-size:11px">Direct factory prices, SKU matrices & Amazon FBA specs</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">📸 <b><a href="https://apify.com/unitbytes/1688-image-search-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">1688 Reverse Image Search</a></b></span><br><span style="color:#EA580C;font-size:11px;font-weight:700">✨ Photo-to-Factory</span><br>
      <span style="color:#64748B;font-size:11px">Pass any Google Shopping `imageUrl` to find the exact factory</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🌐 <b><a href="https://apify.com/unitbytes/alibaba-scraper?fpr=939u3w&fp_sid=ecosystem" style="color:#0F172A;text-decoration:none;font-size:13px">Alibaba Wholesale</a></b></span><br><span style="color:#2563EB;font-size:11px;font-weight:600">Global B2B & MOQ</span><br>
      <span style="color:#64748B;font-size:11px">Verified suppliers, inspection audits & tiered pricing</span>
    </td>
  </tr>
</table>

***

### 🌟 Why E-Commerce, Repricing & Data Teams Choose UnitBytes

| Capability / Metric | **UnitBytes Google Shopping Scraper** | **Traditional SERP APIs** | **Browser-Based Scrapers** |
| :--- | :---: | :---: | :---: |
| **⚡ Extraction Speed (50 Products)** | **~3–5 Seconds** | ⚠️ Paginated calls + separate product API calls | ❌ Slow (45–180s browser startup) or blocked |
| **💰 Price per 1,000 Products** | **From $2.00 ($0.002 / product)** | $15.00 – $25.00 per 1K searches + immersive API fees | $10.00 – $35.00 per 1K + heavy RAM charges |
| **💵 Parsed Prices & ISO Currency** | **✅ Numeric `price`, `oldPrice`, `currency`, `isOnSale`** | ⚠️ Partial or raw string snippets | ❌ Unparsed regional currency strings |
| **⭐ Exact Integer Review Counts** | **✅ Exact count (`1326`) instead of rounded `"1.3K"`** | ⚠️ Often rounded UI text | ❌ Rounded UI text (`"1.3K"`) |
| **🔗 Direct Store Checkout Links** | **✅ Direct unwrapped `merchantUrl` + multi-seller `offers`** | ⚠️ Requires paid secondary Product API request | ❌ Google redirect traps or missing URLs |
| **🎯 Native Upstream Sorting & Filters** | **✅ Price Low/High, Rating, Min/Max Price, Sale, Free Shipping, Used/New** | ⚠️ Requires manual filter token encoding | ❌ Post-fetch local filtering (wastes time) |
| **🌍 Multi-Country Localization** | **✅ 80+ Countries (`US`, `GB`, `DE`, `FR`, `IN`, `BR`, `CA`, `AU`, `JP`...)** | ✅ Supported | ⚠️ Often breaks on comma-decimal currencies |
| **🛡️ Empty Search & Duplicate Item Fee** | **✅ $0.00 item fee (Zero `product-scraped` charge on 0 results or duplicates)** | ❌ Charged per API call even on 0 results | ❌ Charged for compute time even on 0 results |

***

### 💰 Transparent Pay-Per-Event Pricing (From `$2.00 / 1,000 Products`)

This Actor uses **Pay-Per-Event (PPE)** billing with automatic plan-based volume discounts so you pay strictly for unique, verified products delivered to your dataset — never per-item for empty searches, pagination requests, or duplicate listings across queries.

| Apify Plan Tier | Event Name | Price per Product | Price per 1,000 Products | Volume Discount |
| :--- | :--- | :--- | :--- | :--- |
| **Free Plan** (`FREE`) | `product-scraped` | `$0.0040` | **`$4.00 / 1,000 products`** | Base rate (**up to ~1,240 products/mo free** with `$5` credit) |
| **Starter Plan** (`BRONZE`) | `product-scraped` | `$0.0025` | **`$2.50 / 1,000 products`** | **37.5% OFF** |
| **Scale Plan** (`SILVER`) | `product-scraped` | `$0.0022` | **`$2.20 / 1,000 products`** | **45% OFF** |
| **Business & Enterprise** (`GOLD`+) | `product-scraped` | `$0.0020` | **`$2.00 / 1,000 products`** | **50% OFF** |
| **Actor Run Start** | `apify-actor-start` | `$0.0050` | `$5.00 / 1,000 runs` | One-time startup event per GB RAM (min. 1 event) |
| **Empty Searches / Duplicates** | — | **`$0.00 / item`** | **`$0.00 item fee`** | Zero `product-scraped` charge on 0 results or deduplicated products |

> 🎁 **Up to ~1,240 Products / Month Free on Apify's Free Tier:**
> Every Apify account receives **$5.00 in free monthly platform credits**, covering **up to ~1,240 unique Google Shopping products every month at $0.00 cost** on the Free Plan (or up to **~2,000–2,490 products** per `$5` on paid plans).

***

### ✨ Key Features

- **⚡ High-Speed Multi-Page Extraction (`256 MB` Footprint):** Collects ~40–50 products on Page 1 in seconds and seamlessly paginates deeper result sets up to `5,000` products per run.
- **💵 Multilingual Price & Discount Normalization:** Parses live prices (`price`), original strike-through prices (`oldPrice`), promotional badges (`discountBadge` — e.g., `"22% off"`, `"Price drop"`), and `isOnSale` flags across `USD`, `EUR`, `GBP`, `INR`, `BRL`, `CAD`, `AUD`, `JPY`, `AED`, `SAR`, `CHF`, `PLN`, `SEK`, `MXN`, and 35+ currencies (including Arabic-Indic numerals).
- **🏪 Direct Merchant Checkout URLs & Multi-Seller Price Comparisons (`resolveMerchantLinks`):** Optionally expands each product's comparison sheet to extract the direct unwrapped store URL (`merchantUrl` — e.g., `https://www.keychron.com/products/...`, `https://www.bestbuy.com/...`), multi-retailer `offers` (`merchantName`, `merchantDomain`, `price`, `currency`, `priceFormatted`, `delivery`, `merchantUrl`), and structured `specifications`.
- **🎯 Upstream Google Shopping Sorting & Precision Filtering:** Sort natively by `price_asc` (Lowest Price), `price_desc` (Highest Price), `rating_desc` (Top Rated), or `relevance`, and filter by `minPrice`, `maxPrice`, `onSaleOnly`, `freeShippingOnly`, `condition` (`new` / `used`), and `minRating` (including decimal thresholds like `4.5`).
- **⭐ Unrounded Ratings & Review Counts:** Captures full precision `rating` (`4.7`) and exact integer `reviewsCount` (`1326` rather than `"1.3K"`).
- **🖼️ Permanent High-Clarity Product Thumbnails (`imageUrl`):** Extracts clean `https://encrypted-tbn*.gstatic.com/shopping?...` product image URLs ready for UI catalogs, Airtable galleries, or reverse-image factory sourcing.
- **🧠 Cross-Query Deduplication:** Batch dozens of SKUs, brand names, or UPC/EAN codes in `queries` — overlapping items are automatically deduplicated by `catalogId` / `productId` so you never pay twice.

***

### 🔗 Direct Merchant Checkout URLs & Multi-Seller Comparison Offers

By default (`resolveMerchantLinks: false`), the scraper runs in **Ultra-Fast Discovery Mode**, extracting 40–50 products per page in a single request (`price`, `oldPrice`, `merchantName`, `rating`, `reviewsCount`, `delivery`, `imageUrl`, and `googleShoppingUrl`).

When you set **`resolveMerchantLinks: true`**, the scraper additionally inspects each product's full merchant comparison card to populate:

1. **`merchantUrl`**: Direct external store checkout link (e.g., `https://www.walmart.com/...`, `https://dygma.com/products/...`) with Google redirect wrappers cleanly stripped.
2. **`merchantDomain`**: Normalized root retailer domain (e.g., `"walmart.com"`, `"dygma.com"`).
3. **`offers`**: Structured list of competing sellers offering the same product, each with `merchantName`, `merchantDomain`, `price`, `currency`, `priceFormatted`, `delivery`, and direct `merchantUrl`.
4. **`specifications`**: Key-value product attribute map (e.g., `{"Brand": "Keychron", "Connectivity": "Bluetooth, Wireless", "Switch Type": "Mechanical"}`).

***

### 💡 Practical Business Use Cases

#### 1. 🛡️ Minimum Advertised Price (MAP) Enforcement & Authorized Seller Audits

Brands and manufacturers schedule daily runs across their SKU catalog (`queries: ["Brand Model A", "Brand Model B"]`, `resolveMerchantLinks: true`) to immediately detect unauthorized resellers undercutting MAP thresholds across every store indexed on Google Shopping.

#### 2. 📊 Dynamic E-Commerce Repricing & Competitor Price Intelligence

Track competitor `price`, `oldPrice`, `isOnSale`, `freeShipping`, and `offers` across regional markets (`us`, `gb`, `de`, `fr`, `ca`, `au`) to feed automated Shopify, WooCommerce, Magento, or Amazon repricing rules.

#### 3. 🏭 Retail-to-Factory Arbitrage Sourcing

Discover high-demand, high-review consumer products (`minRating: 4`, `minPrice: 40`), then pass their `imageUrl` directly into [**UnitBytes 1688 Reverse Image Search**](https://apify.com/unitbytes/1688-image-search-scraper?fpr=939u3w\&fp_sid=gh_gshop) to locate the exact original manufacturer and calculate gross margin.

#### 4. 🤖 AI Shopping Assistants, Deal Aggregators & MCP Agents

Connect this Actor via **Apify MCP**, **LangChain**, **CrewAI**, or **n8n** so AI agents can search real-time deals (`onSaleOnly: true`, `sortBy: "price_asc"`), compare merchant shipping policies, and return verified checkout links.

***

### 🚨 24/7 Price Drop & MAP Compliance Watchdog (Scheduled Automation)

| Objective | Frequency / Cron | Target Input | Automated Action / Destination |
| :--- | :--- | :--- | :--- |
| **🛡️ Daily Brand MAP Violation Radar** | Every 6 hours<br>`0 */6 * * *` | `queries: ["Your Brand SKUs"]`, `sortBy: "price_asc"`, `resolveMerchantLinks: true` | Flags sellers pricing below MAP in **Slack / Google Sheets / Airtable** with direct `merchantUrl` proof. |
| **🔥 Flash Deal & Price-Drop Feed** | Daily at 08:00 AM UTC<br>`0 8 * * *` | `queries: ["OLED Gaming Monitor", "Espresso Machine"]`, `onSaleOnly: true`, `freeShippingOnly: true` | Publishes discounted deals with `oldPrice` vs `price` savings to **Telegram / Discord / Webflow**. |
| **🌍 Multi-Country Retail Price Parity** | Every Monday at 06:00 AM UTC<br>`0 6 * * 1` | Same SKU list across `country: "us"`, `"gb"`, `"de"`, `"fr"` | Appends cross-currency retail benchmarks to **Google Sheets / Snowflake / PostgreSQL**. |

#### 🚀 Set Up Automated Schedules in 3 Clicks

1. Open [Google Shopping Scraper in Apify Console](https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w\&fp_sid=gh_gshop), configure your `queries` and filters, and click **Save as task**.
2. Go to **Schedules** in Apify Console ➔ **Create schedule** ➔ select your saved Task and cron interval.
3. Under **Integrations**, connect **Google Sheets**, **Slack**, **n8n**, **Make**, **Zapier**, or **Clay** (`RUN.SUCCEEDED` webhook).

***

### 🛠️ How to Use via API (Python, Node.js & cURL)

#### 🐍 Python Example

```bash
pip install apify-client
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run_input = {
    "queries": ["wireless mechanical keyboard", "ergonomic vertical mouse"],
    "country": "us",
    "sortBy": "relevance",
    "minPrice": 40,
    "maxPrice": 200,
    "freeShippingOnly": False,
    "maxProducts": 50,
    "resolveMerchantLinks": True,
}

print("🚀 Launching Google Shopping Scraper...")
run = client.actor("unitbytes/google-shopping-scraper").call(run_input=run_input)

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"✅ Extracted {len(items)} unique products!")

for item in items[:3]:
    print(f"\n• {item['title']} ({item.get('brand') or 'N/A'})")
    print(f"  Price: {item.get('priceFormatted')} ({item.get('price')} {item.get('currency')})")
    print(f"  Seller: {item.get('merchantName')} -> {item.get('merchantUrl')}")
    print(f"  Rating: {item.get('rating')} ⭐ ({item.get('reviewsCount')} reviews)")
```

***

#### 🟨 JavaScript / Node.js Example

```bash
npm install apify-client
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });

const runInput = {
    queries: ['Sony WH-1000XM5'],
    country: 'us',
    sortBy: 'price_asc',
    condition: 'new',
    maxProducts: 25,
    resolveMerchantLinks: true,
};

const run = await client.actor('unitbytes/google-shopping-scraper').call(runInput);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

items.slice(0, 5).forEach((p) => {
    console.log(`${p.title} — ${p.priceFormatted} at ${p.merchantName} (${p.merchantUrl})`);
});
```

***

#### 🌐 cURL Example

```bash
curl -X POST "https://api.apify.com/v2/acts/unitbytes~google-shopping-scraper/runs?token=YOUR_APIFY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["espresso machine"],
    "country": "us",
    "sortBy": "rating_desc",
    "minPrice": 100,
    "maxPrice": 600,
    "maxProducts": 40
  }'
```

***

### 📤 Sample Output Data & Complete Schema

Each dataset item is a clean, flat JSON object containing **32 structured e-commerce fields**:

```json
{
  "productId": "7530392338343106684",
  "catalogId": "7530392338343106684",
  "offerId": "1194028475102938471",
  "gpcId": "492817364519283746",
  "title": "Keychron K8 Tenkeyless Wireless Mechanical Keyboard",
  "brand": "Keychron",
  "price": 79.99,
  "currency": "USD",
  "priceFormatted": "$79.99",
  "oldPrice": 99.99,
  "oldPriceFormatted": "$99.99",
  "discountBadge": "20% off",
  "isOnSale": true,
  "merchantName": "Keychron",
  "merchantDomain": "keychron.com",
  "merchantUrl": "https://www.keychron.com/products/keychron-k8-tenkeyless-wireless-mechanical-keyboard",
  "hasMultipleOffers": true,
  "offersCount": 4,
  "offers": [
    {
      "merchantName": "Keychron",
      "merchantDomain": "keychron.com",
      "price": 79.99,
      "currency": "USD",
      "priceFormatted": "$79.99",
      "delivery": "Free delivery",
      "merchantUrl": "https://www.keychron.com/products/keychron-k8-tenkeyless-wireless-mechanical-keyboard"
    },
    {
      "merchantName": "Amazon.com",
      "merchantDomain": "amazon.com",
      "price": 84.99,
      "currency": "USD",
      "priceFormatted": "$84.99",
      "delivery": "Free delivery by Fri",
      "merchantUrl": "https://www.amazon.com/dp/B08B5W1234"
    }
  ],
  "rating": 4.7,
  "reviewsCount": 1326,
  "delivery": "Free delivery",
  "freeShipping": true,
  "returnPolicy": "Free 30-day returns",
  "condition": "New",
  "specifications": {
    "Brand": "Keychron",
    "Connectivity": "Bluetooth, USB-C",
    "Backlit": "RGB"
  },
  "imageUrl": "https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcR_example_product_thumb&usqp=CAc",
  "googleShoppingUrl": "https://www.google.com/search?udm=28&q=wireless+mechanical+keyboard&gl=us#oshopproduct=cid:7530392338343106684",
  "searchQuery": "wireless mechanical keyboard",
  "position": 1,
  "country": "us",
  "scrapedAt": "2026-11-12T12:00:00Z"
}
```

#### Complete Output Fields Reference

| Field | Type | Description |
| :--- | :--- | :--- |
| `productId` | `string` | Primary unique Google Shopping product or offer identifier. |
| `catalogId` | `string \| null` | Google Shopping catalog identifier (`cid`) grouping identical SKUs across sellers. |
| `offerId` | `string \| null` | Headline merchant offer document identifier. |
| `gpcId` | `string \| null` | Google Product Catalog group identifier, when present. |
| `title` | `string` | Full untruncated product title. |
| `brand` | `string \| null` | Brand or manufacturer name (e.g., `"Keychron"`, `"Sony"`, `"Dygma"`). |
| `price` | `number \| null` | Parsed numeric current price in local currency (e.g., `79.99`). |
| `currency` | `string \| null` | Three-letter ISO 4217 currency code (`"USD"`, `"EUR"`, `"GBP"`, `"INR"`, `"BRL"`, etc.). |
| `priceFormatted` | `string \| null` | Raw formatted price string displayed on Google Shopping (e.g., `"$79.99"`, `"89,99 €"`). |
| `oldPrice` | `number \| null` | Parsed numeric original / strike-through price prior to discount, if on sale. |
| `oldPriceFormatted` | `string \| null` | Raw formatted strike-through price text. |
| `discountBadge` | `string \| null` | Promotional badge text (e.g., `"20% off"`, `"Price drop"`), when displayed. |
| `isOnSale` | `boolean` | `true` when `oldPrice > price` or a promotional discount badge is active. |
| `merchantName` | `string \| null` | Primary store or marketplace seller name (e.g., `"Best Buy"`, `"Amazon.com"`, `"Walmart"`). |
| `merchantDomain` | `string \| null` | Root retailer domain (populated automatically when `resolveMerchantLinks: true` or seller name is a domain). |
| `merchantUrl` | `string \| null` | Direct external store checkout URL (populated when `resolveMerchantLinks: true`). |
| `hasMultipleOffers` | `boolean` | `true` when multiple competing stores sell this catalog item (`"& more"`). |
| `offersCount` | `integer` | Minimum seller count detected (`1` or `2` in fast mode based on multi-seller badge; exact extracted seller count when `resolveMerchantLinks: true`). |
| `offers` | `array` (`object`) | Multi-seller comparison offers (`merchantName`, `merchantDomain`, `price`, `currency`, `priceFormatted`, `delivery`, `merchantUrl`) when `resolveMerchantLinks: true`. |
| `rating` | `number \| null` | Average customer star rating (`0.0` – `5.0`). |
| `reviewsCount` | `integer \| null` | Exact integer count of product reviews (e.g., `1326`). |
| `delivery` | `string \| null` | Shipping price or estimated delivery note (e.g., `"Free delivery"`, `"$5.99 delivery"`). |
| `freeShipping` | `boolean` | `true` when free shipping / free delivery is explicitly indicated. |
| `returnPolicy` | `string \| null` | Merchant return window note (e.g., `"Free 30-day returns"`), when listed. |
| `condition` | `string` | Normalized item condition (`"New"` by default, or `"Used"` / `"Refurbished"` when a pre-owned/refurbished badge is present). |
| `specifications` | `object` | Structured product specifications map (populated when `resolveMerchantLinks: true`). |
| `imageUrl` | `string \| null` | Public `https://encrypted-tbn*.gstatic.com/shopping?...` product thumbnail URL. |
| `googleShoppingUrl` | `string` | Working Google Shopping `udm=28` Product Viewer URL (`#oshopproduct=cid:<catalogId>`). |
| `searchQuery` | `string` | Search query that returned this product. |
| `position` | `integer` | 1-based ranking position within the search query stream. |
| `country` | `string` | Two-letter ISO country code used for regional store pricing (`"us"`, `"gb"`, `"de"`, etc.). |
| `scrapedAt` | `string` | UTC ISO 8601 extraction timestamp. |

***

### ⚙️ Input Parameters Reference

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `queries` | `array` | `["wireless mechanical keyboard"]` | Product keywords, brand + model names, UPC/EAN barcodes, or Google Shopping URLs (`google.com/search?udm=28&q=...`). Supports multi-query batching with automatic deduplication. |
| `startUrls` | `array` | `[]` | Optional list of Google Shopping / Google Search URLs (`{"url": "https://www.google.com/search?udm=28&q=..."}` or plain strings). Merged and deduplicated with `queries`. |
| `country` | `string` | `"us"` | Two-letter ISO 3166-1 country code (`us`, `gb`, `de`, `fr`, `es`, `it`, `nl`, `ca`, `au`, `in`, `br`, `mx`, `jp`, `sg`, `ae`, `sa`, etc.). Common names like `"USA"`, `"UK"`, or `"UAE"` are normalized automatically. |
| `language` | `string` | `""` | Optional two-letter interface language code (`en`, `de`, `fr`, `es`, `pt`, `ar`). Leave empty (`""`) so Google Shopping serves native local-language inventory for `country`. |
| `sortBy` | `string` | `"relevance"` | Upstream Google Shopping sort order: `"relevance"`, `"price_asc"` (Low to High), `"price_desc"` (High to Low), or `"rating_desc"` (Review Score). |
| `minPrice` | `number` | `null` | Optional minimum price filter in the local currency of `country`. |
| `maxPrice` | `number` | `null` | Optional maximum price filter in the local currency of `country`. |
| `onSaleOnly` | `boolean` | `false` | When `true`, filters upstream and verifies discounted items and active price drops (`isOnSale: true`). |
| `freeShippingOnly` | `boolean` | `false` | When `true`, filters upstream and verifies offers with free shipping / free delivery. |
| `condition` | `string` | `"any"` | Filter by item condition: `"any"`, `"new"`, or `"used"` (pre-owned / refurbished). |
| `minRating` | `number` | `null` | Optional minimum customer star rating threshold (`1` – `5`, supports integers and decimals such as `4` or `4.5`). |
| `maxProducts` | `integer` | `50` | Maximum number of unique products to collect across the run (`1` – `5000`). |
| `resolveMerchantLinks` | `boolean` | `false` | When `true`, resolves direct external retailer checkout URLs (`merchantUrl`), multi-seller `offers`, and `specifications`. |
| `proxyConfiguration` | `object` | `null` | Optional custom proxy override (`proxyUrls`). Managed residential proxies are included automatically by default. |

***

#### 📋 Copy-and-Paste Directive for AI Coding Assistants (Cursor, Windsurf & Claude Code)

> *"Use the `unitbytes/google-shopping-scraper` Actor on Apify to extract live Google Shopping product prices, discounts, ratings, review counts, and direct retailer checkout links (`resolveMerchantLinks: True`). Example call: `client.actor('unitbytes/google-shopping-scraper').call(run_input={'queries': ['Sony WH-1000XM5'], 'country': 'us', 'sortBy': 'price_asc', 'maxProducts': 30, 'resolveMerchantLinks': True})`"*

***

#### 🔌 MCP Server Setup: Claude Code, Cursor & AI Agents

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=actors,docs,unitbytes/google-shopping-scraper"
    }
  }
}
```

***

### 🌐 Complete UnitBytes Google & E-Commerce Intelligence Ecosystem

| Actor | Best For | Pricing |
| :--- | :--- | :--- |
| [**Google Shopping Scraper**](https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w\&fp_sid=ecosystem) *(📍 You are here)* | Live retail prices, deals, exact review counts, multi-seller offers & direct checkout URLs | From $2.00 / 1K |
| [**Google Shopping Trends Scraper**](https://apify.com/unitbytes/google-shopping-trends-scraper?fpr=939u3w\&fp_sid=ecosystem) | Rising e-commerce product queries, +5,000% breakout seasonal niches & regional shopping interest | From $0.30 / 1K |
| [**Google Trends Scraper**](https://apify.com/unitbytes/google-trends-scraper?fpr=939u3w\&fp_sid=ecosystem) | 5-in-1 search demand, related queries, interest over time & geo heatmaps | From $0.30 / 1K |
| [**Google Jobs Scraper**](https://apify.com/unitbytes/google-jobs-scraper?fpr=939u3w\&fp_sid=ecosystem) | Multi-board job listings, normalized salaries, logos & direct ATS links | From $4.00 / 1K |
| [**Google Flights Scraper**](https://apify.com/unitbytes/google-flights-scraper?fpr=939u3w\&fp_sid=ecosystem) | Real-time airfares, carriers, flight numbers, nonstop/cabin filters & CO2 emissions | From $2.50 / 1K |
| [**Google Hotels Scraper**](https://apify.com/unitbytes/google-hotels-scraper?fpr=939u3w\&fp_sid=ecosystem) | Nightly & total hotel/rental rates, multi-OTA price parity (`Booking.com`, `Expedia`), GPS & HD photos | From $2.50 / 1K |
| [**Google News Scraper**](https://apify.com/unitbytes/google-news-scraper?fpr=939u3w\&fp_sid=ecosystem) | Direct publisher URLs, recency/domain filters, topic feeds & optional clean full-article text | From $1.00 / 1K |
| [**Google Maps Email & Leads Scraper**](https://apify.com/unitbytes/google-maps-leads-scraper?fpr=939u3w\&fp_sid=ecosystem) | Verified B2B retail/local store emails, phones, social links & ad pixels | From $1.00 / 1K |
| [**Google Maps Reviews Scraper**](https://apify.com/unitbytes/google-maps-reviews-scraper?fpr=939u3w\&fp_sid=ecosystem) | Up to 10,000 customer reviews per store with keyword & rating filters | From $0.25 / 1K |
| [**1688 Factory Direct Scraper**](https://apify.com/unitbytes/1688-scraper?fpr=939u3w\&fp_sid=ecosystem) | Direct Chinese manufacturer wholesale pricing, MOQs, SKU matrices & FBA specs | From $1.50 / 1K |
| [**1688 Reverse Image Search**](https://apify.com/unitbytes/1688-image-search-scraper?fpr=939u3w\&fp_sid=ecosystem) | Find the exact wholesale factory from any Google Shopping `imageUrl` | From $1.50 / 1K |
| [**Alibaba Wholesale Scraper**](https://apify.com/unitbytes/alibaba-scraper?fpr=939u3w\&fp_sid=ecosystem) | Verified global B2B suppliers, tiered pricing & factory inspection audits | From $1.50 / 1K |
| [**Taobao & Tmall Scraper**](https://apify.com/unitbytes/taobao-tmall-scraper?fpr=939u3w\&fp_sid=ecosystem) | Retail brand flagship catalogs, prices & buyer review tags | Pay-Per-Event |
| [**Facebook Marketplace Scraper**](https://apify.com/unitbytes/Facebook-Marketplace-Scraper?fpr=939u3w\&fp_sid=ecosystem) | Local resale prices, electronics, vehicles & 40+ listing fields | Pay-Per-Event |

***

### ❓ Frequently Asked Questions (FAQ)

#### Do I need a Google account, cookies, or external proxies?

**No.** Everything works out of the box on Apify with zero login credentials or external setup required.

#### Does `resolveMerchantLinks: true` cost extra per product?

**No.** Your per-product PPE rate remains unchanged (**from `$0.002` per unique product / `$2.00` per 1,000 products on Gold+**; `$0.004` on Free tier) with **zero extra surcharge** for enrichment. Enabling `resolveMerchantLinks: true` performs an additional detail lookup per product so runs take slightly longer (~1–2s per batch of 6 products), making it ideal when you need direct `merchantUrl` checkout links, multi-seller `offers`, or `specifications`.

#### What happens if a SKU or barcode has 0 results on Google Shopping?

The scraper detects empty result sets immediately on the first page, exits cleanly with code `0`, and charges **`$0.00` in `product-scraped` events**.

#### Why should I leave `language` empty when scraping non-English countries?

Leaving `language` empty (`""`) allows Google Shopping to query local-language merchant feeds in countries like Germany (`de`), France (`fr`), Brazil (`br`), or Spain (`es`), ensuring full local retailer coverage and accurate regional currency formatting.

***

### ⚖️ Compliance & Privacy

This Actor extracts **strictly publicly available retail product listings and prices** indexed on Google Shopping. It never accesses private user accounts or personally identifiable information (PII). Read Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) to ensure compliance with applicable regulations.

#### Disclaimer

This Actor is an independent software tool and is not affiliated with, endorsed by, or sponsored by Google LLC or any listed retail merchants.

***

### 🔍 Keywords & Search Tags

`google-shopping-scraper` • `google-shopping-api` • `scrape-google-shopping` • `price-comparison-api` • `competitor-price-monitoring` • `map-compliance-monitor` • `ecommerce-price-tracker` • `merchant-offers-scraper` • `retail-intelligence-api` • `shopify-competitor-research` • `amazon-walmart-price-comparison` • `upc-ean-price-lookup` • `apify-actor`

***

### 💬 Support & Feedback

Need custom regional attributes, high-volume batching advice, or found an edge case?

- 💬 **Apify Issues**: Open a ticket on the [Actor Issues Tab](https://apify.com/unitbytes/google-shopping-scraper/issues)
- 🚀 **Apify Store**: [Google Shopping Scraper](https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w\&fp_sid=gh_gshop)

<div align="center">
  <br>
  <a href="https://apify.com/unitbytes/google-shopping-scraper?fpr=939u3w&fp_sid=gh_gshop">
    <img src="https://img.shields.io/badge/Start_Scraping_Google_Shopping-Apify-28B52A?style=for-the-badge&logo=apify&logoColor=white" height="40" alt="Start Scraping Google Shopping">
  </a>
</div>

# Actor input Schema

## `queries` (type: `array`):

Product names, brand keywords, model numbers, UPC/EAN codes, or Google Shopping search URLs (e.g. 'wireless mechanical keyboard', 'Sony WH-1000XM5', 'Keychron K8'). Supports multi-query batching with automatic cross-query deduplication.

## `startUrls` (type: `array`):

Optional list of Google Shopping / Google Search URLs (e.g. 'https://www.google.com/search?udm=28\&q=espresso+machine\&gl=us'). Combined and deduplicated automatically with Search Queries.

## `country` (type: `string`):

Two-letter ISO 3166-1 country code for Google Shopping regional store pricing and currency across 80+ countries (e.g. 'us', 'gb', 'de', 'fr', 'es', 'it', 'nl', 'ca', 'au', 'in', 'br', 'mx', 'jp', 'sg', 'ae', 'sa'). Common aliases like 'USA', 'UK', or 'UAE' are normalized automatically.

## `language` (type: `string`):

Two-letter interface language code (e.g. 'en', 'de', 'fr', 'es', 'pt', 'ar'). Recommended: leave empty so Google Shopping uses the native language of the selected country.

## `sortBy` (type: `string`):

Server-side Google Shopping sort order.

## `minPrice` (type: `number`):

Server-side minimum price filter in the local currency of the selected country (e.g. 50).

## `maxPrice` (type: `number`):

Server-side maximum price filter in the local currency of the selected country (e.g. 200).

## `onSaleOnly` (type: `boolean`):

Filter upstream and verify discounted items and active price drops (`isOnSale: true`).

## `freeShippingOnly` (type: `boolean`):

Filter upstream and verify products offering free shipping / free delivery.

## `condition` (type: `string`):

Filter by new or pre-owned / refurbished condition.

## `minRating` (type: `number`):

Filter for products rated at or above this star threshold (supports integers and decimals from 1 to 5, e.g. 4 or 4.5).

## `maxProducts` (type: `integer`):

Maximum number of unique products to extract across all queries in this run. Extraction halts immediately once reached.

## `resolveMerchantLinks` (type: `boolean`):

When enabled, fetches each product's full merchant comparison sheet to populate direct external store checkout URLs (`merchantUrl`), multi-seller price comparisons (`offers`), and product `specifications`.

## `proxyConfiguration` (type: `object`):

Managed residential proxies are automatically configured by default. Optionally supply custom HTTP/SOCKS5 `proxyUrls` if you prefer to route traffic through your own proxy gateway.

## Actor input object example

```json
{
  "queries": [
    "wireless mechanical keyboard"
  ],
  "country": "us",
  "language": "",
  "sortBy": "relevance",
  "onSaleOnly": false,
  "freeShippingOnly": false,
  "condition": "any",
  "maxProducts": 50,
  "resolveMerchantLinks": false
}
```

# Actor output Schema

## `results` (type: `string`):

Extracted Google Shopping product listings, prices, discounts, ratings, reviews, and merchant checkout offers

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "wireless mechanical keyboard"
    ],
    "country": "us",
    "language": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("unitbytes/google-shopping-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["wireless mechanical keyboard"],
    "country": "us",
    "language": "",
}

# Run the Actor and wait for it to finish
run = client.actor("unitbytes/google-shopping-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "wireless mechanical keyboard"
  ],
  "country": "us",
  "language": ""
}' |
apify call unitbytes/google-shopping-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unitbytes/google-shopping-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6E5niBjlrveOlBndR/builds/fx5dUOhibKsUlnbKF/openapi.json
