# Google Shopping Prices – Product & Seller Price Tracker (`rowfeed/google-shopping-prices`) Actor

Google Shopping results for any product search in any country: price, old price and discount, seller, rating, ratings count, delivery and rank. Track your own or competitors' shops. Licensed data, no blocked runs.

- **URL**: https://apify.com/rowfeed/google-shopping-prices.md
- **Developed by:** [Rowfeed](https://apify.com/rowfeed) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 shopping result products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Prices – Product & Seller Price Tracker

Get Google Shopping results for any product search, in any country: price, old price and discount, seller, product rating and number of ratings, delivery message and rank.
Add the shops you care about and every row tells you whether it is theirs, so a daily schedule turns this into a price and position tracker for your own or your competitors' shops.
Built for e-commerce teams, brands, price-comparison sites, resellers and AI agents.
The data comes from a licensed e-commerce data provider (DataForSEO), not from our own scraping, so runs do not fail on captchas or blocks.

### What you get

- **One row per product** in Google Shopping's order: rank, sponsored flag, title, price, old price, discount %, currency, seller, product rating, ratings count, shop rating, delivery, best-match flag and a link to the product on Google Shopping.
- **Seller tracking**: list shop names or domains in `trackSellers` and matching rows get `tracked: true`.
- **Any market and sort order**: country, region or city; relevance, price low/high or review score.
- Up to 120 products per search, up to 500 searches per run.

### Example output row

A real row from a run with the default input:

```json
{
  "query": "wireless earbuds",
  "rank": 1,
  "rank_absolute": 5,
  "sponsored": false,
  "title": "JLab Audio Go Air Pop True Wireless Earbuds - White",
  "price": 24.99,
  "old_price": null,
  "discount_pct": null,
  "currency": "USD",
  "seller": "PCLiquidations.com",
  "rating": 5,
  "ratings_count": 33000,
  "shop_rating": null,
  "delivery": null,
  "is_best_match": false,
  "product_id": null,
  "google_shopping_url": "https://google.com/search?ibp=oshop&q=wireless+earbuds+sale&prds=headlineOfferDocid:259406323614314829,pvo:3,pvt:hg&hl=en&gl=US",
  "tracked": null,
  "location": "United States",
  "language": "English",
  "sort_by": "relevance",
  "checked_at": "2026-10-15T18:26:08+00:00"
}
```

### Input

| Field | What it does |
|---|---|
| `searchQueries` | Product searches (up to 500). |
| `maxProductsPerSearch` | Products per search, 10–120 (default 20). |
| `sortBy` | `relevance`, `price_low_to_high`, `price_high_to_low`, `review_score`. |
| `trackSellers` | Optional shop names or domains, flagged with `tracked: true`. |
| `location` / `language` | e.g. `United Kingdom` / `English`, `Germany` / `German`. |

### Speed

Searches go through the data provider's standard queue, which keeps the price low: a run usually finishes within 1–3 minutes, also for hundreds of searches.

### Pricing

Pay per event, no subscription:

- **$1 per 1,000 products** ($0.001 each).
- **$0.002 per search** (per product query).
- $0.001 per run start.

Examples: the top 20 products for one search cost $0.023. Tracking 50 products (top 20 each) every day costs about $33 a month.

**Try it for $0.001:** the pre-filled example is answered from a saved snapshot of a real search (rows carry `from_snapshot: true`) and costs only the run start. Change anything and the search runs live.

**Free Apify plan:** the pre-filled example works on any plan. Live searches need a paid Apify plan (any plan), because each one costs real money at the data provider; on the free plan the run returns a `paid_plan_required` row and charges nothing beyond the start.

You can cap the cost of a run with the maximum charge setting. The Actor only starts as many searches as your budget can pay for.

### Good to know

- Prices are what Google Shopping shows for the chosen location at run time.
- For marketplaces (eBay, Walmart Marketplace, Poshmark ...) `seller` is the marketplace name; individual sub-sellers are left out on purpose.
- Error rows carry `error` and `errorMessage` and are never charged.

### Related tools

- [Amazon Product Tracker](https://apify.com/rowfeed/amazon-product-tracker) – Amazon search results and product details per ASIN.
- [Google Search Results API](https://apify.com/rowfeed/google-serp-api) – Google results for any query, with your domain's rank.

Not affiliated with Google.

# Actor input Schema

## `searchQueries` (type: `array`):

What to search Google Shopping for, up to 500 per run.

## `maxProductsPerSearch` (type: `integer`):

How many products per search, 10 to 120.

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

Google Shopping sort order.

## `trackSellers` (type: `array`):

Shop names or domains. Rows from a matching seller get tracked: true, so you can follow your own or competitors' prices and positions.

## `location` (type: `string`):

Country, region or city as Google names it: United States, United Kingdom, Germany, France, Australia ...

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

Search language: English, German, French ...

## Actor input object example

```json
{
  "searchQueries": [
    "sony wh-1000xm6",
    "standing desk",
    "nespresso vertuo"
  ],
  "maxProductsPerSearch": 20,
  "sortBy": "relevance",
  "trackSellers": [
    "Walmart",
    "Best Buy",
    "yourshop.com"
  ],
  "location": "United States",
  "language": "English"
}
```

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("rowfeed/google-shopping-prices").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("rowfeed/google-shopping-prices").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 '{}' |
apify call rowfeed/google-shopping-prices --silent --output-dataset

```

## MCP server setup

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

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/po2XCJJIpfcsa46No/builds/HNbZFpjAEexflmQEq/openapi.json
