Amazon Data Skill
Use this skill to retrieve Amazon product data via the Canopy API REST endpoints using Python.
Canopy API provides real-time access to 350M+ Amazon products across 25K+ categories. With this skill you can fetch:
- Product details — titles, descriptions, pricing, images, feature bullets, and brand info
- Sales and stock estimates — weekly, monthly, and annual unit sales alongside current stock levels
- Reviews — ratings, review text, verified purchase status, and helpful vote counts
- Search — find products by keyword with filters for price, condition, category, and sort order
- Offers — compare pricing and fulfillment details across multiple sellers
- Deals — browse current Amazon deals and discounts across 12 international domains
- Categories — navigate the full Amazon category taxonomy
- Sellers and authors — look up seller profiles, ratings, and author bibliographies
- Best sellers — top-ranked products across Amazon's category taxonomy
- Identifier conversion — translate between ASINs and GTINs (ISBN/UPC/EAN)
Setup
- Sign up and create an account at canopyapi.co
- Get an API key from your dashboard
- Set the API key in your environment:
export API_KEY="your_api_key_here"
Base URL
https://rest.canopyapi.co
Authentication
All requests require the API-KEY header:
import os
import requests
API_KEY = os.environ["API_KEY"]
BASE_URL = "https://rest.canopyapi.co"
HEADERS = {"API-KEY": API_KEY}
Endpoints
Get Product Information
response = requests.get(f"{BASE_URL}/api/amazon/product", headers=HEADERS, params={
"asin": "B01HY0JA3G", # or use "url" or "gtin"
"domain": "US", # optional, defaults to "US"
})
Returns product title, brand, price, rating, images, feature bullets, categories, and seller info.
Convert ASIN to GTIN
response = requests.get(f"{BASE_URL}/api/amazon/product/gtin-from-asin", headers=HEADERS, params={
"asin": "B01HY0JA3G",
"domain": "US", # optional
})
Convert GTIN to ASIN
response = requests.get(f"{BASE_URL}/api/amazon/product/asin-from-gtin", headers=HEADERS, params={
"gtin": "9780141036144",
"domain": "US", # optional
})
Get Product Variants
response = requests.get(f"{BASE_URL}/api/amazon/product/variants", headers=HEADERS, params={
"asin": "B01HY0JA3G",
})
Get Stock Estimates
response = requests.get(f"{BASE_URL}/api/amazon/product/stock", headers=HEADERS, params={
"asin": "B01HY0JA3G",
})
Get Sales Estimates
response = requests.get(f"{BASE_URL}/api/amazon/product/sales", headers=HEADERS, params={
"asin": "B01HY0JA3G",
})
Returns weekly, monthly, and annual unit sales estimates.
Get Product Reviews
response = requests.get(f"{BASE_URL}/api/amazon/product/reviews", headers=HEADERS, params={
"asin": "B01HY0JA3G",
"page": 1, # optional
"onlyVerifiedReviews": True, # optional
"rating": "5", # optional, filter by star rating
"search": "battery life", # optional, filter by search term
})
Get Product Offers
response = requests.get(f"{BASE_URL}/api/amazon/product/offers", headers=HEADERS, params={
"asin": "B01HY0JA3G",
"page": 1, # optional
})
Search Products
response = requests.get(f"{BASE_URL}/api/amazon/search", headers=HEADERS, params={
"searchTerm": "wireless headphones",
"domain": "US", # optional
"categoryId": "172282", # optional, filter to a category
"page": 1, # optional
"limit": 20, # optional, 20-40
"minPrice": 10, # optional
"maxPrice": 100, # optional
"conditions": "NEW", # optional: NEW, USED, RENEWED (comma-separated)
"sort": "FEATURED", # optional: FEATURED, MOST_RECENT, PRICE_ASCENDING, PRICE_DESCENDING, AVERAGE_CUSTOMER_REVIEW
})
Get Autocomplete Suggestions
response = requests.get(f"{BASE_URL}/api/amazon/autocomplete", headers=HEADERS, params={
"searchTerm": "wireless",
"domain": "US", # optional
"category": "aps", # optional, Amazon autocomplete_alias (e.g. "electronics")
})
Get Category Taxonomy
response = requests.get(f"{BASE_URL}/api/amazon/categories", headers=HEADERS, params={
"domain": "US", # optional
})
Get Category Information
response = requests.get(f"{BASE_URL}/api/amazon/category", headers=HEADERS, params={
"categoryId": "1234567890",
"domain": "US", # optional
"page": 1, # optional
"sort": "FEATURED", # optional
})
Get Seller Information
response = requests.get(f"{BASE_URL}/api/amazon/seller", headers=HEADERS, params={
"sellerId": "A2R2RITDJNW1Q6",
"domain": "US", # optional
"page": 1, # optional
})
Get Author Information
response = requests.get(f"{BASE_URL}/api/amazon/author", headers=HEADERS, params={
"asin": "B000AQ5RM0",
"domain": "US", # optional
"page": 1, # optional
})
Get Deals
response = requests.get(f"{BASE_URL}/api/amazon/deals", headers=HEADERS, params={
"domain": "US", # optional
"page": 1, # optional
"limit": 20, # optional
"categoryIds": "3760911,172282", # optional, comma-separated category IDs
})
Get Best Sellers
response = requests.get(f"{BASE_URL}/api/amazon/bestsellers", headers=HEADERS, params={
"categoryId": "bestsellers_amazon_devices", # required if url not provided
# "url": "https://www.amazon.com/Best-Sellers/zgbs", # required if categoryId not provided
"domain": "US", # optional
"page": 1, # optional
"limit": 50, # optional, typically 20-50 per page
})
Returns ranked products with rank position, ratings, and category navigation info.
Get Best Seller Categories
response = requests.get(f"{BASE_URL}/api/amazon/bestseller-categories", headers=HEADERS, params={
"domain": "US", # optional
})
Returns top-level best seller category IDs (e.g. bestsellers_amazon_devices) to feed into /api/amazon/bestsellers.
Product Lookup Options
Product endpoints accept one of these identifiers:
| Parameter | Description | Example |
| --------- | ----------------------- | ---------------------------------- |
| asin | Amazon product ASIN | B01HY0JA3G |
| url | Full Amazon product URL | https://amazon.com/dp/B01HY0JA3G |
| gtin | ISBN, UPC, or EAN code | 9780141036144 |
Supported Domains
US (default), UK, CA, DE, FR, IT, ES, AU, IN, MX, BR, JP, PL
Error Handling
| Status | Meaning | | ------ | -------------------------- | | 400 | Invalid parameters | | 401 | Invalid or missing API key | | 402 | Payment required | | 500 | Server error |
response = requests.get(f"{BASE_URL}/api/amazon/product", headers=HEADERS, params={"asin": "B01HY0JA3G"})
if response.ok:
data = response.json()
else:
print(f"Error {response.status_code}: {response.text}")
Scan to join WeChat group