logo

Plugins

Use structured scraping plugins with the Async API for bulk data extraction

Plugins let you extract structured data from supported platforms using the Async API. Instead of sending raw URLs, you specify a plugin key and parameters for each task; the API handles session management, geo-targeting, and response parsing automatically.


Request Structure

POST https://q.scrape.do/api/v1/jobs
X-Token: YOUR_TOKEN
Content-Type: application/json
{
  "Plugin": {
    "Key": "<plugin_key>",
    "Params": [
      { "param1": "value1", "param2": "value2" },
      { "param1": "value3", "param2": "value4" }
    ]
  },
  "GeoCode": "us",
  "WebhookURL": "https://example.com/webhook",
  "WebhookHeaders": { "Authorization": "Bearer your-token" }
}

Targets and Plugin are mutually exclusive. Using both returns 400 Bad Request. Each entry in Params becomes one task in the job. Maximum 1000 params per job.


Supported Plugins

Use the page sidebar to jump to a specific plugin's section.

KeyPlatformOutputDescription
amazon/pdpAmazonStructured JSONProduct Detail Page
amazon/searchAmazonStructured JSONSearch results
amazon/offer-listingAmazonStructured JSONAll seller offers
walmart/storeWalmartHTML / JSONStore-scoped request
lowes/storeLowesHTML / JSONStore-scoped request
google/searchGoogleStructured JSONSERP results
google/search/ai-modeGoogleStructured JSONAI Mode (udm=50) response
google/search/ai-overviewGoogleStructured JSONAI Overview follow-up
google/shoppingGoogleStructured JSONShopping product results
google/shopping/productGoogleStructured JSONFull product page (first ~5 sellers)
google/shopping/product/storesGoogleStructured JSONNext batch of sellers (continuation)
google/maps/searchGoogleStructured JSONMaps places list
google/maps/placeGoogleStructured JSONMaps place details
google/maps/reviewsGoogleStructured JSONPaginated place reviews
google/hotelsGoogleStructured JSONHotels listings
google/hotels/detailGoogleStructured JSONPer-vendor offer shelf for one property
google/flightsGoogleStructured JSONFlights itineraries + price insights
google/newsGoogleStructured JSONNews articles, topics, clusters
google/trendsGoogleStructured JSONTrends data for a keyword
google/trendingGoogleStructured JSONCurrently trending searches
google/youtubeGoogleStructured JSONYouTube search results
google/play-storeGoogleStructured JSONPlay Store app search
google/play-store/productGoogleStructured JSONPlay Store app detail page
google/play-store/reviewsGoogleStructured JSONPlay Store app reviews
chatgpt/chatOpenAIStructured JSONChatGPT reply for a prompt
sheinSheinRaw HTMLRendered Shein product page
trip/searchTrip.comStructured JSONFlight search itineraries
trip/detailTrip.comStructured JSONFull fare detail for a policy

Amazon Plugins

amazon/pdp - Product Detail Page

Returns structured JSON with price, images, rating, buy box, reviews, BSR, and more.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "amazon/pdp",
      "Params": [
        { "asin": "B0CQMTCR9T", "zipcode": "32095", "geocode": "us" },
        { "asin": "B0DFK5Y3PQ", "zipcode": "10001", "geocode": "us" }
      ]
    }
  }'
ParamRequiredDescription
asinyesAmazon ASIN (10 chars)
geocodeyesMarketplace country code (us, gb, de, etc.)
zipcode or countryNameyesLocalizes price and availability. Pass exactly one. zipcode for marketplaces with ZIP-level delivery (10001 for us, EC1A 1BB for gb, …); countryName otherwise.
languagenoDisplay language ISO-2 (EN, DE, FR, …). Must be supported for the chosen marketplace.
supernotrue for premium proxies
include_htmlnotrue to include raw HTML in response

amazon/search - Search Results

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "amazon/search",
      "Params": [
        { "keyword": "wireless earbuds", "zipcode": "32095", "geocode": "us" },
        { "keyword": "wireless earbuds", "zipcode": "32095", "geocode": "us", "page": 2 }
      ]
    }
  }'
ParamRequiredDescription
keywordyesSearch query (URL-encoded)
geocodeyesMarketplace country code
zipcode or countryNameyesLocalizes price and availability. Pass exactly one.
pagenoPage number ≥1 (default 1)
languagenoDisplay language ISO-2. Must be supported for the chosen marketplace.
supernotrue for premium proxies
include_htmlnotrue to include raw HTML

amazon/offer-listing - All Seller Offers

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "amazon/offer-listing",
      "Params": [
        { "asin": "B0CQMTCR9T", "zipcode": "32095", "geocode": "us" }
      ]
    }
  }'
ParamRequiredDescription
asinyesAmazon ASIN
geocodeyesMarketplace country code
zipcode or countryNameyesLocalizes price and availability. Pass exactly one.
languagenoDisplay language ISO-2
supernotrue for premium proxies
include_htmlnotrue to include raw HTML

Walmart & Lowes Plugins

walmart/store - Store-Scoped Request

Fetches a Walmart URL with store-specific session cookies. Raw HTML response.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "walmart/store",
      "Params": [
        { "url": "https://www.walmart.com/ip/123456", "zipcode": "72712", "storeid": 100 }
      ]
    }
  }'
ParamRequiredDescription
urlyesFull Walmart URL (must be walmart domain)
zipcodeconditionalRequired with storeid, or omit both for a random store
storeidconditionalRequired with zipcode, or omit both for a random store
disableretrynotrue to disable retry logic
transparentresponsenotrue to return raw response
timeoutnoCustom timeout in ms

lowes/store - Store-Scoped Request

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "lowes/store",
      "Params": [
        { "url": "https://www.lowes.com/pd/item/123", "zipcode": "28202", "storeid": "0595" }
      ]
    }
  }'
ParamRequiredDescription
urlyesFull Lowes URL on lowes.com. Must match an accepted path pattern (see below).
zipcodeyesNumeric zip code (digits only)
storeidyesNumeric Lowes store ID (digits only)
disableretrynotrue to disable retry logic
transparentresponsenotrue to return raw response on timeout (instead of 502)
timeoutnoPer-request timeout in ms (default: system max)

Accepted URL patterns:

PatternExample
/pd/<slug>/<itemId>https://www.lowes.com/pd/Disney-Airblown-Holiday-Stitch/5016066683
/wpd/<itemId>/productdetail/<storeId>/<auth>/<zipCode>https://www.lowes.com/wpd/1000002288/productdetail/0208/Guest/92253
/<2-letter-state>/<category>/<id>/productshttps://www.lowes.com/pl/power-tools/4294607842/products
/search…https://www.lowes.com/search?searchTerm=socket+holder
/collections/api/items/<groupId>/COLL_MANDATORY/<storeId>/<auth>/<zipCode>(Collections API)
/purchase/api/cart/cartitemsCart-add API endpoint

URLs that don't match return 400 valid lowes url expected. For /wpd/… URLs, the <storeId> and <zipCode> path segments must match the storeid and zipcode params exactly.

Async plugin jobs always issue GET. The gateway's POST /plugin/lowes/store variant (cart-add and similar mutating endpoints) is not yet available through the Async API.


Google Plugins

All Google plugins return structured JSON and use premium proxies internally — no super flag needed.

google/search - SERP Results

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/search",
      "Params": [
        { "q": "web scraping api", "gl": "us", "hl": "en" },
        { "q": "web scraping api", "gl": "gb", "hl": "en", "start": 10 }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch query
glnoCountry code (default us)
hlnoLanguage code (default en)
google_domainnoGoogle domain (default google.com)
devicenodesktop or mobile
startnoResult offset (default 0)
include_htmlnotrue to include raw HTML

google/search/ai-mode - AI Mode

Returns Google's AI Mode (udm=50) response — ordered text blocks, source references, and shopping cards.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/search/ai-mode",
      "Params": [
        { "q": "best web scraping tools 2025", "gl": "us" },
        { "q": "how does web scraping work", "gl": "gb", "hl": "en" }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch query
gl / hl / google_domainnoStandard localization
location / uulenoLocation targeting (UULE overrides location)
devicenodesktop or mobile
safenoactive to enable SafeSearch
include_htmlnotrue to include raw AI Mode HTML

google/search/ai-overview - AI Overview Follow-up

Returns the AI Overview block when Google renders one for a query. The plugin handles both fetch hops internally — pass a query, get parsed content back.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/search/ai-overview",
      "Params": [
        { "q": "best running shoes for flat feet", "gl": "us" }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch query
gl / hl / google_domainnoStandard localization
location / uulenoLocation targeting (UULE overrides location)
devicenodesktop or mobile
safenoactive to enable SafeSearch

AI Overview is A/B-tested and not every query qualifies. Requests for queries Google does not return an AI Overview for fail with an explicit error and are not charged.


google/shopping - Shopping Products

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/shopping",
      "Params": [
        { "q": "laptop", "min_price": 500, "max_price": 1500 },
        { "q": "wireless headphones", "sort_by": 1, "free_shipping": true }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch query
min_price / max_pricenoPrice range filter (integer)
sort_byno0 relevance, 1 price asc, 2 price desc
free_shipping / on_salenoBoolean filters
shoprsnoOpaque filter token from a previous response
devicenodesktop or mobile
startnoPagination offset
hl / gl / google_domain / location / uulenoStandard localization

Each result carries a catalog_id (durable, persistable) and an immersive_product_page_token (short-lived) — pass either to google/shopping/product to expand a product.


google/shopping/product - Product Page

Returns the full product page: title, brand, gallery, description, ratings, the first ~5 sellers, and a stores_next_page_token for paginating the rest.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/shopping/product",
      "Params": [
        { "catalog_id": "12153035126592663857", "q": "PodTrak P8 ZP8", "gl": "us" }
      ]
    }
  }'
ParamRequiredDescription
catalog_id*Region-scoped, durable. Pair with q to look up a product.
immersive_product_page_token (alias page_token)*Short-lived (~hours). Returned by google/shopping.
product_id*Stable lightweight ID. Forces compact mode (title + sellers table).
qconditionalRequired when using catalog_id
sort_bynoSeller sort: base_price, total_price, promotion, seller_rating. Always forces compact mode regardless of which identifier you pass.
devicenodesktop (default), mobile, tablet
hl / gl / google_domain / location / uulenoStandard localization

One of catalog_id, immersive_product_page_token, or product_id is required. When multiple are supplied, precedence is catalog_id > immersive_product_page_token > product_id. Catalog IDs are region-specific — if you need US, DE, and FR sellers for the same product, search once per region and persist each catalog_id.


google/shopping/product/stores - More Sellers

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/shopping/product/stores",
      "Params": [
        { "catalog_id": "17422476796203286923", "next_page_token": "eyJ2Ijoic3RvcmVzLTEi..." }
      ]
    }
  }'
ParamRequiredDescription
catalog_idyesSame catalog ID used to fetch the product page. Must match the catalog_id encoded inside the token — mismatch returns 400.
next_page_tokenyesstores_next_page_token from the previous step's response

The locale (q, gl, hl) used by the upstream call is carried inside next_page_token. Any hl / gl values you pass here are ignored in favor of the token-embedded ones so the response stays deterministic across replays.


google/maps/search - Maps Places List

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/maps/search",
      "Params": [
        { "q": "pizza new york", "ll": "@40.7128,-74.0060,13z" },
        { "q": "hotels chicago", "start": 20, "hl": "en", "gl": "us" }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch query
llnoLat/lng/zoom pin: @lat,lng,zoomz
startnoPage offset (multiples of 20)
hl / gl / google_domainnoStandard localization

google/maps/place - Maps Place Details

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/maps/place",
      "Params": [
        { "place_id": "ChIJLSsVbGBZwokRR0LlGBSvMOI" },
        { "data_cid": "16313085445244584615" }
      ]
    }
  }'
ParamRequiredDescription
place_id*Google Place ID (ChIJ...). One of place_id or data_cid is required
data_cid*Numeric CID
hl / gl / google_domainnoStandard localization

Place endpoint does not accept data_id. Use place_id or data_cid.


