One endpoint, products as clean JSON, saved to CSV.
Scraping Shopping yourself means driving a browser, dodging blocks, and parsing a product grid that keeps changing. Here you send one HTTP request and read JSON. Three steps:
Create a free account. Try it free, no card needed.
Copy your API key. It is on the dashboard right after signup.
Run the code below. Start with the curl test, then the Python script.
First a quick test with curl:
Then the same call in Python with the requests library. Install it with pip install requests, drop in a key, and run. The products live under the shopping key in the response:
Here are the first two products that came back, shown as CSV so they drop straight into Sheets or a spreadsheet:
Change q to any product search you would type into the Shopping box, like 4k monitor or office chair.
One call returns a full page of products in the order Google ranks them. To collect more, pass a page number and loop, gathering each page into one list:
Each product carries title, price, store, star rating, rating count, a stable productId, a link to its Google product page, an imageUrl thumbnail, and its rank via position. The first product as CSV:
Or the same record as JSON, as the API returns it, with the long image URI shortened for display:
Price is a formatted string with its currency symbol, so store it as text. imageUrl is usually a gstatic URL; rows near the top sometimes carry an inline data:image URI, cut short above for display.
condition is usually null. Read optional fields with item.get("condition") so a missing value never crashes your loop.
You can build a Shopping scraper with a headless browser and a parser, and plenty of tutorials show how. The trade is maintenance. Here is the difference in practice.
| Writing it yourself | CrustAPI | |
|---|---|---|
| Setup | Install a headless browser, handle blocks and grid changes | One GET request, no browser |
| Output | Parse the HTML yourself; fields break when the layout changes | Clean JSON from the API, or the same rows as CSV |
| Maintenance | Fix the scraper each time the page changes | We keep it working |
| Free tier | Free, but you pay in time and blocked requests | $6 of free usage each month |
| Cost model | Server, proxy, and developer time | Pay per successful search, however many products come back; empty searches free |
| Storing the data | Yours to manage | No storage limits. Export to CSV or a database |
Each successful shopping search is billed once at your Google Search rate, however many products come back. Empty searches cost nothing. Paid funds never expire.
| Deposit | Google Search / 1,000 requests | Maps / 1,000 businesses | LinkedIn reads / 1,000 requests | People, Jobs, Refresh / 1,000 units |
|---|---|---|---|---|
| $10+ | $1.00 | $1.96 | $6.00 | $1.96 |
| $149+ | $0.76 | $1.49 | $4.50 | $1.49 |
| $549+ | $0.56 | $1.10 | $3.30 | $1.10 |
| $1,999+ | $0.41 | $0.80 | $2.45 | $0.80 |
| $6,500+ | $0.33 | $0.65 | $1.95 | $0.65 |
| $27,500+ | $0.28 | $0.55 | $1.65 | $0.55 |
| $50,000+ | $0.26 | $0.50 | $1.50 | $0.50 |
| $100,000+ | $0.20 | $0.40 | $1.50 | $0.40 |
Every eligible account gets $6 of free usage monthly. Each deposit keeps its prices until spent; paid funds never expire. People and Jobs bill per successful search, Refresh per accessible profile. Full profiles in People use the read rate per full profile. See all billing details.
Larger deposits unlock lower endpoint prices. Each deposit keeps its prices until spent. See the full deposit table on the pricing page. Prices in USD, ex-tax.
Because the response is plain JSON, Python's built-in csv module writes it to a file in a few lines. No extra libraries. This reads every product from the search and writes one row each:
Open products.csv in Sheets or Excel and you have a finished price list. Swap the query, run it again, and append to build a bigger catalog.
Related: Google Shopping API · Google Shopping Scraper · Google Search API · Scrape Google News with Python · API docs
When a different tool fits better: listing your own products, managing inventory, or a contract with a formal SLA are Google Merchant products, not scraping. This endpoint returns the public product results anyone sees in the Shopping tab, which is what most price research and market work needs, but it is not the official Content API for Shopping.
No. With the CrustAPI endpoint you send one HTTP request with the requests library and get clean JSON back. There is no browser to drive and no HTML to parse, so the code above is the whole scraper.
Title, price, the store selling it, a star rating, the number of ratings, a stable product id, a direct link to its Google product page, a thumbnail image on nearly every row, and its rank in the results. Enough to build a price list or catalog without a second call.
Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims, while Google's Terms restrict automated access that violates instructions like robots.txt. What you get is the same public product results anyone sees in the Shopping tab.
Pass a page number in the request and loop, collecting each page into one list. The paging example above shows the exact code. You pay the applicable price per successful search, however many products come back, and an empty search costs nothing.
The response is plain JSON, so Python's built-in csv module writes it to a file in a few lines. The Save to CSV section above has the exact code, no extra libraries.
Yes. Try it free, no credit card, and paid funds never expire. That is enough to pull several full result pages while you build.
the free plan covers a real search. Run one query and look at the JSON that comes back.
Try for free