scrapeunblocker-mcp 0.7.0 → 0.8.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.
- package/dist/index.js +878 -114
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -995,7 +995,7 @@ var PLUGINS = [
|
|
|
995
995
|
"category": "Google",
|
|
996
996
|
"path": "/goods/google-shopping",
|
|
997
997
|
"fixed": {},
|
|
998
|
-
"description": "Runs the Google Shopping vertical (`udm=28`) for `q` and returns the product cards as JSON: `title`, `price`, `currency`, `originalPrice`, `discount`, `merchant`, `rating` and `
|
|
998
|
+
"description": "Runs the Google Shopping vertical (`udm=28`) for `q` and returns the product cards as JSON: `title`, `price`, `currency`, `currencyCode`, `originalPrice`, `discount`, `merchant`, `rating`, `reviewCount` and Google's own ids for the product (`productId`, `catalogId`, `offerId` - stable across searches, for tracking one product). Set `proxy_country`/`gl` to target a market (prices/merchants are region-specific) and `min_price`/`max_price` to filter. One render returns the first page of products (v1). Note: Google Shopping exposes no per-product URL, so `url` is omitted and `image` is best-effort.",
|
|
999
999
|
"params": [
|
|
1000
1000
|
{
|
|
1001
1001
|
"name": "q",
|
|
@@ -1086,6 +1086,319 @@ var PLUGINS = [
|
|
|
1086
1086
|
}
|
|
1087
1087
|
]
|
|
1088
1088
|
},
|
|
1089
|
+
{
|
|
1090
|
+
"name": "google_hotels",
|
|
1091
|
+
"title": "Scrape Google Hotels search results (prices, ratings, amenities)",
|
|
1092
|
+
"category": "Google",
|
|
1093
|
+
"path": "/travel/google-hotels",
|
|
1094
|
+
"fixed": {},
|
|
1095
|
+
"description": "Runs a Google Hotels search for `q` and returns the properties as JSON: `name`, `type` (hotel / vacation_rental), `propertyToken`, `price` for the stay (`perNight`, `perNightWithTaxes`, `total`, `totalWithTaxes`, `taxes`, Google's `display` string), `deal`, `rating`, `reviews`, `ratingsBreakdown`, `reviewTopics`, `hotelClass`, `stars`, `amenities`, `description`, `website`, `latitude`/`longitude`, `nearbyPlaces`, `thumbnail`, `images` and `mapsUrl`, plus the page's sponsored `ads`. A query naming one hotel returns just that hotel (`matchedProperty`). Set the stay with `check_in`/`check_out`, the party with `adults` and `children` (ages), and `currency`, `hl` (language) and `gl` (market). `applied` echoes the dates, currency and place Google actually used. Collect up to `max_results` across pages (each Google page is billed as one request, see `pagesFetched`); `nextPageToken` continues the list. Pass a `propertyToken` to `/travel/google-hotels-property` for every booking site's price.",
|
|
1096
|
+
"params": [
|
|
1097
|
+
{
|
|
1098
|
+
"name": "q",
|
|
1099
|
+
"type": "string",
|
|
1100
|
+
"required": true,
|
|
1101
|
+
"description": "What to search, as on Google Hotels: a place ('hotels in Paris', 'Lisbon'), an area or landmark, or a hotel name."
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"name": "check_in",
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"required": false,
|
|
1107
|
+
"description": "Check-in date, YYYY-MM-DD. Leave check_in and check_out empty for Google's default stay."
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
"name": "check_out",
|
|
1111
|
+
"type": "string",
|
|
1112
|
+
"required": false,
|
|
1113
|
+
"description": "Check-out date, YYYY-MM-DD (stays of up to 30 nights)."
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
"name": "adults",
|
|
1117
|
+
"type": "integer",
|
|
1118
|
+
"required": false,
|
|
1119
|
+
"description": "Number of adults (1-10).",
|
|
1120
|
+
"default": 2
|
|
1121
|
+
},
|
|
1122
|
+
{
|
|
1123
|
+
"name": "children",
|
|
1124
|
+
"type": "string",
|
|
1125
|
+
"required": false,
|
|
1126
|
+
"description": "Ages of the children, comma-separated, e.g. '7,10' (up to 6)."
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"name": "currency",
|
|
1130
|
+
"type": "string",
|
|
1131
|
+
"required": false,
|
|
1132
|
+
"description": "Price currency, ISO 4217 (USD, EUR, GBP, ...).",
|
|
1133
|
+
"default": "USD"
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"name": "hl",
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"required": false,
|
|
1139
|
+
"description": "Language of names, amenities and price formats, e.g. 'en', 'de', 'fr'.",
|
|
1140
|
+
"default": "en"
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"name": "gl",
|
|
1144
|
+
"type": "string",
|
|
1145
|
+
"required": false,
|
|
1146
|
+
"description": "Market (2-letter country). Google localizes the booking sites to it.",
|
|
1147
|
+
"default": "us"
|
|
1148
|
+
},
|
|
1149
|
+
{
|
|
1150
|
+
"name": "page_token",
|
|
1151
|
+
"type": "string",
|
|
1152
|
+
"required": false,
|
|
1153
|
+
"description": "`nextPageToken` of a previous response, to continue where it stopped."
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
"name": "max_results",
|
|
1157
|
+
"type": "integer",
|
|
1158
|
+
"required": false,
|
|
1159
|
+
"description": "Properties to collect (1-100). Google serves about 20 per page; each page is billed as one request.",
|
|
1160
|
+
"default": 20
|
|
1161
|
+
}
|
|
1162
|
+
]
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"name": "google_hotels_property",
|
|
1166
|
+
"title": "Scrape one Google Hotels property: prices from every booking site",
|
|
1167
|
+
"category": "Google",
|
|
1168
|
+
"path": "/travel/google-hotels-property",
|
|
1169
|
+
"fixed": {},
|
|
1170
|
+
"description": "Returns one property from Google Hotels as JSON, identified by the `property_token` of a `/travel/google-hotels` result: `offers` from every booking site Google lists for the stay (`provider`, `official` for the hotel's own site, `perNight`/`perNightWithTaxes`, `total`/`totalWithTaxes`, a Google `link` to book), `rooms` with room-level rates and free-cancellation deadlines where Google shows them, the lowest `price`, `address`, `phone`, `website`, `description` and `about`, `rating`, `reviews`, `ratingsBreakdown`, `reviewTopics`, `hotelClass`, `latitude`/`longitude`, `nearbyPlaces`, `images`, `placeId` and `mapsUrl`. Set the stay with `check_in`/`check_out`, the party with `adults`/`children`, and `currency`, `hl`, `gl`. Billed as one request.",
|
|
1171
|
+
"params": [
|
|
1172
|
+
{
|
|
1173
|
+
"name": "property_token",
|
|
1174
|
+
"type": "string",
|
|
1175
|
+
"required": true,
|
|
1176
|
+
"description": "`propertyToken` of a /travel/google-hotels result."
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
"name": "check_in",
|
|
1180
|
+
"type": "string",
|
|
1181
|
+
"required": false,
|
|
1182
|
+
"description": "Check-in date, YYYY-MM-DD. Leave check_in and check_out empty for Google's default stay."
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"name": "check_out",
|
|
1186
|
+
"type": "string",
|
|
1187
|
+
"required": false,
|
|
1188
|
+
"description": "Check-out date, YYYY-MM-DD (stays of up to 30 nights)."
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
"name": "adults",
|
|
1192
|
+
"type": "integer",
|
|
1193
|
+
"required": false,
|
|
1194
|
+
"description": "Number of adults (1-10).",
|
|
1195
|
+
"default": 2
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"name": "children",
|
|
1199
|
+
"type": "string",
|
|
1200
|
+
"required": false,
|
|
1201
|
+
"description": "Ages of the children, comma-separated, e.g. '7,10' (up to 6)."
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"name": "currency",
|
|
1205
|
+
"type": "string",
|
|
1206
|
+
"required": false,
|
|
1207
|
+
"description": "Price currency, ISO 4217 (USD, EUR, GBP, ...).",
|
|
1208
|
+
"default": "USD"
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
"name": "hl",
|
|
1212
|
+
"type": "string",
|
|
1213
|
+
"required": false,
|
|
1214
|
+
"description": "Language, e.g. 'en', 'de', 'fr'.",
|
|
1215
|
+
"default": "en"
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"name": "gl",
|
|
1219
|
+
"type": "string",
|
|
1220
|
+
"required": false,
|
|
1221
|
+
"description": "Market (2-letter country). Google localizes the booking sites to it.",
|
|
1222
|
+
"default": "us"
|
|
1223
|
+
}
|
|
1224
|
+
]
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
"name": "google_news",
|
|
1228
|
+
"title": "Scrape Google News (search or section)",
|
|
1229
|
+
"category": "Google",
|
|
1230
|
+
"path": "/search/google-news",
|
|
1231
|
+
"fixed": {},
|
|
1232
|
+
"description": "Searches Google News for `q`, or lists a section with `topic` (world, nation, business, technology, entertainment, sports, science, health, top, or a topic id), and returns `articles`: `position`, `title`, `url` (the publisher's article URL), `source`, `sourceUrl`, `publishedAt` (ISO 8601 UTC), `imageUrl` (+ `imageWidth`/`imageHeight`), `authors`, `googleNewsId` and `googleNewsUrl`. Metadata only - no article text. Narrow a search with `when` (e.g. '1d') or `after`/`before` dates; pick the edition with `hl` and `gl`. Google News answers a search with up to about 100 articles (no paging - use date windows to go further back). One unit per call.",
|
|
1233
|
+
"params": [
|
|
1234
|
+
{
|
|
1235
|
+
"name": "q",
|
|
1236
|
+
"type": "string",
|
|
1237
|
+
"required": false,
|
|
1238
|
+
"description": "Search query, e.g. 'tesla' or '\"web scraping\"'. Google News operators work: quotes, OR, -word, site:reuters.com, intitle:. Pass either `q` or `topic`."
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
"name": "topic",
|
|
1242
|
+
"type": "string",
|
|
1243
|
+
"required": false,
|
|
1244
|
+
"description": "A section instead of a search: world, nation, business, technology, entertainment, sports, science, health, or top (the edition's headlines). A Google News topic id (the 'CAAq...' part of a news.google.com/topics/ URL) also works."
|
|
1245
|
+
},
|
|
1246
|
+
{
|
|
1247
|
+
"name": "hl",
|
|
1248
|
+
"type": "string",
|
|
1249
|
+
"required": false,
|
|
1250
|
+
"description": "Language of the Google News edition, e.g. 'en', 'en-GB', 'de', 'fr', 'pt-BR'.",
|
|
1251
|
+
"default": "en"
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"name": "gl",
|
|
1255
|
+
"type": "string",
|
|
1256
|
+
"required": false,
|
|
1257
|
+
"description": "Country of the Google News edition (2-letter code), e.g. 'us', 'gb', 'de'.",
|
|
1258
|
+
"default": "us"
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"name": "when",
|
|
1262
|
+
"type": "string",
|
|
1263
|
+
"required": false,
|
|
1264
|
+
"description": "Only articles from the last period: '1h' to '720h', '1d', '7d', '2w', '1m', '1y'. Search (`q`) only."
|
|
1265
|
+
},
|
|
1266
|
+
{
|
|
1267
|
+
"name": "after",
|
|
1268
|
+
"type": "string",
|
|
1269
|
+
"required": false,
|
|
1270
|
+
"description": "Only articles published after this date (YYYY-MM-DD). Search only."
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"name": "before",
|
|
1274
|
+
"type": "string",
|
|
1275
|
+
"required": false,
|
|
1276
|
+
"description": "Only articles published before this date (YYYY-MM-DD). Search only."
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"name": "max_results",
|
|
1280
|
+
"type": "integer",
|
|
1281
|
+
"required": false,
|
|
1282
|
+
"description": "Most articles to return, 1-250. Google News returns up to about 100 articles for a search and about 250 for a section; one call is billed one unit whatever the count.",
|
|
1283
|
+
"default": 100
|
|
1284
|
+
}
|
|
1285
|
+
]
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
"name": "google_ads_transparency",
|
|
1289
|
+
"title": "Scrape Google ads (Ads Transparency Center)",
|
|
1290
|
+
"category": "Google",
|
|
1291
|
+
"path": "/ads/google-ads-transparency",
|
|
1292
|
+
"fixed": {},
|
|
1293
|
+
"description": "Returns an advertiser's Google ads (Search, YouTube, Display, Shopping, Maps, Play) from the Google Ads Transparency Center for competitor analysis: per ad `creativeId`, `advertiserId`/`advertiserName`, `format` (text/image/video), `firstShown`, `lastShown`, `daysShown`, `matchedDomain`, the preview (`imageUrl` with size, or `previewUrl`), `googleCreativeId`, `googleCustomerId`, `adGroupId` and `adUrl`. Pick ads by `advertiser` (name or id) or `domain`; filter with `region`, `platform`, `format` and `date_from`/`date_to`. `include_details` adds per-region reach and targeting, `include_preview` the ad's texts and YouTube video. Collects up to `max_results` (continue with `page_token`); billed one unit per page of up to 100 ads, plus one per detail and per preview fetched (`callUnits`).",
|
|
1294
|
+
"params": [
|
|
1295
|
+
{
|
|
1296
|
+
"name": "advertiser",
|
|
1297
|
+
"type": "string",
|
|
1298
|
+
"required": false,
|
|
1299
|
+
"description": "Advertiser to pull ads for: a name (e.g. 'Nike') - resolved to the best-matching advertiser, reported in `advertisersUsed` (a single brand name no advertiser is named like falls back to its domain) - or an advertiser id ('AR16735076323512287233'). Comma-separate up to 10. Pass `advertiser` or `domain`."
|
|
1300
|
+
},
|
|
1301
|
+
{
|
|
1302
|
+
"name": "domain",
|
|
1303
|
+
"type": "string",
|
|
1304
|
+
"required": false,
|
|
1305
|
+
"description": "Website the ads point to, e.g. 'nike.com' (ads of every advertiser for that domain)."
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"name": "region",
|
|
1309
|
+
"type": "string",
|
|
1310
|
+
"required": false,
|
|
1311
|
+
"description": "Where the ads were shown: a 2-letter country code ('US', 'DE'), a comma list of them, or 'anywhere' (default)."
|
|
1312
|
+
},
|
|
1313
|
+
{
|
|
1314
|
+
"name": "platform",
|
|
1315
|
+
"type": "string",
|
|
1316
|
+
"required": false,
|
|
1317
|
+
"description": "Only ads shown on these platforms (comma list): search, youtube, maps, play, shopping."
|
|
1318
|
+
},
|
|
1319
|
+
{
|
|
1320
|
+
"name": "format",
|
|
1321
|
+
"type": "string",
|
|
1322
|
+
"required": false,
|
|
1323
|
+
"description": "Only one ad format: text, image or video."
|
|
1324
|
+
},
|
|
1325
|
+
{
|
|
1326
|
+
"name": "date_from",
|
|
1327
|
+
"type": "string",
|
|
1328
|
+
"required": false,
|
|
1329
|
+
"description": "Only ads shown on or after this date (YYYY-MM-DD)."
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"name": "date_to",
|
|
1333
|
+
"type": "string",
|
|
1334
|
+
"required": false,
|
|
1335
|
+
"description": "Only ads shown on or before this date (YYYY-MM-DD)."
|
|
1336
|
+
},
|
|
1337
|
+
{
|
|
1338
|
+
"name": "sort",
|
|
1339
|
+
"type": "string",
|
|
1340
|
+
"required": false,
|
|
1341
|
+
"description": "Order of the ads: 'last_shown' (most recently shown first).",
|
|
1342
|
+
"default": "last_shown"
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"name": "max_results",
|
|
1346
|
+
"type": "integer",
|
|
1347
|
+
"required": false,
|
|
1348
|
+
"description": "Ads to collect, 1-1000. Pages of up to 100 are fetched as needed; each page is billed one unit.",
|
|
1349
|
+
"default": 100
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
"name": "page_token",
|
|
1353
|
+
"type": "string",
|
|
1354
|
+
"required": false,
|
|
1355
|
+
"description": "Continue a previous call: its `nextPageToken`."
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
"name": "include_details",
|
|
1359
|
+
"type": "boolean",
|
|
1360
|
+
"required": false,
|
|
1361
|
+
"description": "Add `details` per ad: regions shown with first/last date (plus impressions per platform for EU regions), EU reach, disclosed targeting and all preview variations. One unit per ad, for up to 300 ads per call.",
|
|
1362
|
+
"default": false
|
|
1363
|
+
},
|
|
1364
|
+
{
|
|
1365
|
+
"name": "include_preview",
|
|
1366
|
+
"type": "boolean",
|
|
1367
|
+
"required": false,
|
|
1368
|
+
"description": "Add `preview` per ad: what it shows - headline, description and display URL of text ads, product title and merchant of shopping ads, image URLs, the YouTube video of video ads. One unit per ad that has a preview script, for up to 40 ads per call. Search text ads often exist only as an image (`imageUrl`).",
|
|
1369
|
+
"default": false
|
|
1370
|
+
}
|
|
1371
|
+
]
|
|
1372
|
+
},
|
|
1373
|
+
{
|
|
1374
|
+
"name": "google_ads_transparency_advertisers",
|
|
1375
|
+
"title": "Look up Google advertisers (Ads Transparency Center)",
|
|
1376
|
+
"category": "Google",
|
|
1377
|
+
"path": "/ads/google-ads-transparency-advertisers",
|
|
1378
|
+
"fixed": {},
|
|
1379
|
+
"description": "Finds advertisers on the Google Ads Transparency Center by name: `advertisers` (`advertiserId` to use with /ads/google-ads-transparency, `name`, `country`, `creativesMin`/`creativesMax` - how many ads they ran - and `verified`) and matching website `domains`. One unit per call.",
|
|
1380
|
+
"params": [
|
|
1381
|
+
{
|
|
1382
|
+
"name": "q",
|
|
1383
|
+
"type": "string",
|
|
1384
|
+
"required": true,
|
|
1385
|
+
"description": "Advertiser name or brand to look up, e.g. 'nike'."
|
|
1386
|
+
},
|
|
1387
|
+
{
|
|
1388
|
+
"name": "region",
|
|
1389
|
+
"type": "string",
|
|
1390
|
+
"required": false,
|
|
1391
|
+
"description": "Count ads shown in these regions only: a 2-letter country code, a comma list, or 'anywhere' (default)."
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
"name": "max_results",
|
|
1395
|
+
"type": "integer",
|
|
1396
|
+
"required": false,
|
|
1397
|
+
"description": "Most advertisers (and domains) to return, 1-50.",
|
|
1398
|
+
"default": 10
|
|
1399
|
+
}
|
|
1400
|
+
]
|
|
1401
|
+
},
|
|
1089
1402
|
{
|
|
1090
1403
|
"name": "bing_search",
|
|
1091
1404
|
"title": "Search Bing",
|
|
@@ -1996,232 +2309,579 @@ var PLUGINS = [
|
|
|
1996
2309
|
"name": "product_id",
|
|
1997
2310
|
"type": "string",
|
|
1998
2311
|
"required": false,
|
|
1999
|
-
"description": "Numeric Alibaba product id, e.g. '1601919386560' (the number before .html)."
|
|
2312
|
+
"description": "Numeric Alibaba product id, e.g. '1601919386560' (the number before .html)."
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
"name": "url",
|
|
2316
|
+
"type": "string",
|
|
2317
|
+
"required": false,
|
|
2318
|
+
"description": "Alibaba product URL, e.g. 'https://www.alibaba.com/product-detail/..._1601919386560.html'. Either url or product_id is required."
|
|
2319
|
+
},
|
|
2320
|
+
{
|
|
2321
|
+
"name": "proxy_country",
|
|
2322
|
+
"type": "string",
|
|
2323
|
+
"required": false,
|
|
2324
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'DE'). Alibaba prices in that country's currency; USD figures are always included. Leave blank to let the API pick."
|
|
2325
|
+
}
|
|
2326
|
+
]
|
|
2327
|
+
},
|
|
2328
|
+
{
|
|
2329
|
+
"name": "alibaba1688_search",
|
|
2330
|
+
"title": "Scrape 1688.com wholesale search results",
|
|
2331
|
+
"category": "E-commerce",
|
|
2332
|
+
"path": "/marketplace/1688-search",
|
|
2333
|
+
"fixed": {},
|
|
2334
|
+
"description": "Searches 1688.com (China's B2B wholesale marketplace) for `q` and returns the offers as JSON: `offerId`, `title`, `url`, `image`/`images`, `price` in yuan (`currency` CNY), `priceTiers` (price per quantity range with `minQuantity`/`maxQuantity`), `soldText` + `sold` (lower bound of units sold), `repurchaseRatePercent`, `serviceTags`, `promotionTags`, `tags`, `sponsored`, and the `supplier` (`name`, `loginId`, `memberId`, `shopUrl`, `yearsOnPlatform`, `province`, `city`, `factoryInspected`, `businessInspected`, `superFactory`, `tradeScores`). Sort by relevance, sales or price, filter with `price_min`/`price_max` (yuan) and `province`, and collect up to `max_results` across pages (60 per page, each page billed as one request, see `pagesFetched`). Paging: `nextPage` is the next 1688 page not yet returned (pass it as `page` to continue) and `hasMore` says whether there is one; when `max_results` ends inside a page, the rest of that page is not returned (`droppedFromLastPage`), so use multiples of 60 to get every offer. Text is returned in Chinese as 1688 publishes it. Companion to `/marketplace/1688-product`.",
|
|
2335
|
+
"params": [
|
|
2336
|
+
{
|
|
2337
|
+
"name": "q",
|
|
2338
|
+
"type": "string",
|
|
2339
|
+
"required": true,
|
|
2340
|
+
"description": "What to search, in Chinese or English, e.g. '\u624B\u673A\u58F3', '\u8FDE\u8863\u88D9', 'bluetooth earphones'. Chinese keywords match the most offers."
|
|
2341
|
+
},
|
|
2342
|
+
{
|
|
2343
|
+
"name": "page",
|
|
2344
|
+
"type": "integer",
|
|
2345
|
+
"required": false,
|
|
2346
|
+
"description": "1-based results page to start from (1-34). Use `nextPage` of a previous response to continue.",
|
|
2347
|
+
"default": 1
|
|
2348
|
+
},
|
|
2349
|
+
{
|
|
2350
|
+
"name": "max_results",
|
|
2351
|
+
"type": "integer",
|
|
2352
|
+
"required": false,
|
|
2353
|
+
"description": "Offers to collect across pages (1-300); 1688 serves 60 per page and each page fetched is billed as one request.",
|
|
2354
|
+
"default": 60
|
|
2355
|
+
},
|
|
2356
|
+
{
|
|
2357
|
+
"name": "sort",
|
|
2358
|
+
"type": "string",
|
|
2359
|
+
"required": false,
|
|
2360
|
+
"description": "Order: relevance, sales, price_asc, price_desc (sales = most sold in the last 30 days first; price in yuan).",
|
|
2361
|
+
"default": "relevance"
|
|
2362
|
+
},
|
|
2363
|
+
{
|
|
2364
|
+
"name": "price_min",
|
|
2365
|
+
"type": "number",
|
|
2366
|
+
"required": false,
|
|
2367
|
+
"description": "Only offers priced at or above this many yuan (CNY)."
|
|
2368
|
+
},
|
|
2369
|
+
{
|
|
2370
|
+
"name": "price_max",
|
|
2371
|
+
"type": "number",
|
|
2372
|
+
"required": false,
|
|
2373
|
+
"description": "Only offers priced at or below this many yuan (CNY)."
|
|
2374
|
+
},
|
|
2375
|
+
{
|
|
2376
|
+
"name": "province",
|
|
2377
|
+
"type": "string",
|
|
2378
|
+
"required": false,
|
|
2379
|
+
"description": "Only suppliers in this Chinese province, by its Chinese name, e.g. \u5E7F\u4E1C (Guangdong), \u6D59\u6C5F (Zhejiang), \u6C5F\u82CF (Jiangsu)."
|
|
2380
|
+
},
|
|
2381
|
+
{
|
|
2382
|
+
"name": "proxy_country",
|
|
2383
|
+
"type": "string",
|
|
2384
|
+
"required": false,
|
|
2385
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'DE', 'SG'). Leave blank to let the API pick."
|
|
2386
|
+
}
|
|
2387
|
+
]
|
|
2388
|
+
},
|
|
2389
|
+
{
|
|
2390
|
+
"name": "alibaba1688_product",
|
|
2391
|
+
"title": "Scrape one 1688.com offer's full detail",
|
|
2392
|
+
"category": "E-commerce",
|
|
2393
|
+
"path": "/marketplace/1688-product",
|
|
2394
|
+
"fixed": {},
|
|
2395
|
+
"description": "Fetches one 1688.com offer (by `offer_id` or `url`) and returns it as JSON: `title`, `status`, `brand`, `category`, prices in yuan (`currency` CNY: `priceText`, `priceMin`/`priceMax`), `pricing` (`tiers` when every SKU is priced by the quantity ladder `priceTiers`, `sku` when each SKU carries its own `price`), `originalPriceTiers` (before a promotion), `unit`, `moq` (minimum order), `available` (stock), `sold` + `soldText` + `soldPeriod`, `variantOptions` (option names and values with images) and `variants` (every SKU with `skuId`, `options`, `price`, `available`), `attributes`, `images`, `video`, `descriptionUrl`, `shipping` (`from`, `dispatch` promise, `unitWeightKg`, `freeShipping`), `services` (guarantees), `labels`, `rating` (`goodRatePercent`, `score`, `reviewCount`, `reviewsWithPhotos`, review `tags`), `favorites` and the `supplier` (`name`, `loginId`, `memberId`, `userId`, `shopUrl`, `serviceScore`, `repeatPurchaseRate3m`, `factory`, `tpMember`, `location`). Text is returned in Chinese as 1688 publishes it. Companion to `/marketplace/1688-search`.",
|
|
2396
|
+
"params": [
|
|
2397
|
+
{
|
|
2398
|
+
"name": "offer_id",
|
|
2399
|
+
"type": "string",
|
|
2400
|
+
"required": false,
|
|
2401
|
+
"description": "Numeric 1688 offer id, e.g. '735353578254' (the number in detail.1688.com/offer/<id>.html)."
|
|
2402
|
+
},
|
|
2403
|
+
{
|
|
2404
|
+
"name": "url",
|
|
2405
|
+
"type": "string",
|
|
2406
|
+
"required": false,
|
|
2407
|
+
"description": "1688 offer link, e.g. 'https://detail.1688.com/offer/735353578254.html' (mobile m.1688.com and offerId= links work too). Either offer_id or url is required."
|
|
2408
|
+
},
|
|
2409
|
+
{
|
|
2410
|
+
"name": "proxy_country",
|
|
2411
|
+
"type": "string",
|
|
2412
|
+
"required": false,
|
|
2413
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'DE', 'SG'). Leave blank to let the API pick."
|
|
2414
|
+
}
|
|
2415
|
+
]
|
|
2416
|
+
},
|
|
2417
|
+
{
|
|
2418
|
+
"name": "tiktok_shop_search",
|
|
2419
|
+
"title": "Search TikTok Shop products by keyword or category",
|
|
2420
|
+
"category": "E-commerce",
|
|
2421
|
+
"path": "/social/tiktok-shop-search",
|
|
2422
|
+
"fixed": {},
|
|
2423
|
+
"description": "Lists TikTok Shop (US) products for a keyword (`q`) or a category (`category`, URL or id). Each product card carries `productId`, `url`, `title`, `image`, `price` (current, original, discountPercent, currency, fromPrice), `rating`, `reviewCount`, `soldCount`, `brand`, `seller` (id, name, logo), promotion `labels` and, when TikTok binds one, the promoting `video` (id, url, author, play and like counts, `durationSeconds`). A keyword search also returns `relatedSearches` and `relatedCategories`; a category returns its `subcategories` and `breadcrumbs`. Up to 30 products (one page, one billed request). A keyword or category TikTok has no listing for returns 404.",
|
|
2424
|
+
"params": [
|
|
2425
|
+
{
|
|
2426
|
+
"name": "q",
|
|
2427
|
+
"type": "string",
|
|
2428
|
+
"required": false,
|
|
2429
|
+
"description": "Search keyword, e.g. 'led face mask' (or a TikTok Shop keyword URL like 'https://www.tiktok.com/shop/product/led-face-mask'). Either this or `category`."
|
|
2430
|
+
},
|
|
2431
|
+
{
|
|
2432
|
+
"name": "category",
|
|
2433
|
+
"type": "string",
|
|
2434
|
+
"required": false,
|
|
2435
|
+
"description": "List a category instead of a keyword: a category URL ('https://www.tiktok.com/shop/c/beauty-personal-care/601450') or its numeric id ('601450')."
|
|
2436
|
+
},
|
|
2437
|
+
{
|
|
2438
|
+
"name": "max_results",
|
|
2439
|
+
"type": "integer",
|
|
2440
|
+
"required": false,
|
|
2441
|
+
"description": "Products to return (1-30). One page is read: a keyword lists up to 30 products, a category about 15.",
|
|
2442
|
+
"default": 30
|
|
2443
|
+
}
|
|
2444
|
+
]
|
|
2445
|
+
},
|
|
2446
|
+
{
|
|
2447
|
+
"name": "tiktok_shop_product",
|
|
2448
|
+
"title": "Scrape one TikTok Shop product",
|
|
2449
|
+
"category": "E-commerce",
|
|
2450
|
+
"path": "/social/tiktok-shop-product",
|
|
2451
|
+
"fixed": {},
|
|
2452
|
+
"description": "Fetches a public TikTok Shop (US) product page by `url` or `product_id` and returns it as JSON: `productId`, `url`, `title`, `description` (plus `descriptionImages`), `status`, `available`, `brand`, `price` (current, original, discountPercent, currency, display strings, min/max for a price range), `soldCount`, `rating`, `reviewCount`, `ratingDistribution`, `categories`, `images`, `options` and `variants` (per-SKU price, stock and availability), `specifications`, `shipping` (fee, free, delivery days and estimate), promotion `labels`, `seller` (id, name, store URL, rating, followers, sold count, product / video / review counts, service scores, business name and address) and the top `reviews` the page shows (rating, text, date, variant, images). One billed request. No login or cookies; a product that does not exist or is not sold in the US returns 404.",
|
|
2453
|
+
"params": [
|
|
2454
|
+
{
|
|
2455
|
+
"name": "url",
|
|
2456
|
+
"type": "string",
|
|
2457
|
+
"required": false,
|
|
2458
|
+
"description": "A TikTok Shop product URL ('https://www.tiktok.com/shop/pdp/goli-ashwagandha/1729527313880355335', 'https://shop.tiktok.com/us/pdp/1729527313880355335', a /view/product/ link) or a bare product id. Either this or `product_id`."
|
|
2459
|
+
},
|
|
2460
|
+
{
|
|
2461
|
+
"name": "product_id",
|
|
2462
|
+
"type": "string",
|
|
2463
|
+
"required": false,
|
|
2464
|
+
"description": "The numeric product id (e.g. '1729527313880355335')."
|
|
2465
|
+
}
|
|
2466
|
+
]
|
|
2467
|
+
},
|
|
2468
|
+
{
|
|
2469
|
+
"name": "tiktok_shop_store",
|
|
2470
|
+
"title": "Scrape a TikTok Shop store and its products",
|
|
2471
|
+
"category": "E-commerce",
|
|
2472
|
+
"path": "/social/tiktok-shop-store",
|
|
2473
|
+
"fixed": {},
|
|
2474
|
+
"description": "Fetches a TikTok Shop (US) store by URL or seller id and returns its profile as `store` (id, name, url, rating, followers, soldCount, productCount, reviewCount, videoCount, logo, label such as 'OFFICIAL SHOP', service `scores` like positive feedback and on-time delivery, description) plus the `products` on its storefront page (up to 20, same card shape as /social/tiktok-shop-search) and `hasMore`. The store page does not carry the seller's business name and address, so `businessName` / `businessAddress` are null here; a product's `seller` (/social/tiktok-shop-product) has them. A store with no products listed returns its profile and an empty `products`. One billed request. Most stores answer in a few seconds; a store TikTok shows only past its verification puzzle (common for smaller shops) is read through that puzzle and can take up to about 50 s. A seller id TikTok has no US store for returns 404.",
|
|
2475
|
+
"params": [
|
|
2476
|
+
{
|
|
2477
|
+
"name": "store",
|
|
2478
|
+
"type": "string",
|
|
2479
|
+
"required": true,
|
|
2480
|
+
"description": "A TikTok Shop store URL ('https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079') or the seller id ('7495794203056835079')."
|
|
2481
|
+
},
|
|
2482
|
+
{
|
|
2483
|
+
"name": "max_results",
|
|
2484
|
+
"type": "integer",
|
|
2485
|
+
"required": false,
|
|
2486
|
+
"description": "Storefront products to return (0-20); 0 = store profile only. One page is read.",
|
|
2487
|
+
"default": 20
|
|
2488
|
+
}
|
|
2489
|
+
]
|
|
2490
|
+
},
|
|
2491
|
+
{
|
|
2492
|
+
"name": "oopbuy_search",
|
|
2493
|
+
"title": "Scrape oopbuy.com product-search listings",
|
|
2494
|
+
"category": "E-commerce",
|
|
2495
|
+
"path": "/goods/oopbuy-search",
|
|
2496
|
+
"fixed": {},
|
|
2497
|
+
"description": "Searches oopbuy.com for `keyword` and returns product listings as JSON: `title`, `titleCn`, `price` (in USD), `priceCny`, `monthSold`, `image`, `spu`, `channel`, and a product `url`. Pick the source marketplace with `channel` ('1688', 'taobao', or 'official'), order with `sort`, and page with `page`/`page_size`. Note: oopbuy trademark-blocks brand-name keywords at its own backend. That block is oopbuy's own genuine answer (it returns it as an HTTP 200 too), so we mirror it: brand queries come back as HTTP 200 with `keywordRejected: true` and an empty `results` array, not an error.",
|
|
2498
|
+
"params": [
|
|
2499
|
+
{
|
|
2500
|
+
"name": "keyword",
|
|
2501
|
+
"type": "string",
|
|
2502
|
+
"required": true,
|
|
2503
|
+
"description": "Search phrase, e.g. 'hoodie' or 'phone case'. oopbuy trademark-blocks brand names (nike, adidas) at its own backend; those come back as a successful HTTP 200 carrying `keywordRejected: true` and an empty `results` array, not an error."
|
|
2504
|
+
},
|
|
2505
|
+
{
|
|
2506
|
+
"name": "channel",
|
|
2507
|
+
"type": "string",
|
|
2508
|
+
"required": false,
|
|
2509
|
+
"description": "Source marketplace: '1688' (default), 'taobao', or 'official' (oopbuy's own curated storefront).",
|
|
2510
|
+
"default": "1688"
|
|
2511
|
+
},
|
|
2512
|
+
{
|
|
2513
|
+
"name": "page",
|
|
2514
|
+
"type": "integer",
|
|
2515
|
+
"required": false,
|
|
2516
|
+
"description": "1-based page number.",
|
|
2517
|
+
"default": 1
|
|
2518
|
+
},
|
|
2519
|
+
{
|
|
2520
|
+
"name": "page_size",
|
|
2521
|
+
"type": "integer",
|
|
2522
|
+
"required": false,
|
|
2523
|
+
"description": "Results per page (max 60). The 1688 channel serves at most 50 and Taobao at most 20 per page; a larger value is capped to that.",
|
|
2524
|
+
"default": 20
|
|
2525
|
+
},
|
|
2526
|
+
{
|
|
2527
|
+
"name": "sort",
|
|
2528
|
+
"type": "string",
|
|
2529
|
+
"required": false,
|
|
2530
|
+
"description": "Ordering: 'default', 'price_asc', 'price_desc', or 'best_selling'.",
|
|
2531
|
+
"default": "default"
|
|
2532
|
+
},
|
|
2533
|
+
{
|
|
2534
|
+
"name": "proxy_country",
|
|
2535
|
+
"type": "string",
|
|
2536
|
+
"required": false,
|
|
2537
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'DE')."
|
|
2538
|
+
}
|
|
2539
|
+
]
|
|
2540
|
+
},
|
|
2541
|
+
{
|
|
2542
|
+
"name": "smyths_inventory",
|
|
2543
|
+
"title": "Smyths Toys UK product stock, price, details and listings (mode=product)",
|
|
2544
|
+
"category": "E-commerce",
|
|
2545
|
+
"path": "/marketplace/smyths-inventory",
|
|
2546
|
+
"fixed": {
|
|
2547
|
+
"mode": "product"
|
|
2548
|
+
},
|
|
2549
|
+
"description": "Smyths Toys UK (smythstoys.com) as JSON, in four modes. `mode=product` (the default when `code` is given) returns one product's stock and price as the JSON Smyths' own storefront reads (`/api/uk/en-gb/product/product-inventory`), unchanged: `code`, `type`, `prices` (`price`, `value`, `wasPrice`, `thenPrice`, `rrpPrice`, `discountedPercentage`), `hdSection` (home delivery: `stockStatus`, `stockMessage`, `isAvailableForDelivery`, `isPreOrder`, `expectedStockDate`, delivery messages), `ccSection` (click & collect: the same stock fields plus `storeName`, `deliveryMessage`, `storeClosed`), `ageSuitabilities`, `carrierType`, marketing messages and decals. `code` takes a product code (`225095`), a product or bundle page link or a product-inventory link; one product is one billed request. `mode=details&code=` returns the JSON Smyths' product page is built from (`/api/uk/en-gb/product`, a bundle's from `/api/uk/en-gb/b`), unchanged, one billed request: `name`, `brand`, `ean`, `description` (HTML), `webFeatures` (the key features list), the safety warnings `euWarning`, `safetyText`, `urgentSafetyTextHeading` and `urgentSafetyTextDescription`, `productImages` (the gallery: `thumbnail`, `original` and `zoom` per `galleryIndex`, videos as `youtubeUrl`), `prices`, `averageRating`, `numberOfReviews`, `breadcrumb`, `categoryHierarchy`, `ageSuitabilities`, `assemblyRequired` and more; a bundle adds `subProducts`. `url` and `breadcrumb` paths are relative to https://www.smythstoys.com/uk/en-gb. `mode=search&query=` and `mode=category&category=` find product codes: they return `products` (`code`, `name`, `url`, `prices` with the same fields, `currency`, `image`, `averageRating`, `productType` - `BUNDLE` for bundles - and `decals`) with `totalResults`, `totalPages` and `nextPage`, 60 per page; a category also returns its `title`, `breadcrumbs` and `subcategories` (`code`, `name`, `count`). Smyths' search returns its best 240 matches at most, a category every product it holds. Listings collect up to `max_results` from `page` on, billed one unit per page.",
|
|
2550
|
+
"params": [
|
|
2551
|
+
{
|
|
2552
|
+
"name": "code",
|
|
2553
|
+
"type": "string",
|
|
2554
|
+
"required": true,
|
|
2555
|
+
"description": "mode=product and mode=details: product code ('225095'), product or bundle page link, or product-inventory link."
|
|
2556
|
+
},
|
|
2557
|
+
{
|
|
2558
|
+
"name": "bundle",
|
|
2559
|
+
"type": "boolean",
|
|
2560
|
+
"required": false,
|
|
2561
|
+
"description": "mode=product and mode=details: ask for a bundle. A bundle page link sets it, and a code Smyths does not answer as a product is asked again as a bundle.",
|
|
2562
|
+
"default": false
|
|
2563
|
+
}
|
|
2564
|
+
]
|
|
2565
|
+
},
|
|
2566
|
+
{
|
|
2567
|
+
"name": "smyths_details",
|
|
2568
|
+
"title": "Smyths Toys UK product stock, price, details and listings (mode=details)",
|
|
2569
|
+
"category": "E-commerce",
|
|
2570
|
+
"path": "/marketplace/smyths-inventory",
|
|
2571
|
+
"fixed": {
|
|
2572
|
+
"mode": "details"
|
|
2573
|
+
},
|
|
2574
|
+
"description": "Smyths Toys UK (smythstoys.com) as JSON, in four modes. `mode=product` (the default when `code` is given) returns one product's stock and price as the JSON Smyths' own storefront reads (`/api/uk/en-gb/product/product-inventory`), unchanged: `code`, `type`, `prices` (`price`, `value`, `wasPrice`, `thenPrice`, `rrpPrice`, `discountedPercentage`), `hdSection` (home delivery: `stockStatus`, `stockMessage`, `isAvailableForDelivery`, `isPreOrder`, `expectedStockDate`, delivery messages), `ccSection` (click & collect: the same stock fields plus `storeName`, `deliveryMessage`, `storeClosed`), `ageSuitabilities`, `carrierType`, marketing messages and decals. `code` takes a product code (`225095`), a product or bundle page link or a product-inventory link; one product is one billed request. `mode=details&code=` returns the JSON Smyths' product page is built from (`/api/uk/en-gb/product`, a bundle's from `/api/uk/en-gb/b`), unchanged, one billed request: `name`, `brand`, `ean`, `description` (HTML), `webFeatures` (the key features list), the safety warnings `euWarning`, `safetyText`, `urgentSafetyTextHeading` and `urgentSafetyTextDescription`, `productImages` (the gallery: `thumbnail`, `original` and `zoom` per `galleryIndex`, videos as `youtubeUrl`), `prices`, `averageRating`, `numberOfReviews`, `breadcrumb`, `categoryHierarchy`, `ageSuitabilities`, `assemblyRequired` and more; a bundle adds `subProducts`. `url` and `breadcrumb` paths are relative to https://www.smythstoys.com/uk/en-gb. `mode=search&query=` and `mode=category&category=` find product codes: they return `products` (`code`, `name`, `url`, `prices` with the same fields, `currency`, `image`, `averageRating`, `productType` - `BUNDLE` for bundles - and `decals`) with `totalResults`, `totalPages` and `nextPage`, 60 per page; a category also returns its `title`, `breadcrumbs` and `subcategories` (`code`, `name`, `count`). Smyths' search returns its best 240 matches at most, a category every product it holds. Listings collect up to `max_results` from `page` on, billed one unit per page.",
|
|
2575
|
+
"params": [
|
|
2576
|
+
{
|
|
2577
|
+
"name": "code",
|
|
2578
|
+
"type": "string",
|
|
2579
|
+
"required": true,
|
|
2580
|
+
"description": "mode=product and mode=details: product code ('225095'), product or bundle page link, or product-inventory link."
|
|
2581
|
+
},
|
|
2582
|
+
{
|
|
2583
|
+
"name": "bundle",
|
|
2584
|
+
"type": "boolean",
|
|
2585
|
+
"required": false,
|
|
2586
|
+
"description": "mode=product and mode=details: ask for a bundle. A bundle page link sets it, and a code Smyths does not answer as a product is asked again as a bundle.",
|
|
2587
|
+
"default": false
|
|
2588
|
+
}
|
|
2589
|
+
]
|
|
2590
|
+
},
|
|
2591
|
+
{
|
|
2592
|
+
"name": "smyths_search",
|
|
2593
|
+
"title": "Smyths Toys UK product stock, price, details and listings (mode=search)",
|
|
2594
|
+
"category": "E-commerce",
|
|
2595
|
+
"path": "/marketplace/smyths-inventory",
|
|
2596
|
+
"fixed": {
|
|
2597
|
+
"mode": "search"
|
|
2598
|
+
},
|
|
2599
|
+
"description": "Smyths Toys UK (smythstoys.com) as JSON, in four modes. `mode=product` (the default when `code` is given) returns one product's stock and price as the JSON Smyths' own storefront reads (`/api/uk/en-gb/product/product-inventory`), unchanged: `code`, `type`, `prices` (`price`, `value`, `wasPrice`, `thenPrice`, `rrpPrice`, `discountedPercentage`), `hdSection` (home delivery: `stockStatus`, `stockMessage`, `isAvailableForDelivery`, `isPreOrder`, `expectedStockDate`, delivery messages), `ccSection` (click & collect: the same stock fields plus `storeName`, `deliveryMessage`, `storeClosed`), `ageSuitabilities`, `carrierType`, marketing messages and decals. `code` takes a product code (`225095`), a product or bundle page link or a product-inventory link; one product is one billed request. `mode=details&code=` returns the JSON Smyths' product page is built from (`/api/uk/en-gb/product`, a bundle's from `/api/uk/en-gb/b`), unchanged, one billed request: `name`, `brand`, `ean`, `description` (HTML), `webFeatures` (the key features list), the safety warnings `euWarning`, `safetyText`, `urgentSafetyTextHeading` and `urgentSafetyTextDescription`, `productImages` (the gallery: `thumbnail`, `original` and `zoom` per `galleryIndex`, videos as `youtubeUrl`), `prices`, `averageRating`, `numberOfReviews`, `breadcrumb`, `categoryHierarchy`, `ageSuitabilities`, `assemblyRequired` and more; a bundle adds `subProducts`. `url` and `breadcrumb` paths are relative to https://www.smythstoys.com/uk/en-gb. `mode=search&query=` and `mode=category&category=` find product codes: they return `products` (`code`, `name`, `url`, `prices` with the same fields, `currency`, `image`, `averageRating`, `productType` - `BUNDLE` for bundles - and `decals`) with `totalResults`, `totalPages` and `nextPage`, 60 per page; a category also returns its `title`, `breadcrumbs` and `subcategories` (`code`, `name`, `count`). Smyths' search returns its best 240 matches at most, a category every product it holds. Listings collect up to `max_results` from `page` on, billed one unit per page.",
|
|
2600
|
+
"params": [
|
|
2601
|
+
{
|
|
2602
|
+
"name": "query",
|
|
2603
|
+
"type": "string",
|
|
2604
|
+
"required": true,
|
|
2605
|
+
"description": "mode=search: what to search for, e.g. 'lego star wars'. Smyths returns its best 240 matches at most - list a category to get every product of a range."
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
"name": "sort",
|
|
2609
|
+
"type": "string",
|
|
2610
|
+
"required": false,
|
|
2611
|
+
"description": "Listing order. search: relevance, bestsellers, price_asc, price_desc, rating_desc, newest (the first is the default). category: bestsellers, price_asc, price_desc, rating_desc, newest (the first is the default)."
|
|
2612
|
+
},
|
|
2613
|
+
{
|
|
2614
|
+
"name": "page",
|
|
2615
|
+
"type": "integer",
|
|
2616
|
+
"required": false,
|
|
2617
|
+
"description": "1-based listing page to start from (60 products per page).",
|
|
2618
|
+
"default": 1
|
|
2619
|
+
},
|
|
2620
|
+
{
|
|
2621
|
+
"name": "max_results",
|
|
2622
|
+
"type": "integer",
|
|
2623
|
+
"required": false,
|
|
2624
|
+
"description": "Products to collect across pages, 1-600. Each page fetched is billed one unit.",
|
|
2625
|
+
"default": 60
|
|
2626
|
+
}
|
|
2627
|
+
]
|
|
2628
|
+
},
|
|
2629
|
+
{
|
|
2630
|
+
"name": "smyths_category",
|
|
2631
|
+
"title": "Smyths Toys UK product stock, price, details and listings (mode=category)",
|
|
2632
|
+
"category": "E-commerce",
|
|
2633
|
+
"path": "/marketplace/smyths-inventory",
|
|
2634
|
+
"fixed": {
|
|
2635
|
+
"mode": "category"
|
|
2636
|
+
},
|
|
2637
|
+
"description": "Smyths Toys UK (smythstoys.com) as JSON, in four modes. `mode=product` (the default when `code` is given) returns one product's stock and price as the JSON Smyths' own storefront reads (`/api/uk/en-gb/product/product-inventory`), unchanged: `code`, `type`, `prices` (`price`, `value`, `wasPrice`, `thenPrice`, `rrpPrice`, `discountedPercentage`), `hdSection` (home delivery: `stockStatus`, `stockMessage`, `isAvailableForDelivery`, `isPreOrder`, `expectedStockDate`, delivery messages), `ccSection` (click & collect: the same stock fields plus `storeName`, `deliveryMessage`, `storeClosed`), `ageSuitabilities`, `carrierType`, marketing messages and decals. `code` takes a product code (`225095`), a product or bundle page link or a product-inventory link; one product is one billed request. `mode=details&code=` returns the JSON Smyths' product page is built from (`/api/uk/en-gb/product`, a bundle's from `/api/uk/en-gb/b`), unchanged, one billed request: `name`, `brand`, `ean`, `description` (HTML), `webFeatures` (the key features list), the safety warnings `euWarning`, `safetyText`, `urgentSafetyTextHeading` and `urgentSafetyTextDescription`, `productImages` (the gallery: `thumbnail`, `original` and `zoom` per `galleryIndex`, videos as `youtubeUrl`), `prices`, `averageRating`, `numberOfReviews`, `breadcrumb`, `categoryHierarchy`, `ageSuitabilities`, `assemblyRequired` and more; a bundle adds `subProducts`. `url` and `breadcrumb` paths are relative to https://www.smythstoys.com/uk/en-gb. `mode=search&query=` and `mode=category&category=` find product codes: they return `products` (`code`, `name`, `url`, `prices` with the same fields, `currency`, `image`, `averageRating`, `productType` - `BUNDLE` for bundles - and `decals`) with `totalResults`, `totalPages` and `nextPage`, 60 per page; a category also returns its `title`, `breadcrumbs` and `subcategories` (`code`, `name`, `count`). Smyths' search returns its best 240 matches at most, a category every product it holds. Listings collect up to `max_results` from `page` on, billed one unit per page.",
|
|
2638
|
+
"params": [
|
|
2639
|
+
{
|
|
2640
|
+
"name": "category",
|
|
2641
|
+
"type": "string",
|
|
2642
|
+
"required": true,
|
|
2643
|
+
"description": "mode=category: a category code ('SM060101') or a category page link (https://www.smythstoys.com/uk/en-gb/toys/action-figures-and-playsets/c/SM060101). The top categories are Toys SM0601, Baby SM0602, Outdoor SM0603 and Gaming & Tech SM0604; each listing names its subcategories."
|
|
2644
|
+
},
|
|
2645
|
+
{
|
|
2646
|
+
"name": "sort",
|
|
2647
|
+
"type": "string",
|
|
2648
|
+
"required": false,
|
|
2649
|
+
"description": "Listing order. search: relevance, bestsellers, price_asc, price_desc, rating_desc, newest (the first is the default). category: bestsellers, price_asc, price_desc, rating_desc, newest (the first is the default)."
|
|
2000
2650
|
},
|
|
2001
2651
|
{
|
|
2002
|
-
"name": "
|
|
2003
|
-
"type": "
|
|
2652
|
+
"name": "page",
|
|
2653
|
+
"type": "integer",
|
|
2004
2654
|
"required": false,
|
|
2005
|
-
"description": "
|
|
2655
|
+
"description": "1-based listing page to start from (60 products per page).",
|
|
2656
|
+
"default": 1
|
|
2006
2657
|
},
|
|
2007
2658
|
{
|
|
2008
|
-
"name": "
|
|
2009
|
-
"type": "
|
|
2659
|
+
"name": "max_results",
|
|
2660
|
+
"type": "integer",
|
|
2010
2661
|
"required": false,
|
|
2011
|
-
"description": "
|
|
2662
|
+
"description": "Products to collect across pages, 1-600. Each page fetched is billed one unit.",
|
|
2663
|
+
"default": 60
|
|
2012
2664
|
}
|
|
2013
2665
|
]
|
|
2014
2666
|
},
|
|
2015
2667
|
{
|
|
2016
|
-
"name": "
|
|
2017
|
-
"title": "Scrape
|
|
2668
|
+
"name": "wish_search",
|
|
2669
|
+
"title": "Scrape Wish product search",
|
|
2018
2670
|
"category": "E-commerce",
|
|
2019
|
-
"path": "/marketplace/
|
|
2671
|
+
"path": "/marketplace/wish-search",
|
|
2020
2672
|
"fixed": {},
|
|
2021
|
-
"description": "Searches
|
|
2673
|
+
"description": "Searches Wish (wish.com) for `query` and returns `products`: `id`, `name`, `url`, `price`, `originalPrice` (crossed-out price, when discounted), `currency`, `priceText`, `priceUsd` (Wish's USD value, comparable across markets), `shipping`, `rating`, `ratingCount`, `numBought`, `inventory`, `colors`, `sizes`, `merchant` (`id`, `name`, `rating`, `ratingCount`, `feedback`, `country`), `originCountry`, `shipsFrom`, `tileText`, `isWishPick`, `position`, `image` and `thumbnail`, plus `totalResults` and `nextPage`. Wish shows the catalogue and prices of the request's country (`proxy_country`, default US). Collects up to `max_results` from `page` on, billed one unit per page.",
|
|
2022
2674
|
"params": [
|
|
2023
2675
|
{
|
|
2024
|
-
"name": "
|
|
2676
|
+
"name": "query",
|
|
2025
2677
|
"type": "string",
|
|
2026
2678
|
"required": true,
|
|
2027
|
-
"description": "What to search
|
|
2679
|
+
"description": "What to search for, e.g. 'yoga mat' or 'phone case', or a wish.com/search/... link."
|
|
2028
2680
|
},
|
|
2029
2681
|
{
|
|
2030
2682
|
"name": "page",
|
|
2031
2683
|
"type": "integer",
|
|
2032
2684
|
"required": false,
|
|
2033
|
-
"description": "1-based results page to start from (1-
|
|
2685
|
+
"description": "1-based results page to start from (1-300, up to 30 products per page).",
|
|
2034
2686
|
"default": 1
|
|
2035
2687
|
},
|
|
2036
2688
|
{
|
|
2037
2689
|
"name": "max_results",
|
|
2038
2690
|
"type": "integer",
|
|
2039
2691
|
"required": false,
|
|
2040
|
-
"description": "
|
|
2041
|
-
"default":
|
|
2692
|
+
"description": "Products to collect across pages, 1-300. Each page fetched is billed one unit.",
|
|
2693
|
+
"default": 30
|
|
2042
2694
|
},
|
|
2043
2695
|
{
|
|
2044
|
-
"name": "
|
|
2696
|
+
"name": "proxy_country",
|
|
2045
2697
|
"type": "string",
|
|
2046
2698
|
"required": false,
|
|
2047
|
-
"description": "
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
"required": false,
|
|
2060
|
-
"description": "Only offers priced at or below this many yuan (CNY)."
|
|
2061
|
-
},
|
|
2699
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'GB', 'DE'). Wish shows the catalogue, prices and currency of that country. Default 'US' (prices in USD)."
|
|
2700
|
+
}
|
|
2701
|
+
]
|
|
2702
|
+
},
|
|
2703
|
+
{
|
|
2704
|
+
"name": "wish_product",
|
|
2705
|
+
"title": "Scrape one Wish product",
|
|
2706
|
+
"category": "E-commerce",
|
|
2707
|
+
"path": "/marketplace/wish-product",
|
|
2708
|
+
"fixed": {},
|
|
2709
|
+
"description": "One Wish (wish.com) product as JSON: `id`, `name`, `url`, `price` (cheapest available variant), `originalPrice`, `currency`, `priceUsd`, `priceRange`, `shipping`, `inStock`, `rating`, `ratingCount`, `description`, `attributes`, `badges`, `images`, `merchant` (`id`, `name`, `handle`, `rating`, `ratingCount`, `tier`), `shipsFrom`, `shipsTo`, `deliveryEstimate`, `returnPolicy`, `variants` (`id`, `color`, `size`, `price`, `originalPrice`, `priceUsd`, `shipping`, `inventory`, `available`) and `topReviews` (`rating`, `comment`, `date`, `variant`, `upvotes`, `country`; no reviewer names). Prices are those of the request's country (`proxy_country`, default US). One unit per call.",
|
|
2710
|
+
"params": [
|
|
2062
2711
|
{
|
|
2063
|
-
"name": "
|
|
2712
|
+
"name": "product",
|
|
2064
2713
|
"type": "string",
|
|
2065
|
-
"required":
|
|
2066
|
-
"description": "
|
|
2714
|
+
"required": true,
|
|
2715
|
+
"description": "A Wish product id ('5f96ad46b3f6480c7b9d7b52') or a product link (https://www.wish.com/product/..., /c/...)."
|
|
2067
2716
|
},
|
|
2068
2717
|
{
|
|
2069
2718
|
"name": "proxy_country",
|
|
2070
2719
|
"type": "string",
|
|
2071
2720
|
"required": false,
|
|
2072
|
-
"description": "Proxy country the request is sent from (ISO-2, e.g. '
|
|
2721
|
+
"description": "Proxy country the request is sent from (ISO-2, e.g. 'US', 'GB', 'DE'). Wish shows the catalogue, prices and currency of that country. Default 'US' (prices in USD)."
|
|
2073
2722
|
}
|
|
2074
2723
|
]
|
|
2075
2724
|
},
|
|
2076
2725
|
{
|
|
2077
|
-
"name": "
|
|
2078
|
-
"title": "Scrape
|
|
2726
|
+
"name": "shopee_search",
|
|
2727
|
+
"title": "Scrape Shopee product search",
|
|
2079
2728
|
"category": "E-commerce",
|
|
2080
|
-
"path": "/marketplace/
|
|
2729
|
+
"path": "/marketplace/shopee-search",
|
|
2081
2730
|
"fixed": {},
|
|
2082
|
-
"description": "
|
|
2731
|
+
"description": "Searches a Shopee market (Singapore, Indonesia, Malaysia, Thailand, Vietnam, Philippines, Taiwan or Brazil - `country`) for `q` and returns one page of results: up to 40 `products`, each with `position`, `itemId`, `shopId`, `name`, `url`, `image`, `price`, `originalPrice` (when Shopee shows the crossed-out price), `discountPercent`, `currency`, `rating` (average stars), `location` (where the seller ships from) and `labels` (promotion badges). `sort` orders the results, `min_price` / `max_price` filter them, `shop_id` keeps one shop's products (or lists the shop without `q`), and `url` takes a Shopee search or category link instead. Shopee shows one page per search, so run several sort orders or price ranges for more products. `price` is what Shopee shows a signed-out shopper, which can be a promotional or new-customer price (see `labels`). Not available: stock, units sold, rating counts and reviews (Shopee does not publish them on the pages these endpoints read). One unit per call.",
|
|
2083
2732
|
"params": [
|
|
2084
2733
|
{
|
|
2085
|
-
"name": "
|
|
2734
|
+
"name": "q",
|
|
2086
2735
|
"type": "string",
|
|
2087
2736
|
"required": false,
|
|
2088
|
-
"description": "
|
|
2737
|
+
"description": "What to search for, e.g. 'iphone case' or 'air fryer'. Optional with `shop_id`."
|
|
2089
2738
|
},
|
|
2090
2739
|
{
|
|
2091
|
-
"name": "
|
|
2740
|
+
"name": "country",
|
|
2092
2741
|
"type": "string",
|
|
2093
2742
|
"required": false,
|
|
2094
|
-
"description": "
|
|
2743
|
+
"description": "Shopee market: 'sg' (shopee.sg), 'id' (shopee.co.id), 'my' (shopee.com.my), 'th' (shopee.co.th), 'vn' (shopee.vn), 'ph' (shopee.ph), 'tw' (shopee.tw), 'br' (shopee.com.br). Default 'sg'. Prices are in that market's currency."
|
|
2095
2744
|
},
|
|
2096
2745
|
{
|
|
2097
|
-
"name": "
|
|
2746
|
+
"name": "shop_id",
|
|
2098
2747
|
"type": "string",
|
|
2099
2748
|
"required": false,
|
|
2100
|
-
"description": "
|
|
2101
|
-
}
|
|
2102
|
-
]
|
|
2103
|
-
},
|
|
2104
|
-
{
|
|
2105
|
-
"name": "tiktok_shop_search",
|
|
2106
|
-
"title": "Search TikTok Shop products by keyword or category",
|
|
2107
|
-
"category": "E-commerce",
|
|
2108
|
-
"path": "/social/tiktok-shop-search",
|
|
2109
|
-
"fixed": {},
|
|
2110
|
-
"description": "Lists TikTok Shop (US) products for a keyword (`q`) or a category (`category`, URL or id). Each product card carries `productId`, `url`, `title`, `image`, `price` (current, original, discountPercent, currency, fromPrice), `rating`, `reviewCount`, `soldCount`, `brand`, `seller` (id, name, logo), promotion `labels` and, when TikTok binds one, the promoting `video` (id, url, author, play and like counts, `durationSeconds`). A keyword search also returns `relatedSearches` and `relatedCategories`; a category returns its `subcategories` and `breadcrumbs`. Up to 30 products (one page, one billed request). A keyword or category TikTok has no listing for returns 404.",
|
|
2111
|
-
"params": [
|
|
2749
|
+
"description": "Only this shop's products (the number in a shop's links, e.g. 442800909). Without `q` it lists the shop."
|
|
2750
|
+
},
|
|
2112
2751
|
{
|
|
2113
|
-
"name": "
|
|
2752
|
+
"name": "url",
|
|
2114
2753
|
"type": "string",
|
|
2115
2754
|
"required": false,
|
|
2116
|
-
"description": "
|
|
2755
|
+
"description": "A Shopee search or category link (e.g. https://shopee.sg/search?keyword=lego or https://shopee.sg/Cases-Covers-cat.11013350.11013434.11027839), used as it is; `q`, `country`, `shop_id`, `sort` and the price filters are then ignored."
|
|
2117
2756
|
},
|
|
2118
2757
|
{
|
|
2119
|
-
"name": "
|
|
2758
|
+
"name": "sort",
|
|
2120
2759
|
"type": "string",
|
|
2121
2760
|
"required": false,
|
|
2122
|
-
"description": "
|
|
2761
|
+
"description": "Result order: relevance, sales, newest, price_asc, price_desc.",
|
|
2762
|
+
"default": "relevance"
|
|
2763
|
+
},
|
|
2764
|
+
{
|
|
2765
|
+
"name": "min_price",
|
|
2766
|
+
"type": "integer",
|
|
2767
|
+
"required": false,
|
|
2768
|
+
"description": "Lowest price, in the market's currency."
|
|
2769
|
+
},
|
|
2770
|
+
{
|
|
2771
|
+
"name": "max_price",
|
|
2772
|
+
"type": "integer",
|
|
2773
|
+
"required": false,
|
|
2774
|
+
"description": "Highest price, in the market's currency."
|
|
2123
2775
|
},
|
|
2124
2776
|
{
|
|
2125
2777
|
"name": "max_results",
|
|
2126
2778
|
"type": "integer",
|
|
2127
2779
|
"required": false,
|
|
2128
|
-
"description": "Products to return
|
|
2129
|
-
"default":
|
|
2780
|
+
"description": "Products to return, 1-40 (one Shopee results page).",
|
|
2781
|
+
"default": 40
|
|
2130
2782
|
}
|
|
2131
2783
|
]
|
|
2132
2784
|
},
|
|
2133
2785
|
{
|
|
2134
|
-
"name": "
|
|
2135
|
-
"title": "Scrape one
|
|
2786
|
+
"name": "shopee_product",
|
|
2787
|
+
"title": "Scrape one Shopee product",
|
|
2136
2788
|
"category": "E-commerce",
|
|
2137
|
-
"path": "/
|
|
2789
|
+
"path": "/marketplace/shopee-product",
|
|
2138
2790
|
"fixed": {},
|
|
2139
|
-
"description": "
|
|
2791
|
+
"description": "One Shopee product as JSON, from a product link (`url`) or `shop_id` + `item_id` + `country`: `title`, `price`, `originalPrice`, `discountPercent`, `currency`, `rating` (average stars), `labels`, `images`, `shopLocation` and `shop` (`name`, `username`, `url`, `rating`, `ratingCount`, `followers`, `itemCount`, `responseRatePercent`, `isOfficialShop`, `isPreferredPlusSeller`, `location`, `joinedAt`). With `dataLevel: full` it also has `description`, `brand`, `condition`, `categories`, `videos`, `variations` (option names), `models` (`modelId`, `name`), `attributes`, `isOfficialShop`, `isPreOrder`, `estimatedShippingDays` and `createdAt`; `dataLevel: meta` means Shopee showed only the product's title and main image (some markets), with price, rating and shop still included. `price` is what Shopee shows a signed-out shopper, which can be a promotional or new-customer price (see `labels`). Not available: stock, units sold, rating counts and reviews (Shopee does not publish them on the pages these endpoints read). One unit per call.",
|
|
2140
2792
|
"params": [
|
|
2141
2793
|
{
|
|
2142
2794
|
"name": "url",
|
|
2143
2795
|
"type": "string",
|
|
2144
2796
|
"required": false,
|
|
2145
|
-
"description": "A
|
|
2797
|
+
"description": "A Shopee product link, e.g. https://shopee.sg/Beats-iPhone-17-Case-i.442800909.40270108836 or https://shopee.co.id/product/1426163997/40581375446."
|
|
2146
2798
|
},
|
|
2147
2799
|
{
|
|
2148
|
-
"name": "
|
|
2800
|
+
"name": "shop_id",
|
|
2149
2801
|
"type": "string",
|
|
2150
2802
|
"required": false,
|
|
2151
|
-
"description": "
|
|
2152
|
-
}
|
|
2153
|
-
]
|
|
2154
|
-
},
|
|
2155
|
-
{
|
|
2156
|
-
"name": "tiktok_shop_store",
|
|
2157
|
-
"title": "Scrape a TikTok Shop store and its products",
|
|
2158
|
-
"category": "E-commerce",
|
|
2159
|
-
"path": "/social/tiktok-shop-store",
|
|
2160
|
-
"fixed": {},
|
|
2161
|
-
"description": "Fetches a TikTok Shop (US) store by URL or seller id and returns its profile as `store` (id, name, url, rating, followers, soldCount, productCount, reviewCount, videoCount, logo, label such as 'OFFICIAL SHOP', service `scores` like positive feedback and on-time delivery, description) plus the `products` on its storefront page (up to 20, same card shape as /social/tiktok-shop-search) and `hasMore`. The store page does not carry the seller's business name and address, so `businessName` / `businessAddress` are null here; a product's `seller` (/social/tiktok-shop-product) has them. A store with no products listed returns its profile and an empty `products`. One billed request. Most stores answer in a few seconds; a store TikTok shows only past its verification puzzle (common for smaller shops) is read through that puzzle and can take up to about 50 s. A seller id TikTok has no US store for returns 404.",
|
|
2162
|
-
"params": [
|
|
2803
|
+
"description": "Instead of `url`: the shop id (the first number after '-i.' in a product link)."
|
|
2804
|
+
},
|
|
2163
2805
|
{
|
|
2164
|
-
"name": "
|
|
2806
|
+
"name": "item_id",
|
|
2165
2807
|
"type": "string",
|
|
2166
|
-
"required":
|
|
2167
|
-
"description": "
|
|
2808
|
+
"required": false,
|
|
2809
|
+
"description": "Instead of `url`: the item id (the second number after '-i.')."
|
|
2168
2810
|
},
|
|
2169
2811
|
{
|
|
2170
|
-
"name": "
|
|
2171
|
-
"type": "
|
|
2812
|
+
"name": "country",
|
|
2813
|
+
"type": "string",
|
|
2172
2814
|
"required": false,
|
|
2173
|
-
"description": "
|
|
2174
|
-
"default": 20
|
|
2815
|
+
"description": "With `shop_id` + `item_id`: Shopee market: 'sg' (shopee.sg), 'id' (shopee.co.id), 'my' (shopee.com.my), 'th' (shopee.co.th), 'vn' (shopee.vn), 'ph' (shopee.ph), 'tw' (shopee.tw), 'br' (shopee.com.br). Default 'sg'. Prices are in that market's currency."
|
|
2175
2816
|
}
|
|
2176
2817
|
]
|
|
2177
2818
|
},
|
|
2178
2819
|
{
|
|
2179
|
-
"name": "
|
|
2180
|
-
"title": "Scrape
|
|
2820
|
+
"name": "taobao_search",
|
|
2821
|
+
"title": "Scrape Taobao / Tmall keyword or category listings",
|
|
2181
2822
|
"category": "E-commerce",
|
|
2182
|
-
"path": "/
|
|
2823
|
+
"path": "/marketplace/taobao-search",
|
|
2183
2824
|
"fixed": {},
|
|
2184
|
-
"description": "
|
|
2825
|
+
"description": "Returns the products Taobao lists for a keyword `q` (or a `category`) as JSON: `products` (`position`, `itemId`, `title`, `url`, `image`, `price` in yuan with `currency` CNY, `priceLabel` (Taobao's price tag, e.g. \u4F18\u60E0\u4EF7), `localPrices` (the same price in the storefront's currency, HKD and TWD), `shopId`, `shopName`, `descriptionMatchScore`, `freeShipping`, `categoryId`, `rootCategoryId`, `sellingPoints`, `reviewHighlights`), `totalResults` (how many listings Taobao reports), and `filterOptions` (brand and property facets; pass an option's `filter` value back as `filter`). Sort by relevance, sales or price and filter by a yuan price range (products whose listed price falls outside it are left out and counted in `droppedOutsidePriceRange`). Taobao shows signed-out visitors only the first 20 products of a list, so one call returns up to 20 (narrow with price ranges and filters to reach more). When Taobao has no list for the keyword, the call answers with the list of the closest keyword Taobao itself suggests and says so: `keywordSubstituted` true and `matchedKeyword`. Text comes in Chinese as sellers write it. Companion to `/marketplace/taobao-product`. One unit per call.",
|
|
2185
2826
|
"params": [
|
|
2186
2827
|
{
|
|
2187
|
-
"name": "
|
|
2828
|
+
"name": "q",
|
|
2188
2829
|
"type": "string",
|
|
2189
|
-
"required":
|
|
2190
|
-
"description": "
|
|
2830
|
+
"required": false,
|
|
2831
|
+
"description": "Keyword, in Chinese or English, e.g. '\u624B\u673A\u58F3', '\u8FDE\u8863\u88D9', 'phone case' (Chinese keywords match far more listings). A Taobao search or list link works too. Give `q` or `category`."
|
|
2191
2832
|
},
|
|
2192
2833
|
{
|
|
2193
|
-
"name": "
|
|
2834
|
+
"name": "category",
|
|
2194
2835
|
"type": "string",
|
|
2195
2836
|
"required": false,
|
|
2196
|
-
"description": "
|
|
2197
|
-
"default": "1688"
|
|
2837
|
+
"description": "A Taobao category id, e.g. '50005050', or a category list link (https://www.taobao.com/list/category/50005050.htm). Returns the category's best sellers; sort and filters apply to keyword searches only."
|
|
2198
2838
|
},
|
|
2199
2839
|
{
|
|
2200
|
-
"name": "
|
|
2201
|
-
"type": "
|
|
2840
|
+
"name": "sort",
|
|
2841
|
+
"type": "string",
|
|
2202
2842
|
"required": false,
|
|
2203
|
-
"description": "
|
|
2204
|
-
"default":
|
|
2843
|
+
"description": "Order: relevance, sales, price_asc, price_desc (price in yuan).",
|
|
2844
|
+
"default": "relevance"
|
|
2205
2845
|
},
|
|
2206
2846
|
{
|
|
2207
|
-
"name": "
|
|
2208
|
-
"type": "
|
|
2847
|
+
"name": "price_min",
|
|
2848
|
+
"type": "number",
|
|
2209
2849
|
"required": false,
|
|
2210
|
-
"description": "
|
|
2211
|
-
"default": 20
|
|
2850
|
+
"description": "Only products at or above this many yuan (CNY)."
|
|
2212
2851
|
},
|
|
2213
2852
|
{
|
|
2214
|
-
"name": "
|
|
2853
|
+
"name": "price_max",
|
|
2854
|
+
"type": "number",
|
|
2855
|
+
"required": false,
|
|
2856
|
+
"description": "Only products at or below this many yuan (CNY)."
|
|
2857
|
+
},
|
|
2858
|
+
{
|
|
2859
|
+
"name": "filter",
|
|
2215
2860
|
"type": "string",
|
|
2216
2861
|
"required": false,
|
|
2217
|
-
"description": "
|
|
2218
|
-
|
|
2862
|
+
"description": "One brand or property filter, as the `filter` value of an option in `filterOptions` of an earlier answer, e.g. '20000-88634403'."
|
|
2863
|
+
}
|
|
2864
|
+
]
|
|
2865
|
+
},
|
|
2866
|
+
{
|
|
2867
|
+
"name": "taobao_product",
|
|
2868
|
+
"title": "Scrape one Taobao / Tmall item",
|
|
2869
|
+
"category": "E-commerce",
|
|
2870
|
+
"path": "/marketplace/taobao-product",
|
|
2871
|
+
"fixed": {},
|
|
2872
|
+
"description": "Returns one Taobao or Tmall item (by `item_id` or `url`) as JSON: `itemId`, `url`, `platform` (taobao / tmall), `title` (`titleTruncated` when Taobao shortens it, as it does for Tmall items), `price`, `originalPrice` and `priceMax` (for a price range) in yuan with `currency` CNY, `image`, `location` (ships from), `categoryId`, `rootCategoryId`, `categoryPath`, `freeShipping`, `paymentMethods`, `sellableLanguages`, `rating` (positive / neutral / negative split and counts; Taobao items only, Tmall does not publish it), `latestReview` (`rating`, `content`, `date`, `variant`, `hasMedia`, `followUps`; no reviewer identity, so no review photo or video URLs) and `shop` (`shopId`, `name`, `url`, `logo`, `sellerType` B = Tmall / C = Taobao, `creditLevel`, `openedAt`, `itemCount`, `scores` for description, service and delivery). This is what Taobao shows signed-out visitors: variants (SKUs), stock and monthly sales need a Taobao login and are not included. Companion to `/marketplace/taobao-search`. One unit per call.",
|
|
2873
|
+
"params": [
|
|
2874
|
+
{
|
|
2875
|
+
"name": "item_id",
|
|
2876
|
+
"type": "string",
|
|
2877
|
+
"required": false,
|
|
2878
|
+
"description": "Numeric Taobao or Tmall item id, e.g. '765833709683' (the `id` in item.taobao.com/item.htm?id=...)."
|
|
2219
2879
|
},
|
|
2220
2880
|
{
|
|
2221
|
-
"name": "
|
|
2881
|
+
"name": "url",
|
|
2222
2882
|
"type": "string",
|
|
2223
2883
|
"required": false,
|
|
2224
|
-
"description": "
|
|
2884
|
+
"description": "Taobao or Tmall item link, e.g. 'https://item.taobao.com/item.htm?id=765833709683' or 'https://detail.tmall.com/item.htm?id=1081364414020' (world.taobao.com, mobile and overseas item links work too). Either item_id or url is required."
|
|
2225
2885
|
}
|
|
2226
2886
|
]
|
|
2227
2887
|
},
|
|
@@ -4259,6 +4919,110 @@ var PLUGINS = [
|
|
|
4259
4919
|
}
|
|
4260
4920
|
]
|
|
4261
4921
|
},
|
|
4922
|
+
{
|
|
4923
|
+
"name": "upwork_jobs",
|
|
4924
|
+
"title": "Scrape Upwork job posts",
|
|
4925
|
+
"category": "Jobs",
|
|
4926
|
+
"path": "/jobs/upwork",
|
|
4927
|
+
"fixed": {},
|
|
4928
|
+
"description": "Searches Upwork jobs for `q` (or lists the newest jobs without it) and returns `jobs`: `id`, `ciphertext`, `url`, `title`, `description` (full text), `publishedAt`, `createdAt`, `renewedAt`, `jobType` (hourly / fixed), `hourlyMin`, `hourlyMax`, `budget` (fixed price), `currency`, `experienceLevel`, `duration`, `workload`, `skills`, plus `totalResults` and `nextStart`. Filter with `job_type`, `experience`, `budget`, `hourly_rate`, `client_hires`, `workload`, `duration`, `location`, `category`, `contract_to_hire`; sort by `relevance` or `recency`. `details=true` adds, per job: `proposals`, `interviewing`, `invitesSent`, `hired`, `positionsToHire`, `lastClientActivity`, `category`, `qualifications` and `client` (`country`, `city`, `timezone`, `paymentVerified`, `rating`, `reviews`, `totalSpent`, `hires`, `memberSince`; no client names). A private listing is marked `privateListing: true` without those fields. Upwork shows signed-out visitors the first 5000 results of a search. Billing: one unit per results page of up to 50 jobs, plus one per job page fetched with `details=true` (`callUnits`).",
|
|
4929
|
+
"params": [
|
|
4930
|
+
{
|
|
4931
|
+
"name": "q",
|
|
4932
|
+
"type": "string",
|
|
4933
|
+
"required": false,
|
|
4934
|
+
"description": "What to search for, e.g. 'python' or 'logo design'. Leave empty with sort=recency for the newest jobs."
|
|
4935
|
+
},
|
|
4936
|
+
{
|
|
4937
|
+
"name": "job_type",
|
|
4938
|
+
"type": "string",
|
|
4939
|
+
"required": false,
|
|
4940
|
+
"description": "hourly or fixed."
|
|
4941
|
+
},
|
|
4942
|
+
{
|
|
4943
|
+
"name": "experience",
|
|
4944
|
+
"type": "string",
|
|
4945
|
+
"required": false,
|
|
4946
|
+
"description": "Experience level, comma list of: entry, intermediate, expert."
|
|
4947
|
+
},
|
|
4948
|
+
{
|
|
4949
|
+
"name": "budget",
|
|
4950
|
+
"type": "string",
|
|
4951
|
+
"required": false,
|
|
4952
|
+
"description": "Fixed-price budget in USD, comma list of ranges like '100-499', '1000-4999' or '5000-'."
|
|
4953
|
+
},
|
|
4954
|
+
{
|
|
4955
|
+
"name": "hourly_rate",
|
|
4956
|
+
"type": "string",
|
|
4957
|
+
"required": false,
|
|
4958
|
+
"description": "Hourly rate in USD, e.g. '25-50' or '40-'."
|
|
4959
|
+
},
|
|
4960
|
+
{
|
|
4961
|
+
"name": "client_hires",
|
|
4962
|
+
"type": "string",
|
|
4963
|
+
"required": false,
|
|
4964
|
+
"description": "Client's past hires, comma list of: 0, 1-9, 10-."
|
|
4965
|
+
},
|
|
4966
|
+
{
|
|
4967
|
+
"name": "workload",
|
|
4968
|
+
"type": "string",
|
|
4969
|
+
"required": false,
|
|
4970
|
+
"description": "part_time (under 30 hrs/week) or full_time."
|
|
4971
|
+
},
|
|
4972
|
+
{
|
|
4973
|
+
"name": "duration",
|
|
4974
|
+
"type": "string",
|
|
4975
|
+
"required": false,
|
|
4976
|
+
"description": "Project length, comma list of: week, month, semester, ongoing (under a month, 1-3 months, 3-6 months, over 6 months)."
|
|
4977
|
+
},
|
|
4978
|
+
{
|
|
4979
|
+
"name": "location",
|
|
4980
|
+
"type": "string",
|
|
4981
|
+
"required": false,
|
|
4982
|
+
"description": "Client location, comma list of regions or countries as Upwork names them, e.g. 'Europe' or 'United States'."
|
|
4983
|
+
},
|
|
4984
|
+
{
|
|
4985
|
+
"name": "category",
|
|
4986
|
+
"type": "string",
|
|
4987
|
+
"required": false,
|
|
4988
|
+
"description": "Job category, comma list of names (Accounting & Consulting, Admin Support, Customer Service, Data Science & Analytics, Design & Creative, Engineering & Architecture, It & Networking, Legal, Sales & Marketing, Translation, Web, Mobile & Software Dev, Writing) or category ids."
|
|
4989
|
+
},
|
|
4990
|
+
{
|
|
4991
|
+
"name": "contract_to_hire",
|
|
4992
|
+
"type": "boolean",
|
|
4993
|
+
"required": false,
|
|
4994
|
+
"description": "Only contract-to-hire jobs.",
|
|
4995
|
+
"default": false
|
|
4996
|
+
},
|
|
4997
|
+
{
|
|
4998
|
+
"name": "sort",
|
|
4999
|
+
"type": "string",
|
|
5000
|
+
"required": false,
|
|
5001
|
+
"description": "relevance (default with q) or recency (default without q)."
|
|
5002
|
+
},
|
|
5003
|
+
{
|
|
5004
|
+
"name": "start",
|
|
5005
|
+
"type": "integer",
|
|
5006
|
+
"required": false,
|
|
5007
|
+
"description": "0-based position of the first job, 0-4999 (Upwork shows signed-out visitors the first 5000 results); `nextStart` continues.",
|
|
5008
|
+
"default": 0
|
|
5009
|
+
},
|
|
5010
|
+
{
|
|
5011
|
+
"name": "max_results",
|
|
5012
|
+
"type": "integer",
|
|
5013
|
+
"required": false,
|
|
5014
|
+
"description": "Jobs to collect, 1-5000. Each results page (up to 50 jobs) is billed one unit.",
|
|
5015
|
+
"default": 50
|
|
5016
|
+
},
|
|
5017
|
+
{
|
|
5018
|
+
"name": "details",
|
|
5019
|
+
"type": "boolean",
|
|
5020
|
+
"required": false,
|
|
5021
|
+
"description": "Add each job's page: proposals, client stats, qualifications. Up to 100 jobs; one more unit per job page fetched.",
|
|
5022
|
+
"default": false
|
|
5023
|
+
}
|
|
5024
|
+
]
|
|
5025
|
+
},
|
|
4262
5026
|
{
|
|
4263
5027
|
"name": "trustpilot_reviews",
|
|
4264
5028
|
"title": "Scrape Trustpilot company reviews",
|
|
@@ -5171,7 +5935,7 @@ var PLUGINS = [
|
|
|
5171
5935
|
"name": "format",
|
|
5172
5936
|
"type": "string",
|
|
5173
5937
|
"required": false,
|
|
5174
|
-
"description": "Output shape:
|
|
5938
|
+
"description": "Output shape: text, segments. 'segments' returns timestamps; 'text' returns only the joined plaintext.",
|
|
5175
5939
|
"default": "segments"
|
|
5176
5940
|
},
|
|
5177
5941
|
{
|
|
@@ -5850,7 +6614,7 @@ ${body}`);
|
|
|
5850
6614
|
}
|
|
5851
6615
|
|
|
5852
6616
|
// src/index.ts
|
|
5853
|
-
var VERSION = "0.
|
|
6617
|
+
var VERSION = "0.8.0";
|
|
5854
6618
|
var DEFAULT_BASE_URL = "https://api.scrapeunblocker.com";
|
|
5855
6619
|
var API_KEY_HEADER = "x-scrapeunblocker-key";
|
|
5856
6620
|
function resolveApiKey() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeunblocker-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.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": [
|