HasData
Scraper API

Google Shopping Results API

with products, prices, and seller ratings

Search Google Shopping and get the whole grid as clean JSON. One request returns every listing with title, price, seller, rating, and delivery across the sponsored, organic, and comparison blocks, with geo-targeting handled for you.

SUCCESS
99.9%

of requests succeed

P50
3.9s

median response

P95
8.6s

95% finish faster

PRICE
$0.83

per 1k shopping searches at volume

Stop maintaining scrapers

Google reshuffles Shopping constantly. Your parser shouldn't care.

  • Prices in a dozen currencies and formats
  • Sponsored and organic listings mixed together
  • Sellers and ratings nested per product
  • Immersive product pages behind tokens
  • Re-parse the grid after each redesign
One integration commit replaces a backlog you’ll never finish.
scraper | git log
hotfix: markup changed, nulls in price
fix: sponsored listing parsed as organic
fix: currency symbol broke extractedPrice
chore: rotate proxies for shopping runs again
fix: seller rating misparse on multi-offer
hotfix: thumbnail URLs stopped resolving
fix: pagination token changed past page one
chore: refresh residential IPs by country
fix: delivery string format switched by locale
fix: retry storm on rate limits
hotfix: markup changed, nulls in price
fix: sponsored listing parsed as organic
fix: currency symbol broke extractedPrice
chore: rotate proxies for shopping runs again
fix: seller rating misparse on multi-offer
hotfix: thumbnail URLs stopped resolving
fix: pagination token changed past page one
chore: refresh residential IPs by country
fix: delivery string format switched by locale
fix: retry storm on rate limits
hotfix: markup changed, nulls in price
fix: sponsored listing parsed as organic
fix: currency symbol broke extractedPrice
chore: rotate proxies for shopping runs again
fix: seller rating misparse on multi-offer
hotfix: thumbnail URLs stopped resolving
fix: pagination token changed past page one
chore: refresh residential IPs by country
fix: delivery string format switched by locale
fix: retry storm on rate limits
hotfix: markup changed, nulls in price
fix: sponsored listing parsed as organic
fix: currency symbol broke extractedPrice
chore: rotate proxies for shopping runs again
fix: seller rating misparse on multi-offer
hotfix: thumbnail URLs stopped resolving
fix: pagination token changed past page one
chore: refresh residential IPs by country
fix: delivery string format switched by locale
fix: retry storm on rate limits
feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/google/shopping' \
	--data-urlencode 'q=Coffee' \
	--data-urlencode 'location=Austin,Texas,United States' \
	--data-urlencode 'deviceType=desktop' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
q * Search Query
Specify the search term for which you want to scrape the SERP.
location Location
Google canonical location for the search.
uule Encoded Location
The encoded location parameter.
domain Domain
Google domain to use. Default is google.com.
gl Country
The two-letter country code for the country you want to limit the search to.
hl Language
The two-letter language code for the language you want to use for the search.
tbs Advanced Search Parameters
This parameter supports various filters that can be combined by separating them with a comma. Here are examples of these filters: - Specific Time Range: `cdr:1,cd_min:10/17/2018,cd_max:3/8/2021` - Filter results to show only those within the defined date range. - Sort by Date: `sbd:1` - Results are sorted by date, from the most recent to the oldest. - Sort by Relevance: `sbd:0` - Results are sorted by relevance to the search query. - Sites with Images: `img:1` - Only show results from webpages that contain images. Quick Date Range (qdr): - `qdr:h` - Show results from the past hour. - `qdr:d` - Limit results to the past day. - `qdr:w` - Filter results from the week. - `qdr:m` - Display results from the past month. - `qdr:y` - Show results from the past year. - `qdr:h10`, `qdr:d10`, `qdr:w10`, `qdr:m10`, `qdr:y10` - Specify a number to show results from the last 10 hours, days, weeks, months, or years respectively. These filters enhance the control over search results, allowing for precise retrieval of information based on specific criteria.
shoprs Search Filter ID
Specifies the helper ID for applying search filters. Must be used with the updated `q` parameter, which includes the selected filter (e.g., Coffee sale). To apply filters, use the `hasdata_link` from `filters[index].options[index]` in the JSON. Apply multiple filters by following each `hasdata_link` one by one. To remove a filter, follow its specific `hasdata_link`.
start Result Offset
This parameter specifies the number of search results to skip and is used for implementing pagination. For example, a value of 0 (default) indicates the first page of results, 40 refers to the second page, and 80 to the third page.
deviceType Device
Specify the device type for the search.
TRY ALL 10 PARAMETERS FREE
AI Integration

Add Google Shopping API with your AI agent

Paste a ready-to-use integration prompt into your coding agent. It includes API references, setup requirements, and testing instructions.

google-shopping-integration.md
# Integrate HasData Google Shopping API

## Task

Add the requested product search, shopping visibility or listing comparison workflow using HasData Google Shopping API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Implement only the requested workflow. If it is unclear, ask which query, market and product research workflow the application needs.
Keep the integration as REST API calls; do not replace it with an MCP connection or a custom Google scraper.

## References

Read the endpoint documentation before implementing:

- Product search, localization and filters: https://docs.hasdata.com/apis/google-serp/shopping.md
- Optional detailed product lookup: https://docs.hasdata.com/apis/google-serp/immersive-product.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt

Start with the endpoint reference. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.

## Optional agent skill

If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:

```sh
npx skills add hasdata/agent-skills --skill hasdata
```

Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.


## Implementation

- Use `GET https://api.hasdata.com/scrape/google/shopping` with required `q`. Use the project’s HTTP client to encode query parameters.
- Expose only requested documented options such as `location`, `gl`, `hl` and `deviceType`. Preserve query, market, language and device context with saved observations. Do not invent a currency-conversion parameter.
- Read `shoppingResults` separately from optional `inlineShoppingResults`, `filters` and `refineSearchFilters`. Missing blocks, ratings, delivery text or product tokens are valid; do not promise a fixed result count.
- Preserve `productId` as a string. Product IDs, matching titles and shared Google groupings do not prove identical pack sizes, models, condition or seller offers.
- Keep display prices and numeric `extractedPrice` together. Validate currency, variants and quantities before comparisons; listed prices are not final checkout totals. Price histories, alerts and currency normalization belong to the application.
- For filters, use the returned camelCase `hasdataLink` and its query context. The prose docs call it `hasdata_link`; inspect the actual response and do not silently assume snake_case. Do not combine opaque `shoprs` values using invented rules.
- Before following any returned API link, require the exact `https://api.hasdata.com` origin and the intended endpoint path. Do not forward credentials to Google, merchants or arbitrary redirects.
- For requested pagination, use only documented parameters and inspect `pagination.next`. This is a Google URL, not an authenticated API endpoint. Prevent repeated-page loops and stop if no new results are returned; never promise an exhaustive inventory.
- Only identify sponsored listings from explicit returned labels. Do not infer ad status from position, product category or the presence of a shopping filter.
- Only if detailed product information is requested, send a returned `immersiveProductPageToken` as `pageToken` to `GET https://api.hasdata.com/scrape/google/immersive-product`. This is a separate API request, not included seller detail. Never manufacture or truncate tokens.
- Handle timeouts and documented errors before reading data. Keep requests server-side. If no suitable runtime exists, discuss options before changing the architecture.

## Credentials

- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, Google, retailer links, media links, or redirects to another origin.


## Verification

- Add mocked tests for query encoding, market context, optional fields, large string IDs, duplicate listings, currency and pack-size mismatches, safe link handling, missing product tokens, repeated pagination, empty results and errors. Include a usage example and run local checks.
- With a configured key and explicit user approval, including approval already given for this task, make one live verification request with agreed inputs. A successful Google Shopping API request consumes 10 credits.
- Verify the requested Shopping search only. Do not automatically expand product tokens or follow filters and pagination.
- Validate the HTTP status, documented API status, and response structure. An empty result set can be valid.
- Do not automatically repeat paid requests to obtain a nonempty response.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.

Use Cases

Build with Google Shopping API

Build price comparison, product discovery and retail intelligence tools with structured Google Shopping results.

Compare listed product prices

Build price comparison tools from Google Shopping listings, keeping retailer, product and currency context alongside each price.

  • Maud's Medium Roast Coffee Pods
  • Product ID: 16423636685550094143
Listings grouped under one Google product ID Prices to validate
Listings grouped under one Google product ID — Prices to validate
RetailerListed price
SERA$74.24
Maud's$14.45
Maud's$27.90
API data
shoppingResults[].titleshoppingResults[].productIdshoppingResults[].sourceshoppingResults[].extractedPrice
Your app
Match pack sizes, variants and conditions before comparing offers. Save repeated observations to calculate price changes and trigger alerts.
Explore response fields

These listings share a Google product ID, but identical pack sizes are not confirmed. Listed prices are not checkout totals.

Track visibility for product searches