google/maps/reviews - Maps Reviews

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/maps/reviews",
      "Params": [
        { "data_id": "0x864c28f004653715:0x57c504dbf0bc93a0", "num": 20 },
        { "data_id": "0x864c28f004653715:0x57c504dbf0bc93a0", "sort_by": "newestFirst" }
      ]
    }
  }'
ParamRequiredDescription
data_id*Place ID in 0xHEX:0xHEX format. One of data_id or place_id is required
place_id*Place ID in ChIJ... format
numnoReviews per page (1–20, default 10)
sort_bynonewestFirst, ratingHigh, or ratingLow
topic_id / querynoFilter by topic or keyword (mutually exclusive)
next_page_tokennoCursor from previous response's pagination.next_page_token

google/hotels - Hotels Listings

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/hotels",
      "Params": [
        { "q": "Bali hotels", "check_in_date": "2026-05-01", "check_out_date": "2026-05-03" },
        { "q": "Paris hotels", "check_in_date": "2026-05-01", "check_out_date": "2026-05-03", "hotel_class": "4,5", "free_cancellation": true, "currency": "EUR" }
      ]
    }
  }'
ParamRequiredDescription
qyesHotel search query (use simple "<City> hotels" form)
check_in_date / check_out_dateyesYYYY-MM-DD
sort_byno3 price, 8 rating, 13 reviewed
min_price / max_pricenoPrice filter (integer)
ratingno7 (3.5+), 8 (4.0+), 9 (4.5+)
hotel_classnoComma-separated star ratings 2–5
brands / amenities / property_typesnoComma-separated codes
free_cancellation / eco_certified / special_offersnoBoolean filters
next_page_tokennoPagination cursor
hl / gl / currencynoStandard localization

Occupancy parameters (adults, children, children ages) are not supported. Results always reflect 2 adults, 0 children.

Each property in the response carries a detail_token — pass it to google/hotels/detail to fetch the live per-vendor offer shelf.


google/hotels/detail - Per-Vendor Offer Shelf

Returns each booking source's rate_per_night, total_rate, and quoted occupancy for a single property — sponsored ("Featured options") and organic ("All options") entries unified into one ranked list.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/hotels/detail",
      "Params": [
        { "detail_token": "<token>", "check_in_date": "2026-05-15", "check_out_date": "2026-05-17", "currency": "USD" }
      ]
    }
  }'
ParamRequiredDescription
detail_tokenyesThe detail_token from a google/hotels listing response
check_in_date / check_out_dateyesYYYY-MM-DD
currencynoISO 4217 (default USD)
hl / glnoStandard localization

google/flights - Flights Itineraries

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/flights",
      "Params": [
        { "departure_id": "JFK", "arrival_id": "LAX", "outbound_date": "2026-06-15" },
        { "departure_id": "IST", "arrival_id": "LHR", "outbound_date": "2026-07-01", "return_date": "2026-07-15", "travel_class": 3, "currency": "EUR" }
      ]
    }
  }'
ParamRequiredDescription
departure_id / arrival_idyesIATA codes (comma-separated for multi-airport)
outbound_dateyesYYYY-MM-DD
return_datenoYYYY-MM-DD for round trip
typeno1 round trip, 2 one way (auto-inferred)
adults / children / infants_in_seat / infants_on_lapnoPassenger counts
travel_classno1 economy, 2 premium economy, 3 business, 4 first
stopsno0 any, 1 nonstop, 2 ≤1 stop, 3 ≤2 stops
sort_byno16 (top, price, dep, arr, duration, emissions)
include_airlines / exclude_airlinesnoComma-separated IATA codes (mutually exclusive)
hl / gl / currencynoStandard localization

Multi-city (type=3), max_price, max_duration, and bags are not yet supported and return 400 if passed.


google/news - News Articles

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/news",
      "Params": [
        { "q": "openai", "so": "1" },
        { "topic_token": "CAAqJggKIiBDQkFTRWdvSUwy..." },
        { "kgmid": "/m/02_286" }
      ]
    }
  }'

Pass exactly one driver per task:

DriverFetches
qKeyword search
topic_tokenTopic stream
section_tokenSection within a topic
story_tokenFull-coverage story page
publication_tokenPublisher feed
kgmidKnowledge Graph entity (e.g., /m/02_286 = New York City)

