Amazon Search, Category & Best Sellers Scraper avatar

Amazon Search, Category & Best Sellers Scraper

Pricing

$1.90 / 1,000 result items

Go to Apify Store
Amazon Search, Category & Best Sellers Scraper

Amazon Search, Category & Best Sellers Scraper

Scrape Amazon keyword search, category browse, and Best Sellers across 21 storefronts. Export ASINs, titles, prices, ratings, images, and product URLs.

Pricing

$1.90 / 1,000 result items

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

4

Monthly active users

a day ago

Last modified

Share

Scrape live Amazon listings from 21 Amazon storefronts using four collection modes:

  • Keyword search – classic /s?k= search results
  • Category browse – department browse or in-category search
  • Best Sellers/gp/bestsellers ranking pages
  • Detail / seller profile – fetch /dp/{ASIN} product pages and/or /sp?seller= seller profiles for seller business-name and business-address leads

Collect ASINs, titles, prices, ratings, review counts, sponsored flags, images, product URLs, search URLs, plus seller-lead fields (business name, business address, contact availability) — see Seller leads.

Scraping runs on a hosted Cloud Run worker (amazon-com, httpx + selectolax). This Actor is a thin Apify client: it calls the worker over HTTPS with an API key, then writes Dataset / KV / PPE charges.

Worker URL is config, not code: the Actor reads WORKER_BASE_URL from Actor environment variables (plus optional per-run workerBaseUrl). If you migrate the worker to a new host, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. WORKER_PROVIDES_PROXY=1 means the worker supplies its own PROXY_URL.


Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


Supported markets

CodeStorefrontCurrency
AEamazon.aeAED
AUamazon.com.auAUD
BEamazon.com.beEUR
BRamazon.com.brBRL
CAamazon.caCAD
DEamazon.deEUR
EGamazon.egEGP
ESamazon.esEUR
FRamazon.frEUR
GBamazon.co.ukGBP
INamazon.inINR
ITamazon.itEUR
JPamazon.co.jpJPY
MXamazon.com.mxMXN
NLamazon.nlEUR
PLamazon.plPLN
SAamazon.saSAR
SEamazon.seSEK
SGamazon.sgSGD
TRamazon.com.trTRY
USamazon.comUSD

Collection modes

{
"mode": "keyword",
"keywords": ["usb hub"],
"market": "US",
"pages": 1,
"maxItems": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}
{
"mode": "category",
"category": "electronics",
"market": "DE",
"pages": 1,
"maxItems": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "DE"
}
}

When keywords are omitted in category mode, the Actor uses the department title as an in-category browse query so Amazon returns searchable product cards.

Search inside a category by also passing keywords:

{
"mode": "category",
"category": "electronics",
"keywords": ["usb hub"],
"market": "US",
"pages": 1,
"maxItems": 20
}

Pass any subcategory with categoryNodeId (browse node) to go beyond the built-in root departments.

3. Best Sellers

{
"mode": "bestsellers",
"category": "electronics",
"market": "JP",
"pages": 1,
"maxItems": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "JP"
}
}

Use categorySlug for a custom Best Sellers path, or categoryNodeId for a nested ranking node.

4. Detail / seller profile (seller leads)

{
"mode": "detail",
"detailUrls": [
"https://www.amazon.de/dp/B0EXAMPLE12",
"https://www.amazon.de/sp?seller=A3HXX9OR4LU3Y3"
],
"market": "DE",
"maxItems": 20
}

mode=detail fetches each detailUrls entry (product pages and/or seller profiles) and runs the full seller-lead extraction (business name, business address, contact availability). If you pass detailUrls without setting mode, the Actor infers mode=detail automatically. In list modes, seller enrichment is controlled by scrapeDetails / enrichDetails (both on by default) and capped at the top enrichMaxItems (default 1) rows per run.

Seller leads (phones, emails, business address, org)

Every dataset item carries the full lead-key set: phones, emails, address, geo, person, org, web, leadSource, leadReveal, leadAbsences. Amazon is mostly a first-party (1P) marketplace with almost no public contact surface, so many lead fields are legitimately empty — every absence is explicit and machine-readable via leadAbsences, never silently missing.

Lead fields