Track Google Shopping positions for target keywords to understand where your products and competing listings appear.

  • Coffee
  • Austin, TX
  • United States
Selected positions in one saved search Search position snapshot
Selected positions in one saved search — Search position snapshot
PositionProduct
11Maud's Decaf Dark Medium Roast Coffee Pods
12Maud's Purely Organic Dark Roast Coffee Pods
19Intelligent Blends Caramel Macchiato Coffee Pods 32ct
API data
shoppingResults[].positionshoppingResults[].titleshoppingResults[].productId
Your app
Store query, location, device and observation time with each result. Calculate position changes from comparable saved searches.
Explore response fields

Positions describe this returned grid, not an organic-only ranking. Historical changes and share of visibility are calculated by your application.

Shortlist products for market research

Use product ratings and review counts to shortlist items for assortment research and ecommerce catalog expansion.

  • Coffee
  • Austin, TX
  • United States
Selected products with rating evidence Product research shortlist
Selected products with rating evidence — Product research shortlist
ProductRatingReviews
Maud's Purely Organic Dark Roast Coffee Pods579
Intelligent Blends Caramel Macchiato Coffee Pods 32ct5145
Maud's Holiday Blend Coffee Pods Variety Pack 42 ct 6 Assorted Flavors4.5663
API data
shoppingResults[].titleshoppingResults[].ratingshoppingResults[].reviewsshoppingResults[].immersiveProductPageToken
Your app
Apply your own selection criteria, then request detailed seller offers or specifications for products with an immersive product token.
Explore response fields

Ratings are not sales volume or demand forecasts. Detailed product lookups use a separate Google Immersive Product API request.

Find retailers appearing in your category

Identify sellers in Google Shopping results to research retail coverage, distribution opportunities and competing offers.

  • Coffee
  • Austin, TX
  • United States
Selected retailer listings Retailers found in results
Selected retailer listings — Retailers found in results
RetailerProduct
Maud'sIntelligent Blends Caramel Macchiato Coffee Pods 32ct
eBayMaud's Decaf Espresso Dark Roast Coffee Pods
Blue Bottle CoffeeBlue Bottle Coffee Kitchen New Blue Bottle Coffee Craft Instant Espresso Multiserve
API data
shoppingResults[].sourceshoppingResults[].titleshoppingResults[].position
Your app
Group listings by seller in your application, review relevant offers and verify business identity before adding retailers to your research list.
Explore response fields

Seller labels identify returned listings, not verified distributors or contact records. Coverage is limited to the searches you collect.

Response

Every block, one predictable schema

Inspect product listings, refine the search, and find the next results page. Available blocks depend on the query.

shoppingResults.json
[
  {
    "position": 1,
    "title": "Apple MacBook Air M1 Chip",
    "productId": "1434325277585982111",
    "immersiveProductPageToken": "eyJyZHMiOiJQQ18xMTUyMzM4MDc3ODU0NDE0ODQx...",
    "price": "$419.00",
    "extractedPrice": 419,
    "source": "Walmart - Seller",
    "rating": 4.6,
    "reviews": 18000,
    "delivery": "Free delivery",
    "extensions": ["LOW PRICE"],
    "thumbnail": "https://files.hasdata.com/1a268bee-f995-47dc-bf45-4db0e738eba2.webp"
  }
]
Fields in shoppingResults
position number

Rank within the shopping grid

title string

Product name as listed

productId string

Google's product identifier

price / extractedPrice string / number

Display price and its numeric value

source string

Seller or retailer behind the listing

rating / reviews number

Average rating and review count

delivery string

Delivery terms shown on the card

extensions string[]

Badges like LOW PRICE or SALE

immersiveProductPageToken string

Token to pull the full product page

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
Free forever
100 shopping searches / month
1,000 credits / month
1 concurrent request
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Community support
Start free
Startup
$49 /mo
$2.46 / 1k shopping searches
20K shopping searches / month
200K credits / month
5 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Email support
Get started
Basic
Recommended
$99 /mo
$0.99 / 1k shopping searches
100K shopping searches / month
1M credits / month
15 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.69 / 1k shopping searches
3M credits / month
50 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Dedicated account manager
Get started
Monthly shopping search volume
Free 100K 500K 2M
Best fit
Basic
shopping searches / mo
100K
Concurrency
15
$ / 1k shopping searches
$0.99
$99 /mo
Get Started
Enterprise
Custom price based on required volume

Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
Security review
Security questionnaire, DPA, and controls overview.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first shopping search
is minutes away

100 shopping searches free · no credit card