Optional: so (0 relevance, 1 date; search mode only), hl, gl.


curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/trends",
      "Params": [
        { "q": "bitcoin", "geo": "US" },
        { "q": "ethereum", "geo": "US", "data_type": "RELATED_QUERIES" }
      ]
    }
  }'
ParamRequiredDescription
qyesSearch keyword
geonoLocation code (e.g., US, GB, US-CA)
hlnoLanguage code (default en)
datenoTime range (default today 12-m)
data_typenoWidget filter: TIMESERIES, GEO_MAP_0, RELATED_QUERIES, RELATED_TOPICS
catnoCategory ID
gpropnoGoogle property: web, images, news, youtube, froogle

Returns currently trending search topics from Google Trends — the same data shown on trends.google.com/trending.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/trending",
      "Params": [
        { "geo": "US" },
        { "geo": "GB", "cat": 17, "hours": 48 }
      ]
    }
  }'
ParamRequiredDescription
geoyes (or set top-level GeoCode)Country code (e.g., US, GB)
hoursnoTime window: 4, 24 (default), 48, 168
catnoCategory ID (0 all, 17 sports, 18 technology, …)
sortnorelevance (default), search_volume, recency, title
statusnoall (default) or active
hlnoLanguage code (default en)

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/youtube",
      "Params": [
        { "search_query": "best laptop 2025" },
        { "search_query": "tech reviewer", "sp": "EgIQAg==" }
      ]
    }
  }'
ParamRequiredDescription
search_query (alias q)yesSearch terms
spnoYouTube's opaque filter/sort token (also used for pagination — extract from pagination.next)
devicenodesktop (default) or mobile
hl / glnoStandard localization

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/play-store",
      "Params": [
        { "q": "weather" },
        { "chart": "topselling_free" }
      ]
    }
  }'
ParamRequiredDescription
q / apps_category / chartyesPass at least one. apps_category accepts ART_AND_DESIGN, MEDICAL, GAME_PUZZLE, etc. chart accepts topselling_free, topselling_paid, topgrossing.
numnoResults per page (1–50, default 20)
next_page_tokennoPagination token from a previous response
store_devicenophone, tablet, tv, chromebook, watch, car
agenoAge filter (only with apps_category=FAMILY)
hl / glnoStandard localization

google/play-store/product - App Detail

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/play-store/product",
      "Params": [
        { "product_id": "com.discord" },
        { "product_id": "com.whatsapp" }
      ]
    }
  }'
ParamRequiredDescription
product_idyesApp package identifier (e.g., com.discord)
hl / glnoStandard localization

google/play-store/reviews - App Reviews

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "google/play-store/reviews",
      "Params": [
        { "product_id": "com.tapblaze.coffeebusiness" }
      ]
    }
  }'
ParamRequiredDescription
product_idyesApp package identifier
sort_byno1 most relevant (default; only supported value at this time)
next_page_tokennoPagination token from a previous response
hl / glnoStandard localization

ChatGPT Plugin

chatgpt/chat - ChatGPT Reply

Sends a prompt to ChatGPT and returns the assembled reply as JSON. No browser automation or session management on your side — pass a prompt, get a structured response.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "chatgpt/chat",
      "Params": [
        { "q": "Explain quantum entanglement in one sentence" },
        { "q": "Was sind die wichtigsten Nachrichten heute", "geoCode": "de" }
      ]
    }
  }'
ParamRequiredDescription
qyesPrompt text (max 1024 characters; each call is standalone — no conversation continuity)
modelnoModel selector (auto default; e.g., gpt-5, gpt-4o). Unknown values fall back to auto.
geoCodenoISO-3166-1 alpha-2 country (case-insensitive). Sets reply language: us (English), de, tr, jp, …
raw_sseno1 to include the raw upstream stream body alongside the assembled response. Alias: include_raw=1.

Shein Plugin

shein - Rendered Product Page

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "shein",
      "Params": [
        { "url": "https://www.shein.com/Tropical-Print-Drawstring-Hooded-Jacket-p-12345678.html" }
      ]
    }
  }'
ParamRequiredDescription
urlyesFull Shein URL (must be on shein.com)
timeoutnoPer-request timeout in ms

