Amazon Search Scraper avatar

Amazon Search Scraper

Pricing

from $0.70 / 1,000 results

Go to Apify Store
Amazon Search Scraper

Amazon Search Scraper

This Amazon Search Scraper allows you to scrape the products on Amazon. It extracts data from Amazon search pages in structured formats such as JSON, XML, CSV, or Excel.

Pricing

from $0.70 / 1,000 results

Rating

3.3

(2)

Developer

Amazon Scraper

Amazon Scraper

Maintained by Community

Actor stats

3

Bookmarked

348

Total users

54

Monthly active users

2 days ago

Last modified

Share

Amazon Search Scraper

Collect the products shown on Amazon desktop or phone search pages, including sponsored and organic results. Each main result becomes one product record. Search-page context from the first page, such as filters, brands, categories, and pagination, is saved separately in Search Metadata once per search. An empty first page produces a No results record in Search Results and a related Search Metadata record with result_count: 0.

⚠️ Input migration notice

Version 1.0.0 is a breaking update. Some legacy inputs remain accepted, but output structure, field names, and some input behavior have changed. Review your saved tasks and downstream integrations before switching automated runs. See output migration for the required dataset and field changes.

To be deprecated: searchTermUrls and maxPages. Update saved tasks and API requests to use searchUris and maxResultsPerQuery, respectively, as soon as possible.

Already deprecated: retries and flattenResults. Both are accepted and ignored for compatibility, so existing tasks and API requests can keep them without causing an input error. They no longer control retries or output format and can be removed when updating your inputs.

Legacy inputStatusWhat to use instead
searchTermUrlsTo be deprecated; currently accepted for compatibility.Use searchUris; full URLs determine the marketplace, while relative URIs use domain.
maxPagesTo be deprecated; currently accepted for compatibility.Use maxResultsPerQuery to set a product-record limit per search.
retriesAlready deprecated; accepted and ignored.No replacement needed. The Actor manages retries automatically.
flattenResultsAlready deprecated; accepted and ignored.No replacement needed. Product records are always saved in Search Results, with first-page context in Search Metadata.

Remove searchTermUrls and maxPages when switching: while present, they take priority over searchUris and maxResultsPerQuery, respectively. Page counts and product-record counts are different limits, so choose the desired number of records rather than copying the old maxPages value.

Legacy newline-separated searchTermUrls strings must be converted to arrays, and searches for different marketplaces must be split into separate runs. If an old request omitted maxPages, its default changes from 1 page to a maximum of 100 product records per search. Set an explicit limit when migrating.

Start a run

  1. Open this Actor in Apify Console.
  2. Add one or more Amazon search URIs to Search URIs, such as /s?k=ps5+games. You can also paste full Amazon search URLs from one marketplace.
  3. Choose the Amazon domain if all entries are relative URIs. Full URLs determine the marketplace and override this setting for the entire run. Set Max results per search URI (10–20,000; default 100).
  4. Choose Device if you want phone results. Set a delivery destination when collecting results for a specific region or comparing runs. Include departments, refinements, and sorting in each search URI.
  5. Start the run, then open Search Results or Search Metadata in its outputs.

Every search starts at page 1. The Actor follows observed next-page links until it reaches the selected result or page limit, or the end of results. It does not fetch product detail pages. Each URI defines its own search conditions. Domain, device, delivery, and other run settings apply globally; More like this searches use phone pages. The Actor automatically sets the page language from the marketplace domain.

Delivery location affects search results. The same search can show different products, ordering, offers, and delivery messages for different destinations. If you omit the delivery settings, Amazon chooses the returned delivery context; it is not a fixed city or postcode. See delivery destinations for the settings supported by each marketplace and search result factors for guidance on comparing runs.

Inputs

InputMeaningDefault
searchUrisList of root-relative Amazon search URIs or full Amazon search URLs. Full URLs must use one marketplace and override domain for every entry, including relative URIs. Multiple URL marketplaces are rejected. Required unless using the compatible searchTermUrls input described below. Search terms, filters, collections, and sorting belong to each URI. Equivalent requests are deduplicated.None
domainAmazon marketplace when all searchUris entries are relative paths, using one of the domains below without www. Ignored when a full search URL determines the marketplace.amazon.com
maxResultsPerQueryMaximum product records saved for each unique search URI, from 10 through 20,000. The limit applies separately to each search across all its pages; the last page is cut to fit the limit. Pagination follows Amazon's next-page links without a fixed device page limit. Fewer records may be available. Ignored when maxPages is supplied.100
devicedesktop or mobile. Mobile requests Android Chrome phone pages; tablets and iPads are excluded. Both modes support custom delivery destinations. More like this URIs use mobile for their own searches.desktop
proxyCountryauto uses the marketplace country. You can instead choose from 149 countries and regions in the Console, including Singapore (SG). Proxy availability is checked when the run starts. This choice is independent of delivery country.auto
deliveryCountryCodeAlternative to deliveryZipCode. Enter exactly two uppercase letters for the country or region (for example, SG for Singapore) and omit the postcode. See the country/region mapping below. The country must be offered by the selected marketplace. Ignored when deliveryZipCode is supplied.Marketplace country
deliveryZipCodeAlternative to deliveryCountryCode. One complete domestic postcode string for the selected marketplace; see the formats below. Preserve leading zeros. Takes priority if both inputs are supplied.None
deliveryLocalityDomestic city or region name for AU, EG, SA, or AE. AU requires a matching postcode and city/suburb, such as "2000" and "SYDNEY". EG uses the displayed Governorate name, such as "Cairo"; SA uses a city such as "Riyadh"; AE uses a city such as "Abu Dhabi", without an Area. Omit it for other marketplaces and international delivery.None
{
"searchUris": ["/s?k=ps5+games&s=relevanceblender"],
"domain": "amazon.com",
"maxResultsPerQuery": 30
}

If any searchUris entry includes a domain, that domain determines the marketplace for the whole run. For example, a URL starting with https://www.amazon.de/s?... uses Amazon Germany even if domain is amazon.com. Relative URIs in the same list also use Amazon Germany. Full URLs must all use the same marketplace; amazon.de and www.amazon.de refer to the same marketplace. Split searches for different marketplaces into separate runs.

Delivery settings apply to this resolved marketplace. A deliveryZipCode for a German URL must be a German postcode; a postcode valid only for another marketplace is rejected. Page language, automatic proxy country, and default delivery country also follow the resolved marketplace. Explicit proxy and delivery choices retain their usual validation rules.

Existing API requests and saved tasks can also supply searchTermUrls as a nonempty list of full Amazon search URL strings. A single string is not accepted. Use one search input per run. If both are supplied, searchTermUrls takes priority and searchUris is ignored. The URLs must all use the same supported Amazon marketplace; multiple URLs on that marketplace are allowed. Their domain overrides domain and determines the page language, default proxy country, and delivery country. Explicit delivery settings must be valid for that marketplace. Two or more different URL domains stop the run before any searches are collected. An empty or invalid searchTermUrls also stops the run without falling back to searchUris. Omitting both search inputs stops the run.

