Google Shopping Ads Scraper avatar

Google Shopping Ads Scraper

Under maintenance

Pricing

from $2.65 / 1,000 shopping ads

Go to Apify Store
Google Shopping Ads Scraper

Google Shopping Ads Scraper

Under maintenance

Collect paid Google Shopping ads shown on Google Search. Export product titles, prices, merchants, positions, promotions, images, and available ad and landing page URLs by keyword, market, language, and device.

Pricing

from $2.65 / 1,000 shopping ads

Rating

5.0

(1)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

7

Monthly active users

4.8 hours

Issues response

7 days ago

Last modified

Share

🛒 Collect paid Google Shopping ads by keyword

Google Shopping Ads Scraper helps PPC teams, ecommerce sellers, and market researchers collect paid product ads shown on Google Search. Add buyer keywords and get product titles, prices, merchants, positions, offers, images, and links for ad research.

📦 Returned data

Each dataset row is one paid Google Shopping ad. It can include product and merchant details, prices, ratings, offers, delivery, links, an image, and an optional ad card screenshot. The Actor does not return organic listings, campaign spend, CPC, clicks, conversions, or Merchant Center data.

When the same source ad appears more than once, the Actor saves its first eligible match. The saved row shows the first keyword and device that found it.

🚀 Running the Actor

  1. Add product or category terms under Search keywords.
  2. Choose a market and Google page language.
  3. Select desktop, mobile, or both.
  4. Set limits, or leave them empty to return all available ads until the source is exhausted.
  5. Turn on screenshots only when you need a PNG of each saved ad card. This makes the run much slower.
  6. Start the Actor and open the default dataset.

Product searches such as office chair or wireless headphones are more likely to show Shopping ads than broad questions.

⚙️ Input

FieldTypeWhat it does
devicestringChecks desktop, mobile, or both Google Search surfaces.
searchQueriesstring[]Sets 1 to 500 product or category keywords.
countrystringSets the Google market with a two-letter country code.
languagestringSets the Google page language with a two-letter code.
locationstringAdds an optional city, state, or postal area.
maxAdsPerQueryintegerLimits ads saved for each keyword. Leave it empty to return all available ads until the source is exhausted.
maxTotalAdsintegerLimits ads saved in the run. Leave it empty to return all available ads until the source is exhausted.
captureScreenshotsbooleanSaves a PNG of each ad card when true; this is much slower.

This example is from a successful default-input run:

{
"device": "desktop",
"searchQueries": [
"wireless headphones"
],
"country": "US",
"language": "en",
"maxTotalAds": 3,
"captureScreenshots": false
}

📊 Output

Optional values are null when Google does not show them or they cannot be found.

FieldTypeWhat it does
idstringStable ID for the saved ad row.
searchQuerystringBuyer keyword that first found the ad.
devicestringDevice where the ad appeared.
positionintegerAd order, starting at 1.
productIdstring or nullGoogle product or offer ID.
productTitlestring or nullProduct title shown in the ad.
pricestring or nullCurrent price text.
priceValuenumber or nullNumber read from the current price.
currencystring or nullCurrency code for shown prices.
originalPricestring or nullPrice text before a discount.
originalPriceValuenumber or nullNumber read from the original price.
discountPercentnumber or nullShown or calculated discount percent.
checkoutPricestring or nullPrice shown after a code or at checkout.
checkoutPriceValuenumber or nullNumber read from the checkout price.
pricePerUnitTextstring or nullPrice per unit or pack text.
pricePerUnitValuenumber or nullNumber read from the unit price.
merchantstring or nullMerchant name shown in the ad.
merchantDomainstring or nullMerchant domain from the landing page.
ratingnumber or nullProduct rating shown in the ad.
reviewCountinteger or nullProduct review count.
storeRatingnumber or nullStore rating shown in the ad.
storeReviewCountinteger or nullStore review count.
saleLabelstring or nullSale badge text.
freeShippingboolean or nullTrue when free shipping or delivery is shown.
priceDropLabelstring or nullPrice-drop badge text.
promotionTextstring or nullPromotion text.
promotionCodestring or nullCoupon or promotion code.
promotionOfferTextstring or nullOffer text next to a promotion code.
promotionDiscountPercentnumber or nullDiscount percent read from a promotion.
topQualityStoreBadgeboolean or nullTrue when Google shows this badge.
deliveryTextstring or nullDelivery, shipping, or pickup text.
landingPagestring or nullMerchant page opened by the ad click.
googleAdUrlstring or nullGoogle ad click or product page URL.
productImagestring or nullProduct image URL or data URL.
adCardScreenshotstring or nullApify storage URL for the PNG when enabled.
detectedLocationstring or nullLocation shown by Google.
countrystringGoogle market code used for the ad.
languagestringGoogle page language code.
scrapedAtstringUTC collection date and time.
{
"id": "Z0Z0T5YhrbugGfq1B5QBJJQhvSh3tqTo",
"productTitle": "2 Sony WH-CH520 Wireless Headphones with Microphones",
"price": "$226.60",
"priceValue": 226.6,
"currency": "USD",
"originalPrice": null,
"originalPriceValue": null,
"discountPercent": null,
"merchant": "Pens.com",
"rating": null,
"reviewCount": null,
"storeRating": null,
"storeReviewCount": null,
"saleLabel": null,
"freeShipping": null,
"priceDropLabel": null,
"promotionText": null,
"promotionCode": null,
"promotionOfferText": null,
"promotionDiscountPercent": null,
"topQualityStoreBadge": null,
"pricePerUnitText": null,
"pricePerUnitValue": null,
"checkoutPrice": null,
"checkoutPriceValue": null,
"deliveryText": null,
"detectedLocation": null,
"searchQuery": "wireless headphones",
"device": "desktop",
"position": 2,
"productId": "8451482:TEC-12916",
"landingPage": "https://www.pens.com/us/p/sony-wh-ch520-wireless-headphones-with-microphone/prd-i25usow1/?utm_medium=cpc",
"googleAdUrl": "https://www.google.com/aclk?sa=L&ai=DChsSEwjB_MumiPmVAxVsiMIIHZZ8H44YACICCAEQCRoCamY&co=1&gclid=EAIaIQobChMIwfzLpoj5lQMVbIjCCB2WfB-OEAQYAiABEgJeNPD_BwE&cid=CAASugHkaJyz7lsLdUIJBM38VnVxhHo2eNKaXFljukkfzPZwdO0riMmhAzfUYdVk-csO-S78yh48K60dkOAytqqv4iXRqP0sgEmrI7eKPrkd18xUDOhzKjdKTtLBcRl7SG0RKThn-0GQ_xQlLYbvbwHj6slviZdL2jjK5nQeSYhJ3T1fM-5DlMmM_ArioVP9ZFpFgOV0MxKv8G1djUeGIls9pNWLH2T7e7abBGjgfpFvmgU6mMMPDt6Wp6uX2Dw&cce=2&sig=AOD64_21guZ5ZyjsokD0TwGBC-d_l8yiKw&ctype=5&q=&ved=2ahUKEwju3camiPmVAxVRNoYAHRgHDcMQ5bgDKAB6BAgMEBI&adurl=",
"productImage": "data:image/webp;base64,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",
"adCardScreenshot": null,
"merchantDomain": "www.pens.com",
"country": "US",
"language": "en",
"scrapedAt": "2026-07-29T23:43:15.267Z"
}

💳 Pricing

This Actor uses pay-per-event pricing with tier-based rates. A Shopping ad event is charged once for each paid ad saved to the dataset. Empty searches do not trigger this event. Apify platform usage may still apply.

🔌 Integrations

Use the Apify API to send input and get dataset rows. You can also schedule runs, export JSON, CSV, or Excel, and use webhooks after runs finish.

❓ FAQ

Why did my keyword return no rows?

Google may not show paid Shopping ads for that keyword, market, language, device, or time. Try a product keyword, another supported market, or a later run.

Can I compare desktop and mobile ads?

Yes. Choose both to check both in one run. Google may show different ads on each device.

Can I target a city or postal area?

Yes. Add the optional location input. detectedLocation stays null unless Google shows location details.

Are landing pages and product images always available?

No. Google does not show every field on every ad, and some click links cannot be resolved. Missing optional fields stay null.

Does this scrape organic Google Shopping results?

No. It collects paid Shopping ads only.

How is this different from the Google Ads API or Transparency Center?

The Google Ads API gives account-owned campaign data. Transparency Center has public advertiser creatives and past ad dates. This Actor checks live paid Shopping product ads shown for buyer keywords on Google Search.

📝 Changelog

  • 0.4: Added optional ad card screenshots, unit-price and store-review fields, multi-device collection in one run, and resumable runs.
  • 0.3: Added checkout price and promotion fields for coupon ads.
  • 0.2: Added desktop and mobile choices, more Shopping ad fields, and lower Shopping ad pricing.
  • 0.1: Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré