
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Collect public Google Shopping products for a search or a results URL, including the title, price, seller, and product URL.
Collect public product listings from Google Shopping for any search or results URL: product title, price, seller, rating, review count, image, position, and product link. Results come back as structured data in seconds, for any country, with no login and no API key of your own.
| Field | Type | What it does |
|---|---|---|
queries | array | Product searches, one per line. Used instead of startUrls when both are set. |
startUrls | array | Google Shopping results page URLs. Used only when queries is empty. |
maxItems | integer | Max products for the whole run. Default 10, max 10,000. |
countryCode | select | Country for search queries (two-letter code, default us). URLs keep their own country. |
location | string | Optional city or region, for example Austin, Texas, United States. |
maxItemsPerQuery | integer | Max products per query or URL. Default 100, max 1,000. |
includeSponsoredResults | boolean | Save sponsored listings too. |
includeComparisonPrices | boolean | Open each product and save other sellers' prices when Google shows them. |
includeExtraProductDetails | boolean | Save the longer product description when Google shows one. |
proxyConfiguration | object | Datacenter proxy by default. Used by the browser mode. |
{
"queries": ["wireless mouse", "usb c cable"],
"maxItems": 200,
"maxItemsPerQuery": 100,
"countryCode": "us"
}
A start URL must be a Google Shopping results page, for example https://www.google.com/search?q=usb+c+cable&udm=28&hl=en&gl=us.
One dataset row per product.
| Field | Description |
|---|---|
productName | Product title. |
price | Price text as Google shows it, currency symbol included. |
merchantName | Seller name. |
productLink | Link to the product on Google Shopping. |
productImage | Product image URL. |
reviewsScore | Average rating out of 5, when shown. |
reviewsCount | Number of reviews, when shown. |
positionOnSearchPage | Position in the results for that search, starting at 1. |
searchKeyword | The query the row came from. |
shoppingId | Google Shopping catalog id. |
sponsored | Present and true for sponsored listings (when requested). |
withoutDiscountPrice | Previous price, when the browser mode finds one. |
productDetails | Longer description when requested and available, or the product attributes (Brand, Color, ...) when Google shows only those. |
merchantLink | Link to the first store offer (a Google redirect to the seller), when extra details or comparison prices were requested. |
offerTitle, deliveryInfo, returnInfo | The store's own product title, delivery and returns text, on comparison-price rows. |
{
"productName": "Logitech M196 Bluetooth Wireless Mouse",
"productLink": "https://www.google.com/search?ibp=oshop&q=wireless+mouse&prds=catalogid:16543511359741567346,...&gl=us&udm=28",
"price": "$12.99",
"merchantName": "Best Buy",
"productImage": "https://encrypted-tbn1.gstatic.com/shopping?q=tbn:...",
"positionOnSearchPage": 2,
"productDetails": "",
"searchKeyword": "wireless mouse",
"shoppingId": "16543511359741567346",
"reviewsScore": "4.8",
"reviewsCount": "5100"
}
Links are shortened in this example.
$0.003 per product saved, which is $3.00 per 1,000 products, plus a small amount of platform usage for compute. A search that matches nothing saves no rows and charges no result fee.
Worked examples: 10 products cost about $0.0303 in total, 100 products about $0.301, and 1,000 products about $3.00, result fees and compute included.
If a search has to switch to browser mode (see Limits), that search also uses browser time, which costs more, usually $0.01 to $0.03 per search.
Is it legal to scrape Google Shopping? The actor reads public results without logging in. You are responsible for how you use the data and for following local law and Google's terms.
Do I need a login, API key, or my own proxy? No. Everything is included.
How many products can I get? Up to 10,000 per run. Google itself lists about 250 to 300 products for a broad search, so use several related queries for more.
What if a field is empty? Rating, review count, and image are left out of a row when Google does not show them for that product. A search that matches nothing finishes without rows and without a result fee.
What if I paste a normal website URL? The run stops and explains that only Google Shopping search URLs are supported.
Can I schedule it or use the API? Yes, through schedules in the console or the API.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
queriesarrayOptionalSearch queries
Product searches, one per line. Queries are used instead of start URLs when both are set. Duplicate lines are searched once.
startUrlsarrayOptionaldefault []Shopping URLs
Google Shopping search URLs, such as a results page copied from the browser. Used only when Search queries is empty.
maxItemsintegerOptionaldefault 10Maximum products
Maximum products to save for the whole run, across all queries.
Narrow which listings are returned.
countryCodeenumOptionaldefault "us"Country
Country for search queries. It sets the Google Shopping site and the proxy exit country. Shopping URLs keep the country already in the URL.
locationstringOptionalLocation
Optional city or region to localize results, for example "Austin, Texas, United States" or "Berlin, Germany". Leave empty to use the whole country.
maxItemsPerQueryintegerOptionaldefault 100Maximum products per query
Maximum products to save for each query or Shopping URL. Google usually lists up to about 250-300 products for a broad search.
Extra product information takes additional requests.
includeSponsoredResultsbooleanOptionaldefault falseInclude sponsored products
Save sponsored listings along with the other products.
includeComparisonPricesbooleanOptionaldefault falseInclude comparison prices
Open each product and save other sellers' prices when Google includes them.
includeExtraProductDetailsbooleanOptionaldefault falseInclude extra product details
Save the longer product description when Google includes one. Comparison prices already include this.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are used first. Choose residential if Google blocks the datacenter pool.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| productName | string | Product title shown on Google Shopping. |
| price | string | Price as shown, including the currency symbol. |
| merchantName | string | Seller named on the product card. |
| productLink | string | Google Shopping product URL. |
| productImage | string | Product image URL. |
| reviewsScore | string | Average rating shown on the card. |
| reviewsCount | string | Number of reviews shown on the card. |
| positionOnSearchPage | integer | Position in this result list, starting at 1. |
| searchKeyword | string | Query or URL search that produced the row. |
| shoppingId | string | Google Shopping catalog id when the page includes one. |
| productDetails | string | Longer description when extra product details are requested. |
| withoutDiscountPrice | string | Previous price when Google shows one. |
| sponsored | boolean | True when the listing is sponsored. |
| merchantLink | string | Link to the first store offer (a Google redirect to the seller) when details or comparison prices are requested. |
| delivery | string | Delivery note when Google shows one. |
| offerCount | string | Number of other offers when Google shows one. |
| offerTitle | string | The store's own product title on a comparison-price row. |
| deliveryInfo | string | Store delivery text on a comparison-price row. |
| returnInfo | string | Store returns text on a comparison-price row. |
| productPageNumber | integer | Offer page number on a comparison-price row. |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One product saved from Google Shopping. | $0.003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/google-shopping-scraper').call({
"queries": [
"wireless mouse"
],
"startUrls": [],
"maxItems": 10,
"countryCode": "us",
"location": "Austin, Texas, United States",
"maxItemsPerQuery": 100,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/google-shopping-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/google-shopping-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Google Shopping products for a search.
One row per store with comparison prices.
Shopping results from the German market.
Products from a pasted Google Shopping link.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.