Skip to main content
Glama

Apiguru Amazon Data

Search Amazon products by keyword

search
Read-onlyIdempotent

Use to find products by keyword and filters. Rows are result snippets; for the authoritative record of one ASIN call product_details. Search Amazon products by keyword. Filters: page, sort_by, category_id (browse node), min_price / max_price (decimals), product_condition (NEW / USED / RENEWED), brand, seller_id, today_deals and deal_type (coupons, all_discounts, buy_more_save_more). Every answer carries filters_applied, filters_ignored (with the reason) and available_filters for that marketplace. Price: $0.003 per call. Blank values and the literal string 'null' are treated as unset. Invalid page, sort_by, price, product_condition or deal_type is a free 400 naming the parameter and the allowed values. Condition and deal refinements are per marketplace; a marketplace that lacks one gets the unfiltered feed plus an entry under filters_ignored, never a silent empty page. product_num_ratings is an integer; offers_count is the "N offers" count a result card shows, an integer, and null when the card shows none (most cards; it used to default to 1); product_brand is the brand line Amazon prints above some titles (fashion and many branded listings) and null on cards without one -- product_details has brand_name for every ASIN; product_star_rating, product_price and product_original_price are decimal strings; a null field means Amazon did not show it. is_prime is true when the result carries a Prime badge or its delivery line offers Prime delivery. metadata.reachable_pages says how far page can go: Amazon serves at most 7 pages of a query even when metadata.total_pages counts more (then pagination_note says how to split the query). _links.next is the next page while there is one; a page past the end is a free 400 page_out_of_range. A full page is up to 48 results and about 54 KB; the tool returns the first 10 as light rows by default and the answer carries _truncated, _omitted_fields, _projection and _notes. filters_applied echoes the effective sort_by (RELEVANCE when none was sent). A BEST_SELLERS ordering is Amazon's query-scoped popularity, not a category rank: a row's badges / is_best_seller are what the result card showed for this query, and an ASIN that is #1 in its subcategory can carry no badge here while product_details reports best_seller=true with the rank. For a rank claim, use product_details or best_sellers. An empty products list is served as success only when Amazon itself reports 0 results (metadata.total is 0 and hint says so). Anything else that is not a usable result is an unbilled, retryable 503 with code upstream_unavailable.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
geoNoMarketplace country code.US
pageNoResult page, 1-based. metadata.total_pages says how far it goes.
brandNoBrand name as Amazon spells it (case-insensitive), e.g. Samsung.
limitNoHow many search results to return from this page (0 = all of them). A full page is up to 48 rows and about 54 KB, which most clients spill to a file instead of showing inline. The answer carries _truncated with the true count when it trims.
queryYesSearch keywords. Required and must be non-empty.
fieldsNoComma-separated row fields to return instead of the light set, e.g. "asin,product_title,product_price". Rows list what they left out under _omitted_fields.
compactNoReturn light rows: identity, price, rating, badges and one delivery_date, dropping the long delivery prose that repeats itself across three fields. false returns every field the REST API sends (roughly 3x the size).
sort_byNoResult ordering.RELEVANCE
deal_typeNoA specific promotion refinement: today_deals, all_discounts, coupons or buy_more_save_more. available_filters.deal_type lists the ones this marketplace has.
max_priceNoHighest price, in the marketplace currency.
min_priceNoLowest price, in the marketplace currency; decimals such as 19.99 are fine.
seller_idNoRestrict results to one seller's offers: an Amazon seller id, 'A' followed by 9-20 letters and digits (e.g. A2A1RNLLUK3HYA).
category_idNoAmazon browse node id to restrict to, e.g. 172282 (Electronics on US). Take one from a best_sellers answer's available_subcategories, a product's category_path, or node= in an Amazon URL. Ids differ per marketplace.
today_dealsNoOnly items in Today's Deals, using that marketplace's own refinement. Where a marketplace has none (amazon.fr on 2026-09-08) it is reported under filters_ignored.
product_conditionNoNEW, USED or RENEWED (case-insensitive). Applied with the marketplace's own condition node; where a marketplace does not offer one, the answer's filters_ignored says so and available_filters lists what it does offer.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
successNo
metadataNo
productsNo
request_idNo
filters_appliedNo
filters_ignoredNo
available_filtersNo
amazon_request_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / geo / enum
      Previous value: -[
      -  "US",
      -  "CA",
      -  "DE",
      -  "MX",
      -  "UK",
      -  "FR",
      -  "IT",
      -  "ES",
      -  "AU",
      -  "BR",
      -  "IN",
      -  "JP",
      -  "NL",
      -  "AE",
      -  "PL",
      -  "SA",
      -  "SG",
      -  "SE",
      -  "TR",
      -  "BE"
      -]New value: +[
      +  "US",
      +  "CA",
      +  "DE",
      +  "MX",
      +  "UK",
      +  "FR",
      +  "IT",
      +  "ES",
      +  "AU",
      +  "BR",
      +  "IN",
      +  "JP",
      +  "NL",
      +  "AE",
      +  "PL",
      +  "SA",
      +  "SG",
      +  "SE",
      +  "TR",
      +  "BE",
      +  "IE",
      +  "ZA",
      +  "EG"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / seller_id / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "pattern": "^[Aa][A-Za-z0-9]{9,20}$",
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / seller_id / description
      Previous value: -"Restrict results to one seller's offers (Amazon seller id)."New value: +"Restrict results to one seller's offers: an Amazon seller id, 'A' followed by 9-20 letters and digits (e.g. A2A1RNLLUK3HYA)."
  3. Changed16 schema fields changed
    • changedInput schema / properties / brand / description
      Previous value: -"Brand name filter."New value: +"Brand name as Amazon spells it (case-insensitive), e.g. Samsung."
    • changedInput schema / properties / category_id / description
      Previous value: -"Restrict to an Amazon category id."New value: +"Amazon browse node id to restrict to, e.g. 172282 (Electronics on US). Take one from a best_sellers answer's available_subcategories, a product's category_path, or node= in an Amazon URL. Ids differ per marketplace."
    • addedInput schema / properties / deal_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "today_deals",
      +        "all_discounts",
      +        "coupons",
      +        "buy_more_save_more"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "A specific promotion refinement: today_deals, all_discounts, coupons or buy_more_save_more. available_filters.deal_type lists the ones this marketplace has.",
      +  "title": "Deal Type"
      +}
    • changedInput schema / properties / max_price / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / max_price / description
      Previous value: -"Maximum price filter, marketplace currency."New value: +"Highest price, in the marketplace currency."
    • changedInput schema / properties / min_price / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / min_price / description
      Previous value: -"Minimum price filter, marketplace currency."New value: +"Lowest price, in the marketplace currency; decimals such as 19.99 are fine."
    • changedInput schema / properties / page / description
      Previous value: -"Result page, 1-based."New value: +"Result page, 1-based. metadata.total_pages says how far it goes."
    • changedInput schema / properties / product_condition / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "NEW",
      +      "USED",
      +      "RENEWED"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / product_condition / description
      Previous value: -"Condition filter, e.g. NEW or USED."New value: +"NEW, USED or RENEWED (case-insensitive). Applied with the marketplace's own condition node; where a marketplace does not offer one, the answer's filters_ignored says so and available_filters lists what it does offer."
    • changedInput schema / properties / seller_id / description
      Previous value: -"Restrict results to one seller."New value: +"Restrict results to one seller's offers (Amazon seller id)."
    • changedInput schema / properties / today_deals / description
      Previous value: -"Restrict to items in today's deals."New value: +"Only items in Today's Deals, using that marketplace's own refinement. Where a marketplace has none (amazon.fr on 2026-09-08) it is reported under filters_ignored."
    • addedOutput schema / properties / amazon_request_count
      Added value: +{
      +  "default": null,
      +  "title": "Amazon Request Count"
      +}
    • addedOutput schema / properties / available_filters
      Added value: +{
      +  "default": null,
      +  "title": "Available Filters"
      +}
    • addedOutput schema / properties / filters_applied
      Added value: +{
      +  "default": null,
      +  "title": "Filters Applied"
      +}
    • addedOutput schema / properties / filters_ignored
      Added value: +{
      +  "default": null,
      +  "title": "Filters Ignored"
      +}
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), yet the description adds substantial non-structured context: $0.003 per call, free 400s for invalid params, unbilled retryable 503 on upstream failure, the 7-page cap even when total_pages counts more, per-marketplace refinement gaps surfaced via filters_ignored, and when an empty result is legitimate. This is far beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and filtering are front-loaded well, but the block is extremely dense and internally repetitive: filters_ignored is explained three times, the free 400 twice, and the marketplace-refinement caveat twice. Most sentences carry real information, but the redundancy and sheer length cost it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, open-world search tool with an output schema, the description covers billing, error taxonomies, truncation/projection fields, pagination limits and result-field nullability. Nothing an agent needs to call it correctly, or to interpret a surprising response, is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics the schema lacks: BEST_SELLERS is query-scoped popularity not a category rank, sort_by is echoed in filters_applied, condition/deal_type are per-marketplace refinements, and blank/'null' strings are treated as unset. That clears the baseline but does not re-document every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('find products by keyword and filters') and immediately distinguishes the tool from siblings: 'Rows are result snippets; for the authoritative record of one ASIN call product_details.' An agent can tell this apart from product_details, best_sellers and deals without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes explicitly: use product_details for a single authoritative ASIN record, and 'For a rank claim, use product_details or best_sellers.' It also states the condition that selects this tool (keyword/filter discovery) versus those alternatives, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources