scrapeunblocker-mcp 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1104 -8
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -107,7 +107,7 @@ var PLUGINS = [
107
107
  "name": "proxy_country",
108
108
  "type": "string",
109
109
  "required": false,
110
- "description": "Two-letter ISO country code (e.g. `de`, `us`) of the exit IP, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
110
+ "description": "Two-letter ISO country code (e.g. `de`, `us`) of the country the request is made from, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
111
111
  },
112
112
  {
113
113
  "name": "max_polls",
@@ -189,7 +189,7 @@ var PLUGINS = [
189
189
  "name": "proxy_country",
190
190
  "type": "string",
191
191
  "required": false,
192
- "description": "Two-letter ISO country code (e.g. `de`, `us`) of the exit IP, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
192
+ "description": "Two-letter ISO country code (e.g. `de`, `us`) of the country the request is made from, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
193
193
  },
194
194
  {
195
195
  "name": "max_polls",
@@ -296,7 +296,7 @@ var PLUGINS = [
296
296
  "name": "proxy_country",
297
297
  "type": "string",
298
298
  "required": false,
299
- "description": "Two-letter ISO country code (e.g. `de`, `us`) of the exit IP, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
299
+ "description": "Two-letter ISO country code (e.g. `de`, `us`) of the country the request is made from, so the site serves that country's prices, language and content. Omit it and the country is picked for you. An unsupported code answers 400 with the list of available countries."
300
300
  },
301
301
  {
302
302
  "name": "warmup_url",
@@ -861,7 +861,7 @@ var PLUGINS = [
861
861
  "name": "url",
862
862
  "type": "string",
863
863
  "required": false,
864
- "description": "A Google Maps place URL (share link or /maps/place/... URL). The feature id or place_id is read out of it."
864
+ "description": "A Google Maps place URL: a /maps/place/... URL, a maps.app.goo.gl share link or a maps?cid= link. The place is read out of it."
865
865
  },
866
866
  {
867
867
  "name": "place_id",
@@ -905,6 +905,75 @@ var PLUGINS = [
905
905
  }
906
906
  ]
907
907
  },
908
+ {
909
+ "name": "maps_reviews",
910
+ "title": "Scrape Google Maps reviews",
911
+ "category": "Google",
912
+ "path": "/maps/reviews",
913
+ "fixed": {},
914
+ "description": "Returns one Google Maps place's reviews as JSON, sorted the way Google sorts them: `relevant`, `newest`, `highest` or `lowest`. Each review has `rating` (1-5), `date` (exact ISO 8601, UTC) + `timestamp`, `relativeDate`, `text` (original) + `language`, `translatedText` (into `hl`, when the review is in another language), `author`, `photos`, `details` (guided answers such as 'Rooms: 5'), `ownerResponse` and `reviewUrl`. The answer also carries a `place` summary and `nextPageToken` for paging. Identify the place with `feature_id` (0xHEX:0xHEX), `place_id` (ChIJ...) or a Maps `url`. Reviews come in pages of 20; each page fetched is one billed unit.",
915
+ "params": [
916
+ {
917
+ "name": "url",
918
+ "type": "string",
919
+ "required": false,
920
+ "description": "A Google Maps place URL: a /maps/place/... URL, a maps.app.goo.gl share link or a maps?cid= link. The place is read out of it."
921
+ },
922
+ {
923
+ "name": "place_id",
924
+ "type": "string",
925
+ "required": false,
926
+ "description": "A Google place_id, e.g. 'ChIJN1t_tDeuEmsRUsoyG83frY4'."
927
+ },
928
+ {
929
+ "name": "feature_id",
930
+ "type": "string",
931
+ "required": false,
932
+ "description": "A Maps feature id '0xHEX:0xHEX', e.g. '0x4776901a5d4813b3:0x2a497c8b414893c'. Fastest - no resolve step."
933
+ },
934
+ {
935
+ "name": "sort",
936
+ "type": "string",
937
+ "required": false,
938
+ "description": "Review order: 'relevant' (Google's default), 'newest', 'highest' or 'lowest'. SerpApi's 'qualityScore', 'newestFirst', 'ratingHigh' and 'ratingLow' are accepted too.",
939
+ "default": "relevant"
940
+ },
941
+ {
942
+ "name": "max_reviews",
943
+ "type": "integer",
944
+ "required": false,
945
+ "description": "How many reviews to return, 1-200. Reviews come in pages of 20; each page fetched is one billed unit.",
946
+ "default": 20
947
+ },
948
+ {
949
+ "name": "next_page_token",
950
+ "type": "string",
951
+ "required": false,
952
+ "description": "Continue from a previous answer's `nextPageToken` (same place and sort). When `max_reviews` is not a multiple of 20 the next page can repeat a few reviews - dedupe on `reviewId`."
953
+ },
954
+ {
955
+ "name": "hl",
956
+ "type": "string",
957
+ "required": false,
958
+ "description": "Language for Google's labels and the review translation (`translatedText`), e.g. 'en', 'de'. The original text is always returned in `text`.",
959
+ "default": "en"
960
+ },
961
+ {
962
+ "name": "gl",
963
+ "type": "string",
964
+ "required": false,
965
+ "description": "Google country, ISO-2 lowercase, e.g. 'us'.",
966
+ "default": "us"
967
+ },
968
+ {
969
+ "name": "proxy_country",
970
+ "type": "string",
971
+ "required": false,
972
+ "description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Reviews are the same from any country.",
973
+ "default": "us"
974
+ }
975
+ ]
976
+ },
908
977
  {
909
978
  "name": "google_trends",
910
979
  "title": "Scrape Google Trends (interest over time, by region, related queries)",
@@ -1495,6 +1564,28 @@ var PLUGINS = [
1495
1564
  }
1496
1565
  ]
1497
1566
  },
1567
+ {
1568
+ "name": "chatgpt",
1569
+ "title": "Ask ChatGPT and get its answer and cited sites",
1570
+ "category": "AI",
1571
+ "path": "/ai/chatgpt",
1572
+ "fixed": {},
1573
+ "description": "Asks ChatGPT (chatgpt.com, signed out) one question and returns its finished answer: `answer` (plain text) and `answerMarkdown`, `citations` (the source pills ChatGPT attaches to claims: `position`, `siteName`, `domain`, `moreSources` - how many further sources the pill groups - and `citedText`, the answer text it backs), `links` (links written into the answer: `position`, `title`, `url`, `domain`), `sources` (every site cited or linked, once), `webSearch` (whether ChatGPT searched the web), `model` (null: signed-out ChatGPT does not show it) and `conversationId`. Signed-out ChatGPT shows the full URL of a cited page only on hover, so citations carry the site and domain, not the page URL. `country` asks from that country. Answers take 15-60 s and vary between identical calls, as they do for people. One unit per call; a 503 when ChatGPT capacity is busy is not billed.",
1574
+ "params": [
1575
+ {
1576
+ "name": "prompt",
1577
+ "type": "string",
1578
+ "required": true,
1579
+ "description": "The question to ask ChatGPT, as a user would type it, e.g. 'best CRM for small business' (max 2000 characters). Each call starts a new conversation."
1580
+ },
1581
+ {
1582
+ "name": "country",
1583
+ "type": "string",
1584
+ "required": false,
1585
+ "description": "Two-letter country code to ask from, e.g. US, GB, DE. ChatGPT tailors local results to where the visitor is. Leave blank for any location."
1586
+ }
1587
+ ]
1588
+ },
1498
1589
  {
1499
1590
  "name": "bing_search",
1500
1591
  "title": "Search Bing",
@@ -1745,7 +1836,7 @@ var PLUGINS = [
1745
1836
  "category": "E-commerce",
1746
1837
  "path": "/marketplace/amazon-product",
1747
1838
  "fixed": {},
1748
- "description": "Fetches a single Amazon product and returns it as JSON: `title`, `brand`, `price` + `currency`, `listPrice` and `savingsPercent`, `availability` (+ a boolean `inStock`), `rating`, `reviewCount`, `seller`, `features` (bullet points), `categories` (breadcrumb) and `images`. Identify the product with either `asin` (plus `marketplace`) or a full product `url`. Amazon prices each page in the currency of the delivery location it infers from the visitor's IP address, so `proxy_country` defaults to the marketplace's home country (amazon.com -> US) and the call is routed through ISP proxies in that country. The proxy that served the request is reported as `exitCountry` (its country) and `exitProvider` (its type: `isp`, `residential` or `datacenter`).",
1839
+ "description": "Fetches a single Amazon product and returns it as JSON: `title`, `brand`, `price` + `currency`, `listPrice` and `savingsPercent`, `availability` (+ a boolean `inStock`), `rating`, `reviewCount`, `seller`, `features` (bullet points), `categories` (breadcrumb) and `images`. Identify the product with either `asin` (plus `marketplace`) or a full product `url`. Amazon prices each page in the currency of the delivery location it infers from the visitor's IP address, so `proxy_country` defaults to the marketplace's home country (amazon.com -> US) and the call is routed through proxies in that country. The country of the proxy that served the request is reported as `exitCountry`.",
1749
1840
  "params": [
1750
1841
  {
1751
1842
  "name": "asin",
@@ -1878,7 +1969,7 @@ var PLUGINS = [
1878
1969
  "category": "E-commerce",
1879
1970
  "path": "/marketplace/amazon-reviews",
1880
1971
  "fixed": {},
1881
- "description": "Returns the review data an Amazon product page shows to a signed-out visitor, as JSON: the overall `rating`, total `reviewCount` (global ratings), the 5..1-star `histogram` (percent per star), the AI `customersSay` summary (overall text plus per-aspect `sentiment`, `mentions`, `positive`, `negative`, `summary` and the quoted review `excerpts` Amazon shows for the aspect) and the top `reviews` (each with `id`, `url`, `author`, `rating`, `title`, `body`, `date`, `country`, `fromOtherCountry`, `verified`, `helpfulVotes`, `variant` and `images`). Identify the product with `asin` (plus `marketplace`) or a product `url`. Scope: Amazon only shows its full review list to signed-in customers, so this endpoint returns the public slice on the product page - typically 5 to 13 top reviews, local ones first and then reviews from other countries - not a complete review export. When Amazon hides the top reviews behind a sign-in prompt (common on amazon.com), `reviewsGated` is `true` and `reviews` is empty; the rating, histogram and customers-say data, including its review excerpts, are still returned. Every field is always present and is `null` when the page does not show it. `proxy_country` defaults to the marketplace's home country; the proxy that served the request is reported as `exitCountry` (its country) and `exitProvider` (its type: `isp`, `residential` or `datacenter`).",
1972
+ "description": "Returns the review data an Amazon product page shows to a signed-out visitor, as JSON: the overall `rating`, total `reviewCount` (global ratings), the 5..1-star `histogram` (percent per star), the AI `customersSay` summary (overall text plus per-aspect `sentiment`, `mentions`, `positive`, `negative`, `summary` and the quoted review `excerpts` Amazon shows for the aspect) and the top `reviews` (each with `id`, `url`, `author`, `rating`, `title`, `body`, `date`, `country`, `fromOtherCountry`, `verified`, `helpfulVotes`, `variant` and `images`). Identify the product with `asin` (plus `marketplace`) or a product `url`. Scope: Amazon only shows its full review list to signed-in customers, so this endpoint returns the public slice on the product page - typically 5 to 13 top reviews, local ones first and then reviews from other countries - not a complete review export. When Amazon hides the top reviews behind a sign-in prompt (common on amazon.com), `reviewsGated` is `true` and `reviews` is empty; the rating, histogram and customers-say data, including its review excerpts, are still returned. Every field is always present and is `null` when the page does not show it. `proxy_country` defaults to the marketplace's home country; the country of the proxy that served the request is reported as `exitCountry`.",
1882
1973
  "params": [
1883
1974
  {
1884
1975
  "name": "asin",
@@ -1913,7 +2004,7 @@ var PLUGINS = [
1913
2004
  "category": "E-commerce",
1914
2005
  "path": "/marketplace/amazon-offers",
1915
2006
  "fixed": {},
1916
- "description": "Returns the offers Amazon lists for a product under \"All buying options\", as JSON. Each offer has the seller (`sellerName`, `sellerId`, `sellerUrl`, `sellerRating`, `sellerRatingCount`, `sellerPositivePercent`), `price` + `currency`, `listPrice` and `savingsPercent`, `shippingPrice` and `totalPrice`, `condition` (as Amazon words it) with `conditionType` (new, used, collectible, refurbished) and the seller's `conditionNote`, `delivery` / `deliveryDate`, `alternativeDelivery` (the faster or Prime-member option Amazon also offers), `shipsFrom`, `soldByAmazon`, `fulfilledByAmazon`, `prime`, the `offerId` and a `buyBoxWinner` flag. The response also carries the product `title`, `rating`, `reviewCount`, `image` and `totalOffers`. Page 1 starts with the Buy Box (featured) offer, also returned as `buyBox`; Amazon shows it whatever filter is set. Amazon lists 10 other offers per page: follow `nextPage`, or read up to 5 pages in one call with `pages`. Filter with `condition`, `free_shipping` and `prime`. `shippingPrice` is 0 for free delivery and null when Amazon shows no delivery promise for the location. `proxy_country` defaults to the marketplace's home country so prices and delivery are the ones a local shopper sees; the proxy that served the request is reported as `exitCountry` and `exitProvider`.",
2007
+ "description": "Returns the offers Amazon lists for a product under \"All buying options\", as JSON. Each offer has the seller (`sellerName`, `sellerId`, `sellerUrl`, `sellerRating`, `sellerRatingCount`, `sellerPositivePercent`), `price` + `currency`, `listPrice` and `savingsPercent`, `shippingPrice` and `totalPrice`, `condition` (as Amazon words it) with `conditionType` (new, used, collectible, refurbished) and the seller's `conditionNote`, `delivery` / `deliveryDate`, `alternativeDelivery` (the faster or Prime-member option Amazon also offers), `shipsFrom`, `soldByAmazon`, `fulfilledByAmazon`, `prime`, the `offerId` and a `buyBoxWinner` flag. The response also carries the product `title`, `rating`, `reviewCount`, `image` and `totalOffers`. Page 1 starts with the Buy Box (featured) offer, also returned as `buyBox`; Amazon shows it whatever filter is set. Amazon lists 10 other offers per page: follow `nextPage`, or read up to 5 pages in one call with `pages`. Filter with `condition`, `free_shipping` and `prime`. `shippingPrice` is 0 for free delivery and null when Amazon shows no delivery promise for the location. `proxy_country` defaults to the marketplace's home country so prices and delivery are the ones a local shopper sees; the country of the proxy that served the request is reported as `exitCountry`.",
1917
2008
  "params": [
1918
2009
  {
1919
2010
  "name": "asin",
@@ -2067,6 +2158,34 @@ var PLUGINS = [
2067
2158
  }
2068
2159
  ]
2069
2160
  },
2161
+ {
2162
+ "name": "walmart_product",
2163
+ "title": "Scrape one Walmart product's full detail",
2164
+ "category": "E-commerce",
2165
+ "path": "/marketplace/walmart-product",
2166
+ "fixed": {},
2167
+ "description": "Fetches one Walmart product page (by `item_id` or `url`) and returns it as JSON: `itemId`, `title`, `brand`, `model`, `upc`, `price`, `wasPrice`, `listPrice`, `unitPrice` (e.g. per ounce, where Walmart shows one), `currency`, `rollback` / `clearance`, `availability` and `inStock`, `condition`, `seller` (name, Walmart or marketplace seller, its rating and review count), `additionalSellerCount`, `fulfillment` (shipping, pickup and delivery: available or not, date, fee, store or place), `returnPolicy`, `rating`, `reviewCount`, `reviewSummary` (star histogram, recommend percentage, aspect scores), the first `reviews`, `categories`, `shortDescription`, `description`, `highlights`, `specifications`, `warranty`, `variantOptions` and every `variants` entry (its own item id, attributes, price, stock), `images` and `videos`. Fulfillment dates and the store are what Walmart quotes for the US location it assigns to the request (`location` names it), not a ZIP code or store you choose. Other sellers' offers are not on the product page: only their count (`additionalSellerCount`) is returned. Companion to `/marketplace/walmart-search`.",
2168
+ "params": [
2169
+ {
2170
+ "name": "item_id",
2171
+ "type": "string",
2172
+ "required": false,
2173
+ "description": "Walmart item id - the number at the end of a product link, e.g. '18638703162' for walmart.com/ip/.../18638703162."
2174
+ },
2175
+ {
2176
+ "name": "url",
2177
+ "type": "string",
2178
+ "required": false,
2179
+ "description": "Instead of `item_id`: a walmart.com product link, e.g. https://www.walmart.com/ip/HP-15-6-inch-Laptop/18638703162."
2180
+ },
2181
+ {
2182
+ "name": "proxy_country",
2183
+ "type": "string",
2184
+ "required": false,
2185
+ "description": "Proxy country the request is sent from (ISO-2). Defaults to US: walmart.com refuses most other countries."
2186
+ }
2187
+ ]
2188
+ },
2070
2189
  {
2071
2190
  "name": "target_search",
2072
2191
  "title": "Scrape Target product search",
@@ -2115,6 +2234,77 @@ var PLUGINS = [
2115
2234
  }
2116
2235
  ]
2117
2236
  },
2237
+ {
2238
+ "name": "target_category",
2239
+ "title": "Scrape a Target category listing",
2240
+ "category": "E-commerce",
2241
+ "path": "/marketplace/target-category",
2242
+ "fixed": {},
2243
+ "description": "Lists the products of one Target category (by id or category link; a brand page's id or link works too) as JSON: `category` (id, name, link, and `type`: category or brand), `breadcrumbs`, `totalResults`, `totalPages`, and `products` with `tcin`, `title`, `brand`, `price` (`priceMax` for a family priced as a range), `originalPrice` and `priceType` when on sale, `formattedPrice`, `currency`, `rating`, `ratingCount`, `promotions`, `image` and `url`. Sort with `sort`, start at `page` and collect up to `max_results` across pages (Target serves at most 50 pages of 24). Filters in a category link (...Z<facet>) are not applied. Each page fetched is billed as one request (`pagesFetched`).",
2244
+ "params": [
2245
+ {
2246
+ "name": "category",
2247
+ "type": "string",
2248
+ "required": true,
2249
+ "description": "Target category: its id (e.g. '5xtro', the part after N- in a category link) or a target.com category link, e.g. https://www.target.com/c/coffee-makers-tea-espresso-kitchen-appliances-dining/-/N-5xtro. A brand page (/b/<brand>/-/N-<id>) lists that brand."
2250
+ },
2251
+ {
2252
+ "name": "sort",
2253
+ "type": "string",
2254
+ "required": false,
2255
+ "description": "Order: relevance, price_low, price_high, rating, best_selling, newest.",
2256
+ "default": "relevance"
2257
+ },
2258
+ {
2259
+ "name": "page",
2260
+ "type": "integer",
2261
+ "required": false,
2262
+ "description": "1-based page to start from (1-50, 24 products per page).",
2263
+ "default": 1
2264
+ },
2265
+ {
2266
+ "name": "max_results",
2267
+ "type": "integer",
2268
+ "required": false,
2269
+ "description": "Products to collect across pages (1-240); each page fetched is billed as one request.",
2270
+ "default": 24
2271
+ }
2272
+ ]
2273
+ },
2274
+ {
2275
+ "name": "target_product",
2276
+ "title": "Scrape one Target product",
2277
+ "category": "E-commerce",
2278
+ "path": "/marketplace/target-product",
2279
+ "fixed": {},
2280
+ "description": "Returns one Target product by `tcin` or `url` as JSON: `tcin` (and `parentTcin` when it is one variant of a product family), `title`, `brand`, `url`, `dpci`, `upc`, `productType`, `price` (`priceMax` for a family priced as a range), `originalPrice` / `savings` / `savingsPercent` / `priceType` when on sale, `priceNote` (e.g. 'When purchased online'), `currency` (USD), `promotions`, `rating`, `ratingCount`, `reviewCount`, `ratingDistribution`, `recommendedPercent`, `questionCount`, `description`, `highlights`, `specifications`, `image` / `images`, `category` / `categories`, `selectedVariant` and `variants` (every colour / size with its own TCIN, price, link, image and shipping / store availability), `fulfillment` (sold out, shipping status and delivery dates to `zip`, pickup status, date and quantity at `store_id`, aisle) and `packageDimensions`. Prices are target.com's online prices. Companion to `/marketplace/target-search`, whose `tcin` it takes. One unit per call.",
2281
+ "params": [
2282
+ {
2283
+ "name": "tcin",
2284
+ "type": "string",
2285
+ "required": false,
2286
+ "description": "Target item number (TCIN), e.g. '52580270' (the number after A- in a product link)."
2287
+ },
2288
+ {
2289
+ "name": "url",
2290
+ "type": "string",
2291
+ "required": false,
2292
+ "description": "Instead of `tcin`: a target.com product link, e.g. https://www.target.com/p/hamilton-beach-coffee-maker/-/A-52580270 (a `?preselect=` variant in the link is honoured)."
2293
+ },
2294
+ {
2295
+ "name": "store_id",
2296
+ "type": "string",
2297
+ "required": false,
2298
+ "description": "Target store whose pickup and shelf stock is reported, e.g. '1375' (default 1375, Minneapolis Nicollet Mall)."
2299
+ },
2300
+ {
2301
+ "name": "zip",
2302
+ "type": "string",
2303
+ "required": false,
2304
+ "description": "US ZIP code shipping dates are quoted for (default 55403)."
2305
+ }
2306
+ ]
2307
+ },
2118
2308
  {
2119
2309
  "name": "bestbuy_search",
2120
2310
  "title": "Scrape Best Buy product search",
@@ -2170,6 +2360,28 @@ var PLUGINS = [
2170
2360
  }
2171
2361
  ]
2172
2362
  },
2363
+ {
2364
+ "name": "bestbuy_product",
2365
+ "title": "Scrape one Best Buy product",
2366
+ "category": "E-commerce",
2367
+ "path": "/marketplace/bestbuy-product",
2368
+ "fixed": {},
2369
+ "description": "Returns one Best Buy (US) product by `sku` or `url` as JSON: `sku`, `title`, `brand`, `model`, `upc`, `productType`, `condition`, `url`, `price`, `originalPrice` / `savings` / `savingsPercent` (when on sale), `currency` (USD), `available` with `availableForShipping` / `availableForPickup` / `availableForDelivery` (nationwide, not for one store or ZIP code), `rating`, `reviewCount`, `description`, `features`, `includedItems`, `specifications` (group / name / value), `image` and `images` (full size), `category` and `categories` (root to leaf), `seller` (Best Buy or a Marketplace seller id), `openBoxOffers` (Excellent / Good / Fair with their prices and links), `dimensions` and `releaseDate`. Companion to `/marketplace/bestbuy-search`, whose `sku` it takes. One unit per call.",
2370
+ "params": [
2371
+ {
2372
+ "name": "sku",
2373
+ "type": "string",
2374
+ "required": false,
2375
+ "description": "Best Buy SKU, e.g. '6613868' (the number after /sku/ in a product link, or its skuId=)."
2376
+ },
2377
+ {
2378
+ "name": "url",
2379
+ "type": "string",
2380
+ "required": false,
2381
+ "description": "Instead of `sku`: a bestbuy.com product link, e.g. https://www.bestbuy.com/product/hp-omnibook-x-flip/JJGQJRKGTJ/sku/6613868 or https://www.bestbuy.com/site/-/6613868.p?skuId=6613868."
2382
+ }
2383
+ ]
2384
+ },
2173
2385
  {
2174
2386
  "name": "homedepot_search",
2175
2387
  "title": "Scrape Home Depot product search",
@@ -2372,6 +2584,34 @@ var PLUGINS = [
2372
2584
  }
2373
2585
  ]
2374
2586
  },
2587
+ {
2588
+ "name": "etsy_product",
2589
+ "title": "Scrape one Etsy listing's full detail",
2590
+ "category": "E-commerce",
2591
+ "path": "/marketplace/etsy-product",
2592
+ "fixed": {},
2593
+ "description": 'Fetches one Etsy listing (by `listing_id` or `url`) and returns it as JSON: `listingId`, `title`, `price` (the lowest price when variations differ, `priceMax` the highest), `originalPrice` / `onSale` / `discountPercent` / `saleEnds` during a sale, `currency` and `shopperRegion`, `availability` and `quantityAvailable`, `rating` and `reviewCount`, `reviewSummary` (item quality, shipping and service scores, recommend percentage, review tags and categories), the first `reviews`, `shop` (name, id, owner, location, rating, review count, sales, years on Etsy, Star Seller), `variations` (each menu with its options and their prices), `description`, `materials`, `highlights`, `category`, `shipping` (cost, origin, ships from, estimated delivery, processing time, returns), `images` and `video`. Prices, shipping cost and VAT follow the shopper location Etsy assigns to the request, which can differ from `proxy_country`: `currency` and `shopperRegion` say which one a response used (e.g. EUR / BE), so read them before comparing prices. Shop review and sales counts are Etsy\'s rounded figures ("4.7k sales" is 4700). Companion to `/marketplace/etsy-search`.',
2594
+ "params": [
2595
+ {
2596
+ "name": "listing_id",
2597
+ "type": "string",
2598
+ "required": false,
2599
+ "description": "Etsy listing number, e.g. '1702915637' (the number in etsy.com/listing/1702915637/...)."
2600
+ },
2601
+ {
2602
+ "name": "url",
2603
+ "type": "string",
2604
+ "required": false,
2605
+ "description": "Instead of `listing_id`: an etsy.com listing link, e.g. https://www.etsy.com/listing/1702915637/solstice-mug."
2606
+ },
2607
+ {
2608
+ "name": "proxy_country",
2609
+ "type": "string",
2610
+ "required": false,
2611
+ "description": "Proxy country the request is sent from (ISO-2). Defaults to US. Etsy prices in the currency of the shopper location it assigns, which can differ from this country; `currency` and `shopperRegion` say which one a response used."
2612
+ }
2613
+ ]
2614
+ },
2375
2615
  {
2376
2616
  "name": "shein_search",
2377
2617
  "title": "Scrape SHEIN product search",
@@ -2513,6 +2753,42 @@ var PLUGINS = [
2513
2753
  }
2514
2754
  ]
2515
2755
  },
2756
+ {
2757
+ "name": "aliexpress_product",
2758
+ "title": "Scrape one AliExpress product",
2759
+ "category": "E-commerce",
2760
+ "path": "/goods/aliexpress-product",
2761
+ "fixed": {},
2762
+ "description": "Returns one AliExpress item by `product_id` or `url`, priced in `currency` and shipped to `country`, as JSON: `productId`, `url`, `title`, `price` (the default SKU), `priceMin` / `priceMax` across SKUs, `priceFormatted`, `originalPrice` / `originalPriceMax`, `discount` and `discountPercent`, `currency`, `rating`, `reviewCount`, `soldText` and `orders`, `inStock`, `store` (name, ids, link, country, open since, positive feedback, ratings), `shipping` (each option: method, fee, free, ships from / to, delivery days and dates, deliverable), `skuProperties` (e.g. colour, size, ships from, with images), `variants` (every SKU with its attributes, price, original price, availability, stock and image), `specifications`, `images`, `categoryId` and `descriptionUrl` (the seller's HTML description). One unit per call.",
2763
+ "params": [
2764
+ {
2765
+ "name": "product_id",
2766
+ "type": "string",
2767
+ "required": false,
2768
+ "description": "AliExpress item id, e.g. '1005010503016514' (the number in /item/<id>.html; `productId` from /goods/aliexpress-search)."
2769
+ },
2770
+ {
2771
+ "name": "url",
2772
+ "type": "string",
2773
+ "required": false,
2774
+ "description": "Instead of `product_id`: an AliExpress item link, e.g. https://www.aliexpress.com/item/1005010503016514.html (any storefront: .com, .us, de., fr. ...)."
2775
+ },
2776
+ {
2777
+ "name": "country",
2778
+ "type": "string",
2779
+ "required": false,
2780
+ "description": "Ship-to country (ISO-2, e.g. 'US', 'DE', 'GB'). Shipping options, delivery times and whether the item is sold at all depend on it.",
2781
+ "default": "US"
2782
+ },
2783
+ {
2784
+ "name": "currency",
2785
+ "type": "string",
2786
+ "required": false,
2787
+ "description": "Price currency, e.g. 'USD', 'EUR', 'GBP'. One of: USD, EUR, GBP, CAD, AUD, NZD, CHF, SEK, NOK, DKK, PLN, CZK, HUF, RON, BGN, TRY, ILS, AED, SAR, JPY, KRW, SGD, MYR, THB, IDR, PHP, VND, INR, BRL, MXN, CLP, COP, PEN, ZAR, UAH, KZT.",
2788
+ "default": "USD"
2789
+ }
2790
+ ]
2791
+ },
2516
2792
  {
2517
2793
  "name": "alibaba_search",
2518
2794
  "title": "Scrape Alibaba.com product search results",
@@ -3610,6 +3886,826 @@ var PLUGINS = [
3610
3886
  }
3611
3887
  ]
3612
3888
  },
3889
+ {
3890
+ "name": "mediamarkt_search",
3891
+ "title": "Scrape MediaMarkt search",
3892
+ "category": "E-commerce",
3893
+ "path": "/marketplace/mediamarkt-search",
3894
+ "fixed": {},
3895
+ "description": "Searches a MediaMarkt shop (`country` de, at, ch, nl, be, es, it = MediaWorld, pl, hu, tr; `banner=saturn` for Saturn Germany) for `query` and returns `products`, each with `position`, `productId`, `offerId` (marketplace offers), `title`, `brand`, `ean`, `url`, `image`, `breadcrumbs`, `price`, `strikePrice` and `strikePriceType` (RRP = manufacturer's recommended price, LOP = lowest price of the last 30 days), `discountPercent`, `currency`, `installment`, `marketplace`, `seller` (marketplace seller with rating), `rating`, `reviewCount`, `availability` (online status, deliverable, store pickup, delivery window and shipping cost), `energyEfficiency`, `highlights` (key features), `badges`, `refurbishedFrom` and `sponsored`. Also `total`, `lastPage`, `nextPage` and `listingUrl` (the category or brand listing MediaMarkt sends this query to, when it does). `sort` orders the results; `page` and `max_results` page through them (MediaMarkt shows 12 per page and 30 pages at most). One unit per results page used.",
3896
+ "params": [
3897
+ {
3898
+ "name": "query",
3899
+ "type": "string",
3900
+ "required": true,
3901
+ "description": "What to search for, e.g. 'iphone 17' or 'waschmaschine'."
3902
+ },
3903
+ {
3904
+ "name": "country",
3905
+ "type": "string",
3906
+ "required": false,
3907
+ "description": "MediaMarkt shop: de, at, ch, nl, be, es, it, pl, hu, tr (default de; it = MediaWorld).",
3908
+ "default": "de"
3909
+ },
3910
+ {
3911
+ "name": "banner",
3912
+ "type": "string",
3913
+ "required": false,
3914
+ "description": "mediamarkt (default) or saturn (Saturn Germany, with country=de).",
3915
+ "default": "mediamarkt"
3916
+ },
3917
+ {
3918
+ "name": "language",
3919
+ "type": "string",
3920
+ "required": false,
3921
+ "description": "Site language where the shop has several: be = nl or fr, ch = de, fr or it. Default: the shop's first."
3922
+ },
3923
+ {
3924
+ "name": "sort",
3925
+ "type": "string",
3926
+ "required": false,
3927
+ "description": "Result order: relevance, price_asc, price_desc, rating, bestseller, newest.",
3928
+ "default": "relevance"
3929
+ },
3930
+ {
3931
+ "name": "page",
3932
+ "type": "integer",
3933
+ "required": false,
3934
+ "description": "First results page to read (1-30).",
3935
+ "default": 1
3936
+ },
3937
+ {
3938
+ "name": "max_results",
3939
+ "type": "integer",
3940
+ "required": false,
3941
+ "description": "Products to collect across pages, 1-120. A page holds 12 products; each page is one unit.",
3942
+ "default": 12
3943
+ }
3944
+ ]
3945
+ },
3946
+ {
3947
+ "name": "mediamarkt_product",
3948
+ "title": "Scrape a MediaMarkt product",
3949
+ "category": "E-commerce",
3950
+ "path": "/marketplace/mediamarkt-product",
3951
+ "fixed": {},
3952
+ "description": "Returns one MediaMarkt / Saturn / MediaWorld product by `product_id` (with `country` / `banner`) or `url`: `productId`, `title`, `rawTitle`, `brand`, `ean`, `url`, `breadcrumbs`, `kind`, `price`, `strikePrice`, `strikePriceType`, `discountPercent`, `currency`, `vatRate`, `installment`, `marketplace`, `seller`, `rating`, `reviewCount`, `ratingBreakdown` (1-5 stars), `availability` (online status, deliverable, store pickup, delivery window and shipping cost), `energyEfficiency` (class, label and data sheet), `highlights`, `specifications` (group / name / value / unit), `images`, `variants` (dimension, value, product id, price, online status), `badges`, `refurbishedFrom`, `description` and the latest `reviews`. Store-level stock needs a chosen store and is not included. One unit per call.",
3953
+ "params": [
3954
+ {
3955
+ "name": "product_id",
3956
+ "type": "string",
3957
+ "required": false,
3958
+ "description": "MediaMarkt product number, e.g. 3071615 (the number at the end of a product link, or `productId` from the search results)."
3959
+ },
3960
+ {
3961
+ "name": "url",
3962
+ "type": "string",
3963
+ "required": false,
3964
+ "description": "A product link, e.g. https://www.mediamarkt.de/de/product/_apple-iphone-18-pro-max-256gb-silver-3071615.html. Used instead of `product_id`; its shop and language win over `country`, `banner` and `language`."
3965
+ },
3966
+ {
3967
+ "name": "country",
3968
+ "type": "string",
3969
+ "required": false,
3970
+ "description": "MediaMarkt shop: de, at, ch, nl, be, es, it, pl, hu, tr (default de; it = MediaWorld).",
3971
+ "default": "de"
3972
+ },
3973
+ {
3974
+ "name": "banner",
3975
+ "type": "string",
3976
+ "required": false,
3977
+ "description": "mediamarkt (default) or saturn (Saturn Germany, with country=de).",
3978
+ "default": "mediamarkt"
3979
+ },
3980
+ {
3981
+ "name": "language",
3982
+ "type": "string",
3983
+ "required": false,
3984
+ "description": "Site language where the shop has several: be = nl or fr, ch = de, fr or it. Default: the shop's first."
3985
+ }
3986
+ ]
3987
+ },
3988
+ {
3989
+ "name": "cdiscount_search",
3990
+ "title": "Scrape Cdiscount search",
3991
+ "category": "E-commerce",
3992
+ "path": "/marketplace/cdiscount-search",
3993
+ "fixed": {},
3994
+ "description": "Searches Cdiscount (France) for `query` and returns `products`, each with `position`, `productId` (the SKU), `offerId`, `title`, `url`, `image`, `images`, `price`, `strikePrice` (the crossed-out reference price, only when Cdiscount shows one), `discountPercent`, `currency` (EUR), `rating`, `reviewCount`, `seller` (id, name, `isCdiscount`), `marketplace`, `fulfilledByCdiscount`, `cdiscountAVolonte`, `freeShipping`, `deliveryLabel`, `condition`, `highlights` (key specs), `badges` (promotions) and `brandId`. Also `total`, `lastPage` and `nextPage`. Search results show the brand only as an id; the product endpoint has the brand name. `page` and `max_results` page through the results. One unit per Cdiscount page read.",
3995
+ "params": [
3996
+ {
3997
+ "name": "query",
3998
+ "type": "string",
3999
+ "required": true,
4000
+ "description": "What to search for, e.g. 'iphone 15' or 'machine a laver'."
4001
+ },
4002
+ {
4003
+ "name": "page",
4004
+ "type": "integer",
4005
+ "required": false,
4006
+ "description": "First Cdiscount results page to read (1-100).",
4007
+ "default": 1
4008
+ },
4009
+ {
4010
+ "name": "max_results",
4011
+ "type": "integer",
4012
+ "required": false,
4013
+ "description": "Products to collect across pages, 1-300. A page holds about 47 products; each page is one unit.",
4014
+ "default": 47
4015
+ }
4016
+ ]
4017
+ },
4018
+ {
4019
+ "name": "cdiscount_product",
4020
+ "title": "Scrape a Cdiscount product",
4021
+ "category": "E-commerce",
4022
+ "path": "/marketplace/cdiscount-product",
4023
+ "fixed": {},
4024
+ "description": "Returns one Cdiscount (France) product by `sku` or `url`: `productId`, `offerId`, `title`, `brand`, `ean`, `manufacturerReference`, `url`, `breadcrumbs`, `price`, `priceWithoutVat`, `strikePrice` and `strikePriceType`, `discountPercent`, `ecoParticipation`, `currency`, `available`, `maxQuantity`, `preorder`, `condition`, `seller` (Cdiscount or the marketplace seller), `marketplace`, `fulfilledByCdiscount`, `cdiscountAVolonte`, `delivery` (free shipping, label, ships from), `offers` (count of new and used offers and the lowest price of each), `rating`, `reviewCount`, `ratingBreakdown` (1-5 stars), `criteriaRatings`, `highlights`, `specifications` (group / name / value), `description`, `images`, `videos`, `variants` (attributes, price, url), `energyClass`, `repairabilityIndex`, `installments`, `badges`, `documents` and the latest `reviews`. The individual marketplace offers and their sellers' ratings are not included. One unit per call.",
4025
+ "params": [
4026
+ {
4027
+ "name": "sku",
4028
+ "type": "string",
4029
+ "required": false,
4030
+ "description": "Cdiscount product id (SKU), e.g. ip17256black - the part after f-<number>- in a product link, or `productId` from the search results."
4031
+ },
4032
+ {
4033
+ "name": "url",
4034
+ "type": "string",
4035
+ "required": false,
4036
+ "description": "A Cdiscount product link, e.g. https://www.cdiscount.com/telephonie/telephone-mobile/apple-iphone-17-256gb-black/f-14404-ip17256black.html. Used instead of `sku`."
4037
+ }
4038
+ ]
4039
+ },
4040
+ {
4041
+ "name": "idealo_search",
4042
+ "title": "Scrape idealo search",
4043
+ "category": "E-commerce",
4044
+ "path": "/marketplace/idealo-search",
4045
+ "fixed": {},
4046
+ "description": "Searches idealo (price comparison; `country` de, at, uk, fr, it or es) for `query` and returns `products`, each with `position`, `type` (product = a price comparison of many shops, offer = a single shop offer idealo has not matched to a product), `productId`, `offerId`, `title`, `subtitle`, `characteristics`, `url` (the product's price comparison, or the shop link of a single offer), `image`, `lowestPrice`, `basePrice` (unit price text, when idealo shows one), `offerCount`, `usedOnly`, `cheapestShop` (id, name, shipping cost, delivery, free-return days), `rating` (stars, rounded to half a star by idealo), `reviewCount`, `testGrade` (the average press test grade, where 1 is best), `energyClass`, `bargainSavingPercent`, `bestsellerRank`, `categoryId` and `variantOf`. Also `total`, `productCount`, `lastPage` and `nextPage`, and `currency`. `sort` orders the results (relevance or price_asc); `page` and `max_results` page through them. Use `/marketplace/idealo-offers` for all shop offers of one product. One unit per idealo page read.",
4047
+ "params": [
4048
+ {
4049
+ "name": "query",
4050
+ "type": "string",
4051
+ "required": true,
4052
+ "description": "What to search for, e.g. 'iphone 17' or 'kaffeevollautomat'."
4053
+ },
4054
+ {
4055
+ "name": "country",
4056
+ "type": "string",
4057
+ "required": false,
4058
+ "description": "idealo site: de, at, uk, fr, it, es (default de; uk = idealo.co.uk).",
4059
+ "default": "de"
4060
+ },
4061
+ {
4062
+ "name": "sort",
4063
+ "type": "string",
4064
+ "required": false,
4065
+ "description": "Result order: relevance, price_asc (price_asc = cheapest first).",
4066
+ "default": "relevance"
4067
+ },
4068
+ {
4069
+ "name": "page",
4070
+ "type": "integer",
4071
+ "required": false,
4072
+ "description": "First idealo results page to read (1-100).",
4073
+ "default": 1
4074
+ },
4075
+ {
4076
+ "name": "max_results",
4077
+ "type": "integer",
4078
+ "required": false,
4079
+ "description": "Products to collect across pages, 1-300. A page holds 60 products; each page is one unit.",
4080
+ "default": 60
4081
+ }
4082
+ ]
4083
+ },
4084
+ {
4085
+ "name": "idealo_offers",
4086
+ "title": "Scrape idealo offers of a product",
4087
+ "category": "E-commerce",
4088
+ "path": "/marketplace/idealo-offers",
4089
+ "fixed": {},
4090
+ "description": "Returns one idealo price comparison by `product_id` or `url` (`country` de, at, uk, fr, it or es): the product (`productId`, `title`, `brand`, `url`, `images`, `lowestPrice`, `highestPrice`, `currency`, `offerCount`, `rating`, `reviewCount`, `pros`, `cons`, `variants` with their own price range and offer count) and `offers`, cheapest first, each with `position`, `offerKey`, `title` (the shop's own product title), `price`, `shippingCost`, `totalPrice`, `delivery` (the shop's delivery estimate as idealo prints it), `carriers`, `freeReturns`, `paymentMethods`, `shop` (id, name, rating, rating count, marketplace and the marketplace seller), `variantId`, `variantName` and `url` (idealo's click-out link). Offers are the new-item offers idealo lists by default; `max_results` collects more than the first 20. One unit for the product and its first 20 offers, plus one per further block of 20.",
4091
+ "params": [
4092
+ {
4093
+ "name": "product_id",
4094
+ "type": "string",
4095
+ "required": false,
4096
+ "description": "idealo product id, e.g. 207643424 (the number in a price comparison link, or `productId` from the search results)."
4097
+ },
4098
+ {
4099
+ "name": "url",
4100
+ "type": "string",
4101
+ "required": false,
4102
+ "description": "An idealo price comparison link, e.g. https://www.idealo.de/preisvergleich/OffersOfProduct/207643424_-iphone-17-apple.html. Used instead of `product_id`; its site sets the country."
4103
+ },
4104
+ {
4105
+ "name": "country",
4106
+ "type": "string",
4107
+ "required": false,
4108
+ "description": "idealo site: de, at, uk, fr, it, es (default de; uk = idealo.co.uk)."
4109
+ },
4110
+ {
4111
+ "name": "max_results",
4112
+ "type": "integer",
4113
+ "required": false,
4114
+ "description": "Offers to collect, 1-200. The first 20 come with the product; each further block of 20 is one more unit.",
4115
+ "default": 20
4116
+ }
4117
+ ]
4118
+ },
4119
+ {
4120
+ "name": "rakuten_search",
4121
+ "title": "Scrape Rakuten Ichiba (Japan) product search",
4122
+ "category": "E-commerce",
4123
+ "path": "/marketplace/rakuten-search",
4124
+ "fixed": {},
4125
+ "description": "Searches Rakuten Ichiba (rakuten.co.jp) for `query` and returns `products`, each with `position`, `itemId`, `itemCode`, `shopId` / `shopCode` / `shopName`, `title`, `subtitle`, `url`, `price` (yen, tax included; `priceMax` when variants are priced differently), `points` (Rakuten points a signed-out shopper earns) and `pointMultiplier`, `rating`, `reviewCount`, `shippingFee` / `freeShipping`, `deliveryEstimate`, `nextDayDelivery`, `unitPrice` / `unitPriceText` / `packCount`, `subscriptionPrice`, `saleEnds`, `ranking` (daily genre rank), `soldOut`, `used`, `preOrder`, `superDeal`, `hasVariants`, `genreId` / `genres`, `tags` and `image` / `images`. Rakuten's sponsored results come back in `sponsored` (same fields). Also `totalResults`, `reachableResults` (how far Rakuten lets the search be paged), `relatedKeywords` and `nextPage`. Sort with `sort`, filter with `min_price` / `max_price` / `genre_id`, start at `page` and collect up to `max_results` across pages (45 per page, each page billed as one request, see `pagesFetched`). `url` takes a Rakuten search link instead of `query`.",
4126
+ "params": [
4127
+ {
4128
+ "name": "query",
4129
+ "type": "string",
4130
+ "required": false,
4131
+ "description": "What to search, in Japanese or English, e.g. 'iphone', '\u30B3\u30FC\u30D2\u30FC' or '\u30CA\u30A4\u30AD \u30B9\u30CB\u30FC\u30AB\u30FC'."
4132
+ },
4133
+ {
4134
+ "name": "sort",
4135
+ "type": "string",
4136
+ "required": false,
4137
+ "description": "Order: relevance, price_low, price_high, newest, review_count, review_score.",
4138
+ "default": "relevance"
4139
+ },
4140
+ {
4141
+ "name": "page",
4142
+ "type": "integer",
4143
+ "required": false,
4144
+ "description": "1-based results page to start from (1-150; Rakuten lets a search be paged through to 6750 items).",
4145
+ "default": 1
4146
+ },
4147
+ {
4148
+ "name": "min_price",
4149
+ "type": "integer",
4150
+ "required": false,
4151
+ "description": "Lowest price, in yen."
4152
+ },
4153
+ {
4154
+ "name": "max_price",
4155
+ "type": "integer",
4156
+ "required": false,
4157
+ "description": "Highest price, in yen."
4158
+ },
4159
+ {
4160
+ "name": "genre_id",
4161
+ "type": "string",
4162
+ "required": false,
4163
+ "description": "Limit to one Rakuten genre (category) id, e.g. '100227' (food) - every result's `genreId` is one."
4164
+ },
4165
+ {
4166
+ "name": "max_results",
4167
+ "type": "integer",
4168
+ "required": false,
4169
+ "description": "Items to collect across pages (1-450); Rakuten serves 45 per page and each page read is billed as one request.",
4170
+ "default": 45
4171
+ },
4172
+ {
4173
+ "name": "url",
4174
+ "type": "string",
4175
+ "required": false,
4176
+ "description": "Instead of `query`: a Rakuten search link, e.g. https://search.rakuten.co.jp/search/mall/coffee/?s=2 (its keyword, genre, sort, page and price filter are used)."
4177
+ }
4178
+ ]
4179
+ },
4180
+ {
4181
+ "name": "rakuten_product",
4182
+ "title": "Scrape one Rakuten Ichiba (Japan) item's full detail",
4183
+ "category": "E-commerce",
4184
+ "path": "/marketplace/rakuten-product",
4185
+ "fixed": {},
4186
+ "description": "Fetches one Rakuten Ichiba item (by `product_id` '<shopCode>/<itemCode>' or `url`) and returns it as JSON: `itemId`, `itemCode`, `shopId` / `shopCode` / `shopName`, `url`, `title`, `tagline`, `description`, `condition`, `price` / `priceMax` (yen, tax included), `freeShipping`, `available`, `stockQuantity` (when the shop shares it), `deliveryMessage`, `orderLimit`, `rating`, `reviewCount`, `reviewsUrl`, `genreId`, `breadcrumbs`, `shopCategories`, `attributes` (name / value / unit), `variantOptions`, `variants` (every SKU with its options, price, availability, stock, JAN code and image) and `images`. The top-level price and stock are those of `variant_id` when given. Rakuten points are shown on search results (`/marketplace/rakuten-search`), not here. Companion to `/marketplace/rakuten-search`.",
4187
+ "params": [
4188
+ {
4189
+ "name": "product_id",
4190
+ "type": "string",
4191
+ "required": false,
4192
+ "description": "The item as '<shopCode>/<itemCode>', e.g. 'dai-one/15-128-a' (the two path parts of an item link; search results give them as `shopCode` and `itemCode`)."
4193
+ },
4194
+ {
4195
+ "name": "url",
4196
+ "type": "string",
4197
+ "required": false,
4198
+ "description": "Instead of `product_id`: a Rakuten item link, e.g. https://item.rakuten.co.jp/dai-one/15-128-a/ (a `variantId` in it is used)."
4199
+ },
4200
+ {
4201
+ "name": "variant_id",
4202
+ "type": "string",
4203
+ "required": false,
4204
+ "description": "SKU whose price and stock fill the top-level fields, e.g. 'r-sku00003161'; by default the item's lowest price and overall availability. Every SKU is listed in `variants` either way."
4205
+ }
4206
+ ]
4207
+ },
4208
+ {
4209
+ "name": "indiamart_search",
4210
+ "title": "Scrape IndiaMART B2B product search",
4211
+ "category": "E-commerce",
4212
+ "path": "/marketplace/indiamart-search",
4213
+ "fixed": {},
4214
+ "description": "Searches IndiaMART for `query` and returns `products`, each with `position`, `productId`, `title`, `url` (the IndiaMART product page, or the supplier's catalogue page when `hasProductPage` is false - only products with a page can be fetched with `/marketplace/indiamart-product`), `price` (number, null when the supplier asks for a quote) and `priceText`, `currency`, `unit` (the price is per this unit), `minOrderQuantity`, `category` / `categoryId`, `specifications` (name / value), `description`, `image`, `brochureUrl`, `supplier` (`id`, `name`, `city`, `district`, `state`, `country`, `businessType`, `verifiedExporter`, `trustSeal`, `gstVerified`, `iecVerified`, `rating`, `ratingCount`, `memberSince`, `exporterSince`, `exportsTo`, `website`) and `moreFromSupplier` (the supplier's other matching products). IndiaMART shows visitors outside India its export catalogue, so results are IndiaMART's verified exporters, 10 a page and 2 pages (up to 20 products per search); `totalResults` is IndiaMART's own count of all matches. Supplier phone numbers, e-mails and contact names are not returned. `url` takes an IndiaMART search link instead of `query`.",
4215
+ "params": [
4216
+ {
4217
+ "name": "query",
4218
+ "type": "string",
4219
+ "required": false,
4220
+ "description": "What to search, e.g. 'steel pipe', 'cotton t shirt' or 'solar panel'."
4221
+ },
4222
+ {
4223
+ "name": "page",
4224
+ "type": "integer",
4225
+ "required": false,
4226
+ "description": "1-based results page to start from (1-2); 10 products a page.",
4227
+ "default": 1
4228
+ },
4229
+ {
4230
+ "name": "max_results",
4231
+ "type": "integer",
4232
+ "required": false,
4233
+ "description": "Products to collect across pages (1-20); IndiaMART serves 10 per page and shows 2 pages. Each page read is billed as one request.",
4234
+ "default": 20
4235
+ },
4236
+ {
4237
+ "name": "url",
4238
+ "type": "string",
4239
+ "required": false,
4240
+ "description": "Instead of `query`: an IndiaMART search link, e.g. https://dir.indiamart.com/search.mp?ss=steel+pipe (its keyword is used)."
4241
+ }
4242
+ ]
4243
+ },
4244
+ {
4245
+ "name": "indiamart_product",
4246
+ "title": "Scrape one IndiaMART product and its supplier",
4247
+ "category": "E-commerce",
4248
+ "path": "/marketplace/indiamart-product",
4249
+ "fixed": {},
4250
+ "description": "Fetches one IndiaMART product (by `product_id` or `url`) and returns it as JSON: `productId`, `title`, `name`, `url`, `price` (null when the supplier asks for a quote) / `priceText`, `currency`, `unit`, `minOrderQuantity`, `description`, `specifications` (name / value), `category` / `categoryId` / `parentCategory` / `group`, `deliveryTime`, `packagingDetails`, `productionCapacity`, `portOfDispatch`, `paymentTerms`, `image` / `images`, `brochureUrl` and `supplier` (`id`, `name`, `city`, `state`, `country`, `businessType`, `additionalBusiness`, `yearEstablished`, `employees`, `annualTurnover`, `legalStatus`, `gstVerified`, `trustSeal`, `mobileVerified`, `emailVerified`, `rating`, `ratingCount`, `memberSince`, `topExportCountries`, `website`, `logo`). Supplier phone numbers, e-mails, people's names and street addresses are not returned. Companion to `/marketplace/indiamart-search`.",
4251
+ "params": [
4252
+ {
4253
+ "name": "product_id",
4254
+ "type": "string",
4255
+ "required": false,
4256
+ "description": "IndiaMART product id, e.g. '2854548650133' (the number at the end of a /proddetail/ link; search results give it as `productId`)."
4257
+ },
4258
+ {
4259
+ "name": "url",
4260
+ "type": "string",
4261
+ "required": false,
4262
+ "description": "Instead of `product_id`: an IndiaMART product link, e.g. https://www.indiamart.com/proddetail/stainless-steel-347h-pipes-2854548650133.html."
4263
+ }
4264
+ ]
4265
+ },
4266
+ {
4267
+ "name": "bedbathandbeyond_search",
4268
+ "title": "Scrape Bed Bath & Beyond product search",
4269
+ "category": "E-commerce",
4270
+ "path": "/marketplace/bedbathandbeyond-search",
4271
+ "fixed": {},
4272
+ "description": "Searches Bed Bath & Beyond (bedbathandbeyond.com, US) for `query` and returns the products as JSON: `productId`, `sku`, `title`, `url`, `image`, `price` (the lowest option price) and `priceMax` (the top of the range when options differ), `priceText`, `priceType` (SALE or STANDARD), `currency` (USD), `comparePrice` with `compareType` (MSRP, COMPARE_AT or WAS), `discountPercent`, `regularPrice`, `hasOptions`, `optionCount`, `rating`, `reviewCount`, `badge` (e.g. Best Seller), `onSale`, `fastDelivery`, `rewards` (Welcome Rewards dollars) and `sponsored`. Sort with `sort`, start at `page`, and collect up to `max_results` across pages (about 60 per page, each page billed as one request, see `pagesFetched`). Keywords the site maps to a department (e.g. 'rugs') return that department's listing, named in `redirectedTo`. `url` takes a search link instead of `query`.",
4273
+ "params": [
4274
+ {
4275
+ "name": "query",
4276
+ "type": "string",
4277
+ "required": false,
4278
+ "description": "What to search, e.g. 'bath towels', 'office chair' or 'table lamp'."
4279
+ },
4280
+ {
4281
+ "name": "sort",
4282
+ "type": "string",
4283
+ "required": false,
4284
+ "description": "Order: relevance, on_sale, best_selling, price_low, price_high, rating, newest.",
4285
+ "default": "relevance"
4286
+ },
4287
+ {
4288
+ "name": "page",
4289
+ "type": "integer",
4290
+ "required": false,
4291
+ "description": "1-based results page to start from (1-100).",
4292
+ "default": 1
4293
+ },
4294
+ {
4295
+ "name": "max_results",
4296
+ "type": "integer",
4297
+ "required": false,
4298
+ "description": "Products to collect across pages (1-300); the site serves about 60 per page and each page fetched is billed as one request.",
4299
+ "default": 60
4300
+ },
4301
+ {
4302
+ "name": "url",
4303
+ "type": "string",
4304
+ "required": false,
4305
+ "description": "Instead of `query`: a Bed Bath & Beyond search link, e.g. https://www.bedbathandbeyond.com/search?keywords=towels (its sort and page are used)."
4306
+ }
4307
+ ]
4308
+ },
4309
+ {
4310
+ "name": "bedbathandbeyond_product",
4311
+ "title": "Scrape one Bed Bath & Beyond product's full detail",
4312
+ "category": "E-commerce",
4313
+ "path": "/marketplace/bedbathandbeyond-product",
4314
+ "fixed": {},
4315
+ "description": "Fetches one Bed Bath & Beyond product (by id or link) and returns it as JSON: `productId`, `sku`, `url`, `title`, `brand`, `brandUrl`, `manufacturerPartNumber`, `price` with `priceLabel` (e.g. 'Sale Starts at' when options are priced differently), `comparePrice` with `compareLabel` (MSRP, Was, At other retailer), `savings`, `savingsPercent`, `currency` (USD), `inStock`, `rating`, `reviewCount`, `ratingHistogram`, `badge`, `shortDescription`, `description`, `countryOfOrigin`, `freeShipping`, `internationalShipping`, `firstListed`, `breadcrumbs`, `specifications` (group / name / value), `optionCount`, `defaultOptionId`, `options` (up to 100: option id, title, size / colour attributes, price, regular price, compare price, on-sale flag, stock and quantity on hand), `images` and `videos`. Prices are those shown to a signed-out shopper. Companion to `/marketplace/bedbathandbeyond-search`.",
4316
+ "params": [
4317
+ {
4318
+ "name": "product",
4319
+ "type": "string",
4320
+ "required": true,
4321
+ "description": "A Bed Bath & Beyond product id (e.g. '5296998', the number before /product.html) or a product link."
4322
+ }
4323
+ ]
4324
+ },
4325
+ {
4326
+ "name": "petco_search",
4327
+ "title": "Scrape Petco product search",
4328
+ "category": "E-commerce",
4329
+ "path": "/marketplace/petco-search",
4330
+ "fixed": {},
4331
+ "description": "Searches Petco (petco.com, US) for `query` and returns the products as JSON: `sku`, `productId`, `title`, `familyName`, `brand`, `url`, `image`, `price`, `listPrice`, `autoshipPrice` (the Repeat Delivery price), `onSale`, `currency` (USD), `rating`, `reviewCount`, `description`, `category`, `autoshipEligible`, `pickupEligible`, `sameDayDeliveryEligible`, `inStoreOnly`, `prescriptionFood`, `attributes` (brand, flavour, life stage...) and `variations` (every size / colour with its SKU, url and prices). Sort with `sort`, narrow with `brand`, `fulfillment` (delivery, autoship, pickup, same_day) and `min_price` / `max_price`, start at `page` and collect up to `max_results` (48 per page, each page billed as one request, see `pagesFetched`). A term Petco sends to a brand or category page (e.g. a brand name) returns that page's listing, named in `redirectedTo`. Prices are the online prices a signed-out shopper sees; store-specific stock and member (Vital Care) prices are not included.",
4332
+ "params": [
4333
+ {
4334
+ "name": "query",
4335
+ "type": "string",
4336
+ "required": false,
4337
+ "description": "What to search, e.g. 'dog food', 'cat litter' or 'fish tank'."
4338
+ },
4339
+ {
4340
+ "name": "sort",
4341
+ "type": "string",
4342
+ "required": false,
4343
+ "description": "Order: relevance, price_low, price_high, rating, popular, newest, name_asc, name_desc.",
4344
+ "default": "relevance"
4345
+ },
4346
+ {
4347
+ "name": "page",
4348
+ "type": "integer",
4349
+ "required": false,
4350
+ "description": "1-based results page to start from (1-200), 48 products per page as on petco.com.",
4351
+ "default": 1
4352
+ },
4353
+ {
4354
+ "name": "max_results",
4355
+ "type": "integer",
4356
+ "required": false,
4357
+ "description": "Products to collect across pages (1-480); each page of 48 fetched is billed as one request.",
4358
+ "default": 48
4359
+ },
4360
+ {
4361
+ "name": "brand",
4362
+ "type": "string",
4363
+ "required": false,
4364
+ "description": "Only this brand, as petco.com names it (e.g. 'Purina Pro Plan'; the `brands` list of a search shows the names)."
4365
+ },
4366
+ {
4367
+ "name": "fulfillment",
4368
+ "type": "string",
4369
+ "required": false,
4370
+ "description": "Only products offered this way: delivery, autoship, pickup, same_day."
4371
+ },
4372
+ {
4373
+ "name": "min_price",
4374
+ "type": "number",
4375
+ "required": false,
4376
+ "description": "Lowest price to include (USD)."
4377
+ },
4378
+ {
4379
+ "name": "max_price",
4380
+ "type": "number",
4381
+ "required": false,
4382
+ "description": "Highest price to include (USD)."
4383
+ },
4384
+ {
4385
+ "name": "url",
4386
+ "type": "string",
4387
+ "required": false,
4388
+ "description": "Instead of `query`: a petco.com search link, e.g. https://www.petco.com/shop/en/petcostore/search?query=dog%20food."
4389
+ }
4390
+ ]
4391
+ },
4392
+ {
4393
+ "name": "petco_product",
4394
+ "title": "Scrape one Petco product's full detail",
4395
+ "category": "E-commerce",
4396
+ "path": "/marketplace/petco-product",
4397
+ "fixed": {},
4398
+ "description": "Fetches one Petco product (by SKU or link) and returns it as JSON: `sku`, `catEntryId`, `parentSku`, `url`, `title`, `brand`, `upc`, `price`, `listPrice`, `autoshipPrice`, `pickupPrice`, `onSale`, `currency` (USD), `availability`, `inStock`, `availableQuantity` (online stock), `rating`, `reviewCount`, `ratingHistogram`, `recommendedPercent`, `description`, `highlights`, `ingredients`, `directions`, `specifications` (group / name / value), `attributes` (size / weight / colour of this variant), `dimensions`, `petType`, `category`, `breadcrumbs`, fulfillment flags (`autoshipEligible`, `pickupEligible`, `sameDayDeliveryEligible`, `onlineOnly`, `inStoreOnly`), `prescriptionRequired`, `discontinued`, `images`, `variants` (every size / colour with its SKU, url, prices and stock) and the first `reviews` (up to 10). A link's own variant is returned; a SKU picks that variant. Prices are the online prices a signed-out shopper sees (no member or store prices). Companion to `/marketplace/petco-search`.",
4399
+ "params": [
4400
+ {
4401
+ "name": "product",
4402
+ "type": "string",
4403
+ "required": true,
4404
+ "description": "A Petco SKU (the number a product link ends in, e.g. '3748364') or a petco.com product link."
4405
+ }
4406
+ ]
4407
+ },
4408
+ {
4409
+ "name": "neobits_product",
4410
+ "title": "Scrape one Neobits product",
4411
+ "category": "E-commerce",
4412
+ "path": "/marketplace/neobits-product",
4413
+ "fixed": {},
4414
+ "description": "Fetches one product from Neobits (neobits.com, US B2B electronics and IT reseller) by item number or link and returns it as JSON: `itemNumber`, `url`, `title`, `brand`, `brandUrl`, `mfrPartNumber`, `price`, `listPrice`, `savings`, `discountPercent`, `priceDrop`, `currency` (USD), `stockStatus` (e.g. In Stock, SHIPS SOON), `inStock`, `stockNote`, `leadTime` (the brand's average lead time when shown), `rating`, `reviewCount`, `questionCount`, `description`, `specifications` (name / value), `breadcrumbs` and `images`. Neobits search is not offered: the site gates its search and listing pages behind a reCAPTCHA for automated traffic.",
4415
+ "params": [
4416
+ {
4417
+ "name": "product",
4418
+ "type": "string",
4419
+ "required": true,
4420
+ "description": "A Neobits item number (the 'Item #' on a product page, e.g. '27956233') or a neobits.com product link (ending in _p<item>.html)."
4421
+ }
4422
+ ]
4423
+ },
4424
+ {
4425
+ "name": "lowes_search",
4426
+ "title": "Scrape Lowe's product search",
4427
+ "category": "E-commerce",
4428
+ "path": "/marketplace/lowes-search",
4429
+ "fixed": {},
4430
+ "description": "Searches Lowe's (lowes.com, US) for `query` at one store and returns `products`: `productId` (Lowe's item id), `itemNumber`, `modelNumber`, `brand`, `title`, `url`, `image`, `rating`, `reviewCount`, `price`, `wasPrice`, `savings`, `savingsPercent` and `saleEnds` (promotions), `clearance`, `minPrice` / `maxPrice` (items with options), `priceType` (store, network = Lowe's online price, sos = special order), `currency`, `availability` (`pickup` with the units on hand at the store, `parcel`, `delivery`, `expeditedDelivery`), `sponsored`, `marketplace`, `bullets` and `specifications`, plus `store` (the store the prices and stock are for) and paging totals. Set the store with `store_id` or `zip` (default: store 1845, Chicago-Brickyard, IL). Results come in Lowe's own order; `free_delivery` keeps free-delivery items only. Start at `page` and collect up to `max_results` across pages (24 per page, each page billed as one request, see `pagesFetched`). A broad keyword Lowe's sends to a category landing page (e.g. patio furniture) is answered from the landing page's first category tile that names the keyword; `category` names it (null for a plain search). A landing page without such a tile answers 404: search a more specific term.",
4431
+ "params": [
4432
+ {
4433
+ "name": "query",
4434
+ "type": "string",
4435
+ "required": false,
4436
+ "description": "What to search, e.g. 'cordless drill', 'garden hose' or 'interior paint'."
4437
+ },
4438
+ {
4439
+ "name": "page",
4440
+ "type": "integer",
4441
+ "required": false,
4442
+ "description": "1-based results page to start from (1-30, 24 products per page).",
4443
+ "default": 1
4444
+ },
4445
+ {
4446
+ "name": "max_results",
4447
+ "type": "integer",
4448
+ "required": false,
4449
+ "description": "Products to collect across pages (1-72); each page fetched is billed as one request.",
4450
+ "default": 24
4451
+ },
4452
+ {
4453
+ "name": "store_id",
4454
+ "type": "string",
4455
+ "required": false,
4456
+ "description": "Lowe's store number whose prices and stock to return, e.g. '1845'. Give this or `zip`; with neither, store 1845 (Chicago-Brickyard, IL) is used. The store used is named in `store`."
4457
+ },
4458
+ {
4459
+ "name": "zip",
4460
+ "type": "string",
4461
+ "required": false,
4462
+ "description": "US ZIP code; the nearest Lowe's store is used, e.g. '60639'."
4463
+ },
4464
+ {
4465
+ "name": "free_delivery",
4466
+ "type": "boolean",
4467
+ "required": false,
4468
+ "description": "Only items Lowe's delivers for free.",
4469
+ "default": false
4470
+ },
4471
+ {
4472
+ "name": "url",
4473
+ "type": "string",
4474
+ "required": false,
4475
+ "description": "Instead of `query`: a Lowe's search link, e.g. https://www.lowes.com/search?searchTerm=garden+hose (its offset and storeId are used)."
4476
+ }
4477
+ ]
4478
+ },
4479
+ {
4480
+ "name": "lowes_product",
4481
+ "title": "Scrape one Lowe's product",
4482
+ "category": "E-commerce",
4483
+ "path": "/marketplace/lowes-product",
4484
+ "fixed": {},
4485
+ "description": "Fetches one Lowe's product (by `product_id` or `url`) priced for one store and returns it as JSON: `productId`, `itemNumber`, `modelNumber`, `upc`, `brand`, `title`, `url`, `rating`, `reviewCount`, `price`, `wasPrice`, `savings`, `savingsPercent`, `saleEnds`, `clearance`, `priceType`, `currency`, `storeId`, `availability` (`pickup` with the units on hand at the store and at `nearbyStores`, `parcel`, `delivery`, `expeditedDelivery` with lead times), `description`, `bullets`, `specifications` (name / value / group), `images`, `videos`, `documents`, `category`, `dimensions`, `weightLbs`, `buyable` and `status`, plus `store`. Set the store with `store_id` or `zip` (default: store 1845, Chicago-Brickyard, IL). Companion to `/marketplace/lowes-search`.",
4486
+ "params": [
4487
+ {
4488
+ "name": "product_id",
4489
+ "type": "string",
4490
+ "required": false,
4491
+ "description": "Lowe's item id, e.g. '5016412045' (the number at the end of a product link; the `productId` of a search result)."
4492
+ },
4493
+ {
4494
+ "name": "url",
4495
+ "type": "string",
4496
+ "required": false,
4497
+ "description": "Instead of `product_id`: a Lowe's product link, e.g. https://www.lowes.com/pd/CRAFTSMAN-20-volt-Max-Drill/5016412045."
4498
+ },
4499
+ {
4500
+ "name": "store_id",
4501
+ "type": "string",
4502
+ "required": false,
4503
+ "description": "Lowe's store number whose prices and stock to return, e.g. '1845'. Give this or `zip`; with neither, store 1845 (Chicago-Brickyard, IL) is used. The store used is named in `store`."
4504
+ },
4505
+ {
4506
+ "name": "zip",
4507
+ "type": "string",
4508
+ "required": false,
4509
+ "description": "US ZIP code; the nearest Lowe's store is used, e.g. '60639'."
4510
+ }
4511
+ ]
4512
+ },
4513
+ {
4514
+ "name": "menards_search",
4515
+ "title": "Scrape Menards product search",
4516
+ "category": "E-commerce",
4517
+ "path": "/marketplace/menards-search",
4518
+ "fixed": {},
4519
+ "description": "Searches Menards (menards.com, US) for `query` and returns `products`: `itemId`, `sku` (the Menards SKU), `modelNumber` (when Menards lists it), `title`, `brand`, `url`, `image`, `price` (shelf price before the mail-in rebate), `regularPrice` (everyday low price), `onSale`, `rebate` and `rebateLabel` (Menards' rebate, usually 11%), `priceAfterRebate` (null when the maker's advertised-price policy moves it to checkout: `priceInCheckout` true, `minimumAdvertisedPrice`), `unitOfMeasure`, `currency`, `availability` (`pickup`, `delivery`, `stockAtStore`, `stockMessage`, `deliveryMessage`), `variationCount` and `categoryId`, plus `totalResults`, `facets` and `store` (the store the prices and stock are for). Set the store with `store_id` or `zip`; without one Menards shows its default online prices and no store stock. Sort with `sort`, filter with `min_price` / `max_price`, `in_stock_today`, `delivery_eligible` and `pickup_eligible`, start at `page` and collect up to `max_results` across pages (40 per page, each page billed as one request, see `pagesFetched`). A keyword Menards sends to a category returns that category's products (`redirectedTo`); a Menards SKU returns no products and the product link in `redirectedTo`. A keyword Menards sends to a page of category tiles (e.g. interior paint) or one with no matches answers 404.",
4520
+ "params": [
4521
+ {
4522
+ "name": "query",
4523
+ "type": "string",
4524
+ "required": true,
4525
+ "description": "What to search, e.g. 'cordless drill', 'garden hose' or '2x4 lumber'."
4526
+ },
4527
+ {
4528
+ "name": "sort",
4529
+ "type": "string",
4530
+ "required": false,
4531
+ "description": "Order: relevance, price_low, price_high, title_asc, title_desc, brand_asc, brand_desc.",
4532
+ "default": "relevance"
4533
+ },
4534
+ {
4535
+ "name": "page",
4536
+ "type": "integer",
4537
+ "required": false,
4538
+ "description": "1-based results page to start from (1-100, 40 products per page).",
4539
+ "default": 1
4540
+ },
4541
+ {
4542
+ "name": "max_results",
4543
+ "type": "integer",
4544
+ "required": false,
4545
+ "description": "Products to collect across pages (1-120); each page fetched is billed as one request.",
4546
+ "default": 40
4547
+ },
4548
+ {
4549
+ "name": "min_price",
4550
+ "type": "number",
4551
+ "required": false,
4552
+ "description": "Lowest price to include (USD)."
4553
+ },
4554
+ {
4555
+ "name": "max_price",
4556
+ "type": "number",
4557
+ "required": false,
4558
+ "description": "Highest price to include (USD)."
4559
+ },
4560
+ {
4561
+ "name": "store_id",
4562
+ "type": "string",
4563
+ "required": false,
4564
+ "description": "Menards store number whose prices and stock to return, e.g. '3181'. Give this or `zip`; with neither, Menards' default (online) prices are returned and `stockAtStore` is 0. The store used is named in `store`."
4565
+ },
4566
+ {
4567
+ "name": "zip",
4568
+ "type": "string",
4569
+ "required": false,
4570
+ "description": "US ZIP code; the nearest Menards store is used, e.g. '55401'."
4571
+ },
4572
+ {
4573
+ "name": "in_stock_today",
4574
+ "type": "boolean",
4575
+ "required": false,
4576
+ "description": "Only items in stock today at the store (needs `store_id` or `zip`).",
4577
+ "default": false
4578
+ },
4579
+ {
4580
+ "name": "delivery_eligible",
4581
+ "type": "boolean",
4582
+ "required": false,
4583
+ "description": "Only items eligible for delivery.",
4584
+ "default": false
4585
+ },
4586
+ {
4587
+ "name": "pickup_eligible",
4588
+ "type": "boolean",
4589
+ "required": false,
4590
+ "description": "Only items eligible for in-store pickup.",
4591
+ "default": false
4592
+ }
4593
+ ]
4594
+ },
4595
+ {
4596
+ "name": "menards_product",
4597
+ "title": "Scrape one Menards product",
4598
+ "category": "E-commerce",
4599
+ "path": "/marketplace/menards-product",
4600
+ "fixed": {},
4601
+ "description": "Fetches one Menards product (by `url` or `sku`) and returns it as JSON: `itemId`, `sku`, `modelNumber`, `title`, `brand`, `url`, `price` (shelf price), `regularPrice` (everyday low price), `onSale` and `saleEnds`, `minimumAdvertisedPrice` and `priceInCheckout` (items whose maker lets Menards show its price only in checkout: `price` is then null), `rebate`, `rebateLabel`, `rebateEnds`, `priceAfterRebate`, `offerPrice`, `currency`, `availability`, `storeId`, `description`, `features`, `specifications` (name / value), `images` and `breadcrumbs`. Prices are Menards' default online prices (the store in `storeId`); for one store's prices and stock use `/marketplace/menards-search` with `store_id` or `zip`.",
4602
+ "params": [
4603
+ {
4604
+ "name": "url",
4605
+ "type": "string",
4606
+ "required": false,
4607
+ "description": "A Menards product link, e.g. https://www.menards.com/main/electrical/electrical-tools-accessories/electrical-hand-tools/southwire-reg-7-1-2-mc-rotary-cutter/mccut/p-60893668339-c-6455.htm (the `url` of a search result)."
4608
+ },
4609
+ {
4610
+ "name": "sku",
4611
+ "type": "string",
4612
+ "required": false,
4613
+ "description": "Instead of `url`: the Menards SKU shown on the product page and in search results, e.g. '3646903'."
4614
+ }
4615
+ ]
4616
+ },
4617
+ {
4618
+ "name": "grainger_search",
4619
+ "title": "Scrape Grainger product search",
4620
+ "category": "E-commerce",
4621
+ "path": "/marketplace/grainger-search",
4622
+ "fixed": {},
4623
+ "description": "Searches Grainger (grainger.com, US industrial supplies) for `query` and returns Grainger's first result rows (up to 25 items, in Grainger's order) as `products`: `position`, `sku` (Grainger item number), `productId`, `title`, `brand`, `manufacturerModel`, `url`, `image`, `price` (Grainger's signed-out Web Price), `priceLabel`, `priceType`, `wasPrice`, `quantityPricing`, `currency`, `status` (e.g. Sellable) and `specifications` (name / value, e.g. thread size, voltage, material). Grainger answers a keyword with the product category that matches it best: `category` names it, `totalResults` counts that category's matches, and `categories` lists the other matching categories with counts and links (search one of them by passing its link as `url`). A keyword that leads to a department page (subcategory tiles, no products) is answered from the subcategory holding the product line that matches it most often: `category` names that subcategory, `totalAcrossCategories` counts the department and `categories` lists its subcategories. Only the first result rows are returned (no paging). Stock is not included: Grainger checks it per ZIP code after the page loads.",
4624
+ "params": [
4625
+ {
4626
+ "name": "query",
4627
+ "type": "string",
4628
+ "required": false,
4629
+ "description": "What to search, e.g. 'safety glasses', 'hex bolt', 'cordless drill' or a manufacturer model."
4630
+ },
4631
+ {
4632
+ "name": "max_results",
4633
+ "type": "integer",
4634
+ "required": false,
4635
+ "description": "Items to return (1-25); Grainger's first result rows for the keyword.",
4636
+ "default": 25
4637
+ },
4638
+ {
4639
+ "name": "url",
4640
+ "type": "string",
4641
+ "required": false,
4642
+ "description": "Instead of `query`: a Grainger search link, e.g. https://www.grainger.com/search?searchQuery=hex+bolt."
4643
+ }
4644
+ ]
4645
+ },
4646
+ {
4647
+ "name": "grainger_product",
4648
+ "title": "Scrape one Grainger product",
4649
+ "category": "E-commerce",
4650
+ "path": "/marketplace/grainger-product",
4651
+ "fixed": {},
4652
+ "description": "Fetches one Grainger item (by `sku`, the Grainger item number, or `url`) and returns it as JSON: `sku`, `productId`, `title`, `brand`, `manufacturerModel`, `url`, `price` (signed-out Web Price), `priceLabel`, `priceType`, `wasPrice`, `unitOfMeasure` (e.g. 'pkg. of 100'), `quantityPricing`, `currency`, `status`, `discontinued`, `sellInfo`, `shippingWeight`, `description`, `specifications` (name / value, including UNSPSC and country of origin), `images`, `documents` (spec sheets, drawings), `alternateSkus` and `breadcrumbs`. Stock is not included: Grainger checks it per ZIP code after the page loads.",
4653
+ "params": [
4654
+ {
4655
+ "name": "sku",
4656
+ "type": "string",
4657
+ "required": false,
4658
+ "description": "Grainger item number, e.g. '1XE66' or '22TA59' (the `sku` of a search result)."
4659
+ },
4660
+ {
4661
+ "name": "url",
4662
+ "type": "string",
4663
+ "required": false,
4664
+ "description": "Instead of `sku`: a Grainger product link, e.g. https://www.grainger.com/product/Hex-Head-Cap-Screw-Stainless-1XE66."
4665
+ }
4666
+ ]
4667
+ },
4668
+ {
4669
+ "name": "ebay_product",
4670
+ "title": "Scrape one eBay listing's full detail",
4671
+ "category": "Classifieds & Resale",
4672
+ "path": "/marketplace/ebay-product",
4673
+ "fixed": {},
4674
+ "description": "Fetches one eBay listing (by `item_id` + `marketplace`, or `url`) on any supported eBay site and returns it as JSON: `itemId`, `title`, `status` (active / ended), `price` + `currency`, `originalPrice` (list or was price), `listingFormat` (buy_it_now, auction, auction_with_buy_it_now) with `buyItNowPrice`, `currentBid`, `bidCount`, `reserveMet` and `endsAt`, `listingPrice` / `listingCurrency` when the seller lists in another currency, `condition` (with `conditionCode` and the seller's `conditionNotes`), `availability`, `quantityAvailable`, `quantitySold`, `watchers`, `seller` (username, store name, feedback score, positive percentage, business or private), `shippingRates` (cost per destination country), `shipping`, `itemLocation`, `delivery`, `importFees`, `returns`, `brand`, `mpn`, `gtin`, `itemSpecifics`, `categories`, `paymentMethods`, `variationOptions` and `variations` (each with its own price and stock), `images` and the seller's `description` as text. Labels and texts follow the site's language (ebay.de answers in German). Shipping, delivery dates and, on EU sites, VAT-inclusive prices are quoted for the country the request comes from: pass `proxy_country` to fix it. Companion to `/marketplace/ebay-search`.",
4675
+ "params": [
4676
+ {
4677
+ "name": "item_id",
4678
+ "type": "string",
4679
+ "required": false,
4680
+ "description": "eBay item number, e.g. '335761219642' (the number in ebay.com/itm/335761219642)."
4681
+ },
4682
+ {
4683
+ "name": "url",
4684
+ "type": "string",
4685
+ "required": false,
4686
+ "description": "Instead of `item_id`: a listing link on any supported eBay site, e.g. https://www.ebay.de/itm/860089403886. The site is taken from the link."
4687
+ },
4688
+ {
4689
+ "name": "marketplace",
4690
+ "type": "string",
4691
+ "required": false,
4692
+ "description": "eBay site to open `item_id` on (prices, currency and language follow it). One of: ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.nl, ebay.pl, ebay.at, ebay.ch, ebay.be, ebay.ie, ebay.ca, ebay.com.au, ebay.in, ebay.com.sg, ebay.com.my, ebay.com.hk. Default ebay.com."
4693
+ },
4694
+ {
4695
+ "name": "include_description",
4696
+ "type": "boolean",
4697
+ "required": false,
4698
+ "description": "Also fetch the seller's description text (a second, light request). Set false for a faster call without `description`.",
4699
+ "default": true
4700
+ },
4701
+ {
4702
+ "name": "proxy_country",
4703
+ "type": "string",
4704
+ "required": false,
4705
+ "description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). eBay quotes shipping, delivery dates and, on EU sites, VAT-inclusive prices for the visitor's country, so set it to get them for one country."
4706
+ }
4707
+ ]
4708
+ },
3613
4709
  {
3614
4710
  "name": "ebay_search",
3615
4711
  "title": "Scrape eBay search listings",
@@ -7554,7 +8650,7 @@ ${body}`);
7554
8650
  }
7555
8651
 
7556
8652
  // src/index.ts
7557
- var VERSION = "0.9.1";
8653
+ var VERSION = "0.11.0";
7558
8654
  var DEFAULT_BASE_URL = "https://api.scrapeunblocker.com";
7559
8655
  var API_KEY_HEADER = "x-scrapeunblocker-key";
7560
8656
  function resolveApiKey() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrapeunblocker-mcp",
3
- "version": "0.9.1",
3
+ "version": "0.11.0",
4
4
  "mcpName": "com.scrapeunblocker/scrapeunblocker-mcp",
5
5
  "description": "Model Context Protocol (MCP) server for ScrapeUnblocker - lets Claude fetch any web page's HTML (or AI-parsed JSON) and run 100+ site plugins that return structured JSON, through the ScrapeUnblocker anti-bot API, using your own API key.",
6
6
  "keywords": [