playbook/antigravity-awesome-skills/skills/hasdata/references/ecommerce.md

117 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# E-commerce APIs — Amazon & Shopify
| Endpoint | Returns |
|---|---|
| `/scrape/amazon/product` | Single product (price, ratings, variants, other sellers, A+) |
| `/scrape/amazon/search` | Search results (sponsored + organic) |
| `/scrape/amazon/seller` | Seller profile |
| `/scrape/amazon/seller-products` | Seller catalog |
| `/scrape/shopify/products` | Products from any Shopify store |
| `/scrape/shopify/collections` | Collections from any Shopify store |
All synchronous `GET`.
## Amazon Product
```python
import requests
resp = requests.get(
"https://api.hasdata.com/scrape/amazon/product",
headers={"x-api-key": API_KEY},
params={"asin": "B0DHJ7SBDR", "domain": "www.amazon.com", "otherSellers": "true"},
timeout=300,
)
```
| Param | Notes |
|---|---|
| `asin` | **Required.**. |
| `domain` | `www.amazon.com` (default), `.co.uk`, `.de`, `.co.jp`, … |
| `language` | Locale per domain. |
| `deliveryZip` | Affects shipping/availability fields. |
| `shippingLocation` | 2-letter country code. |
| `otherSellers` | `true` (default) to include other-seller block. |
Response: top-level `requestMetadata` + `product`. The `product` object's keys (verified live): `asin`, `url`, `title`, `brand`, `isAvailable`, `primaryFeatures`, `features`, `featureBullets`, `description`, `badges`, `breadcrumbs`, `whatIsInTheBox`, `variants`, `totalImages`, `primaryImage`, `images`, `descriptionImages`, `totalVideos`, `primaryVideo`, `videos`, `specification`, `reviewsInfo` (rating + count + sample reviews live here, not at the root). Pricing fields are surfaced via `variants` and `specification`.
## Amazon Search
```python
params = {"q": "mechanical keyboard", "domain": "www.amazon.com", "page": 1}
```
Params: `q` (required), `domain`, `language`, `page`, `deliveryZip`, `shippingLocation`, `sortBy`.
## Amazon Seller / Seller Products
```python
profile = requests.get(
"https://api.hasdata.com/scrape/amazon/seller",
headers={"x-api-key": API_KEY},
params={"sellerId": "A1MNOPQR", "domain": "www.amazon.com"},
timeout=300,
).json()
catalog = requests.get(
"https://api.hasdata.com/scrape/amazon/seller-products",
headers={"x-api-key": API_KEY},
params={"sellerId": "A1MNOPQR", "page": 1},
timeout=300,
).json()
```
Use cases: counterfeit detection, MAP enforcement, competitor catalog mirroring.
## Shopify Products
Works on **any** Shopify storefront with no authentication.
```python
def shopify_all(store_url):
page, out = 1, []
while True:
batch = requests.get(
"https://api.hasdata.com/scrape/shopify/products",
headers={"x-api-key": API_KEY},
params={"url": store_url, "page": page, "limit": 250},
timeout=300,
).json().get("products", [])
if not batch:
return out
out.extend(batch)
page += 1
```
| Param | Notes |
|---|---|
| `url` | **Required.** Storefront URL. |
| `limit` | 1250, default `1`. **Bump to 250** for catalog work. |
| `page` | 1-indexed. |
| `collection` | Collection handle filter. |
`/scrape/shopify/collections` has the same shape and returns the collection list.
## Patterns
### Cross-merchant price comparison
```python
a = requests.get("https://api.hasdata.com/scrape/amazon/search",
headers={"x-api-key": API_KEY},
params={"q": query}, timeout=300).json()
g = requests.get("https://api.hasdata.com/scrape/google/shopping",
headers={"x-api-key": API_KEY},
params={"q": query, "gl": "us"}, timeout=300).json()
```
### Reviews & bestsellers go through Scraper Jobs
The Product API only includes a sample of reviews. For all reviews use the `amazon-product-reviews` Scraper Job. For bestseller ranks use `amazon-bestsellers` — there's no synchronous API. See `scraper-jobs.md`.
## Gotchas
- **Same ASIN ≠ same product across `domain`s.** `.com` vs `.co.uk` can differ.
- **`deliveryZip` changes availability.** Pass it when stock matters; omit for spec-only scrapes.
- **Shopify `limit` defaults to 1** — always set 250 for catalog crawls.