FieldTypeMeaning on Amazon
phonesarraySeller phone numbers. Always [] — the only seller contact channel is the login-gated /hz/contact-us page; no storefront has a "show phone" control (see Honest limitations).
emailsarraySeller emails. Same login gate → always [].
addressobjectSeller business address from the seller profile /spDetailed Seller InformationBusiness Address: street, unit (door/suite, 门牌), locality, region, postalCode, country, and full (raw line sequence, kept verbatim). null for entities that publish no address block.
geoobject{lat, lng} coordinates. Always null — Amazon surfaces no coordinates for sellers.
personobjectContact person. Always null — seller profiles name the business only, never a person.
orgobjectSeller organization: name (display name / "Ships from and sold by"), legalName (Business Name, on profiles that publish it), id (Amazon sellerId).
webobjectSeller website / social links. Always null — no outbound links on seller profiles.
leadSourceenumsearch (search/category/bestsellers list row) · detail (PDP row enriched with merchant info) · entity (direct seller-profile /sp row)
leadRevealenumvisible (business name/address are server-rendered on /sp, no click needed) · absent (list cards with no lead block)
leadAbsencesobjectPer-key absence reason: 本站无 (site/surface has none) · 闸门锁 (behind Amazon login) · 未验证 (verified possible but not confirmed in this run/market). Example: {"phones":"闸门锁","emails":"闸门锁","person":"本站无","social":"本站无"}

Example detail-mode item (seller leads)

{
"mode": "detail",
"market": "DE",
"asin": "B0EXAMPLE12",
"title": "…",
"price": "12,99 €",
"currencyCode": "EUR",
"sellerId": "A3HXX9OR4LU3Y3",
"phones": [],
"emails": [],
"address": {
"street": "COMM CTR,2-16 FAYUEN",
"unit": "RM502c,5/F,HO KING",
"locality": null,
"region": null,
"postalCode": "999077",
"country": "HK",
"full": "COMM CTR,2-16 FAYUEN RM502c,5/F,HO KING HONGKONG ST, MONGKOK,KOWLOON 999077 HK"
},
"geo": null,
"person": null,
"org": { "name": "ORNARTO DE", "id": "A3HXX9OR4LU3Y3" },
"web": null,
"leadSource": "detail",
"leadReveal": "visible",
"leadAbsences": { "phones": "闸门锁", "emails": "闸门锁", "person": "本站无", "social": "本站无" }
}

Reveal cost

Business name and business address are server-rendered plain HTML on the seller profile (/sp?seller={sellerId}) — there is no click-to-reveal control, XHR call, or image-encoded contact anywhere on Amazon storefronts. The only cost is one extra HTTP fetch per seller:

  • List modes: with enrichDetails=true (default) each of the top enrichMaxItems (default 1) rows is followed PDP → merchant link → /sp, adding ~2 requests per enriched row to run time.
  • mode=detail: each detailUrls entry is fetched directly (1 request per URL, product pages followed by one /sp fetch each).

The login-gated contact page (/hz/contact-us) is the only phone/email channel and is never fetched, so runs stay unauthenticated. Heavy per-run enrichment (large enrichMaxItems or long detailUrls) increases run time proportionally and, like all Amazon scraping, is subject to intermittent bot-wall responses.

Honest limitations

  • Phones / emails — login-gated site-wide. The only seller contact channel is /hz/contact-us, which requires an Amazon login. No storefront offers a "show phone/email" control, so phones/emails are always [] and marked leadAbsences.phones/emails = 闸门锁. The Actor does not log in and will not bypass this gate.
  • US amazon.com third-party seller addresses — 未验证 (not verified). amazon.com /sp is intermittently bot-walled from the worker's US egress (fast 200 shell without the lead block, or 562), and the control-plane Zyte extract failover route is not yet deployed, so US 3P street addresses could not be verified end-to-end during development. Verified chains: DE third-party sellers return door-plate-level business addresses through the PDP → /sp chain (e.g. 深圳市福田区泰然苍松大厦 samples), and SG catalogs are almost entirely Amazon 1P. Markets where verification was not completed are marked leadAbsences.address = 未验证, never 本站无.
  • 1P entities may publish no address. Many catalogs are Amazon first-party; entities without a Business Address block yield address = null plus leadAbsences.address = 本站无 (that entity displays none).
  • Messy English addresses. HK-style raw address sequences may not decompose into locality/region (those stay null); the original line sequence is always preserved verbatim in address.full, so no data is lost.
  • No person / geo / web leads. Amazon never surfaces a contact person, coordinates, or seller website/social links; these keys are null with leadAbsences = 本站无.

Built-in category keys