Shein has no geo parameter — top-level GeoCode is rejected with 400. See GeoCode Behavior.


Trip.com Plugins

Returns itineraries for a city-pair on a given date. Each itinerary carries policyId and shortPolicyId values that feed trip/detail.

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "trip/search",
      "Params": [
        { "departCity": "SIN", "arriveCity": "BKK", "departDate": "2026-06-15", "country": "sg", "adults": 1, "currency": "USD" }
      ]
    }
  }'
ParamRequiredDescription
departCityyesDeparture city IATA (uppercased automatically)
arriveCityyesArrival city IATA
departDateyesOutbound date, YYYY-MM-DD
countryyes (or set top-level GeoCode)Trip.com country edition, lowercase ISO-2 (th, id, tr, sg, my, vn, jp, au, …)
returnDatenoInbound date for round trips, YYYY-MM-DD
departAirport / arriveAirportnoSpecific airport IATA (multi-airport cities)
adults / children / infantsnoPassenger counts (defaults 1 / 0 / 0)
cabinClassnoy economy (default), s premium, c business, f first
currencynoISO-4217 (default USD)
sortBynoScore (default), Price, Duration

trip/detail - Fare Detail

Returns the full fare breakdown for one policy (baggage, refund rules, change fees, amenities).

curl -X POST "https://q.scrape.do/api/v1/jobs" \
  --header "X-Token: YOUR_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "Plugin": {
      "Key": "trip/detail",
      "Params": [
        { "policyId": "POL456", "shortPolicyId": "SHORT789", "country": "sg", "currency": "USD", "adults": 1 },
        { "policyId": "POL789", "shortPolicyId": "SHORT012", "productId": "PROD123", "country": "sg" }
      ]
    }
  }'
ParamRequiredDescription
policyIdyesFrom a prior trip/search result
shortPolicyIdyesFrom a prior trip/search result
countryyes (or set top-level GeoCode)Same Trip.com country edition used in search
productIdnoFrom a prior trip/search result. Defaults to policyId when omitted.
currencynoISO-4217 (default USD)
adults / children / infantsnoPassenger counts (must match the search)

GeoCode Behavior

GeoCode can be set at two levels:

LevelExampleApplies to
Top-level"GeoCode": "us"All tasks in the job
Per-param{ "geocode": "us", ... }, { "gl": "us", ... }, { "country": "sg", ... }, etc.That task only

Top-level GeoCode is translated into the per-task query parameter the target plugin expects, with per-plugin value normalization:

Plugin familyInjected paramValue normalization
amazon/*, walmart/*, lowes/*geocodeverbatim
google/trends, google/trendinggeouppercased
All other google/* (search, shopping, maps, hotels, flights, news, youtube, play-store, …)gllowercased
chatgpt/chatgeoCodeverbatim (gateway is case-insensitive)
trip/search, trip/detailcountrylowercased
sheintop-level GeoCode is rejected with 400

Specifying GeoCode at both levels (when the per-param key matches what the plugin expects, case-insensitive) returns 400:

geoCode must not be specified both at top level and in plugin params

Webhooks

Plugin jobs share the same webhook contract as regular Async API jobs — set WebhookURL (and optionally WebhookHeaders) on the job, and each completed task triggers a delivery with the task result. Retry policy, signature header, and domain blacklist behavior are identical. See Create Job for the full payload shape and delivery semantics.

{
  "Plugin": { "Key": "amazon/pdp", "Params": [...] },
  "WebhookURL": "https://example.com/webhook",
  "WebhookHeaders": { "Authorization": "Bearer your-token" }
}

Error Codes

StatusMessageCause
400plugin key is requiredPlugin.Key is empty
400unsupported plugin key: <key>Unknown plugin key
400plugin params are requiredPlugin.Params is empty
400targets cannot be used together with pluginBoth Targets and Plugin provided
400top-level GeoCode is not supported for plugin <key> (set geo per-param if the plugin needs it)Plugin (currently shein) has no geo parameter
400geoCode must not be specified both at top level and in plugin params (conflicts with <param> for <key>)GeoCode conflict (top-level + per-param)
400plugin params exceed limit of 1000 (got N)Too many param entries

On this page