Get e-commerce products
Information collected may vary across e-commerce websites.
Base URL
POST https://ecommerce-api.datashake.com/search
Request parameters
callback *
Field type: string
Description: URL provided to receive API results.
We expect a URL endpoint that accepts JSON POST
requests
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback"
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback"
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
url *
Field type: string
Description: search page URL of supported e-commerce source.
We cannot process search URLs of unsupported sources.
We cannot process product pages. To do that, please use the Review Scraper API.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback"
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback"
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
keyword *
Field type: string
Description: keyword that will be used to run searches on supported e-commerce sources. It can be used as an alternative to the url
parameter, but it should not be used in conjunction with a url
.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "ear muffs,
"callback": "https://example.com/callback"
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "ear muffs",
"callback": "https://example.com/callback"
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
source
Field type: string or list of strings
Description: determines the source(s) to be searched when using the keyword
parameter. It defaults to all sources.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "keyboards",
"callback": "https://example.com/callback",
"source": ["amazon", "target"]
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "keyboards",
"callback": "https://example.com/callback",
"source": ["amazon", "target"]
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
filters
Field type: object
Description: set of filters to be applied to the search results. All filters are optional.
name
Field type: string or list of strings
Description: match results whose name contains the specified value(s). If multiple values are provided, the results will only match if they contain all of the values.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"name": ["cotton", "crew"]
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"name": ["cotton", "crew"]
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
url
Field type: string or list of strings
Description: match results whose URL contains the specified value(s). If multiple values are provided, the results will only match if they contain all of the values.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"url": ["short-sleeve"]
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"name": ["short-sleeve"]
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
full_price
Field type: object
Description: matches results whose full price is within the specified range.
Any combination of the following range filters can be used:
- lt
(number): Less than the specified value.
- lte
(number): Less than or equal to the specified value.
- gt
(number): Greater than the specified value.
- gte
(number): Greater than or equal to the specified value.
- eq
(number): Equal to the specified value. Overrides all other range filters.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"full_price": {
"lte": 50,
"gte": 10
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"full_price": {
"lte": 50,
"gte": 10
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
reduced_price
Field type: object
Description: matches results whose reduced price is within the specified range.
Any combination of the following range filters can be used:
- lt
(number): Less than the specified value.
- lte
(number): Less than or equal to the specified value.
- gt
(number): Greater than the specified value.
- gte
(number): Greater than or equal to the specified value.
- eq
(number): Equal to the specified value. Overrides all other range filters.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"reduced_price": {
"lt": 100,
"gt": 20
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"reduced_price": {
"lt": 100,
"gte": 20
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
rating
Field type: object
Description: matches results whose rating is within the specified range.
Any combination of the following range filters can be used:
- lt
(number): Less than the specified value.
- lte
(number): Less than or equal to the specified value.
- gt
(number): Greater than the specified value.
- gte
(number): Greater than or equal to the specified value.
- eq
(number): Equal to the specified value. Overrides all other range filters.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"rating": {
"gte": 4
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"rating": {
"gte": 4
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
review_count
Field type: object
Description: matches results whose review count is within the specified range.
Any combination of the following range filters can be used:
- lt
(number): Less than the specified value.
- lte
(number): Less than or equal to the specified value.
- gt
(number): Greater than the specified value.
- gte
(number): Greater than or equal to the specified value.
- eq
(number): Equal to the specified value. Overrides all other range filters.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"review_count": {
"gt": 1000
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"review_count": {
"gt": 1000
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
sponsored
Field type: boolean
Description: filter results according to whether they are sponsored or not.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"sponsored": true
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"sponsored": True
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
bestseller
Field type: boolean
Description: filter results according to whether they are bestsellers or not.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"bestseller": false
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"bestseller": False
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
prime
Field type: boolean
Description: filter results according to whether they are eligible for prime or not. Only applicable for Amazon products.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"prime": true
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"prime": True
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
overall_pick
Field type: boolean
Description: filter results according to whether they are overall picks or not.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"overall_pick": true
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"overall_pick": True
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
bought_last_month
Field type: object
Description: matches results whose "bought last month" count is within the specified range.
Any combination of the following range filters can be used:
- lt
(number): Less than the specified value.
- lte
(number): Less than or equal to the specified value.
- gt
(number): Greater than the specified value.
- gte
(number): Greater than or equal to the specified value.
- eq
(number): Equal to the specified value. Overrides all other range filters.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"bought_last_month": {
"eq": 500
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"bought_last_month": {
"eq": 500
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
ranking
Field type: object
Description: allows filtering products by the page(s) they show up in or the position within said page(s).
It is possible to filter by ranking using the following:
- pages
(number or list of numbers): pages that the product appears on.
- positions
(number or list of numbers): the position of the product on the page.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"ranking": {
"pages": [1, 2, 3],
"positions": [1, 2, 3]
}
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"ranking": {
"pages": [1, 2, 3],
"positions": [1, 2, 3]
}
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
Code example
Here's a sample request to get all t-shirts that contain the word "cotton" and "crew" in their name, have a full price between $10 and $50, have a rating of 4 or higher, and are not sponsored.
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"name": ["cotton", "crew"],
"full_price": {
"lte": 50,
"gte": 10
},
"rating": {
"gte": 4
},
"sponsored": false
}
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"keyword": "t-shirts",
"callback": "https://example.com/callback",
"filters": {
"name": ["cotton", "crew"],
"full_price": {
"lte": 50,
"gte": 10
},
"rating": {
"gte": 4
},
"sponsored": false
}
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
page
Field type: integer
Description: retrieve a specific page of results. Default value is set to 1
.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 1,
"per_page": 100
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 1,
"per_page": 100
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
per_page
Field type: integer
Description: number of products to return per page. The default value is 100
, and the maximum allowed value is 500
.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 4,
"per_page": 250
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 4,
"per_page": 250
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
limit
Field type: integer
Description: limits the amount of results that can be found.
Code example
curl --location 'https://ecommerce-api.datashake.com/search' \
--header 'x-api-key: yourapikey' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 1,
"per_page": 100,
"limit" 50
}'
import requests
import json
url = "https://ecommerce-api.datashake.com/search"
payload = json.dumps({
"url": "https://www.amazon.com/s?k=ear+muffs&crid=1JQK3QPXEA8FU&sprefix=ear+muff%2Caps%2C468&ref=nb_sb_noss_1",
"callback": "https://example.com/callback",
"page": 1,
"per_page": 100,
"limit": 50
})
headers = {
'x-api-key': 'yourapikey',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
Rules and restrictions
- You must send either
url
orkeyword
. - The
callback
parameter is required.
Response
API Response example
{
"request_id": "1715281762596980847-725a6bee-2411-49",
"status": "success",
"credits_used": 100,
"results": [
{
"unique_id": "B09QQ9VRWH",
"url": "https://www.amazon.com/Oscillating-Stroller-Operated-Portable-Treadmill/dp/B09QQ9VRWH",
"source": "amazon",
"name": "KITWLEMEN Baby Stroller Fan, Oscillating Clip on Fan with tripods, 20Hour Battery Operated Small Portable Fan for Crib Treadmill Car Seat Travel",
"thumbnail": "https://m.media-amazon.com/images/I/71ZMBDdCQgL._AC_UL320_.jpg",
"full_price": 24.99,
"reduced_price": 17.99,
"currency": "$",
"rating": 4.55,
"review_count": 404,
"bestseller": true,
"sponsored": false,
"ranking": 1,
"option_count": null,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": true,
"bought_last_month": 1000
}
},
{
"unique_id": "B09QPRTJRL",
"url": "https://www.amazon.com/20000mAh-Rechargeable-Operated-Personal-Hurricane/dp/B09QPRTJRL",
"source": "amazon",
"name": "KITWLEMEN Camping Fan with LED Lantern, 20000mAh Rechargeable Battery Operated Outdoor Tent Fan with Light & Hanging Hook, 4 Speeds, Personal USB Desk Fan for Camping, Power Outage, Hurricane, Jobsite",
"thumbnail": "https://m.media-amazon.com/images/I/81Li66Itn0L._AC_UL320_.jpg",
"full_price": 79.99,
"reduced_price": 55.99,
"currency": "$",
"rating": 4.75,
"review_count": 3526,
"bestseller": false,
"sponsored": false,
"ranking": 2,
"option_count": 3,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": false,
"bought_last_month": 500
}
},
{
"unique_id": "B0CXNY1ZCS",
"url": "https://www.amazon.com/KITWLEMEN-Camping-Rechargeable-Portable-Hurricane/dp/B0CXNY1ZCS",
"source": "amazon",
"name": "KITWLEMEN Solar Camping Fan with Light, 4 Speeds Rechargeable Battery Powered Fan with Timer, 90° Folding Portable Desk Fan with Power Bank Feature for Hurricane Outages Outdoor Camping Fishing",
"thumbnail": "https://m.media-amazon.com/images/I/81iFWirNAhL._AC_UL320_.jpg",
"full_price": 35.99,
"reduced_price": null,
"currency": "$",
"rating": 4.95,
"review_count": 46,
"bestseller": false,
"sponsored": false,
"ranking": 3,
"option_count": null,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": false,
"bought_last_month": 300
}
},
{
"unique_id": "B0BBSZFYSV",
"url": "https://www.amazon.com/Stroller-Personal-Handheld-Flexible-Treadmill/dp/B0BBSZFYSV",
"source": "amazon",
"name": "Stroller Fan for Baby , Personal Handheld Fan with 4 Strong Speeds, Clip On Fan with Flexible Tripod, 360° Pivoting, Battery Operated Portable Fan for Golf Cart Treadmill Camping Office, Black",
"thumbnail": "https://m.media-amazon.com/images/I/71OyLBwhH6S._AC_UL320_.jpg",
"full_price": 19.99,
"reduced_price": null,
"currency": "$",
"rating": 3.95,
"review_count": 86,
"bestseller": false,
"sponsored": false,
"ranking": 4,
"option_count": null,
"source_base_url": "https://www.amazon.com",
"metadata": null
},
{
"unique_id": "B0C282W9QS",
"url": "https://www.amazon.com/40000mAh-Oscillating-Rechargeable-Operated-Accessories/dp/B0C282W9QS",
"source": "amazon",
"name": "Camping Fan, 40000mAh Oscillating Rechargeable Battery Operated Fan, Portable Battery Powered Outdoor Tent Fan with Remote Light Hook for Camping Accessories Camper Patio Garage Jobsite Power Outrages",
"thumbnail": "https://m.media-amazon.com/images/I/81IHDaTlQ9L._AC_UL320_.jpg",
"full_price": 129.99,
"reduced_price": null,
"currency": "$",
"rating": 4.55,
"review_count": 578,
"bestseller": false,
"sponsored": false,
"ranking": 5,
"option_count": 2,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": false,
"bought_last_month": 100
}
},
{
"unique_id": "B0C7R3B3FC",
"url": "https://www.amazon.com/KITWLEMEN-Portable-Airflow-Operation-360°Rotate/dp/B0C7R3B3FC",
"source": "amazon",
"name": "KITWLEMEN Table Fan with Remote, 8 inch Portable Desk Fan with 3 Speeds Strong Airflow, RGB Light, Quiet Operation and 360°Rotate for Bedroom Home Office",
"thumbnail": "https://m.media-amazon.com/images/I/81rurQe4hlL._AC_UL320_.jpg",
"full_price": 25.99,
"reduced_price": null,
"currency": "$",
"rating": 4.75,
"review_count": 56,
"bestseller": false,
"sponsored": false,
"ranking": 6,
"option_count": null,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": false,
"bought_last_month": 200
}
},
{
"unique_id": "B0B93RL3X8",
"url": "https://www.amazon.com/20000mAh-Auto-Oscillating-Rechargeable-Hurricane-Emergency/dp/B0B93RL3X8",
"source": "amazon",
"name": "KITWLEMEN 20000mAh Camping Fan with LED Light, Auto-Oscillating Desk Fan with Remote & Hanging Hook, Rechargeable Battery Operated Tent Fan, 4 Timers USB Fan for Camping Jobsite Hurricane Emergency",
"thumbnail": "https://m.media-amazon.com/images/I/71Sbb2WvAFL._AC_UL320_.jpg",
"full_price": 48.99,
"reduced_price": null,
"currency": "$",
"rating": 4.55,
"review_count": 758,
"bestseller": false,
"sponsored": false,
"ranking": 7,
"option_count": 3,
"source_base_url": "https://www.amazon.com",
"metadata": {
"overall_pick": false,
"bought_last_month": 100
}
},
{
"unique_id": "B09QPJGB52",
"url": "https://www.amazon.com/10000mAh-Rechargeable-Operated-Personal-Hurricane/dp/B09QPJGB52",
"source": "amazon",
"name": "Camping Fan with LED Lantern, 10000mAh Rechargeable Battery Operated Outdoor Tent Fan with Light & Hook, 270° Pivot, 3 Speeds, Personal USB Desk Fan for Camping, Power Outage, Hurricane, Jobsite",
"thumbnail": "https://m.media-amazon.com/images/I/71yYvhgI74L._AC_UL320_.jpg",
"full_price": 31.99,
"reduced_price": null,
"currency": "$",
"rating": 4.65,
"review_count": 1259,
"bestseller": false,
"sponsored": false,
"ranking": 8,
"option_count": 3,
"source_base_url": "https://www.amazon.com",
"metadata": null
},
{
"unique_id": "B0D17XBVJK",
"url": "https://www.amazon.com/KITWLEMEN-Portable-Table-Fan-Adjustable/dp/B0D17XBVJK",
"source": "amazon",
"name": "KITWLEMEN Portable Table Fan - 8” Desk Fan with 4 Speeds, 8H Timers, 90° Adjustable, Square Box Fan Fit for Small Window, Air Circulator Fan for Bedroom, Dorm, Bathroom, Office",
"thumbnail": "https://m.media-amazon.com/images/I/7172nS9zpgL._AC_UL320_.jpg",
"full_price": 19.99,
"reduced_price": null,
"currency": "$",
"rating": 4.85,
"review_count": 14,
"bestseller": false,
"sponsored": false,
"ranking": 9,
"option_count": null,
"source_base_url": "https://www.amazon.com",
"metadata": null
},
{
"unique_id": "B0B3CKJMHG",
"url": "https://www.amazon.com/10000mAh-Rechargeable-Personal-Rotatable-Foldable/dp/B0B3CKJMHG",
"source": "amazon",
"name": "KITWLEMEN 8 Inch Misting Fan with Clip, 10000mAh Rechargeable Battery Powered, Personal Air Cooling Fan, 3 Speeds & 360° Rotatable Spray Fan with Foldable Hook for Jobsite Home Office Camping Travel",
"thumbnail": "https://m.media-amazon.com/images/I/714eRbCa9zL._AC_UL320_.jpg",
"full_price": 39.99,
"reduced_price": null,
"currency": "$",
"rating": 4.35,
"review_count": 211,
"bestseller": false,
"sponsored": false,
"ranking": 10,
"option_count": 2,
"source_base_url": "https://www.amazon.com",
"metadata": null
}
],
"pagination": {
"current_page": 1,
"page_size": 10,
"total_pages": 1
},
"summary": {
"total_results": 10,
"avg_rating": 4.59,
"review_volume": 6938,
"avg_review_volume": 693.8,
"products_per_source": [
{
"source": "amazon",
"count": 10
}
]
}
}