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

4.0 KiB
Raw Blame History

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

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.

params = {"q": "mechanical keyboard", "domain": "www.amazon.com", "page": 1}

Params: q (required), domain, language, page, deliveryZip, shippingLocation, sortBy.

Amazon Seller / Seller Products

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.

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

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 domains. .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.