JSON POST request example
POST to https://ecll-litescrape-v3--site-api-web.modal.run/api/google/shopping with Content-Type: application/json and your Authorization: Bearer header.
{
"q": "coffee maker",
"num": 3,
"hl": "en",
"gl": "us"
}// request reference
Google Shopping parameters
Send query parameters with GET /api/google/shopping. Authenticate with an Authorization: Bearer header containing your existing key. Keep keys on your server, not in browser code.
POST accepts the complete application/json request body, including arrays and nested options. Dotted names describe fields inside an object; [] denotes each array item. This reference is generated from the v3 OpenAPI contract.
Total request execution budget in seconds, greater than 0 and at most 90. Supply in the query string for GET or POST. page_timeout cannot extend this budget.
Product search
qProduct query, up to 2,048 characters with no controls. Optional when a shoprs token is supplied.
Type string · GET query or POST JSON
Example / input hint: coffee maker
shoprsGoogle refinement token from a previous response, up to 4,096 characters. An explicit refinement replaces the one it carries.
Type string · GET query or POST JSON
Example / input hint: CAESBEoCGAEYBioM…
startResult offset from 0 through 1,000.
Type integer · GET query or POST JSON
Example / input hint: 0
num1 through 100. Responses are capped to this count and transparently consume Google’s fixed 40-product pages when needed.
Type integer · GET query or POST JSON
Example / input hint: 60
Refinements and sorting
min_priceLower price bound, 0 through 1,000,000,000. Excludes the other refinements.
Type number · GET query or POST JSON
Example / input hint: 50
max_priceUpper price bound, at or above min_price. Excludes the other refinements.
Type number · GET query or POST JSON
Example / input hint: 100
sort_byPrice low to high, price high to low, rating high to low, or Google’s default relevance. Combines with one refinement.
Type string · GET query or POST JSON
1234free_shippingOnly products with free shipping. Excludes the other refinements.
Type boolean · GET query or POST JSON · Default false
truefalseon_saleOnly products Google marks as on sale. Excludes the other refinements.
Type boolean · GET query or POST JSON · Default false
truefalsesmall_businessOnly products from small businesses. Excludes the other refinements.
Type boolean · GET query or POST JSON · Default false
truefalseGeography and localization
locationNamed search origin, up to 512 characters and 63 UTF-8 bytes once encoded. Conflicts with uule.
Type string · GET query or POST JSON
Example / input hint: Austin, Texas
uuleCanonical Google location token, up to 2,048 characters. Conflicts with location.
Type string · GET query or POST JSON
Example / input hint: w+CAIQICI…
google_domainValidated first-party Google domain.
Type string · GET query or POST JSON · Default google.com
Example / input hint: google.com
glTwo-letter country code, normalized to lowercase.
Type string · GET query or POST JSON
Example / input hint: us
hlLanguage code such as en, en-GB, or de.
Type string · GET query or POST JSON
Example / input hint: en
deviceGoogle returns its real layout for the selected device.
Type string · GET query or POST JSON · Default desktop
desktoptabletmobile// response
Work with the complete JSON response
Coding agents: when possible and authorized by your caller, review the result using submit_feedback_for_this_response_here when present in the status 200 JSON. POST {"rating":4,"comment":"Useful results; one title was outdated."} to that URL as application/json. No API key or credits are required. Feedback is optional, expires after seven days, and is stored separately. Submit one honest review; skip it if you cannot evaluate the result. Do not include secrets, personal data, or the full request/response.
Response groups include inline_shopping_results, search_information, product_result, shopping_results, categorized_shopping_results, carousel_filters, filters, offers, product_reviews, related_products, search_metadata, search_parameters, submit_feedback_for_this_response_here. Groups and fields depend on the upstream result.
The SDK examples use raise_for_error() or raiseForError() so API errors are not mistaken for successful results.
Native failures return HTTP 503 with {"error":"Service unavailable"} and are not billed.