# Apify Ecommerce Intelligence

> Build an ecommerce intelligence feed from Google Shopping with the Apify Google Shopping API Actor (johnvc/google-shopping-api-google-shopping-products-prices-deals). Watch the products and competitors that matter, and log seller, price, extracted_price, extracted_old_price, tag, rating, and reviews per listing over time for price monitoring, deal and discount tracking, repricing inputs, and market scans. Filter to on_sale or free_shipping listings, bound each poll by pages, and key history on product_id plus source. Use when the user wants ecommerce intelligence, competitor price monitoring, price tracking across retailers, google shopping monitoring or tracking, deal alerts, MAP monitoring, or a market view of who sells a product and at what price. Pay-per-page billing, MCP-ready for Claude and other AI agents.

- Skill: `johnisanerd/apify-ecommerce-intelligence` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add johnisanerd/apify-ecommerce-intelligence`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnisanerd/apify-ecommerce-intelligence/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: johnisanerd (https://skillmd.com/u/johnisanerd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/johnisanerd/apify-ecommerce-intelligence

---


# Ecommerce Intelligence: Competitor Prices and Deals From Google Shopping

Turn Google Shopping into an ecommerce intelligence feed. One bounded run per watched product returns every listing on the page with seller, current price, old price when on sale, rating, and review count, ready to log as a price history and compare across retailers.

## When to use this skill

- The user wants ecommerce intelligence: who sells a product, at what price, and how that moves.
- They want competitor price monitoring, price tracking across retailers, or repricing inputs.
- They want deal, discount, or MAP (minimum advertised price) monitoring for a watchlist.
- They ask for "google shopping monitoring", "google shopping tracking", or "price monitoring".

Not for: one-off bulk exports of a single search (use the scrape-google-shopping skill), deep per-seller offers and specs for one product (use the Google Immersive Product API), or cheap high-volume price checks with fewer fields (use the Google Shopping Lite API).

## What each poll returns (one dataset item per page, about 40 listings each)

Products sit in the `shopping_results` array of each page item. The intelligence fields:

- Identity: `product_id` (the tracking key), `title`, `position`, `product_link`, `thumbnail`, `immersive_product_page_token` (hand it to the Google Immersive Product API for per-seller offer depth).
- Price signals: `price` (display string), `extracted_price` (number), and on sale items `old_price`, `extracted_old_price`, `tag` (badge such as "62% OFF"), `extensions`.
- Market signals: `source` (seller name), `multiple_sources` (boolean, several sellers list it), `rating`, `reviews`, `delivery`, `second_hand_condition` (used or refurbished listings).
- Poll metadata: `search_timestamp` (the history timestamp), `search_parameters`, `search_metadata` (`results_count`, `pages_processed`), `page_number`.

## Prerequisites

- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).

## The Actor

- Store page: https://apify.com/johnvc/google-shopping-api-google-shopping-products-prices-deals?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID: `johnvc/google-shopping-api-google-shopping-products-prices-deals`
- Pricing: pay per page of results processed, plus a small per-run setup fee (see `references/gotchas.md`).

## Run it with the Apify CLI

Poll one watched product, one page, US market:

```bash
apify actors call "johnvc/google-shopping-api-google-shopping-products-prices-deals" -i '{"q":"dyson airwrap","gl":"us","hl":"en","max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-ecommerce-intelligence \
  2>/dev/null
```

Watch only discounted listings in a price band, cheapest first:

```bash
apify actors call "johnvc/google-shopping-api-google-shopping-products-prices-deals" -i '{"q":"robot vacuum","gl":"us","hl":"en","on_sale":true,"min_price":100,"max_price":400,"sort_by":1,"max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-ecommerce-intelligence \
  2>/dev/null
```

Read a past run's items later, for example from a scheduled run:

```bash
apify datasets get-items <DATASET_ID> --format json --user-agent apify-awesome-skills/apify-ecommerce-intelligence 2>/dev/null
```

Every call carries the three flags this repo expects: `--json` (or `--format json`), `--user-agent apify-awesome-skills/apify-ecommerce-intelligence`, and `2>/dev/null`.

## Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

`https://mcp.apify.com/?tools=actors,docs,johnvc/google-shopping-api-google-shopping-products-prices-deals`

Then ask, for example: "Check which retailers sell the Dyson Airwrap right now, who is cheapest, and which listings are on sale." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

## Workflow

1. Define the watchlist. One Actor input per watched item: a product query (`q`), the market (`gl`, `hl`, and `google_domain` for non-US), and optional restrictions (`on_sale` for a deal watch, `min_price` plus `max_price` for a band).
2. Bound each poll. Keep `max_pages` at 1 or 2 per poll; the first page carries the listings buyers actually see, and `max_pages` is the hard cost cap.
3. Estimate cost per poll and per month, then confirm with the user. See `references/gotchas.md`.
4. Run one poll per watchlist item and flatten: one row per listing with `search_timestamp`, `product_id`, `source`, `extracted_price`, `extracted_old_price`, `tag`, `rating`, `reviews`, `product_link`.
5. Build the history. Append rows to your store keyed on `product_id` plus `source`; a price change for the same key between polls is the signal for alerts, repricing, or a MAP flag (any `extracted_price` below your floor).
6. Serve the result. Deliver a comparison table, a cheapest-seller answer, or a deal digest. For recurring intelligence, wrap the same inputs in an Apify Schedule or a cron job.

## Inputs

- `q` (string, required): the watched product, brand, or category
- `gl`, `hl`, `google_domain` (strings): market localization, set together per country
- `location` (string): optional geographic refinement
- `min_price` plus `max_price` (numbers): price band in the local currency
- `sort_by` (integer): 1 = price low to high, 2 = price high to low
- `on_sale` (boolean): deal-watch mode, discounted listings only
- `free_shipping` (boolean): restrict to free-shipping listings
- `max_pages` (integer, default 1): pages per poll, the cost bound
- `device` (enum: desktop, tablet, mobile): prices can differ slightly by device

## Cost

Billing is per page processed (about 40 listings) plus a small one-time setup fee per run, so a one-page poll is a few cents. A 20-product watchlist polled daily at one page each runs about $0.80 per day. Estimate with the live prices in `references/gotchas.md` before scheduling.

## Honest limits

- This is a polled snapshot, not a push feed: freshness is your poll interval, and history only accumulates in your own store.
- Coverage is what Google Shopping ranks for the query; a seller missing from the page is not proof they do not sell the product.
- `multiple_sources` is a boolean flag, not a seller list; per-seller offer depth for one product needs the Google Immersive Product API.
- `product_link` points at the Google Shopping product page, not always the retailer's own site.
- Sale fields (`old_price`, `tag`) appear only when Google marks the listing as discounted.

## Troubleshooting

- Same product, different `product_id` across polls: match on normalized `title` plus `source` as a fallback key.
- A watched seller disappeared from results: normal ranking movement; widen to `max_pages: 2` before concluding they delisted.
- `on_sale` poll returns nothing: no discounted listings right now for that query; it is a valid empty result.
- Prices look off for a non-US market: set `gl`, `hl`, and `google_domain` together.

See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.

## Related product-data Actors

- Google Shopping Lite API, lower-cost quick price lookups: https://apify.com/johnvc/google-shopping-lite-api?fpr=9n7kx3&fp_sid=skillrepo
- Google Immersive Product API, full product-page detail per listing: https://apify.com/johnvc/google-immersive-product-api?fpr=9n7kx3&fp_sid=skillrepo
- Google Images API, clean product image URLs: https://apify.com/johnvc/google-images-api?fpr=9n7kx3&fp_sid=skillrepo