For compatibility, API requests and saved tasks can supply maxPages as an integer from 1 through 20. It limits pages per unique search, starting at page 1, and takes priority over maxResultsPerQuery, including its default. The effective page limit is the smaller of maxPages and the device limit: 7 desktop pages or 20 phone pages. More like this searches use the phone limit. All product records from each collected page are saved without a result-count cutoff. The Actor stops earlier if Amazon provides no next page. This works with either searchUris or searchTermUrls. An invalid maxPages stops the run without falling back to the result limit. Omit maxPages to use maxResultsPerQuery.

Search URIs can carry k (keywords), i (department), rh (refinements), srs (collection), and s (sorting), plus other Amazon search parameters. Every URI must include k= for keywords, mltAsin= for a More like this search, or a nonempty rh= refinement. Keywords support Chinese, Japanese, and other Unicode characters, either directly or URL-encoded. Department, refinement, and collection parameters can supplement these searches. Empty searches and tracking-only links are rejected. Each entry must use /s or an /s/ search path followed by query parameters. Full URLs must use HTTP or HTTPS and a supported Amazon domain, without credentials or an explicit port. Surrounding whitespace is trimmed. All supplied page parameters are discarded for both search inputs; each search starts at page 1 and the Actor manages subsequent page numbers. Use URL encoding for parameter values: a space can be + or %20, a literal plus is %2B, and an ampersand inside a value is %26. Repeated parameter values are retained. The Actor does not add a sort when the URI omits s.

For example, these searches request different sorting in the same run:

{
"searchUris": [
"/s?k=shoes&s=price-asc-rank",
"/s?k=shoes&s=review-rank",
"/s?i=fashion&k=shoes"
],
"domain": "amazon.com",
"maxResultsPerQuery": 20
}

The output query is the decoded keyword or MLT ASIN. For a refinement-only search, it is the normalized first-page search URL. This value stays the same on subsequent pages. search_url identifies the actual page; search_page_id distinguishes searches with different parameters even when their query values match.

DomainAutomatic page localeMarketplace country
amazon.comen_USUS — United States
amazon.caen_CACA — Canada
amazon.com.auen_AUAU — Australia
amazon.inen_ININ — India
amazon.co.jpja_JPJP — Japan
amazon.co.uken_GBGB — United Kingdom
amazon.dede_DEDE — Germany
amazon.frfr_FRFR — France
amazon.eses_ESES — Spain
amazon.itit_ITIT — Italy
amazon.com.mxes_MXMX — Mexico
amazon.com.brpt_BRBR — Brazil
amazon.aeen_AEAE — United Arab Emirates
amazon.saen_AESA — Saudi Arabia
amazon.nlnl_NLNL — Netherlands
amazon.sgen_SGSG — Singapore
amazon.sesv_SESE — Sweden
amazon.plpl_PLPL — Poland
amazon.com.trtr_TRTR — Turkey
amazon.com.benl_BEBE — Belgium
amazon.ieen_IEIE — Ireland
amazon.egen_AEEG — Egypt

Desktop and phone product extraction has been checked against captured pages from all twenty-two marketplaces above in their configured languages. Results and pagination can vary by search and delivery destination. If a later page cannot be collected, the run may contain only partial results. The Actor may also stop a query if it cannot recognize Amazon's no-results page, particularly in languages other than English.

Desktop and phone searches can return different products, rankings, counts, and fields. Phone mode uses Android Chrome phone pages; it does not emulate tablets, iPads, iPhones, or native apps. Field availability varies by marketplace and layout. Choosing a domain does not guarantee every field is available.

URI s valueOrdering requested from Amazon
relevanceblenderFeatured
price-asc-rankPrice: Low to High
price-desc-rankPrice: High to Low
review-rankAvg. Customer Review
date-desc-rankNewest Arrivals
exact-aware-popularity-rankBest Sellers

Departments, refinement IDs, collections, and sorting can vary by marketplace. The Actor preserves Amazon's displayed result order. Sorting availability can vary by department and search. Refinements and collection IDs must be appropriate for your selected marketplace. The Actor passes their values to Amazon without promising Amazon will apply every restriction. If a search stops because Amazon switches to a different department, check that the URI department (i) matches your refinements before starting a new run.

What affects search results?

Results describe the Amazon pages fetched for your run's search conditions. A keyword alone does not define a comparable search: the destination, marketplace, search URI, and device also matter.

FactorHow it can affect resultsWhat to keep consistent when comparing runs
Delivery locationA different postcode, city, region, or international destination can change the products shown, their order, displayed offers, and delivery messages. Selecting a destination does not guarantee that every returned product ships there.Use the same explicit deliveryZipCode, deliveryLocality, or deliveryCountryCode, as supported by the marketplace. Check the observed global_location in the output.
MarketplaceEach domain has its own catalog, offers, search options, and currency context. The Actor sets the page language from that domain.Keep domain the same. Delivery to Singapore on amazon.com and a search on amazon.sg are different searches.
Search terms, filters, and sortingKeywords (k), departments (i), refinements (rh), collections (srs), sorting (s), and More like this ASINs (mltAsin) define different searches even when some keywords match.Keep the complete search URI the same, including its filters and sort. The Actor preserves Amazon's displayed order and does not add a sort when s is omitted.
DeviceDesktop and phone pages can show different products, ordering, counts, and fields. More like this searches always use phone pages.Keep device and the search type the same. Compare phone results with Amazon's phone website.
Request countryproxyCountry controls the country from which requests reach Amazon. It is independent of the delivery setting; when delivery is omitted, the returned destination is not fixed by an explicit postcode or city.Keep proxyCountry the same as well as the delivery inputs. Choosing proxyCountry: "US" does not select a specific US ZIP code.
Time and changing offersInventory, prices, promotions, and delivery estimates can change between observations. Matching settings do not guarantee identical results on subsequent runs.Record when each run occurred and compare observations close in time when possible.
Amazon ranking and advertisingAmazon determines result order. Its ranking considers factors such as purchases, price, delivery speed, and customer satisfaction. Sponsored product placements also appear in search results.Compare the same sort and inspect sponsored when available. position is an observed position within a page that can include sponsored cards.

Amazon describes these ranking factors and Sponsored Products placements in its own guides. The Actor records the returned page; it cannot fix Amazon's ranking or advertising between runs.

When comparing with a browser, match the full search URL, marketplace, displayed delivery location, and device. Your browser's signed-in account, saved address, or membership offers can provide a different shopping context; the Actor does not sign in to your Amazon account.

For comparisons across runs, retain the complete run inputs and collection time alongside the exported records. Use query, search_page_id, search_url, page, and position to identify the search and observed page positions, and keep repeated ASIN occurrences. The same keyword or ASIN does not establish that two observations used the same search conditions.

The number of saved records also depends on maxResultsPerQuery, the available pages, and any collection failures. Use the same collection limit when comparing runs. A smaller exported dataset does not by itself mean that Amazon had fewer matching products; see limits and troubleshooting.

Delivery destinations and regional differences

Set the destination to represent the shoppers whose search results you want to collect. A domestic postcode or locality gives a more specific delivery context than a country selection. The supported settings differ by marketplace.

Custom delivery destinations are available with both device: "desktop" and device: "mobile". For example, this phone search requests delivery to a US ZIP code:

{
"searchUris": ["/s?k=notebook"],
"domain": "amazon.com",
"device": "mobile",
"deliveryZipCode": "32063",
"maxResultsPerQuery": 30
}

Choose the delivery input that matches your destination: a domestic postcode, a domestic city or region, or an offered international country. deliveryCountryCode is an alternative destination, not a postcode country.

  • For domestic delivery, enter deliveryZipCode for the selected Amazon marketplace and omit deliveryCountryCode. For example, use "32063" on amazon.com. On amazon.com.au, also supply the matching city or suburb in deliveryLocality.
  • For domestic city or region selection on EG, SA, or AE, enter deliveryLocality and omit deliveryZipCode and deliveryCountryCode. Use Amazon's displayed Governorate name on EG, such as "Cairo" or "Giza"; use a city name on SA or AE, such as "Riyadh" or "Abu Dhabi". Do not combine a domestic locality with a foreign country code.
  • For international delivery, enter an offered deliveryCountryCode and omit deliveryZipCode and deliveryLocality. For example, enter "SG" on amazon.com to request delivery to Singapore; do not enter a Singapore postcode.
  • If a postcode and country are both supplied, deliveryZipCode takes priority and deliveryCountryCode is ignored. On amazon.com, "deliveryZipCode": "32063" with "deliveryCountryCode": "SG" still requests domestic US delivery to postcode 32063. An invalid postcode is rejected; the Actor does not fall back to the country code.
  • If all delivery inputs are omitted, or only the marketplace's own country code is entered, the Actor uses the delivery context returned by Amazon.

Use the format for your selected domain:

DomainAccepted deliveryZipCode formatExample
amazon.comExactly five digits; ZIP+4 is not supported."32063"
amazon.caSix alternating letters and digits; one space between the two halves is optional."M5V 2T6" or "M5V2T6"
amazon.co.ukComplete UK postcode; one space before the final three characters is optional."SW1A 1AA" or "SW1A1AA"
amazon.deExactly five digits."10115"
amazon.esExactly five digits."08001"
amazon.frExactly five digits."75001"
amazon.itExactly five digits."00118"
amazon.inExactly six digits."110001"
amazon.co.jpSeven digits; a hyphen after the first three is optional."100-0001" or "1000001"
amazon.com.auExactly four digits, plus a separate deliveryLocality."2000" with "deliveryLocality": "SYDNEY"
amazon.com.mxExactly five digits."06000"
amazon.com.brEight digits; a hyphen after the first five is optional."01001-000" or "01001000"
amazon.sgExactly six digits."018956"
amazon.seFive digits; a space after the first three is optional."111 22" or "11122"
amazon.plFive digits; a hyphen after the first two is optional."00-001" or "00001"
amazon.com.trExactly five digits."34010"
amazon.ae, amazon.nl, amazon.sa, amazon.com.be, amazon.ie, amazon.egCustom postcode selection is unavailable. Use deliveryLocality on AE, SA, and EG; the other listed sites retain Amazon's returned domestic destination.None

Enter one complete string even if Amazon's website displays two postcode boxes, as on Canada and Japan. Do not supply an array or append a city name to the postcode. On Australia, supply the city or suburb separately in deliveryLocality. Use ordinary ASCII letters, digits, spaces, and hyphens as shown above. Surrounding whitespace is removed and letters are uppercased. A correctly formatted code can still be rejected by Amazon; formatting does not establish delivery availability.

Canada, India, Mexico, Brazil, Singapore, Sweden, Poland, Turkey, Saudi Arabia, Ireland, and Egypt have no international destinations configured. On amazon.nl, international delivery is available to Belgium with deliveryCountryCode: "BE"; custom domestic postcodes are unavailable. Belgium and Ireland use the destination returned by Amazon. Saudi Arabia and Egypt support domestic city or region selection with deliveryLocality. Amazon.ae offers international delivery to Bahrain (BH), Kuwait (KW), Oman (OM), Qatar (QA), and Saudi Arabia (SA); domestic city selection uses deliveryLocality, without a postcode or Area. Australia supports domestic postcode-and-city delivery and international delivery to New Zealand with deliveryCountryCode: "NZ"; omit deliveryZipCode and deliveryLocality for that international destination. Amazon must accept the postcode and city or suburb as a matching pair. You can also omit delivery inputs to use the context returned by Amazon.

For example, this run selects the Cairo Governorate on the Egypt marketplace:

{
"searchUris": ["/s?k=notebook"],
"domain": "amazon.eg",
"deliveryLocality": "Cairo",
"maxResultsPerQuery": 40
}

Locality names have surrounding whitespace normalized; AU names are uppercased. Use the name Amazon displays for your marketplace. A city or region choice does not select a street address or guarantee that every product ships there. On AE, Amazon may show an additional area in the delivery text even though you selected only a city. Existing AU deliveryCity inputs remain accepted; use deliveryLocality for new runs. If both names are supplied, they must identify the same AU city or suburb.

The Actor checks that Amazon accepts your selected delivery destination before searching. An invalid postcode or rejected destination stops all queries and displays a message explaining what to correct before running again. This does not mean Amazon found no products. Records already saved remain available as partial results. If a search page shows a different destination, its results are not saved.

Interpreting results for a delivery region

The marketplace (domain), delivery destination, and device describe different choices. Page language is set automatically from the marketplace domain. The output currency is the selected marketplace's currency context, not a separate input setting. Selecting Singapore as a delivery destination on amazon.com keeps the US marketplace; it does not select Amazon Singapore or automatically convert prices to SGD. proxyCountry is also independent of the delivery destination.

Changing the destination can change which products Amazon shows, their order, displayed offers, and delivery messages. For a regional comparison, keep the other search conditions consistent and change only the destination. For repeated observations of one region, keep the destination consistent too. Country selection does not identify a specific city or domestic postcode.

Output fieldMeaning for regional results
global_locationAmazon's displayed destination text from the first search page, shared by products and first-page metadata. Later product pages carry that observation forward. It may be null when no usable text was shown.
deliveryDelivery text on an individual product card, when available. It may contain Markdown links and line breaks, and can differ between products.
currency and priceCurrency context and raw displayed price strings. Parse amounts with the selected marketplace and locale in mind; formatting can differ.
primeAn observed Prime marker or recognized membership offer, such as Prime Big Deal, Limited Prime deal, or an exclusive Prime price. Recognized offer wording includes English, French, German, Spanish, Italian, and Japanese. It does not confirm that the product ships to the selected destination or qualifies for a particular delivery date.

Desktop and phone pages can phrase the same destination differently, and labels can be localized. Treat global_location and delivery as display text, not structured country codes, postal addresses, stock statuses, or guaranteed arrival dates. The output does not add separate normalized destination fields; retain the run's delivery inputs alongside exported records when your application needs that context. The desktop and mobile output types below apply to both domestic and international destinations; regional differences affect values and field availability rather than introducing another record format.

Check this Actor's pricing in Apify Console before running.

Include mltAsin in a search URI to request similar products. The Actor adds searchMethod=MLTSearch automatically when you omit it. Add k for optional keywords. Each URI can use a different ASIN and keyword constraint. The Actor uses mobile phone pages for these searches while ordinary searches use the global device setting.

{
"searchUris": [
"/s?mltAsin=B0D4RJGFDT&k=ps5+games"
],
"domain": "amazon.com",
"maxResultsPerQuery": 20
}

