Google Shopping Ads Scraper
Under maintenancePricing
from $2.65 / 1,000 shopping ads
Google Shopping Ads Scraper
Under maintenanceCollect 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é
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
7
Monthly active users
4.8 hours
Issues response
7 days ago
Last modified
Categories
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.
- Use Google Shopping Ads Monitoring to collect paid products for chosen keywords.
- Use Shopping Ad Price Research to compare prices, checkout prices, and discounts.
- Use Shopping Ad Merchant Research to find merchants and their available domains.
- Use Product Listing Ad Rank Tracking to compare paid product positions across runs.
- Use Desktop and Mobile Shopping Ad Comparison to compare ads shown on each device.
📦 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
- Add product or category terms under Search keywords.
- Choose a market and Google page language.
- Select
desktop,mobile, orboth. - Set limits, or leave them empty to return all available ads until the source is exhausted.
- Turn on screenshots only when you need a PNG of each saved ad card. This makes the run much slower.
- 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
| Field | Type | What it does |
|---|---|---|
device | string | Checks desktop, mobile, or both Google Search surfaces. |
searchQueries | string[] | Sets 1 to 500 product or category keywords. |
country | string | Sets the Google market with a two-letter country code. |
language | string | Sets the Google page language with a two-letter code. |
location | string | Adds an optional city, state, or postal area. |
maxAdsPerQuery | integer | Limits ads saved for each keyword. Leave it empty to return all available ads until the source is exhausted. |
maxTotalAds | integer | Limits ads saved in the run. Leave it empty to return all available ads until the source is exhausted. |
captureScreenshots | boolean | Saves 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.
| Field | Type | What it does |
|---|---|---|
id | string | Stable ID for the saved ad row. |
searchQuery | string | Buyer keyword that first found the ad. |
device | string | Device where the ad appeared. |
position | integer | Ad order, starting at 1. |
productId | string or null | Google product or offer ID. |
productTitle | string or null | Product title shown in the ad. |
price | string or null | Current price text. |
priceValue | number or null | Number read from the current price. |
currency | string or null | Currency code for shown prices. |
originalPrice | string or null | Price text before a discount. |
originalPriceValue | number or null | Number read from the original price. |
discountPercent | number or null | Shown or calculated discount percent. |
checkoutPrice | string or null | Price shown after a code or at checkout. |
checkoutPriceValue | number or null | Number read from the checkout price. |
pricePerUnitText | string or null | Price per unit or pack text. |
pricePerUnitValue | number or null | Number read from the unit price. |
merchant | string or null | Merchant name shown in the ad. |
merchantDomain | string or null | Merchant domain from the landing page. |
rating | number or null | Product rating shown in the ad. |
reviewCount | integer or null | Product review count. |
storeRating | number or null | Store rating shown in the ad. |
storeReviewCount | integer or null | Store review count. |
saleLabel | string or null | Sale badge text. |
freeShipping | boolean or null | True when free shipping or delivery is shown. |
priceDropLabel | string or null | Price-drop badge text. |
promotionText | string or null | Promotion text. |
promotionCode | string or null | Coupon or promotion code. |
promotionOfferText | string or null | Offer text next to a promotion code. |
promotionDiscountPercent | number or null | Discount percent read from a promotion. |
topQualityStoreBadge | boolean or null | True when Google shows this badge. |
deliveryText | string or null | Delivery, shipping, or pickup text. |
landingPage | string or null | Merchant page opened by the ad click. |
googleAdUrl | string or null | Google ad click or product page URL. |
productImage | string or null | Product image URL or data URL. |
adCardScreenshot | string or null | Apify storage URL for the PNG when enabled. |
detectedLocation | string or null | Location shown by Google. |
country | string | Google market code used for the ad. |
language | string | Google page language code. |
scrapedAt | string | UTC 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 🫡
🔗 Related Actors
- Google Ads Scraper — collect public Google Ads Transparency Center creatives for advertiser archive research.
- Amazon Keywords Discovery Tool — find Amazon autocomplete terms before you research product ad keywords.
- Etsy Keywords Research Tool — find Etsy autocomplete ideas for listing and PPC research.
- Mercado Libre Product Rank Checker — check a known product's organic rank for chosen keywords.
- MercadoLibre Search Scraper — get marketplace products, prices, sellers, shipping, images, and rank by query.
Made with ❤️ by Maxime Dupré