all, amazon-devices, audible, automotive, baby, beauty, books, computers, electronics, fashion, garden, grocery, handmade, health, home, industrial, kindle-store, kitchen, luggage, movies-tv, music, office-products, pet-supplies, software, sports, tools, toys-and-games, video-games

Example output item

{
"keyword": "usb hub",
"mode": "keyword",
"market": "SG",
"marketName": "Singapore",
"country": "SG",
"page": 1,
"rank": 1,
"asin": "B0CD1BHXPZ",
"title": "USB C Hub Multiport Adapter for Laptop",
"price": "S$24.99",
"priceValue": 24.99,
"currencyCode": "SGD",
"ratingScore": 4.5,
"reviewCount": 1284,
"isSponsored": false,
"productUrl": "https://www.amazon.sg/dp/B0CD1BHXPZ",
"searchUrl": "https://www.amazon.sg/s?k=usb+hub&page=1",
"source": "amazonSearchHtml",
"capturedAt": "2026-07-11T01:00:00Z"
}

Every item also carries the seller-lead keys (phones / emails / address / geo / person / org / web / leadSource / leadReveal / leadAbsences) — see Seller leads for the detail-mode example and absence semantics.

Input

FieldTypeDefaultDescription
modestringkeywordkeyword, category, bestsellers, or detail; inferred as detail when detailUrls is set
keywordsarray["usb hub"]Required for keyword mode; optional for category
marketstringSGOne of the 21 supported storefront codes
categorystringoptionalStable department key
categoryNodeIdstringoptionalRaw Amazon browse node ID
categorySlugstringoptionalBest Sellers path slug
detailUrlsarrayoptionalProduct /dp/{ASIN} or seller-profile /sp?seller={sellerId} URLs for detail mode (max 20)
scrapeDetailsbooleantrueFetch detail pages and follow the seller-profile chain for seller leads
enrichDetailsbooleantrueMerge seller-profile leads (org + business address) into list rows
enrichMaxItemsinteger1How many top list rows to enrich with seller leads (0–20)
pagesinteger1Pages per task (max 5)
maxItemsinteger1Global output cap (1–100). Free plan: also 10 total runs of this Actor
maxItemsPerKeywordinteger40Per-task output cap
requestTimeoutSecsinteger30HTTP timeout
proxyConfigurationobjectoptionalUnused when WORKER_PROVIDES_PROXY=1 (default)
workerBaseUrlstring(env)Optional per-run override of Actor env WORKER_BASE_URL
debug / includeRawHtmlbooleanfalseDebug artifacts
fixtureHtmlPathstringoptionalOffline fixture HTML

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Results per runUp to 100 (schema max)Up to 100

When the run cap is hit, the run finishes with a clear status message (FREE_TIER_LIMIT) — not an Apify platform error. Upgrade to a paid Apify plan for unlimited runs.

Proxy routing

By default the Cloud Run worker uses its durable PROXY_URL (WORKER_PROVIDES_PROXY=1). If you unset that flag, remote runs mint Apify residential proxy with apifyProxyCountry matching the selected market.

Standby API

Documented in .actor/openapi.json:

  • GET / / GET /health
  • GET /input-example
  • GET /openapi.json
  • POST /search
  • POST /run

More Actors like this

Need another marketplace or a different vertical? Use a dedicated Actor below for structured fields. Use this Actor for Amazon search, category browse, and Best Sellers across supported storefronts.

Similar e-commerce scrapers

Prefer another specialized scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

Jobs & Freelance

Real Estate

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to use on Apify

  1. Open the Actor.
  2. Choose mode, market, and keywords/category.
  3. Keep pages and maxItems low for a first test.
  4. Enable residential proxy with a matching country.
  5. Run and export the dataset.

FAQ

What are the free Apify plan limits?

Free Apify plan users get 10 runs of this Actor and up to 100 results per run. These limits are set by the Actor developer (not Apify). When you hit the run cap, the run finishes with a clear status message (FREE_TIER_LIMIT) — it is not a platform bug. Upgrade to a paid Apify plan for unlimited runs.

Notes and limits

  • Amazon HTML and anti-bot behavior change over time.
  • Browse node IDs differ by storefront; use categoryNodeId for precise subcategories.
  • Best Sellers cards use a separate parser from keyword/category search cards.
  • Results are deduplicated by ASIN before writing the final dataset.

Summary

Use this Actor for Amazon keyword monitoring, category assortment checks, and Best Sellers ranking snapshots across all major Amazon storefronts.

All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss