Skip to main content
Glama

Apiguru Amazon Data

Search Amazon products by keyword

search
Read-onlyIdempotent

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.01 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 use per-marketplace node ids captured from Amazon's own search pages; a marketplace that lacks one gets the unfiltered feed plus an entry under filters_ignored, never a silent empty page. product_num_ratings and offers_count are integers; 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.total_pages says how far page can go. 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). A bot wall, a page we could not parse or anything that is not a results payload is an unbilled, retryable 503 with code upstream_unavailable and a reason (wall, parse_fault, unusable); up to three sessions are tried before that answer.

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 (Amazon seller id).
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. 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"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say read-only, open-world, and idempotent; the description adds a huge amount of behavioral context: $0.01 pricing, free 400s naming invalid parameters, blank/null semantics, marketplace-specific node fallbacks with filters_ignored, truncation, is_prime derivation, upstream 503 retry behavior, and exact empty-result semantics. Nothing contradicts the annotations.

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

Conciseness4/5

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

The description is long, but the tool is complex with 15 parameters and rich failure modes. It is front-loaded with the purpose and filter list, and nearly every sentence adds operational value; minor redundancy with schema descriptions and output-schema field notes keeps it from a 5.

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 tool of this complexity, nothing necessary for correct invocation is missing: pagination bounds, field types, projection/truncation behavior, marketplace caveats, error codes with retry semantics, and cost are all covered. The output schema handles return-value structure, leaving the description free to focus on behavior.

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 schema already documents every parameter; the description earns extra credit by explaining cross-cutting semantics such as unset blank/'null' values, invalid value error behavior, decimal price handling, and per-marketplace availability for deal_type and product_condition. It does not restate each schema description but adds meaning beyond the JSON Schema.

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?

The first sentence states a specific verb and resource: 'Search Amazon products by keyword', and the description immediately enumerates the available filters. This cleanly separates it from siblings like deals, best_sellers, and product_details, whose names imply different entry points.

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

Usage Guidelines4/5

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

The keyword-search scope provides clear context for when to choose it over the other product-listing tools, and it explicitly routes rank claims to 'product_details or best_sellers'. There is no general exclusion list for deals or seller tools, but the core use case is unambiguous.

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.