Dataspryva

Use Amazon Search, Category & Seller Listings Extractor with Python

Get Amazon products from search results, categories, seller storefronts, or ASIN lookups across 20+ marketplaces, with price, rating, badges, deals, and delivery details.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "includeSpecifications": false,
  "keywords": [
    "wireless earbuds"
  ],
  "marketplaceDomain": "amazon.com",
  "maxItems": 3,
  "maxItemsPerCategory": 3,
  "scrapeProductDetails": false
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
categoryUrlsarrayoptionalAmazon search, category, seller-profile, or exact product URLs. Search pages (/s?k=), browse nodes (/b?node=), seller profiles (/sp?seller=), and product pages (/dp/) are routed automatically. Combine with any other mode.
keywordsarrayoptionalPlain search keywords or phrases. Each keyword builds an Amazon search URL (/s?k={query}).
productUrlsarrayoptionalExact Amazon product URLs. Each URL is normalized to /dp/{ASIN} on its own marketplace and fetched directly (never as a search).
asinsarrayoptionalAmazon ASINs to fetch exactly. Each ASIN opens its own product page (/dp/{ASIN}) directly, never a keyword search.
sellerIdsarrayoptionalAmazon seller/merchant IDs. Each ID builds that seller's storefront listing (/s?me={sellerId}).
categoryNodeIdsarrayoptionalAmazon browse-node IDs. Each node builds a real category listing (/s?rh=n:{node}&fs=true), with a merchandising fallback only when Amazon renders no listing grid.
marketplaceDomainstringoptionalAmazon marketplace used for keyword, ASIN, seller, and node modes. URLs in categoryUrls/productUrls keep their own marketplace.
maxItemsintegeroptionalGlobal cap across every source in the run. 0 means no global cap.
maxItemsPerCategoryintegeroptionalMaximum products to return from each keyword, URL, seller, or node source.
maxPagesintegeroptionalMaximum listing pages per source. Amazon keyword search itself stops at page 7; category listings go deeper.
scrapeProductDetailsbooleanoptionalIf true, visit each accepted product's own page for specs, gallery images, seller, BSR, variants, and histogram. ASIN/product-URL modes always use detail pages. If false, only listing-card fields are returned.
includeSpecificationsbooleanoptionalIf true (and detail pages are scraped), return the specifications object parsed from the overview and technical-detail tables.
sortBystringoptionalSort order applied to search and category listings.
priceMinnumberoptionalOnly return products priced at or above this amount (marketplace currency).
priceMaxnumberoptionalOnly return products priced at or below this amount (marketplace currency).
minRatingnumberoptionalOnly return products with a star rating at or above this value (0-5).
includeSponsoredbooleanoptionalIf true (default), sponsored/ad placements are included. Set false to return organic results only.
onlyDealsbooleanoptionalIf true, only return products with visible deal evidence (coupon, limited-time-deal badge, or genuine strike-through list price).
primeOnlybooleanoptionalIf true, only return products with a visible Amazon Prime badge. Badges are render-dependent in some marketplaces.
rateLimitDelayintegeroptionalBase pacing delay between live requests. Product-detail requests always add human-like jitter.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/jLafkpWTCRAFfUa54/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Amazon product records from search, category, and seller listings with price, rating, badges, and delivery details.

Questions before you run

Which inputs are required?

No top-level fields are marked required in the published schema. Conditional requirements can still apply; check the README.

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build aAJedoI4DhBVoe0x1 and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.