An MLT ASIN must contain at least two characters using only uppercase letters A–Z and digits 0–9. This checks format, not product existence. Invalid search URIs stop the run before searches begin.

In both datasets, query contains the requested ASIN and device is mobile. The product asin identifies the returned product. Result limits and pagination follow the usual search rules. Similar-product availability depends on Amazon, the selected ASIN, and the marketplace.

Delivery country/region mapping

Enter a code from the table as deliveryCountryCode, for example "deliveryCountryCode": "SG". Use exactly two uppercase ASCII letters without spaces. Lowercase letters, full names, and three-letter codes are rejected. Omit the field to use the selected marketplace's country.

The final column lists the marketplaces where the Actor accepts the code for international delivery. Marketplace abbreviations match the domain table above: US = amazon.com, CA = amazon.ca, AU = amazon.com.au, IN = amazon.in, JP = amazon.co.jp, GB = amazon.co.uk, DE = amazon.de, FR = amazon.fr, ES = amazon.es, IT = amazon.it, NL = amazon.nl, and AE = amazon.ae. The additional marketplace codes are listed in the domain table. For example, NZ is accepted on AU, while SG is not. The domestic-only and default-destination limits described above also apply here. Each marketplace also accepts its own country code; that keeps the delivery context returned by Amazon. Use deliveryZipCode to request a specific domestic postcode, adding deliveryLocality for Australia. Use deliveryLocality alone for domestic regions on EG and cities on SA or AE.

These are the Actor's accepted destination mappings. Names follow Amazon's country/region labels and may vary between marketplaces. A listed destination does not guarantee that a product can ship there or that Amazon will accept it on every run. A two-letter code absent from this table is not a supported destination. When deliveryZipCode is supplied, it takes priority over the country code.

