SFOLN

Catalogue / Company & lead intelligence

Google Shopping Scraper

sfoln/google-shopping-search · Ecommerce, Lead generation, Automation On request

Search Google Shopping and get one row per product: title, merchant, URL, numeric price and currency, rating, reviews, delivery, offers and product ID, plus min, median and max price per query. $6 per 1,000 result pages of about 40 products.

About

What it does

Google Shopping Scraper searches Google Shopping and returns one clean row per product: title, merchant, product URL, domain, numeric price and ISO currency, rating, reviews count, delivery info, number of offers, image and Google product ID. Each query also gets a summary row with min, median and max price. Built for price monitoring, competitor research, catalog enrichment and shopping assistants.

Price

Price per delivered record

EventPricePer 1,000Charged for
Google Shopping credit
google-shopping-query
$0.003$3 / 1,000Charged per upstream credit consumed. One Google Shopping page (up to ~40 products) uses 2 credits.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~google-shopping-search/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["wireless earbuds"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-shopping-search"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~google-shopping-search/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Search Google Shopping in the US for "wireless earbuds" and show the 10 cheapest offers with merchant, price and rating.

Input

Input fields

Enter product searches (one per line). Each query writes one row per product plus one `query_summary` row with price statistics.

FieldTypeDefaultMeaning
queries *arrayrequiredProduct queries
Product searches as you would type them into Google Shopping, one per line. Accounts on the Apify free plan can process up to 10 queries per run.
countrystring"us"Country (gl)
Two-letter country code for the shopping market, e.g. us, gb, de. It also decides how a bare "$" price is read (CAD in ca, AUD in au...).
languagestring"en"Language (hl)
Language code, e.g. en, de, fr.
locationstring—Location
Optional free-text location for local prices and delivery, e.g. "Chicago, Illinois, United States".
resultsPerQueryinteger40Products per query
Maximum products per query (1–100). Google Shopping returns up to ~40 products per page, and each page costs 2 google-shopping-query events. Range 1–100.
pageinteger1Start page
Result page to start from. Range 1–50.
maxQueriesinteger1000Max queries
Safety cap on the number of queries processed in this run. Range 1–10000.
concurrencyinteger5Concurrency
How many queries run in parallel. Range 1–10.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified upstream pages to each query_summary row.
Example input
{
  "queries": [
    "wireless earbuds"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstringInput
querystringQuery e.g. "wireless earbuds"
resultTypestringResult type
product | query_summary (one per query, not charged itself) e.g. "product"
rankinteger | nullRank
Overall position: (page − 1) × 40 + the product's place on its page.
positioninteger | nullPosition on page
pageinteger | nullPage
titlestring | nullProduct title
urlstring | nullURL
Merchant product page.
domainstring | nullDomain
merchantstring | nullMerchant
Seller name as shown by Google.
pricestring | nullPrice (display) e.g. "$104.97"
priceValuenumber | nullPrice
Numeric price parsed from `price`. e.g. 104.97
currencystring | nullCurrency
ISO 4217 code parsed from `price`. e.g. "USD"
ratingnumber | nullRating
ratingCountinteger | nullReviews count
deliverystring | nullDelivery
freeDeliveryboolean | nullFree delivery
true when the delivery text offers free delivery without a condition ("Free shipping over $35" is false).
imageUrlstring | nullImage URL
productIdstring | nullGoogle product ID
offersstring | nullOffers (display) e.g. "10+"
offersCountinteger | nullOffers count
Number of sellers ("10+" → 10).
totalProductsinteger | nullProducts
pagesFetchedinteger | nullPages fetched
creditsUsednumber | nullCredits used
query_summary: upstream credits the query used.
creditsChargednumber | nullCredits charged
query_summary: google-shopping-query events charged for the query, before any of its rows was written (equal to creditsUsed unless the maximum cost per run was reached).
merchantsarrayMerchants
minPricenumber | nullMin price
maxPricenumber | nullMax price
medianPricenumber | nullMedian price
countrystring | nullCountry
query_summary: shopping market (Google gl); a bare "$" is read as this country's dollar.
statusstringStatus
ok | not_found | error | skipped_budget | skipped_free_plan
chargedbooleanCharged
true on a product row covered by the google-shopping-query charge of its results page; the query_summary row is never charged itself (see creditsCharged).
chargedEventstringCharged event
chargedCountintegerEvents charged
Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
sourcestringData source
fetchedAtstringFetched at
Example record
{
  "input": "nike air max",
  "query": "nike air max",
  "resultType": "product",
  "rank": 1,
  "position": 1,
  "page": 1,
  "title": "Nike Air Max 97 GS 'White Metallic Silver'",
  "url": "https://www.nike.com/t/air-max-97-big-kids-shoes-fQk07c/921522-104",
  "domain": "nike.com",
  "merchant": "Nike",
  "price": "$104.97",
  "priceValue": 104.97,
  "currency": "USD",
  "rating": 4.5,
  "ratingCount": 1,
  "delivery": "$8.00 shipping",
  "freeDelivery": false,
  "imageUrl": "https://encrypted-tbn2.gstatic.com/shopping?q=…",
  "productId": "4195027484078128635",
  "offers": "10+",
  "offersCount": 10,
  "status": "ok",
  "charged": true,
  "chargedEvent": "google-shopping-query",
  "source": "serper",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents