Google Ads Scraper avatar

Google Ads Scraper

Pricing

from $8.00 / 1,000 search-completeds

Go to Apify Store
Google Ads Scraper

Google Ads Scraper

Scrapes the Google Product Listing Ad (PLA) carousel for a list of search terms and filters the products by store name.

Pricing

from $8.00 / 1,000 search-completeds

Rating

0.0

(0)

Developer

Ben Hichem

Ben Hichem

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Google Products (PLA) Scraper

Scrape the Google Product Listing Ad (PLA) carousel — the row of shopping ads at the top of Google search results — for any list of search terms, and filter the products down to the stores you care about. For each matching product you get the product name, the store, and the destination store link, delivered as structured JSON you can download as JSON, CSV, or Excel or pull straight from the Apify API.

This Actor is a headless, cloud-native port of a standalone Puppeteer project. It uses puppeteer-real-browser with a real (headful, under a virtual display) Chrome to get past Google's bot checks, and runs on the Apify platform so you get scheduling, proxy rotation, monitoring, and API access for free.

Why use it?

  • Competitive shopping research — see which products a given store is running as shopping ads across many keywords.
  • Price and assortment monitoring — track how a store's PLA presence changes over time by scheduling repeat runs.
  • Store-filtered by design — instead of a flood of every advertiser, you get only the stores you list in storeNames.

How to use it

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Enter your Search queries as a comma-separated list, e.g. wireless earbuds, running shoes.
  3. Optionally set Store names to keep to the stores you care about (e.g. Best Buy, Dyson). Matching is a case-insensitive substring, so dyson matches Dyson Official. Leave empty to keep every product.
  4. (Recommended) Set Proxy configuration to Residential — Google blocks datacenter IPs.
  5. Optionally set a Region, and tune Minimum successful queries (set it low, e.g. 2, for a quick test).
  6. Click Start. Watch results stream into the Dataset / Output tab.

Input

FieldTypeRequiredDefaultDescription
searchQueriesstringComma-separated search terms. One Google search per term. Empties are dropped; if nothing remains the run fails. High commercial-intent terms ("buy ...") are far more likely to show shopping ads.
storeNamesstring[][]Case-insensitive substring filter against the store name on each card (e.g. Best Buy). Empty = keep every product.
regionstring(none)Two-letter country code. Sets the gl search param, the proxy country, and Accept-Language in sync.
retryLimitinteger3Retries per query after a block. Each retry relaunches the browser with a fresh proxy.
retryDelayMsinteger1000Delay (ms) before each retry.
minSuccessfulQueriesinteger100The Actor keeps cycling the query list until this many queries complete cleanly.
maxItemsinteger100Cost cap. Maximum products pushed to the dataset. The run stops as soon as this many rows are collected (or once minSuccessfulQueries clean queries complete — whichever comes first).
proxyConfigurationobject{ "useApifyProxy": false }Proxy settings. Residential strongly recommended.

Looping behavior

Unlike a one-pass scraper, this Actor repeats your searchQueries — wrapping back to the start of the list — until it has accumulated minSuccessfulQueries clean completions. A page that loads cleanly but matches zero products still counts as a success. A query that exhausts all its retries is skipped for now and may be retried on a later cycle. Set minSuccessfulQueries low for testing (e.g. 2) and higher for production sweeps.

Thin proxy pools: for regions with few residential proxies available, raise retryLimit so a run can push through transient blocks.

Output

Each matched product is pushed to the dataset as one flat object:

{
"searchQuery": "buy dyson v15 vacuum",
"productName": "Dyson V15 Detect",
"price": "$849.99",
"storeName": "Dyson Official",
"storeLink": "https://www.google.com/aclk?sa=L&ai=..."
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data fields

FieldDescription
searchQueryThe search term this product was found under.
productNameThe product title from the shopping ad card.
priceThe displayed price, e.g. $849.99.
storeNameThe store shown on the ad card, e.g. Best Buy.
storeLinkThe ad-click (/aclk) destination URL for the product.

Cost estimation

This Actor is billed pay-per-event: you pay a flat price per search, with unlimited products per search included. A search that returns 25 products costs the same as one that returns 3 — you're never penalized for high-yield searches, and you never pay a per-product fee. A search that happens to show no shopping ads is still one completed search.

Two settings bound the run: minSuccessfulQueries caps the number of searches (and therefore the number of billed events), and maxItems caps the number of products collected — whichever is hit first ends the run. To bound your bill before pressing Start, just multiply your search count by the per-search price. You can also set a max total charge on the run. Start small to confirm your numbers, then scale up.

FAQ, limitations, and support

  • Why are results empty? Almost always datacenter-proxy blocking. Switch proxyConfiguration to Residential and/or raise retryLimit.
  • Why do I need a proxy at all? Google aggressively rate-limits repeated searches from one IP; the looping behavior makes this more likely.
  • Selectors may drift. Google rotates the obfuscated markup behind the PLA carousel. Extraction anchors on the shopping ad-click (/aclk) links, which is more stable than class names; if a run returns zero products consistently on terms you know have shopping ads, the extraction may need re-deriving.
  • Store matching is a case-insensitive substring. A storeNames entry of best buy matches Best Buy; dyson matches Dyson Official. Leave it empty to keep every product.
  • Legality. Scrape responsibly and in line with Google's Terms of Service and applicable law. This Actor collects only publicly visible ad data.
  • Support / feedback. Use the Issues tab on the Actor page.