deliveryCountryCodeCountry or regionInternational delivery from marketplaces
ADAndorraDE, ES, FR, GB, IT, JP, US
AEUnited Arab EmiratesDE, ES, FR, GB, IT, JP, US
AFAfghanistanES, IT, US
AGAntigua and BarbudaDE, ES, FR, GB, IT, JP, US
AIAnguillaDE, ES, FR, GB, IT, JP, US
ALAlbaniaDE, ES, FR, GB, IT, JP, US
AMArmeniaDE, ES, FR, GB, IT, JP, US
ANNetherlands AntillesDE, ES, FR, GB, IT, JP, US
AOAngolaDE, ES, FR, GB, IT, JP, US
ARArgentinaDE, ES, FR, GB, IT, JP, US
ASAmerican SamoaDE, ES, FR, GB, IT, JP, US
ATAustriaDE, ES, FR, GB, IT, JP, US
AUAustraliaDE, ES, FR, GB, IT, JP, US
AWArubaDE, ES, FR, GB, IT, JP, US
AXAland IslandsES, IT, US
AZAzerbaijanDE, ES, FR, GB, IT, JP, US
BABosnia and HerzegovinaDE, ES, FR, GB, IT, JP, US
BBBarbadosDE, ES, FR, GB, IT, JP, US
BDBangladeshDE, ES, FR, GB, IT, JP, US
BEBelgiumDE, ES, FR, GB, IT, JP, NL, US
BFBurkina FasoDE, ES, FR, GB, IT, JP, US
BGBulgariaDE, ES, FR, GB, IT, JP, US
BHBahrainAE, DE, ES, FR, GB, IT, JP, US
BIBurundiDE, ES, FR, GB, IT, JP, US
BJBeninDE, ES, FR, GB, IT, JP, US
BLSaint BarthelemyES, FR, IT, US
BMBermudaDE, ES, FR, GB, IT, JP, US
BNBrunei DarussalamDE, ES, FR, GB, IT, JP, US
BOBoliviaDE, ES, FR, GB, IT, JP, US
BQBonaire, Saint Eustatius and SabaDE, ES, FR, GB, IT, JP, US
BRBrazilDE, ES, FR, GB, IT, JP, US
BSBahamas, TheDE, ES, FR, GB, IT, JP, US
BTBhutanDE, ES, FR, GB, IT, JP, US
BVBouvet IslandDE, ES, FR, GB, IT, US
BWBotswanaDE, ES, FR, GB, IT, JP, US
BYBelarusDE, ES, FR, GB, IT, JP, US
BZBelizeDE, ES, FR, GB, IT, JP, US
CACanadaDE, ES, FR, GB, IT, JP, US
CCCocos (Keeling) IslandsDE, ES, FR, GB, IT, JP, US
CDCongo, Democratic Republic ofDE, ES, FR, GB, IT, JP, US
CFCentral African RepublicDE, ES, FR, GB, IT, JP, US
CGCongoDE, ES, FR, GB, IT, JP, US
CHSwitzerlandDE, ES, FR, GB, IT, JP, US
CIIvory Coast (Côte D'ivoire)DE, ES, FR, GB, IT, JP, US
CKCook IslandsDE, ES, FR, GB, IT, JP, US
CLChileDE, ES, FR, GB, IT, JP, US
CMCameroonDE, ES, FR, GB, IT, JP, US
CNChinaDE, ES, FR, GB, IT, JP, US
COColombiaDE, ES, FR, GB, IT, JP, US
CRCosta RicaDE, ES, FR, GB, IT, JP, US
CVCape VerdeDE, ES, FR, GB, IT, JP, US
CWCuraçaoDE, ES, FR, GB, IT, JP, US
CXChristmas IslandDE, ES, FR, GB, IT, JP, US
CYCyprusDE, ES, FR, GB, IT, JP, US
CZCzech RepublicDE, ES, FR, GB, IT, JP, US
DEGermanyES, FR, GB, IT, JP, US
DJDjiboutiDE, ES, FR, GB, IT, JP, US
DKDenmarkDE, ES, FR, GB, IT, JP, US
DMDominica, Commonwealth ofDE, ES, FR, GB, IT, JP, US
DODominican RepublicDE, ES, FR, GB, IT, JP, US
DZAlgeriaDE, ES, FR, GB, IT, JP, US
ECEcuadorDE, ES, FR, GB, IT, JP, US
EEEstoniaDE, ES, FR, GB, IT, JP, US
EGEgyptDE, ES, FR, GB, IT, JP, US
EHWestern SaharaDE, ES, FR, GB, IT, JP, US
EREritreaDE, ES, FR, GB, IT, JP, US
ESSpainDE, FR, GB, IT, JP, US
ETEthiopiaDE, ES, FR, GB, IT, JP, US
FIFinlandDE, ES, FR, GB, IT, JP, US
FJFijiDE, ES, FR, GB, IT, JP, US
FKFalkland IslandsDE, ES, FR, GB, IT, JP, US
FMMicronesia, Federated States ofDE, ES, FR, GB, IT, JP, US
FOFaroe IslandsDE, ES, FR, GB, IT, JP, US
FRFranceDE, ES, GB, IT, JP, US
GAGabonDE, ES, FR, GB, IT, JP, US
GBUnited KingdomDE, ES, FR, IT, JP, US
GDGrenadaDE, ES, FR, GB, IT, JP, US
GEGeorgiaDE, ES, FR, GB, IT, JP, US
GFFrench GuianaDE, ES, FR, GB, IT, JP, US
GGGuernseyES, GB, IT, US
GHGhanaDE, ES, FR, GB, IT, JP, US
GIGibraltarDE, ES, FR, GB, IT, JP, US
GLGreenlandDE, ES, FR, GB, IT, JP, US
GMGambia, TheDE, ES, FR, GB, IT, JP, US
GNGuineaDE, ES, FR, GB, IT, JP, US
GPGuadeloupeDE, ES, FR, GB, IT, JP, US
GQEquatorial GuineaDE, ES, FR, GB, IT, JP, US
GRGreeceDE, ES, FR, GB, IT, JP, US
GSSouth Georgia and the South Sandwich IslandsDE, ES, FR, GB, IT, JP, US
GTGuatemalaDE, ES, FR, GB, IT, JP, US
GUGuamDE, ES, FR, GB, IT, JP
GWGuinea-BissauDE, ES, FR, GB, IT, JP, US
GYGuyanaDE, ES, FR, GB, IT, JP, US
HKHong KongDE, ES, FR, GB, IT, JP, US
HMHeard Island and the McDonald IslandsDE, ES, FR, GB, IT, US
HNHondurasDE, ES, FR, GB, IT, JP, US
HRCroatiaDE, ES, FR, GB, IT, JP, US
HTHaitiDE, ES, FR, GB, IT, JP, US
HUHungaryDE, ES, FR, GB, IT, JP, US
IDIndonesiaDE, ES, FR, GB, IT, JP, US
IEIreland, Republic ofDE, ES, FR, GB, IT, JP, US
ILIsraelDE, ES, FR, GB, IT, JP, US
IMIsle of ManES, GB, IT, US
INIndiaDE, ES, FR, GB, IT, JP, US
IOBritish Indian Ocean TerritoryDE, ES, FR, GB, IT, JP, US
IQIraqES, IT, US
ISIcelandDE, ES, FR, GB, IT, JP, US
ITItalyDE, ES, FR, GB, JP, US
JEJerseyES, GB, IT, US
JMJamaicaDE, ES, FR, GB, IT, JP, US
JOJordanDE, ES, FR, GB, IT, JP, US
JPJapanDE, ES, FR, GB, IT, US
KEKenyaDE, ES, FR, GB, IT, JP, US
KGKyrgyzstanDE, ES, FR, GB, IT, JP, US
KHCambodiaDE, ES, FR, GB, IT, JP, US
KIKiribatiDE, ES, FR, GB, IT, JP, US
KMComorosDE, ES, FR, GB, IT, JP, US
KNSaint Kitts and NevisDE, ES, FR, GB, IT, JP, US
KRKorea, Republic ofDE, ES, FR, GB, IT, JP, US
KWKuwaitAE, DE, ES, FR, GB, IT, JP, US
KYCayman IslandsDE, ES, FR, GB, IT, JP, US
KZKazakhstanDE, ES, FR, GB, IT, JP, US
LALao, People's Democratic RepublicDE, ES, FR, GB, IT, JP, US
LBLebanonDE, ES, FR, GB, IT, JP, US
LCSaint LuciaDE, ES, FR, GB, IT, JP, US
LILiechtensteinDE, ES, FR, GB, IT, JP, US
LKSri LankaDE, ES, FR, GB, IT, JP, US
LRLiberiaDE, ES, FR, GB, IT, JP, US
LSLesothoDE, ES, FR, GB, IT, JP, US
LTLithuaniaDE, ES, FR, GB, IT, JP, US
LULuxembourgDE, ES, FR, GB, IT, JP, US
LVLatviaDE, ES, FR, GB, IT, JP, US
LYLibyaDE, ES, FR, GB, IT, JP, US
MAMoroccoDE, ES, FR, GB, IT, JP, US
MCMonacoDE, ES, FR, GB, IT, JP, US
MDMoldova, Republic ofDE, ES, FR, GB, IT, JP, US
MEMontenegroDE, ES, FR, GB, IT, JP, US
MFSaint MartinES, FR, IT, US
MGMadagascarDE, ES, FR, GB, IT, JP, US
MHMarshall IslandsDE, ES, FR, GB, IT, JP, US
MKMacedonia, The Former Yugoslav Republic ofDE, ES, FR, GB, IT, JP, US
MLMaliDE, ES, FR, GB, IT, JP, US
MMMyanmarDE, ES, FR, GB, IT, JP, US
MNMongoliaDE, ES, FR, GB, IT, JP, US
MOMacaoDE, ES, FR, GB, IT, JP, US
MPNorthern Mariana IslandsDE, ES, FR, GB, IT, JP
MQMartiniqueDE, ES, FR, GB, IT, JP, US
MRMauritaniaDE, ES, FR, GB, IT, JP, US
MSMontserratDE, ES, FR, GB, IT, JP, US
MTMaltaDE, ES, FR, GB, IT, JP, US
MUMauritiusDE, ES, FR, GB, IT, JP, US
MVMaldivesDE, ES, FR, GB, IT, JP, US
MWMalawiDE, ES, FR, GB, IT, JP, US
MXMexicoDE, ES, FR, GB, IT, JP, US
MYMalaysiaDE, ES, FR, GB, IT, JP, US
MZMozambiqueDE, ES, FR, GB, IT, JP, US
NANamibiaDE, ES, FR, GB, IT, JP, US
NCNew CaledoniaDE, ES, FR, GB, IT, JP, US
NENigerDE, ES, FR, GB, IT, JP, US
NFNorfolk IslandUS
NGNigeriaDE, ES, FR, GB, IT, JP, US
NINicaraguaDE, ES, FR, GB, IT, JP, US
NLNetherlandsDE, ES, FR, GB, IT, JP, US
NONorwayDE, ES, FR, GB, IT, JP, US
NPNepalDE, ES, FR, GB, IT, JP, US
NRNauruDE, ES, FR, GB, IT, JP, US
NUNiueDE, ES, FR, GB, IT, JP, US
NZNew ZealandAU, DE, ES, FR, GB, IT, JP, US
OMOmanAE, DE, ES, FR, GB, IT, JP, US
PAPanamaDE, ES, FR, GB, IT, JP, US
PEPeruDE, ES, FR, GB, IT, JP, US
PFFrench PolynesiaDE, ES, FR, GB, IT, JP, US
PGPapua New GuineaDE, ES, FR, GB, IT, JP, US
PHPhilippinesDE, ES, FR, GB, IT, JP, US
PKPakistanDE, ES, FR, GB, IT, JP, US
PLPolandDE, ES, FR, GB, IT, JP, US
PMSaint Pierre and MiquelonDE, ES, FR, GB, IT, JP, US
PNPitcairnDE, ES, FR, GB, IT, US
PRPuerto RicoDE, ES, FR, GB, IT, JP
PSPalestinian TerritoriesDE, ES, FR, GB, IT, JP, US
PTPortugalDE, ES, FR, GB, IT, JP, US
PWPalauDE, ES, FR, GB, IT, JP, US
PYParaguayDE, ES, FR, GB, IT, JP, US
QAQatarAE, DE, ES, FR, GB, IT, JP, US
REReunionDE, ES, FR, GB, IT, JP, US
RORomaniaDE, ES, FR, GB, IT, JP, US
RSSerbiaDE, ES, FR, GB, IT, JP, US
RURussian FederationDE, ES, FR, GB, IT, JP, US
RWRwandaDE, ES, FR, GB, IT, JP, US
SASaudi ArabiaAE, DE, ES, FR, GB, IT, JP, US
SBSolomon IslandsDE, ES, FR, GB, IT, JP, US
SCSeychellesDE, ES, FR, GB, IT, JP, US
SESwedenDE, ES, FR, GB, IT, JP, US
SGSingaporeDE, ES, FR, GB, IT, JP, US
SHSaint Helena, Ascension and Tristan da CunhaDE, ES, FR, GB, IT, US
SISloveniaDE, ES, FR, GB, IT, JP, US
SJSvalbard and Jan MayenDE, ES, FR, GB, IT, JP, US
SKSlovakiaDE, ES, FR, GB, IT, JP, US
SLSierra LeoneDE, ES, FR, GB, IT, JP, US
SMSan MarinoDE, ES, FR, GB, IT, JP, US
SNSenegalDE, ES, FR, GB, IT, JP, US
SOSomaliaDE, ES, FR, GB, IT, JP, US
SRSurinameDE, ES, FR, GB, IT, JP, US
STSao Tome and PrincipeDE, ES, FR, GB, IT, JP, US
SVEl SalvadorDE, ES, FR, GB, IT, JP, US
SXSint MaartenDE, ES, FR, GB, IT, JP, US
SZSwazilandDE, ES, FR, GB, IT, JP, US
TCTurks and Caicos IslandsDE, ES, FR, GB, IT, JP, US
TDChadDE, ES, FR, GB, IT, JP, US
TFFrench Southern TerritoriesDE, ES, FR, GB, IT, JP, US
TGTogoDE, ES, FR, GB, IT, JP, US
THThailandDE, ES, FR, GB, IT, JP, US
TJTajikistanDE, ES, FR, GB, IT, JP, US
TKTokelauDE, ES, FR, GB, IT, US
TLEast TimorDE, ES, FR, GB, IT, JP, US
TMTurkmenistanDE, ES, FR, GB, IT, JP, US
TNTunisiaDE, ES, FR, GB, IT, JP, US
TOTongaDE, ES, FR, GB, IT, JP, US
TRTurkeyDE, ES, FR, GB, IT, JP, US
TTTrinidad and TobagoDE, ES, FR, GB, IT, JP, US
TVTuvaluDE, ES, FR, GB, IT, JP, US
TWTaiwanDE, ES, FR, GB, IT, JP, US
TZTanzania, United Republic ofDE, ES, FR, GB, IT, JP, US
UAUkraineDE, ES, FR, GB, IT, JP, US
UGUgandaDE, ES, FR, GB, IT, JP, US
UMUnited States Minor Outlying IslandsDE, ES, FR, GB, IT, JP, US
USUnited StatesDE, ES, FR, GB, IT, JP
UYUruguayDE, ES, FR, GB, IT, JP, US
UZUzbekistanDE, ES, FR, GB, IT, JP, US
VAHoly SeeDE, ES, FR, GB, IT, JP, US
VCSaint Vincent and the GrenadinesDE, ES, FR, GB, IT, JP, US
VEVenezuelaDE, ES, FR, GB, IT, JP, US
VGVirgin Islands, BritishDE, ES, FR, GB, IT, JP, US
VIVirgin Islands, USDE, ES, FR, GB, IT, JP
VNVietnamDE, ES, FR, GB, IT, JP, US
VUVanuatuDE, ES, FR, GB, IT, JP, US
WFWallis and FutunaDE, ES, FR, GB, IT, JP, US
WSSamoaDE, ES, FR, GB, IT, JP, US
XKKosovoDE, ES, FR, GB, IT, JP, US
YEYemenDE, ES, FR, GB, IT, JP, US
YTMayotteDE, ES, FR, GB, IT, JP, US
ZASouth AfricaDE, ES, FR, GB, IT, JP, US
ZMZambiaDE, ES, FR, GB, IT, JP, US
ZWZimbabweDE, ES, FR, GB, IT, JP, US

Search Results

The default dataset contains one record per valid ASIN occurrence selected from the main results of an observed search page, up to the per-query result limit. It includes the search context and position, plus available title, product link, image, badge, price, reviews, color swatches, variation link, and delivery text.

When the first page is recognized as having no products, Search Results contains one record with message: "No results" and the search context. This record omits asin, position, and product fields, and does not count toward the product limit. A related Search Metadata record retains the page context and zero result counts for query-level analysis; join the two records by search_page_id. Empty later pages do not produce a No results record or a Search Metadata record.

For example, an empty first page produces this record:

{
"search_page_id": "a7ff1f2c-6a57-5b3f-9386-341b76cd6aa6",
"domain": "www.amazon.com",
"query": "unavailable-item-839274",
"page": 1,
"search_url": "https://www.amazon.com/s?k=unavailable-item-839274&page=1",
"device": "desktop",
"currency": "USD",
"global_location": null,
"crawled_at": "2026-10-19T00:00:00Z",
"message": "No results"
}

price.price contains the displayed product price before any separate coupon offer. It is omitted when the card does not show a product price. price.list_price contains an observed reference price, such as a list or previous price, when available. Per-unit amounts and coupon prices are separate and do not fill this field. A reference price is identified from its role on the page, so it is not required to be higher than price.price.

Product records also include these promotion fields on desktop and mobile:

FieldMeaning
badge_statusStatus badge text in the page's language, such as Overall Pick; null when absent.
couponCoupon object classified as price, save_with_coupon, or unknown; null when no usable coupon information is observed. See the forms below.
coupon_priceCompatibility field containing coupon.price for a price coupon, such as $98.99; null for savings-only, unknown, or absent coupons.
is_best_sellertrue when a Best Seller marker is observed on the card; otherwise false.
deal_badgeDeal badge text in the page's language, such as Limited time deal; null when absent.
is_dealtrue when coupon is non-null or deal_badge is nonempty; otherwise false. This includes savings coupons and unclassified coupon text. A Best Seller marker alone does not make this true.

The coupon object separates a final coupon price from a savings offer:

coupon.typeObject contents
priceprice contains the raw displayed coupon price, such as $39.09. highlighted_text is included when available, such as You pay $39.09.
save_with_couponhighlighted_text contains the savings label, such as Save $10.00 or Save 15%. There is no price field.
unknownhighlighted_text preserves coupon wording that was not classified, in the page's language. No price or savings amount is inferred.

Only observed coupon text is retained. Empty labels do not create an offer. Prices displayed in a separate coupon-price amount take priority and are retained regardless of the label's language. When that amount is unavailable, recognized payment wording includes English You pay, French Payez, German Du zahlst, Italian Paghi, Spanish Pagas or Paga, and Japanese で購入可能. The displayed currency and number formatting are preserved. English Save labels and percentage-off labels such as 5% OFF remain savings offers; other wording is preserved as unknown. Savings amounts and percentages are not treated as final coupon prices.

These fields describe the observed card. A false flag means the corresponding signal was not observed; it does not establish eligibility for an offer. A status badge alone does not set is_deal. coupon_price is separate from price.price and price.list_price. It also includes an amount shown as You pay $39.09 with a coupon, returned as $39.09. Coupon discounts are not calculated. Existing saved records may omit the new fields.

is_kindle_unlimited is a boolean on newly collected desktop and phone product records. It is true when the card displays a Kindle Unlimited badge and false when no supported badge was detected. A false value does not confirm that the book is ineligible. A zero price alone does not set this flag. Existing saved records may omit it. The field is available in the complete dataset record and is not included in the overview table.

On both desktop and mobile, variation_options_link includes the observed options URL and, when available, sizes: the displayed variation text, such as 3 Kapazitäten. The text can describe sizes, capacities, or other options and retains the page's language. A link without that text contains only link; when the page provides no options link, the field is null.

global_location contains Amazon's displayed delivery destination from the first search page. The same value is included in later-page product records for that query. It remains null when the first page did not provide a usable location.

The same ASIN can appear more than once across positions, queries, or pages. position is its observed position within that page. Dataset append order across searches is not a global product ranking. Prices remain the strings shown on the page. bought_in_past_month is a product-level count when its wording is recognized; otherwise it may be null. sponsored and prime are booleans when present. Desktop records include both; phone records omit a flag when its marker was not observed. An omitted flag is not an explicit false observation. For prime, a recognized Prime offer also counts as an observation. Desktop prime: false means no supported Prime marker or offer was detected; it does not rule out membership benefits. Offer wording outside the recognized forms may be missed. A product title or Prime Video format label alone does not count as a Prime marker. A Prime marker or offer does not establish shipping eligibility. Phone cards may also include a separate brand heading. Prices stay as displayed, and a per-unit price is not treated as a list price. When Amazon includes product insights in a phone search card, the record also includes customer_feedback. This object can contain summary (customer feedback summary text), topic_groups (feedback topics grouped by sentiment), or both. Each topic group contains sentiment and a topics string array. The labels and text come from Amazon. The object is omitted when no usable feedback is available. These insights summarize customer feedback and may be missing for some products. Additional product images remain in the separate image_urls field.

This example shows a representative product record. Prices, availability, and counts are examples, not current offers.

{
"search_page_id": "3386588a-6978-56c3-a832-95f00a72024e",
"domain": "www.amazon.com",
"query": "ps5 games",
"page": 1,
"search_url": "https://www.amazon.com/s?k=ps5+games&page=1&s=relevanceblender",
"device": "desktop",
"currency": "USD",
"global_location": "Deliver to Armenia",
"crawled_at": "2026-09-27T00:00:00Z",
"position": 1,
"asin": "B0D4RJGFDT",
"title": "METAL GEAR SOLID Δ: SNAKE EATER TACTICAL ED – PS5",
"image": "https://m.media-amazon.com/images/I/915Egnuk2uL._AC_UY218_.jpg",
"badge": "Overall Pick",
"badge_status": "Overall Pick",
"coupon_price": null,
"coupon": null,
"is_kindle_unlimited": false,
"is_best_seller": false,
"is_deal": false,
"deal_badge": null,
"price": {
"price": "$25.38",
"list_price": "$49.99"
},
"reviews": {
"stars": 4.7,
"count": 1262
},
"sponsored": false,
"prime": false
}

Search Metadata

The searchMetaData dataset contains one record per search, saved from its first page when it is collected successfully, including a recognized first page with no results. Later pages add product records without adding metadata records. Metadata contains the search context, page title, displayed search term and delivery location, filters, brands, categories, other available page sections, and result counts. Desktop and phone use the same field names and structures for available brands, filter, deals, popular_shopping_ideas, gender, and reviews_refinements_url sections. Grouped filters contain title, position, and items; each item includes its type (normal or color), position, and available name and link. A phone page may provide fewer sections or different choices; category trees are not currently extracted from phone pages. Recommendation widgets are excluded from both datasets. Choices requiring another response are not inferred.

result_count counts selected product rows from the first page, not the whole search. If the budget interrupts a first-page write, this includes saved rows waiting to be added when the run resumes, so the currently available row count may be lower. excluded_result_count counts observed first-page main cards that lacked a valid ASIN. total_result_count and search_alias are read from Amazon's first-page search metadata. search_alias is not copied from the Actor input. next_page_url is the full URL of Amazon's next-page link, when available. total_pages may be null when no reliable total was shown. Missing optional fields may be null, empty, or absent. Missing prices or delivery text mean the page did not supply usable data for those fields.

The following excerpt corresponds to the product example above:

{
"search_page_id": "3386588a-6978-56c3-a832-95f00a72024e",
"domain": "www.amazon.com",
"query": "ps5 games",
"page": 1,
"search_url": "https://www.amazon.com/s?k=ps5+games&page=1&s=relevanceblender",
"device": "desktop",
"currency": "USD",
"crawled_at": "2026-09-27T00:00:00Z",
"title": "Amazon.com : ps5 games",
"search_input": "ps5 games",
"global_location": "Deliver to Armenia",
"result_count": 16,
"excluded_result_count": 0,
"total_result_count": 37043,
"search_alias": "aps",
"total_pages": 20,
"next_page_url": "https://www.amazon.com/s?k=ps5+games&page=2"
}

search_page_id identifies a search page. Join first-page products to metadata by search_page_id. Later-page products have their own search_page_id and no matching metadata record. Within a page, the combination of search_page_id, position, and asin identifies a product occurrence. When combining different runs, include the run ID in that association. crawled_at is shared by all records from the same observation. If a run stops while saving results, check the existing records for duplicates before combining them with results from another run.

Output types for integration

These TypeScript types describe normal-run JSON records from Search Results (the default dataset) and Search Metadata (searchMetaData). Check for message: "No results" before reading product fields; then use device to narrow the desktop/mobile product union. More like this searches produce mobile records, with the requested ASIN in query and each returned product's ASIN in asin.

A property marked ? may be absent; | null means it may also be explicitly null. Arrays can be empty, and nested objects can contain only some of their fields. Missing data is not a zero price, zero reviews, or a negative observation. Use these types when integrating the exported JSON into a TypeScript application.

interface SearchContext {
search_page_id: string; // UUID; use the run ID as well across runs
domain: string;
query: string;
page: number; // Positive integer
search_url: string;
device: "desktop" | "mobile";
currency: string;
global_location: string | null;
crawled_at: string; // ISO 8601 UTC timestamp
}
interface Price {
price?: string | null; // Raw displayed amount, including currency formatting
list_price?: string | null;
}
interface Reviews {
stars?: number | null;
count?: number | null;
top_reviewed?: string | null; // Desktop card label, when available
}
type DesktopColorSwatch =
| { type: "normal"; label?: string; link?: string | null; color?: string }
| { type: "other"; link: string | null; color_info: string };
interface MobileColorSwatch {
color_info: string | null;
link: string | null;
}
type Coupon =
| { type: "price"; price: string; highlighted_text?: string }
| { type: "save_with_coupon"; highlighted_text: string }
| { type: "unknown"; highlighted_text: string };
interface ProductBase extends SearchContext {
message?: never;
position: number; // Positive integer, within the observed page
asin: string;
title?: string | null;
link?: string | null;
image?: string | null;
badge?: string | null;
badge_status?: string | null; // Observed status badge text
coupon?: Coupon | null;
coupon_price?: string | null; // Compatibility field for coupon.price
is_kindle_unlimited?: boolean; // Observed Kindle Unlimited badge
is_best_seller?: boolean; // Observed Best Seller marker
is_deal?: boolean; // Non-null coupon or nonempty deal_badge
deal_badge?: string | null; // Observed text in the page's language
price?: Price | null;
reviews?: Reviews | null;
bought_in_past_month?: number | null;
delivery?: string | null; // Display text, possibly with Markdown links
}
interface DesktopProduct extends ProductBase {
device: "desktop";
sponsored: boolean;
prime: boolean;
color_swatches?: DesktopColorSwatch[];
variation_options_link?: {
link?: string | null;
sizes?: string | null; // Displayed variation text, not a numeric size count
} | null;
}
interface MobileProduct extends ProductBase {
device: "mobile";
sponsored?: boolean; // Omitted when the marker was not observed
prime?: boolean; // Omitted when no supported Prime marker or offer was observed
brand?: string | null;
color_swatches?: MobileColorSwatch[];
variation_options_link?: {
link?: string | null;
sizes?: string | null; // Displayed variation text, not a numeric size count
} | null;
image_urls?: string[];
customer_feedback?: {
summary?: string;
topic_groups?: {
sentiment: string; // Amazon's supplied label, not a fixed enum
topics: string[];
}[];
}; // Contains summary, topic_groups, or both when available
}
interface NoResults extends SearchContext {
page: 1;
message: "No results";
}
type SearchResult = DesktopProduct | MobileProduct | NoResults;
interface NameLink {
name: string | null;
link: string | null;
}
type FilterItem = {
type: "normal" | "color";
position: number;
name?: string;
link?: string | null;
};
interface MetadataBase extends SearchContext {
page: 1; // Only the first page produces a metadata record
title?: string | null;
search_input?: string | null;
result_count: number; // Selected first-page products, including budget-deferred rows
excluded_result_count: number;
total_result_count?: number | null;
search_alias?: string | null;
total_pages: number | null;
next_page_url: string | null;
reviews_refinements_url?: string | null;
popular_shopping_ideas?: (NameLink & { position: number })[];
deals?: NameLink[];
gender?: NameLink[];
brands?: NameLink[];
filter?: {
position: number;
title: string | null;
items: FilterItem[];
}[];
}
interface DesktopSearchMetadata extends MetadataBase {
device: "desktop";
categories?: {
items: (NameLink & { children: NameLink[] })[];
}[];
}
interface MobileSearchMetadata extends MetadataBase {
device: "mobile";
}
type SearchMetadata = DesktopSearchMetadata | MobileSearchMetadata;

Desktop and phone field differences

AreaDesktop (device: "desktop")Phone (device: "mobile")
Sponsored and Primesponsored and prime are always booleans.sponsored and prime are optional; absence does not mean an observed false.
Promotionscoupon is a nullable typed object; badge_status, coupon_price, and deal_badge are nullable strings. The promotion flags are booleans on newly parsed cards.Same fields and rules as desktop, based on the observed phone card.
Brand and insightsNo separate phone brand or feedback fields.May include brand, customer_feedback, and image_urls. Feedback contains summary text and/or topics grouped by sentiment.
Color choicesNormal swatches can include a label, color, and link; additional-color links use type: "other".Additional-color text and links use color_info and link, without a type field.
Variation choicesLink and optional sizes display text.Link and optional sizes display text.
Page refinementsSidebar filter, brands, categories, and other sections when available.Available filter, brands, deals, shopping ideas, gender choices, and review links use desktop structures. Category trees are not extracted.

Both devices use the same shared context and raw price format. A field's presence in a type does not guarantee Amazon supplies it for every product, marketplace, or destination. Desktop and phone records are different observations; matching ASINs do not imply identical prices, rankings, or optional fields.

View and export results

Use Search Results for product rows and Search Metadata for page context. The run-page Export button exports Search Results. To export metadata, open Storage, select the Search Metadata dataset, and choose an export format. Each dataset is also available through its output link and the Dataset API. See [Apify’s dataset export guide](https://docs.apify.com/storage/dataset-schema/multiple-datasets#view-and-export- datasets) for the Console steps. JSON preserves nested price, review, and filter structures; CSV or Excel is useful for inspecting product columns.

Limits and troubleshooting

  • Enter search URIs in searchUris, using /s or an Amazon /s/ search path. Bare keywords, ASINs, product detail URLs, unsupported hosts, and lists with full URLs from multiple marketplaces are rejected. A full URL overrides domain; check that your delivery postcode and locality belong to the URL's marketplace.
  • The result limit is a maximum. Fewer products may be saved when pagination ends, pages cannot be collected, or the run's budget is reached. In result-count mode, pagination has no fixed device page limit and continues only while Amazon provides a next-page link. The compatibility input maxPages retains its separate page limits described above.
  • maxResultsPerQuery accepts 10–20,000 and defaults to 100. A larger limit does not guarantee that Amazon will provide that many product records.
  • The Actor retries pages that are blocked, show a CAPTCHA, or cannot be read. If a page still fails, its query stops; results from earlier pages remain available. Failed pages do not become product or metadata records.
  • A positively recognized empty first page produces one record with message: "No results" in Search Results and a related Search Metadata record with result_count: 0. An empty later page produces neither a No results record nor metadata. If the Actor cannot recognize a no-results page, the query stops instead of being reported as an empty search. This can occur in languages other than English.
  • Results reflect the fetched page and its delivery context. They do not guarantee live prices, stock, product shipping eligibility, or identical results between runs.
  • If no proxy connection is available for your selected proxyCountry, the run fails. Try another country or start a new run later.
  • When the run's charge budget is reached or cannot cover the next operation, the Actor logs a warning and finishes successfully with the results saved so far. When the budget allows only part of a product batch, the remaining collected products are retained for the same run. Increase the budget and resurrect that run to continue; keep its search and delivery inputs unchanged. First-page Search Metadata is saved before this budget stop when at least one first-page product was saved. If no first-page products could be saved, its metadata is retained and added when those products are saved after resumption. A fully written batch follows normal completion, even if it exactly uses the remaining budget. Other unfinished operations can still leave metadata missing.
  • If the run stops while saving results, inspect the records already available before combining them with a new run to avoid duplicate products.

Migration from selectable output shape

Product rows are now always saved in Search Results, with page context in Search Metadata. The deprecated flattenResults input is accepted and ignored, whether set to true or false. Existing tasks can keep it, but nested page objects are no longer written to the default dataset.

Keeping flattenResults: false does not restore the old nested results array. Integrations that used flattenResults: true must also review renamed fields. Update product amazons_choice to badge, page-level url to search_url, and page-level pages to metadata total_pages.

The metadata fields glance_icons and other_items_to_consider are deprecated and no longer emitted. Remove dependencies on these fields; no replacement fields are provided. Previously saved dataset records are unchanged.

The former phone-only metadata field refinements is also removed. Use the shared filter, brands, deals, gender, popular_shopping_ideas, and reviews_refinements_url fields for available structured sections. Price-range, delivery-time, and sorting shortcuts that appeared only in refinements are no longer exported. Previously saved dataset records keep their original fields.

Read searchMetaData separately when you need filters or page context. Metadata is saved only for the first page of each search. First-page products share its search_page_id; later-page products have their own IDs without matching metadata records. Validate dataset readers and exports with a small run before switching scheduled runs to version 1.0.0.