Amazon Search Scraper
Pricing
from $0.70 / 1,000 results
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
Maintained by CommunityActor stats
3
Bookmarked
348
Total users
54
Monthly active users
2 days ago
Last modified
Categories
Share
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 input | Status | What to use instead |
|---|---|---|
searchTermUrls | To be deprecated; currently accepted for compatibility. | Use searchUris; full URLs determine the marketplace, while relative URIs use domain. |
maxPages | To be deprecated; currently accepted for compatibility. | Use maxResultsPerQuery to set a product-record limit per search. |
retries | Already deprecated; accepted and ignored. | No replacement needed. The Actor manages retries automatically. |
flattenResults | Already 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
- Open this Actor in Apify Console.
- 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. - 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).
- 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.
- 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
| Input | Meaning | Default |
|---|---|---|
searchUris | List 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 |
domain | Amazon 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 |
maxResultsPerQuery | Maximum 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 |
device | desktop 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 |
proxyCountry | auto 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 |
deliveryCountryCode | Alternative 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 |
deliveryZipCode | Alternative 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 |
deliveryLocality | Domestic 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.
| Domain | Automatic page locale | Marketplace country |
|---|---|---|
amazon.com | en_US | US — United States |
amazon.ca | en_CA | CA — Canada |
amazon.com.au | en_AU | AU — Australia |
amazon.in | en_IN | IN — India |
amazon.co.jp | ja_JP | JP — Japan |
amazon.co.uk | en_GB | GB — United Kingdom |
amazon.de | de_DE | DE — Germany |
amazon.fr | fr_FR | FR — France |
amazon.es | es_ES | ES — Spain |
amazon.it | it_IT | IT — Italy |
amazon.com.mx | es_MX | MX — Mexico |
amazon.com.br | pt_BR | BR — Brazil |
amazon.ae | en_AE | AE — United Arab Emirates |
amazon.sa | en_AE | SA — Saudi Arabia |
amazon.nl | nl_NL | NL — Netherlands |
amazon.sg | en_SG | SG — Singapore |
amazon.se | sv_SE | SE — Sweden |
amazon.pl | pl_PL | PL — Poland |
amazon.com.tr | tr_TR | TR — Turkey |
amazon.com.be | nl_BE | BE — Belgium |
amazon.ie | en_IE | IE — Ireland |
amazon.eg | en_AE | EG — 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 value | Ordering requested from Amazon |
|---|---|
relevanceblender | Featured |
price-asc-rank | Price: Low to High |
price-desc-rank | Price: High to Low |
review-rank | Avg. Customer Review |
date-desc-rank | Newest Arrivals |
exact-aware-popularity-rank | Best 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.
| Factor | How it can affect results | What to keep consistent when comparing runs |
|---|---|---|
| Delivery location | A 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. |
| Marketplace | Each 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 sorting | Keywords (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. |
| Device | Desktop 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 country | proxyCountry 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 offers | Inventory, 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 advertising | Amazon 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
deliveryZipCodefor the selected Amazon marketplace and omitdeliveryCountryCode. For example, use"32063"onamazon.com. Onamazon.com.au, also supply the matching city or suburb indeliveryLocality. - For domestic city or region selection on EG, SA, or AE, enter
deliveryLocalityand omitdeliveryZipCodeanddeliveryCountryCode. 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
deliveryCountryCodeand omitdeliveryZipCodeanddeliveryLocality. For example, enter"SG"onamazon.comto request delivery to Singapore; do not enter a Singapore postcode. - If a postcode and country are both supplied,
deliveryZipCodetakes priority anddeliveryCountryCodeis ignored. Onamazon.com,"deliveryZipCode": "32063"with"deliveryCountryCode": "SG"still requests domestic US delivery to postcode32063. 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:
| Domain | Accepted deliveryZipCode format | Example |
|---|---|---|
amazon.com | Exactly five digits; ZIP+4 is not supported. | "32063" |
amazon.ca | Six alternating letters and digits; one space between the two halves is optional. | "M5V 2T6" or "M5V2T6" |
amazon.co.uk | Complete UK postcode; one space before the final three characters is optional. | "SW1A 1AA" or "SW1A1AA" |
amazon.de | Exactly five digits. | "10115" |
amazon.es | Exactly five digits. | "08001" |
amazon.fr | Exactly five digits. | "75001" |
amazon.it | Exactly five digits. | "00118" |
amazon.in | Exactly six digits. | "110001" |
amazon.co.jp | Seven digits; a hyphen after the first three is optional. | "100-0001" or "1000001" |
amazon.com.au | Exactly four digits, plus a separate deliveryLocality. | "2000" with "deliveryLocality": "SYDNEY" |
amazon.com.mx | Exactly five digits. | "06000" |
amazon.com.br | Eight digits; a hyphen after the first five is optional. | "01001-000" or "01001000" |
amazon.sg | Exactly six digits. | "018956" |
amazon.se | Five digits; a space after the first three is optional. | "111 22" or "11122" |
amazon.pl | Five digits; a hyphen after the first two is optional. | "00-001" or "00001" |
amazon.com.tr | Exactly five digits. | "34010" |
amazon.ae, amazon.nl, amazon.sa, amazon.com.be, amazon.ie, amazon.eg | Custom 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 field | Meaning for regional results |
|---|---|
global_location | Amazon'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. |
delivery | Delivery text on an individual product card, when available. It may contain Markdown links and line breaks, and can differ between products. |
currency and price | Currency context and raw displayed price strings. Parse amounts with the selected marketplace and locale in mind; formatting can differ. |
prime | An 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.
More like this search
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.
deliveryCountryCode | Country or region | International delivery from marketplaces |
|---|---|---|
AD | Andorra | DE, ES, FR, GB, IT, JP, US |
AE | United Arab Emirates | DE, ES, FR, GB, IT, JP, US |
AF | Afghanistan | ES, IT, US |
AG | Antigua and Barbuda | DE, ES, FR, GB, IT, JP, US |
AI | Anguilla | DE, ES, FR, GB, IT, JP, US |
AL | Albania | DE, ES, FR, GB, IT, JP, US |
AM | Armenia | DE, ES, FR, GB, IT, JP, US |
AN | Netherlands Antilles | DE, ES, FR, GB, IT, JP, US |
AO | Angola | DE, ES, FR, GB, IT, JP, US |
AR | Argentina | DE, ES, FR, GB, IT, JP, US |
AS | American Samoa | DE, ES, FR, GB, IT, JP, US |
AT | Austria | DE, ES, FR, GB, IT, JP, US |
AU | Australia | DE, ES, FR, GB, IT, JP, US |
AW | Aruba | DE, ES, FR, GB, IT, JP, US |
AX | Aland Islands | ES, IT, US |
AZ | Azerbaijan | DE, ES, FR, GB, IT, JP, US |
BA | Bosnia and Herzegovina | DE, ES, FR, GB, IT, JP, US |
BB | Barbados | DE, ES, FR, GB, IT, JP, US |
BD | Bangladesh | DE, ES, FR, GB, IT, JP, US |
BE | Belgium | DE, ES, FR, GB, IT, JP, NL, US |
BF | Burkina Faso | DE, ES, FR, GB, IT, JP, US |
BG | Bulgaria | DE, ES, FR, GB, IT, JP, US |
BH | Bahrain | AE, DE, ES, FR, GB, IT, JP, US |
BI | Burundi | DE, ES, FR, GB, IT, JP, US |
BJ | Benin | DE, ES, FR, GB, IT, JP, US |
BL | Saint Barthelemy | ES, FR, IT, US |
BM | Bermuda | DE, ES, FR, GB, IT, JP, US |
BN | Brunei Darussalam | DE, ES, FR, GB, IT, JP, US |
BO | Bolivia | DE, ES, FR, GB, IT, JP, US |
BQ | Bonaire, Saint Eustatius and Saba | DE, ES, FR, GB, IT, JP, US |
BR | Brazil | DE, ES, FR, GB, IT, JP, US |
BS | Bahamas, The | DE, ES, FR, GB, IT, JP, US |
BT | Bhutan | DE, ES, FR, GB, IT, JP, US |
BV | Bouvet Island | DE, ES, FR, GB, IT, US |
BW | Botswana | DE, ES, FR, GB, IT, JP, US |
BY | Belarus | DE, ES, FR, GB, IT, JP, US |
BZ | Belize | DE, ES, FR, GB, IT, JP, US |
CA | Canada | DE, ES, FR, GB, IT, JP, US |
CC | Cocos (Keeling) Islands | DE, ES, FR, GB, IT, JP, US |
CD | Congo, Democratic Republic of | DE, ES, FR, GB, IT, JP, US |
CF | Central African Republic | DE, ES, FR, GB, IT, JP, US |
CG | Congo | DE, ES, FR, GB, IT, JP, US |
CH | Switzerland | DE, ES, FR, GB, IT, JP, US |
CI | Ivory Coast (Côte D'ivoire) | DE, ES, FR, GB, IT, JP, US |
CK | Cook Islands | DE, ES, FR, GB, IT, JP, US |
CL | Chile | DE, ES, FR, GB, IT, JP, US |
CM | Cameroon | DE, ES, FR, GB, IT, JP, US |
CN | China | DE, ES, FR, GB, IT, JP, US |
CO | Colombia | DE, ES, FR, GB, IT, JP, US |
CR | Costa Rica | DE, ES, FR, GB, IT, JP, US |
CV | Cape Verde | DE, ES, FR, GB, IT, JP, US |
CW | Curaçao | DE, ES, FR, GB, IT, JP, US |
CX | Christmas Island | DE, ES, FR, GB, IT, JP, US |
CY | Cyprus | DE, ES, FR, GB, IT, JP, US |
CZ | Czech Republic | DE, ES, FR, GB, IT, JP, US |
DE | Germany | ES, FR, GB, IT, JP, US |
DJ | Djibouti | DE, ES, FR, GB, IT, JP, US |
DK | Denmark | DE, ES, FR, GB, IT, JP, US |
DM | Dominica, Commonwealth of | DE, ES, FR, GB, IT, JP, US |
DO | Dominican Republic | DE, ES, FR, GB, IT, JP, US |
DZ | Algeria | DE, ES, FR, GB, IT, JP, US |
EC | Ecuador | DE, ES, FR, GB, IT, JP, US |
EE | Estonia | DE, ES, FR, GB, IT, JP, US |
EG | Egypt | DE, ES, FR, GB, IT, JP, US |
EH | Western Sahara | DE, ES, FR, GB, IT, JP, US |
ER | Eritrea | DE, ES, FR, GB, IT, JP, US |
ES | Spain | DE, FR, GB, IT, JP, US |
ET | Ethiopia | DE, ES, FR, GB, IT, JP, US |
FI | Finland | DE, ES, FR, GB, IT, JP, US |
FJ | Fiji | DE, ES, FR, GB, IT, JP, US |
FK | Falkland Islands | DE, ES, FR, GB, IT, JP, US |
FM | Micronesia, Federated States of | DE, ES, FR, GB, IT, JP, US |
FO | Faroe Islands | DE, ES, FR, GB, IT, JP, US |
FR | France | DE, ES, GB, IT, JP, US |
GA | Gabon | DE, ES, FR, GB, IT, JP, US |
GB | United Kingdom | DE, ES, FR, IT, JP, US |
GD | Grenada | DE, ES, FR, GB, IT, JP, US |
GE | Georgia | DE, ES, FR, GB, IT, JP, US |
GF | French Guiana | DE, ES, FR, GB, IT, JP, US |
GG | Guernsey | ES, GB, IT, US |
GH | Ghana | DE, ES, FR, GB, IT, JP, US |
GI | Gibraltar | DE, ES, FR, GB, IT, JP, US |
GL | Greenland | DE, ES, FR, GB, IT, JP, US |
GM | Gambia, The | DE, ES, FR, GB, IT, JP, US |
GN | Guinea | DE, ES, FR, GB, IT, JP, US |
GP | Guadeloupe | DE, ES, FR, GB, IT, JP, US |
GQ | Equatorial Guinea | DE, ES, FR, GB, IT, JP, US |
GR | Greece | DE, ES, FR, GB, IT, JP, US |
GS | South Georgia and the South Sandwich Islands | DE, ES, FR, GB, IT, JP, US |
GT | Guatemala | DE, ES, FR, GB, IT, JP, US |
GU | Guam | DE, ES, FR, GB, IT, JP |
GW | Guinea-Bissau | DE, ES, FR, GB, IT, JP, US |
GY | Guyana | DE, ES, FR, GB, IT, JP, US |
HK | Hong Kong | DE, ES, FR, GB, IT, JP, US |
HM | Heard Island and the McDonald Islands | DE, ES, FR, GB, IT, US |
HN | Honduras | DE, ES, FR, GB, IT, JP, US |
HR | Croatia | DE, ES, FR, GB, IT, JP, US |
HT | Haiti | DE, ES, FR, GB, IT, JP, US |
HU | Hungary | DE, ES, FR, GB, IT, JP, US |
ID | Indonesia | DE, ES, FR, GB, IT, JP, US |
IE | Ireland, Republic of | DE, ES, FR, GB, IT, JP, US |
IL | Israel | DE, ES, FR, GB, IT, JP, US |
IM | Isle of Man | ES, GB, IT, US |
IN | India | DE, ES, FR, GB, IT, JP, US |
IO | British Indian Ocean Territory | DE, ES, FR, GB, IT, JP, US |
IQ | Iraq | ES, IT, US |
IS | Iceland | DE, ES, FR, GB, IT, JP, US |
IT | Italy | DE, ES, FR, GB, JP, US |
JE | Jersey | ES, GB, IT, US |
JM | Jamaica | DE, ES, FR, GB, IT, JP, US |
JO | Jordan | DE, ES, FR, GB, IT, JP, US |
JP | Japan | DE, ES, FR, GB, IT, US |
KE | Kenya | DE, ES, FR, GB, IT, JP, US |
KG | Kyrgyzstan | DE, ES, FR, GB, IT, JP, US |
KH | Cambodia | DE, ES, FR, GB, IT, JP, US |
KI | Kiribati | DE, ES, FR, GB, IT, JP, US |
KM | Comoros | DE, ES, FR, GB, IT, JP, US |
KN | Saint Kitts and Nevis | DE, ES, FR, GB, IT, JP, US |
KR | Korea, Republic of | DE, ES, FR, GB, IT, JP, US |
KW | Kuwait | AE, DE, ES, FR, GB, IT, JP, US |
KY | Cayman Islands | DE, ES, FR, GB, IT, JP, US |
KZ | Kazakhstan | DE, ES, FR, GB, IT, JP, US |
LA | Lao, People's Democratic Republic | DE, ES, FR, GB, IT, JP, US |
LB | Lebanon | DE, ES, FR, GB, IT, JP, US |
LC | Saint Lucia | DE, ES, FR, GB, IT, JP, US |
LI | Liechtenstein | DE, ES, FR, GB, IT, JP, US |
LK | Sri Lanka | DE, ES, FR, GB, IT, JP, US |
LR | Liberia | DE, ES, FR, GB, IT, JP, US |
LS | Lesotho | DE, ES, FR, GB, IT, JP, US |
LT | Lithuania | DE, ES, FR, GB, IT, JP, US |
LU | Luxembourg | DE, ES, FR, GB, IT, JP, US |
LV | Latvia | DE, ES, FR, GB, IT, JP, US |
LY | Libya | DE, ES, FR, GB, IT, JP, US |
MA | Morocco | DE, ES, FR, GB, IT, JP, US |
MC | Monaco | DE, ES, FR, GB, IT, JP, US |
MD | Moldova, Republic of | DE, ES, FR, GB, IT, JP, US |
ME | Montenegro | DE, ES, FR, GB, IT, JP, US |
MF | Saint Martin | ES, FR, IT, US |
MG | Madagascar | DE, ES, FR, GB, IT, JP, US |
MH | Marshall Islands | DE, ES, FR, GB, IT, JP, US |
MK | Macedonia, The Former Yugoslav Republic of | DE, ES, FR, GB, IT, JP, US |
ML | Mali | DE, ES, FR, GB, IT, JP, US |
MM | Myanmar | DE, ES, FR, GB, IT, JP, US |
MN | Mongolia | DE, ES, FR, GB, IT, JP, US |
MO | Macao | DE, ES, FR, GB, IT, JP, US |
MP | Northern Mariana Islands | DE, ES, FR, GB, IT, JP |
MQ | Martinique | DE, ES, FR, GB, IT, JP, US |
MR | Mauritania | DE, ES, FR, GB, IT, JP, US |
MS | Montserrat | DE, ES, FR, GB, IT, JP, US |
MT | Malta | DE, ES, FR, GB, IT, JP, US |
MU | Mauritius | DE, ES, FR, GB, IT, JP, US |
MV | Maldives | DE, ES, FR, GB, IT, JP, US |
MW | Malawi | DE, ES, FR, GB, IT, JP, US |
MX | Mexico | DE, ES, FR, GB, IT, JP, US |
MY | Malaysia | DE, ES, FR, GB, IT, JP, US |
MZ | Mozambique | DE, ES, FR, GB, IT, JP, US |
NA | Namibia | DE, ES, FR, GB, IT, JP, US |
NC | New Caledonia | DE, ES, FR, GB, IT, JP, US |
NE | Niger | DE, ES, FR, GB, IT, JP, US |
NF | Norfolk Island | US |
NG | Nigeria | DE, ES, FR, GB, IT, JP, US |
NI | Nicaragua | DE, ES, FR, GB, IT, JP, US |
NL | Netherlands | DE, ES, FR, GB, IT, JP, US |
NO | Norway | DE, ES, FR, GB, IT, JP, US |
NP | Nepal | DE, ES, FR, GB, IT, JP, US |
NR | Nauru | DE, ES, FR, GB, IT, JP, US |
NU | Niue | DE, ES, FR, GB, IT, JP, US |
NZ | New Zealand | AU, DE, ES, FR, GB, IT, JP, US |
OM | Oman | AE, DE, ES, FR, GB, IT, JP, US |
PA | Panama | DE, ES, FR, GB, IT, JP, US |
PE | Peru | DE, ES, FR, GB, IT, JP, US |
PF | French Polynesia | DE, ES, FR, GB, IT, JP, US |
PG | Papua New Guinea | DE, ES, FR, GB, IT, JP, US |
PH | Philippines | DE, ES, FR, GB, IT, JP, US |
PK | Pakistan | DE, ES, FR, GB, IT, JP, US |
PL | Poland | DE, ES, FR, GB, IT, JP, US |
PM | Saint Pierre and Miquelon | DE, ES, FR, GB, IT, JP, US |
PN | Pitcairn | DE, ES, FR, GB, IT, US |
PR | Puerto Rico | DE, ES, FR, GB, IT, JP |
PS | Palestinian Territories | DE, ES, FR, GB, IT, JP, US |
PT | Portugal | DE, ES, FR, GB, IT, JP, US |
PW | Palau | DE, ES, FR, GB, IT, JP, US |
PY | Paraguay | DE, ES, FR, GB, IT, JP, US |
QA | Qatar | AE, DE, ES, FR, GB, IT, JP, US |
RE | Reunion | DE, ES, FR, GB, IT, JP, US |
RO | Romania | DE, ES, FR, GB, IT, JP, US |
RS | Serbia | DE, ES, FR, GB, IT, JP, US |
RU | Russian Federation | DE, ES, FR, GB, IT, JP, US |
RW | Rwanda | DE, ES, FR, GB, IT, JP, US |
SA | Saudi Arabia | AE, DE, ES, FR, GB, IT, JP, US |
SB | Solomon Islands | DE, ES, FR, GB, IT, JP, US |
SC | Seychelles | DE, ES, FR, GB, IT, JP, US |
SE | Sweden | DE, ES, FR, GB, IT, JP, US |
SG | Singapore | DE, ES, FR, GB, IT, JP, US |
SH | Saint Helena, Ascension and Tristan da Cunha | DE, ES, FR, GB, IT, US |
SI | Slovenia | DE, ES, FR, GB, IT, JP, US |
SJ | Svalbard and Jan Mayen | DE, ES, FR, GB, IT, JP, US |
SK | Slovakia | DE, ES, FR, GB, IT, JP, US |
SL | Sierra Leone | DE, ES, FR, GB, IT, JP, US |
SM | San Marino | DE, ES, FR, GB, IT, JP, US |
SN | Senegal | DE, ES, FR, GB, IT, JP, US |
SO | Somalia | DE, ES, FR, GB, IT, JP, US |
SR | Suriname | DE, ES, FR, GB, IT, JP, US |
ST | Sao Tome and Principe | DE, ES, FR, GB, IT, JP, US |
SV | El Salvador | DE, ES, FR, GB, IT, JP, US |
SX | Sint Maarten | DE, ES, FR, GB, IT, JP, US |
SZ | Swaziland | DE, ES, FR, GB, IT, JP, US |
TC | Turks and Caicos Islands | DE, ES, FR, GB, IT, JP, US |
TD | Chad | DE, ES, FR, GB, IT, JP, US |
TF | French Southern Territories | DE, ES, FR, GB, IT, JP, US |
TG | Togo | DE, ES, FR, GB, IT, JP, US |
TH | Thailand | DE, ES, FR, GB, IT, JP, US |
TJ | Tajikistan | DE, ES, FR, GB, IT, JP, US |
TK | Tokelau | DE, ES, FR, GB, IT, US |
TL | East Timor | DE, ES, FR, GB, IT, JP, US |
TM | Turkmenistan | DE, ES, FR, GB, IT, JP, US |
TN | Tunisia | DE, ES, FR, GB, IT, JP, US |
TO | Tonga | DE, ES, FR, GB, IT, JP, US |
TR | Turkey | DE, ES, FR, GB, IT, JP, US |
TT | Trinidad and Tobago | DE, ES, FR, GB, IT, JP, US |
TV | Tuvalu | DE, ES, FR, GB, IT, JP, US |
TW | Taiwan | DE, ES, FR, GB, IT, JP, US |
TZ | Tanzania, United Republic of | DE, ES, FR, GB, IT, JP, US |
UA | Ukraine | DE, ES, FR, GB, IT, JP, US |
UG | Uganda | DE, ES, FR, GB, IT, JP, US |
UM | United States Minor Outlying Islands | DE, ES, FR, GB, IT, JP, US |
US | United States | DE, ES, FR, GB, IT, JP |
UY | Uruguay | DE, ES, FR, GB, IT, JP, US |
UZ | Uzbekistan | DE, ES, FR, GB, IT, JP, US |
VA | Holy See | DE, ES, FR, GB, IT, JP, US |
VC | Saint Vincent and the Grenadines | DE, ES, FR, GB, IT, JP, US |
VE | Venezuela | DE, ES, FR, GB, IT, JP, US |
VG | Virgin Islands, British | DE, ES, FR, GB, IT, JP, US |
VI | Virgin Islands, US | DE, ES, FR, GB, IT, JP |
VN | Vietnam | DE, ES, FR, GB, IT, JP, US |
VU | Vanuatu | DE, ES, FR, GB, IT, JP, US |
WF | Wallis and Futuna | DE, ES, FR, GB, IT, JP, US |
WS | Samoa | DE, ES, FR, GB, IT, JP, US |
XK | Kosovo | DE, ES, FR, GB, IT, JP, US |
YE | Yemen | DE, ES, FR, GB, IT, JP, US |
YT | Mayotte | DE, ES, FR, GB, IT, JP, US |
ZA | South Africa | DE, ES, FR, GB, IT, JP, US |
ZM | Zambia | DE, ES, FR, GB, IT, JP, US |
ZW | Zimbabwe | DE, 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:
| Field | Meaning |
|---|---|
badge_status | Status badge text in the page's language, such as Overall Pick; null when absent. |
coupon | Coupon object classified as price, save_with_coupon, or unknown; null when no usable coupon information is observed. See the forms below. |
coupon_price | Compatibility field containing coupon.price for a price coupon, such as $98.99; null for savings-only, unknown, or absent coupons. |
is_best_seller | true when a Best Seller marker is observed on the card; otherwise false. |
deal_badge | Deal badge text in the page's language, such as Limited time deal; null when absent. |
is_deal | true 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.type | Object contents |
|---|---|
price | price contains the raw displayed coupon price, such as $39.09. highlighted_text is included when available, such as You pay $39.09. |
save_with_coupon | highlighted_text contains the savings label, such as Save $10.00 or Save 15%. There is no price field. |
unknown | highlighted_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 runsdomain: string;query: string;page: number; // Positive integersearch_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 formattinglist_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 pageasin: string;title?: string | null;link?: string | null;image?: string | null;badge?: string | null;badge_status?: string | null; // Observed status badge textcoupon?: Coupon | null;coupon_price?: string | null; // Compatibility field for coupon.priceis_kindle_unlimited?: boolean; // Observed Kindle Unlimited badgeis_best_seller?: boolean; // Observed Best Seller markeris_deal?: boolean; // Non-null coupon or nonempty deal_badgedeal_badge?: string | null; // Observed text in the page's languageprice?: 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 observedprime?: boolean; // Omitted when no supported Prime marker or offer was observedbrand?: 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 enumtopics: 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 recordtitle?: string | null;search_input?: string | null;result_count: number; // Selected first-page products, including budget-deferred rowsexcluded_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
| Area | Desktop (device: "desktop") | Phone (device: "mobile") |
|---|---|---|
| Sponsored and Prime | sponsored and prime are always booleans. | sponsored and prime are optional; absence does not mean an observed false. |
| Promotions | coupon 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 insights | No 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 choices | Normal 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 choices | Link and optional sizes display text. | Link and optional sizes display text. |
| Page refinements | Sidebar 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/sor 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 overridesdomain; 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
maxPagesretains its separate page limits described above. maxResultsPerQueryaccepts 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 withresult_count: 0. An empty later page produces neither aNo resultsrecord 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.