Keepa API Docs

The product object contains all of our price history data and basic product information.

Returned by: the product object is returned by the following requests: Product Searches and Product Request.

Important: Always evaluate the productType field first. This field determines what data for the product is available.

Format#

{
    "productType": Integer,
    "asin": String,
    "domainId": Integer,
    "title": String,
    "itemHighlights": String,
    "trackingSince": Integer,
    "listedSince": Integer,
    "lastUpdate": Integer,
    "lastRatingUpdate": Integer,
    "lastPriceChange": Integer,
    "lastEbayUpdate": Integer,
    "lastStockUpdate": Integer,
    "images": Image array,
    "rootCategory": Integer,
    "categories": Long array,
    "categoryTree": Object array,
    "parentAsin": String,
    "parentAsinHistory": String array,
    "parentTitle": String,
    "parentHighlights": String,
    "frequentlyBoughtTogether": String array,
    "bundleItems": String array,
    "eanList": String array,
    "upcList": String array,
    "gtinList": String array,
    "manufacturer": String,
    "brand": String,
    "brandStoreName": String,
    "brandStoreUrl": String,
    "brandStoreUrlName": String,
    "websiteDisplayGroup": String,
    "websiteDisplayGroupName": String,
    "salesRankDisplayGroup": String,
    "type": String,
    "partNumber": String,
    "binding": String,
    "scent": String,
    "shortDescription": String,
    "activeIngredients": String,
    "specialIngredients": String,
    "itemForm": String,
    "itemTypeKeyword": String,
    "recommendedUsesForProduct": String,
    "pattern": String,
    "specificUsesForProduct": String array,
    "businessDiscount": Integer,
    "lastBusinessDiscountUpdate": Integer,
    "safetyWarning": String,
    "productBenefit": String,
    "batteriesRequired": Boolean,
    "batteriesIncluded": Boolean,
    "targetAudienceKeyword": String,
    "style": String,
    "includedComponents": String,
    "material": String,
    "materials": String array,
    "specialFeatures": String array,
    "numberOfItems": Integer,
    "numberOfPages": Integer,
    "publicationDate": Integer,
    "releaseDate": Integer,
    "contributors": two dimensional String array,
    "languages": two dimensional String array,
    "model": String,
    "color": String,
    "size": String,
    "edition": String,
    "format": String,
    "features": String array,
    "description": String,
    "hazardousMaterials": Object array,
    "videos": Object array,
    "aPlus": Object array,
    "deals": Deal Details Object array,
    "packageHeight": Integer,
    "packageLength": Integer,
    "packageWidth": Integer,
    "packageWeight": Integer,
    "packageQuantity": Integer,
    "itemHeight": Integer,
    "itemLength": Integer,
    "itemWidth": Integer,
    "itemWeight": Integer,
    "availabilityAmazon": Integer,
    "availabilityAmazonDelay": Integer array,
    "buyBoxEligibleOfferCounts": Integer array,
    "competitivePriceThreshold": Integer,
    "suggestedLowerPrice": Integer,
    "ebayListingIds": Long array,
    "isAdultProduct": Boolean,
    "isHeatSensitive": Boolean,
    "isMerchOnDemand": Boolean,
    "isHaul": Boolean,
    "launchpad": Boolean,
    "audienceRating": String,
    "ingredients": String,
    "urlSlug": String,
    "returnRate": Integer,
    "isEligibleForSuperSaverShipping": Boolean,
    "fbaFees": Object,
    "variableClosingFee": Integer,
    "referralFeePercentage": Double,
    "variations": Object array,
    "historicalVariations": String array,
    "coupon": Integer array,
    "couponHistory": Integer array,
    "promotions": Promotion Object array,
    "unitCount": Object,
    "stats": Statistics Object,
    "salesRankReference": Long,
    "salesRankReferenceHistory": Long array,
    "salesRanks": Object,
    "lastSoldUpdate": Integer,
    "monthlySold": Integer,
    "monthlySoldHistory": Integer array,
    "reviews": Review Object,
    "offers": Marketplace Offer Object array,
    "liveOffersOrder": Integer array,
    "buyBoxSellerIdHistory": String array,
    "buyBoxUsedHistory": String array,
    "isRedirectASIN": Boolean,
    "isSNS": Boolean,
    "offersSuccessful": Boolean,
    "csv": two dimensional Integer array
}

Fields#

All timestamps are given in Keepa Time minutes (see Keepa Time Minutes below). All price and fee values are integers in the respective Amazon locale’s smallest currency unit (e.g. euro cents or yen). The fields are grouped below for readability; the group order follows the API response.

Identification & product type#

FieldTypeDescription
productType Integer Must always be evaluated first. Determines what data for the product is available. Possible values:
  • 0 – STANDARD: Everything accessible.
  • 1 – DOWNLOADABLE: No price, rating and offers data accessible. Data is updated less frequently.
  • 2 – EBOOK: No price, rating and offers data accessible. Data is updated less frequently.
  • 3 – INACCESSIBLE: No price, rating and offers data accessible. Sales rank and offer count data is updated less frequently. Some fields may be missing.
  • 4 – INVALID: No current data available due to invalid or deprecated ASIN, or other issues. Might be temporary.
  • 5 – VARIATION_PARENT: Product is a parent ASIN. variations is set.
asinStringThe ASIN of the product.
Example: B00M0QVG3W
domainIdIntegerThe domainId of the product’s Amazon locale. Possible values: [ 1: com | 2: co.uk | 3: de | 4: fr | 5: co.jp | 6: ca | 8: it | 9: es | 10: in | 11: com.mx | 12: com.br ]
titleStringTitle of the product. Amazon limits titles to 75 characters, including spaces, in all categories except media. Descriptive content that does not fit into the title is published separately in itemHighlights, so read both fields if you need the full descriptive text. Caution: may contain unescaped HTML markup in rare cases.
Example: Canon PowerShot SX400 Digital Camera with 30x Optical Zoom (Black)
itemHighlightsStringAmazon’s Item Highlights: up to 125 characters of descriptive content in addition to the title – typically materials or recommended use cases that help customers compare options. Amazon treats this content as searchable and displays it together with the title in search results and on the product detail page. undefined if not available.
Example: Machine washable cotton blend, for indoor and outdoor use

Tracking & update timestamps#

FieldTypeDescription
trackingSinceIntegerStates the time we have started tracking this product, in Keepa Time minutes.
Example: 2711319
listedSinceIntegerStates the time the item was first listed on Amazon, in Keepa Time minutes. This timestamp is only available for some products. If not available, the field has the value 0 or -1.
Example: 2711319
lastUpdateIntegerStates the last time we have updated the information for this product, in Keepa Time minutes.
Example: 2711319
lastRatingUpdateIntegerStates the last time we have updated the product rating and review count, in Keepa Time minutes.
Example: 2711319
lastPriceChangeIntegerStates the last time we have registered a price change (any price type), in Keepa Time minutes.
Example: 2711319
lastEbayUpdateIntegerStates the last time we have updated the eBay prices for this product, in Keepa Time minutes. If no matching products were found, the integer is negative.
Example: 2711319
lastStockUpdateIntegerThe most recent update of the stock data for this product’s offers, in Keepa Time minutes. This field is undefined unless the stock parameter was used and stock data was collected at least once. Not all offers are necessarily updated. Refer to the lastStockUpdate field of the individual offers.
Example: 2711319

Images & categories#

FieldTypeDescription
images Object array Provides metadata for images associated with the product. The images field is an array of image objects, each containing up to two resolutions for the same image (if available). These are used in the product image carousel on Amazon. undefined if unavailable. Each object in the array represents the metadata for a single image in various sizes (large and medium):
  • l (String): Large image filename.
  • lH (Integer): Height of the large image, in pixels.
  • lW (Integer): Width of the large image, in pixels.
  • m (String): Medium image filename.
  • mH (Integer): Height of the medium image, in pixels.
  • mW (Integer): Width of the medium image, in pixels.
  • variant (String): Amazon’s image variant code, identifying the role of this image within the listing (for example MAIN or PT01).
Full Amazon image path: https://m.media-amazon.com/images/I/<image name>
rootCategoryIntegerCategory node ID of the product’s root category. 0 if no root category known. The ID 9223372036854775807 (max signed long value) denotes a blank category with the name “?”. We use this in cases where a product is listed in no or non-existent categories.
Example: 562066
categoriesLong arrayArray of Amazon category node IDs this product is listed in. Can be empty.
Example: [569604]
categoryTreeObject arrayRepresents the category tree as an ordered array of objects, each consisting of two fields:
  • catId – Long – the category ID
  • name – String – the name of the category

Example images entry:

"images": [{
    "l": "81bRlmLRyPL.jpg",
    "lH": 1500,
    "lW": 1500,
    "m": "g1dlEmb2mq3.jpg",
    "mH": 500,
    "mW": 500,
    "variant": "MAIN"
}]

Parent ASIN & variations#

FieldTypeDescription
parentAsinStringThe ASIN of the parent product (if the product has variations, otherwise null).
Example: B00M0QVG3W
parentAsinHistoryString arrayThe history of the parentAsin field. This array has the format: [keepaTime, previous parent ASIN, …]. The timestamp indicates when the previously associated parentAsin ceased to be valid. For the current parent ASIN, use the parentAsin field. undefined if the parentAsin field never changed. We started tracking parentAsin changes on March 18th 2024.
Example: [2711319, B00M0QVG3W]
parentTitleStringThe title of the parent product, resolved from the ASIN in parentAsin so a variation can be labelled with its parent’s wording without requesting the parent separately. It is a snapshot of the parent’s current title, taken while answering the request – there is no history for this field. Provided for variations only: a parent product references itself in parentAsin and therefore has no parentTitle. undefined if the product has no parent or the parent could not be resolved.
Example: Canon PowerShot SX400 Digital Camera with 30x Optical Zoom (Black)
parentHighlightsStringThe itemHighlights of the parent product, resolved in the same way and under the same conditions as parentTitle. undefined if the product has no parent, the parent could not be resolved, or the parent itself has no item highlights.
Example: Machine washable cotton blend, for indoor and outdoor use
variationsObject arrayContains up to 4000 variations of this product. Each object in the array represents a single variation. A variation object consists of the variation ASIN, a swatch image, and an attributes array, where each entry represents one variation theme, including a dimension and its corresponding value. To request live data for this field, the offers parameter must be used. Not all variations have a swatch image. Only available variations are provided.
historicalVariationsString arrayProvides unlisted (historical and out of stock) variation ASINs of this product. undefined if no data is available or the historical-variations parameter was not specified.

Example variations entry:

"variations": [{
   "asin": "B07GFPNJL9",
   "image": "55DVdLc1oBC.jpg",
   "attributes": [{
      "dimension": "Size",
      "value": "7.24 LB"
   }, {
      "dimension": "FlavorName",
      "value": "Cheddar"
   }]
}]

Videos & A+ content#

FieldTypeDescription
videosObject arrayProvides metadata for videos associated with the product. The videos parameter is mandatory for access. Each object in the array represents the metadata for a single video. Metadata can be retrieved for all image carousel videos and up to 10 (community) videos from the product listing’s Videos section. To request live data for this field, the offers parameter must also be included. undefined if unavailable.
aPlusObject arrayProvides enhanced A+ content from Amazon product listings. The aplus parameter is mandatory for access. Each A+ content object consists of one or more modules containing descriptive text, images, and videos to further illustrate product features. undefined if unavailable.

Example videos entry:

"videos": [{
    "title": "Compressed Air Duster", // string
    "image": "31XBcVI7oTL.jpg", // string
    "duration": 36, // short, in seconds
    "creator": "Seller", // string
    "name": "Innovation", // string, public name of the creator
    "url": "https://m.media-amazon.com/images/S/vse-vms-transcoding-artifact-us-east-1-prd/d8d8f97e-aa42-42d2-aa4c-6ab1b006edb5/default.jobtemplate.hls.m3u8" // string
}]

Note: The creator field represents the creator type and can have the following values: Main, Customer, Seller, Influencer, Vendor, ThirdParty, Amazon, Merchant and Brand. Main is used for all product image carousel videos for which no duration, title and name are available.

Example aPlus entry:

"aPlus": [{
    "module": [{
        "text": [
            "Experience premium quality and design.",
            "Engineered for performance and style."
        ], // array of strings, each representing a block of descriptive text
        "image": [
            "https://m.media-amazon.com/images/S/aplus-media-library-service-media/47ac6642-83d5-4ebf-867b-ae890ef135d4.png"
        ], // array of strings, each representing a full image URL
        "imageAltText": [
            "Healthy delicious recipes"
        ], // array of strings, each the alt text of the image
        "video": [
            "https://m.media-amazon.com/images/S/aplus-media/vc/e07d60fa-d3dd-49fa-90d0-b07e05a3f783.mp4"
        ], // array of strings, each representing a full video URL
        "asin": [
            "B000K11CAA"
        ] // array of strings, each representing a comparison table module's product ASIN
    }],
    "fromManufacturer": true // boolean; indicates whether the A+ content is provided by the manufacturer/vendor
}]

Note: The module array contains one or more A+ content modules. Each module object includes: text – an array of strings with descriptive text blocks; image – an array of strings, each a full URL to an image; imageAltText – an array of strings, each the alt text of the corresponding image (same index as image); video – an array of strings, each a full URL to a video. The fromManufacturer field is a boolean that indicates if the A+ content originates from the manufacturer or vendor (true) or from another source (false).

Deal badges (deals)#

The deals field provides metadata for active deals associated with the product’s buy box. undefined if unavailable. Only updated when the offers parameter is used. Each entry is a Deal Details Object with the following fields:

FieldTypeDescription
accessTypeStringWho can access the deal. New access types can be added at any time. Currently one of:
  • ALL
  • PRIME_EARLY_ACCESS
  • PRIME_EXCLUSIVE
dealTypeStringThe type of the deal badge. New deal types can be added at any time. Currently one of:
  • PRIME_DAY
  • PRIME_DAY_EARLY
  • EARLY_ACCESS_WITH_PRIME
  • PRIME_EXCLUSIVE
  • SELLING_FAST
  • PRIME_SELLING_FAST
  • LIMITED_TIME_DEAL
  • COUNTDOWN_ENDS_IN
  • APP_ONLY
  • CLEARANCE_NO_RETURNS
  • SPECIAL_EVENT_SALE
  • GENERIC_OFFER_PROMO
  • UNKNOWN
badgeStringThe badge string as shown on the product page.
Example: “Early Prime Deal”

Example:

"deals": [
  {
    "accessType": "PRIME_EXCLUSIVE",
    "badge": "Early Prime Deal",
    "dealType": "EARLY_ACCESS_WITH_PRIME"
  }
]

Related products & identifiers#

FieldTypeDescription
frequentlyBoughtTogetherString arrayOne or two “Frequently Bought Together” ASINs. null if not available. Field is updated when the offers parameter was used.
Example: [ "B00M0QVG3W", "B00T85PMWY" ]
bundleItemsString arrayA list of ASINs this product bundle consists of. Only available for virtual product bundles. null if not available.
Example: [ "B00M0QVG3W", "B00T85PMWY" ]
eanListString arrayA list of EANs assigned to this product. The first index is the primary EAN. null if not available.
Example: [ "8806088624952" ]
upcListString arrayA list of UPCs assigned to this product. The first index is the primary UPC. null if not available.
Example: [ "045496590086" ]
gtinListString arrayA list of GTINs assigned to this product. The first index is the primary GTIN. null if not available.
Example: [ "00614141000012" ]

Brand & manufacturer#

FieldTypeDescription
manufacturerStringName of the manufacturer. null if not available.
Example: Canon
brandStringAn item’s brand. null if not available.
Example: Sony
brandStoreNameStringThe store name of the item’s brand. Never available for digital products, movie rentals, product bundles, Amazon Fresh, and Amazon Pantry. undefined if not available.
Example: Hot Wheels
brandStoreUrlStringThe brand store URL path. To get the full URL, prepend the Amazon domain of the respective locale (e.g. https://www.amazon.com). Never available for digital products, movie rentals, product bundles, Amazon Fresh, and Amazon Pantry. undefined if not available.
Example: /stores/LEGO/page/017EF856-965D-4B56-A171-EA61CAFF45DD
brandStoreUrlNameStringThe brand store name from the URL path. Never available for digital products, movie rentals, product bundles, Amazon Fresh, and Amazon Pantry. undefined if not available.
Example: LEGO (from the URL: /stores/LEGO/page/…)

Classification & display groups#

FieldTypeDescription
websiteDisplayGroupStringA categorization of products that behave similarly, influencing how sales rank is calculated and displayed, especially for product variations.
Example: apparel_display_on_website
websiteDisplayGroupNameStringA categorization name of products that behave similarly, influencing how sales rank is calculated and displayed, especially for product variations.
Example: apparel
salesRankDisplayGroupStringThe categorization of products for which the primary sales rank is based on.
Example: apparel_display_on_website
typeStringThe item’s productType. null if not available.
Example: VIDEO_GAME_CONTROLLER
partNumberStringThe item’s partNumber. null if not available.
Example: DSC-H300/BM-RB
bindingStringThe item’s binding. null if not available. If the item is not a book, it is usually the product category instead.
Example: Hardcover

Product attributes#

FieldTypeDescription
scentStringThe scent of the product. Describes the fragrance associated with the product.
Example: "Lavender"
shortDescriptionStringA brief description of the product.
Example: "A soothing lavender-scented candle."
activeIngredientsStringActive ingredients present in the product.
Example: "Lavender essential oil, Soy wax"
specialIngredientsStringSpecial ingredients used in the product that may have unique properties.
Example: "Beeswax blend, Natural dyes"
itemFormStringThe form or physical state of the item.
Example: "Liquid"
itemTypeKeywordStringKeywords describing the type or category of the item.
Example: "body-lotions"
recommendedUsesForProductStringRecommended uses for the product to guide customers.
Example: "Aromatherapy, Home Decoration"
patternStringThe pattern or design featured on the product. undefined if not available.
Example: "Striped", "Floral"
materialsString arrayThe materials of the product. undefined if not available.
Example: [ "Steel", "Wood" ]
specialFeaturesString arrayThe special features of the product. undefined if not available.
Example: [ "Fast Charging", "Lightweight" ]
specificUsesForProductString arraySpecific uses for the product, providing detailed applications.
Example: [ "Relaxation", "Decoration" ]
businessDiscountIntegerThe highest business discount percentage. undefined if no business discount data is available.
Note: The business discount data is often outdated and may not reflect current offers.
Example: 14
lastBusinessDiscountUpdateIntegerStates the last time we have updated the businessDiscount field, in Keepa Time minutes. undefined if the businessDiscount has no value.
Example: 2711319
safetyWarningStringSafety warnings associated with the product to inform users of potential hazards.
Example: "Keep away from open flames."
productBenefitStringBenefits of using the product, highlighting its advantages.
Example: "Promotes relaxation and stress relief."
batteriesRequiredBooleanIndicates whether batteries are required for the product to function.
Example: true
batteriesIncludedBooleanIndicates whether batteries are included with the product upon purchase.
Example: false
targetAudienceKeywordStringKeywords describing the target audience for the product.
Example: "Adults, Gift for Her"
styleStringThe style of the product, which may influence its aesthetic appeal.
Example: "Modern", "Vintage"
includedComponentsStringComponents included with the product, detailing what is provided upon purchase.
Example: "Candle, Wick, Box"
materialStringMaterial of the product, specifying the primary substances used in its construction.
Example: "Soy Wax, Cotton"

Editions, formats & content details#

FieldTypeDescription
numberOfItemsIntegerThe number of items of this product. -1 if not available.
Example: 1
numberOfPagesIntegerThe number of pages of this product. -1 if not available.
Example: 514
publicationDateIntegerThe item’s publication date in one of the following three formats: YYYY or YYYYMM or YYYYMMDD (Y = year, M = month, D = day). -1 if not available.
Examples: 1978 = the year 1978; 200301 = January 2003; 20150409 = April 9th, 2015
releaseDateIntegerThe item’s release date. Same format as publicationDate. -1 if not available.
contributorsTwo-dimensional String arrayThe contributors of the item. A contributor can be an author, actor, director, etc. Each contributor entry has a name and a role type.
Example: [ [ "Vin Diesel", "actor" ] ]
languagesTwo-dimensional String arrayAn item can have one or more languages. Each language entry has a name and most also have a type. null if not available.
Examples: [ [ "English" ], [ "English", "Original Language" ] ]
modelStringThe item’s model. null if not available.
Example: DSC-H300/BM
colorStringThe item’s color. null if not available.
Example: Black
sizeStringThe item’s size. null if not available.
Example: S
editionStringThe item’s edition. null if not available.
Example: Standard Edition
formatStringThe item’s format. null if not available.
Example: AC-3
featuresString arrayA list of up to 5 product features / bullet points. null if not available. An entry can contain HTML markup in rare cases. We currently limit each entry to a maximum of 1000 characters (if the feature is longer it will be cut off). This limitation may change in the future without prior notice.
Example: [ "6 Universal outlets, 6 ft in Length", "Will accept most of the plug types from around the world!", … ]
descriptionStringA description of the product. null if not available. May contain HTML markup and \n newlines. We limit the product description to a maximum of 4000 characters (if the description is longer it will be cut off). This limitation may change in the future without prior notice. To request live data for this field the offers parameter must be used.
Example (excerpt): <p><b>Why should you buy our Universal Surge Protector?<b></p> • Professional series Universal Surge Protector will accept most of the plug types from around the world, including: UK, US, all of Europe, China, Australian and more! <br />• The AC surge suppression for full protection of 220-250V workstations…
hazardousMaterialsObject arrayThe hazardous material types of the product. undefined if not available. Each entry consists of two fields:
  • aspect – String
  • value – String

Example hazardousMaterials entries:

{
  "value": "AEROSOLS",
  "aspect": "proper_shipping_name"
}, {
  "value": "UN1950",
  "aspect": "united_nations_regulatory_id"
}

Package & item dimensions#

FieldTypeDescription
packageHeightIntegerThe package’s height in millimeters. 0 or -1 if not available.
Example: 144
packageLengthIntegerThe package’s length in millimeters. 0 or -1 if not available.
Example: 144
packageWidthIntegerThe package’s width in millimeters. 0 or -1 if not available.
Example: 144
packageWeightIntegerThe package’s weight in grams. 0 or -1 if not available.
Example: 1500 (= 1.5 kg)
packageQuantityIntegerQuantity of items in the package. 0 or -1 if not available.
Example: 4
itemHeightIntegerThe item’s height in millimeters. 0 or -1 if not available.
Example: 144
itemLengthIntegerThe item’s length in millimeters. 0 or -1 if not available.
Example: 144
itemWidthIntegerThe item’s width in millimeters. 0 or -1 if not available.
Example: 144
itemWeightIntegerThe item’s weight in grams. 0 or -1 if not available.
Example: 1500 (= 1.5 kg)

Availability & buy box eligibility#

FieldTypeDescription
availabilityAmazonIntegerAvailability of the sold by Amazon offer. Possible values:
  • -1: no Amazon offer exists
  • 0: Amazon offer is in stock and shippable
  • 1: Amazon offer is currently not in stock, but will be in the future (pre-order)
  • 2: Amazon offer availability is “unknown”
  • 3: Amazon offer is currently not in stock, but will be in the future (back-order)
  • 4: Amazon offer shipping is delayed – see availabilityAmazonDelay for more details
availabilityAmazonDelayInteger arrayIf availabilityAmazon has the value 4, this field will provide the delay interval in hours. null if no data is available.
Examples: [ 24, 48 ] (= Available to ship in 1-2 days.), [ 0, 288 ] (= Usually dispatched within 12 days.), [ 732, 1464 ] (= In stock. Usually ships within 1 to 2 months.)
buyBoxEligibleOfferCountsInteger arrayIf available, an array of integers, each entry indicating the total number of offers eligible for the Buy Box across specified offer conditions and fulfillment channels. This array contains eight elements, indexed as follows:
  • 0: New FBA
  • 1: New FBM
  • 2: Used FBA
  • 3: Used FBM
  • 4: Collectible FBA
  • 5: Collectible FBM
  • 6: Refurbished FBA
  • 7: Refurbished FBM
competitivePriceThresholdIntegerA price based on competitive prices from other retailers (excluding other Amazon sellers). The offer may be ineligible for the Buy Box if the seller’s price + shipping is greater than this competitive price. undefined if it has no value.
suggestedLowerPriceIntegerThe suggested lower price of the item, including shipping. The suggested lower price is based on a range of factors, including historical selling prices, recent Buy Box-eligible prices, and input from customers. undefined if it has no value.
ebayListingIdsLong arrayContains the lowest priced matching eBay listing Ids. Always contains two entries, the first one is the listing id of the lowest priced listing in new condition, the second in used condition. null or 0 if not available.
Example: [ 273344490183, 0 ]

Flags & miscellaneous#

FieldTypeDescription
isAdultProductBooleanIndicates if the item is considered to be for adults only.
Example: true
isHeatSensitiveBooleanIndicates if the item is heat sensitive (e.g. meltable).
Example: true
isMerchOnDemandBooleanTrue if this product is an Amazon Merch on Demand product. undefined otherwise.
Example: true
isHaulBooleanTrue if this product is an Amazon Haul product. undefined otherwise. Only basic product information is available for Amazon Haul products.
Example: true
ingredientsStringThe ingredient list of the product. undefined if not available.
Example: Purified Carbonated Water, Natural Flavors
launchpadBooleanIndicates if the item is listed in the launchpad category. If so, the salesRankReference will not be available.
Example: true
audienceRatingStringAudience rating. The rating suggests the age for which the media is appropriate.
Example: PG-13 (Parents Strongly Cautioned)
urlSlugStringThe product listing URL slug.
Example: Ring-Video-Doorbell-Satin-Nickel-2020-Release
returnRateIntegerThis field provides information about the customer return rate for a product. The possible values are:
  • null: The return rate is either unavailable or considered average.
  • 1: The product has a low return rate.
  • 2: The product has a high return rate.
isEligibleForSuperSaverShippingBooleanWhether or not the product’s buy box is eligible for free shipping.
Example: true

FBA & referral fees#

FieldTypeDescription
fbaFeesObjectObject containing the FBA pick & pack fee for this product and the timestamp of the last update. The fee corresponds to the FBA pick & pack charge for this product, based on its dimensions and weight, assuming a selling price equal to the current offer price. If there is no current offer, the last known offer price is assumed; if neither is available, a default selling price of 100.00 is used. Values are integers in the marketplace’s smallest currency unit (for example euro cents or yen). null if not available.
variableClosingFeeIntegerThe variable closing fee for this product. Values are integers in the marketplace’s smallest currency unit (for example euro cents or yen). undefined if not applicable.
Example: 81
referralFeePercentageDoubleThe Amazon referral fee percentage at the assumed selling price. The selling price is taken from the current offer price, otherwise the last known offer price, otherwise a default of 100.00. null if not available.
Example: 12

Example fbaFees object:

"fbaFees": {
   "lastUpdate": keepaTime,
   "pickAndPackFee": 259
}

Coupons, promotions & unit count#

FieldTypeDescription
couponInteger arrayContains coupon details for the buy box offer of the product, if available. null if not available. An integer array with two entries:
  1. The first entry is the discount for a one-time coupon (single purchase).
  2. The second entry is a Subscribe & Save first-order coupon (S&S initial order only). The Subscribe & Save value represents a clickable one-time coupon that applies only to the first Subscribe & Save order. It does not represent an ongoing Subscribe & Save discount for subsequent deliveries.
Entry value is either 0 if no coupon of that type is offered, positive for an absolute discount, or negative for a percentage discount. The coupon field is always accessible, but only updated if the offers parameter was used in the Product Request.
Examples: [ 200, -15 ] – both coupon types available: $2 one time discount or 15% for subscribe and save. [ -7, 0 ] – only the one time coupon type is available, offering a 7% discount.
couponHistoryInteger arrayContains historical values for the coupon field, if available. null if not available. We started tracking coupon history on June 15th 2024.
Format: [ keepaTime, one-time coupon, subscribe and save coupon, keepaTime, … ]
Example: [2711319, 200, -15, …]
promotionsObject arrayContains an array of active promotions. Not all product promotions can be provided. Requires the offers parameter to be updated. A promotion object consists of:
  • type – String – The type of promotion: SNS
  • amount – Integer – The discounted price
  • discountPercent – Integer – The discount percent
  • snsBulkDiscountPercent – Integer – The bulk discount percent for repeat SNS deliveries. undefined if no data available, 0 if no bulk discount provided.
unitCountObjectObject that contains unit count data. undefined if it has no value.
  • unitValue – Double – The field returns the specified weight or volume to facilitate per unit pricing. For products measured by volume, weight, or linear dimensions, it provides the total net quantity shipped for a single ASIN (e.g., a 12-pack of 6 fl oz bottles of water = 72 fl oz, or a single 2-liter bottle = 2 liters). For products sold as individual units, it returns the total number of units (e.g., a pack of 12 pens = 12).
  • unitType – String – In cases where the product being sold is measured in units that are relevant to the customer’s purchasing decision, the unitType specifies the type of measurement used. For example, a bottle of soda may be measured in fluid ounces, while a box of screws is measured by the number of screws in the box.
  • eachUnitCount – Double – The number of units in an ‘each’; where an ‘each’ refers to the smallest component of a product with a UPC, and a unit defines how this ‘each’ is measured.

Sales rank, sold & review statistics#

FieldTypeDescription
statsStatistics ObjectOptional field, set only if the stats parameter was used in the Product Request. Contains a Statistics Object.
salesRankReferenceLongThe category node id of the main sales rank. -1 if not available, -2 if listed in launchpad.
Example: 281052 – http://www.amazon.com/b/?node=281052
salesRankReferenceHistoryLong arrayA long array containing the historical category node id(s) of the main sales rank. This data, if available, can be used to match historical sales ranks provided in the csv field to their reference category. The category id has the value -1 if not available or -2 if listed in launchpad.
Format: [ keepaTime, category node id, … ]
Example: [2711319, 281052, …]
salesRanksObjectAn object containing sales rank histories. Each key represents the categoryId of the rank, with the history in the corresponding value.
lastSoldUpdateIntegerStates the last time we have updated the monthlySold field, in Keepa Time minutes. undefined if the monthlySold has no value.
Example: 2711319
monthlySoldIntegerHow often this product was bought in the past month. This field represents the bought past month metric found on Amazon search result pages. It is not an estimate. Amazon only provides the data in bracketed ranges such as “10+” or “100+”, rather than as exact figures. undefined if it has no value. Most ASINs do not have this value set. The value is variation specific.
Example: 1000 – the ASIN was bought at least 1000 times in the past month.
monthlySoldHistoryInteger arrayContains historical values of the monthlySold field. undefined if it has no value.
Format: [ keepaTime, monthlySold, … ]
reviewsReview ObjectThis object contains variation specific review and rating counts histories as well as a last update timestamp. null if not available. It is not possible to force an update to the reviews object data. For non-variation specific ratings and review data access the csv field. Accessible only if the rating parameter was used in the Product Request. The ratingCount history has not been updated since April 9th 2025 as that data point was removed by Amazon.

Example salesRanks object:

"salesRanks": {
   "281052": [ keepaTime, salesRank, ... ],
   "123112042": [ keepaTime, salesRank, ... ]
}

Format of the reviews object:

"reviews": {
   "lastUpdate": keepaTime,
   "ratingCount": [ keepaTime, ratingCount, ... ],
   "reviewCount": [ keepaTime, reviewCount, ... ]
}

Offers & buy box#

FieldTypeDescription
offersMarketplace Offer Object arrayOptional field, set only if the offers parameter was used in the Product Request. Contains Marketplace Offer Objects.
liveOffersOrderInteger arrayOptional field, set only if the offers parameter was used in the Product Request. Contains an ordered array of index positions in the offers array for all Marketplace Offer Objects retrieved for this call. If no offers were found, the field will be null. The sequence of integers reflects the ordering of the offers on the Amazon offer page (for all conditions). Since the offers field contains historical offers as well as current offers, one can use this array to look up all offers that are currently listed on Amazon in the correct order.
Note: If there are identical offers (same seller, same condition, same shipping type, and same condition text) we only track the lowest-priced one. If this happens, there will be duplicate offer indexes in the liveOffersOrder field at the position of the omitted duplicate (higher-priced) offer – all pointing to the lowest-priced offer’s index.
Example: [ 3, 5, 2, 18, 15 ] – the offer with the array index 3 of the offers field is currently the first one listed on the offer listings page on Amazon, followed by the offer with the index 5, and so on.
Example with duplicates: [ 3, 5, 2, 18, 5 ] – the second offer, as listed on Amazon, is a lower-priced duplicate of the 5th offer on Amazon. The lower-priced one is included in the offers field at index 5.
buyBoxSellerIdHistoryString arrayOptional field, set only if the offers or buybox parameter was used in the Product Request. Contains a history of sellerIds that held the Buy Box in the format: Keepa time minutes, sellerId, […]. If no seller qualified for the Buy Box, the sellerId “-1” is used (suppressed Buy Box). If we were unable to identify the seller or if the product was out of stock (no seller), the sellerId is “-2”.
Example: ["2860926", "ATVPDKIKX0DER", …]
buyBoxUsedHistoryString arrayOptional field, set only if the offers or buybox parameter was used in the Product Request. A history of used buy box winners, containing the sellerIds, offer sub-condition, and FBA status in the format: Keepa time minutes, seller id, condition, isFBA, […]. If no seller qualified for the used buy box, the sellerId “” (empty String) is used.
  • condition can have the following values: “2” – Used - Like New, “3” – Used - Very Good, “4” – Used - Good, “5” – Used - Acceptable
  • isFBA is either “1” – offer is FBA or “0” – offer is merchant fulfilled.
Example: ["2860926", "ATVPDKIKX0DER", "4", "1", …]
isRedirectASINBooleanValid only if the offers parameter was used in the Product Request. Boolean indicating if the ASIN will be redirected to another one on Amazon (example: the ASIN has the color black variation, which is not available and is redirected on Amazon to the color red).
isSNSBooleanBoolean indicating if the product’s Buy Box is available for subscribe and save.
offersSuccessfulBooleanValid only if the offers parameter was used in the Product Request. Boolean indicating if the system was able to retrieve fresh offer information. A product with no marketplace offers at all still counts as a successful retrieval and returns true — there is simply no offer page to fetch (compare COUNT_* csv entries).

The csv History Array#

The csv field is a two-dimensional history array containing the product’s historical data. Access the first dimension index using the following enum/constants:

IndexHistory typeEntry formatDescription
0AMAZONtime, valueAmazon price history
1NEWtime, valueMarketplace New price history
2USEDtime, valueMarketplace Used price history
3SALEStime, valueSales Rank history (not every product has a Sales Rank; variation items usually don’t have individual sales ranks)
4LISTPRICEtime, valueList Price (MSRP) history
5COLLECTIBLEtime, valueCollectible price history
6REFURBISHEDtime, valueRefurbished price history
7NEW_FBM_SHIPPINGtime, price, shipping3rd party (not including Amazon) New price history including shipping costs, only fulfilled by merchant (FBM). Requires the offers parameter.
8LIGHTNING_DEALtime, valueLightning Deal price history (special handling required – see the Lightning Deals note below)
9WAREHOUSEtime, valueAmazon Warehouse price history. Requires the offers parameter.
10NEW_FBAtime, valuePrice history of the lowest 3rd party (not including Amazon/Warehouse) New offer that is fulfilled by Amazon. Requires the offers parameter.
11COUNT_NEWtime, valueNew offer count history (= count of marketplace merchants selling the product as new)
12COUNT_USEDtime, valueUsed offer count history
13COUNT_REFURBISHEDtime, valueRefurbished offer count history
14COUNT_COLLECTIBLEtime, valueCollectible offer count history
15EXTRA_INFO_UPDATEStime, valueHistory of past updates to all offers-parameter related data: offers, aPlus, videos, isSNS, isRedirectASIN, and the csv types NEW_FBM_SHIPPING, WAREHOUSE, NEW_FBA, RATING, COUNT_REVIEWS, USED_*_SHIPPING, COLLECTIBLE_*_SHIPPING, BUY_BOX_USED_SHIPPING, PRIME_EXCL and REFURBISHED_SHIPPING. As updates to those fields are infrequent, it is essential to know when our system updated them. The absolute value indicates the number of offers fetched at the given time. If the value is positive, it means all available offers were fetched. If negative, there were more offers than fetched.
16RATINGtime, valueThe product’s rating history (an integer from 0 to 50, e.g., 45 = 4.5 stars). Requires the offers parameter.
17COUNT_REVIEWStime, valueThe product’s rating count history. Requires the offers parameter.
18BUY_BOX_SHIPPINGtime, price, shippingThe New buy box price history, including shipping costs. If no offer qualified for the buy box (or if the buy box is a used offer), the price has the value -1. Requires the offers parameter.
19USED_NEW_SHIPPINGtime, price, shipping“Used - Like New” price history, including shipping costs. Requires the offers parameter.
20USED_VERY_GOOD_SHIPPINGtime, price, shipping“Used - Very Good” price history, including shipping costs. Requires the offers parameter.
21USED_GOOD_SHIPPINGtime, price, shipping“Used - Good” price history, including shipping costs. Requires the offers parameter.
22USED_ACCEPTABLE_SHIPPINGtime, price, shipping“Used - Acceptable” price history, including shipping costs. Requires the offers parameter.
23COLLECTIBLE_NEW_SHIPPINGtime, price, shipping“Collectible - Like New” price history, including shipping costs. Requires the offers parameter.
24COLLECTIBLE_VERY_GOOD_SHIPPINGtime, price, shipping“Collectible - Very Good” price history, including shipping costs. Requires the offers parameter.
25COLLECTIBLE_GOOD_SHIPPINGtime, price, shipping“Collectible - Good” price history, including shipping costs. Requires the offers parameter.
26COLLECTIBLE_ACCEPTABLE_SHIPPINGtime, price, shipping“Collectible - Acceptable” price history, including shipping costs. Requires the offers parameter.
27REFURBISHED_SHIPPINGtime, price, shippingRefurbished price history, including shipping costs. Requires the offers parameter.
28EBAY_NEW_SHIPPINGtime, price, shippingPrice history of the lowest new price on the respective eBay locale, including shipping costs
29EBAY_USED_SHIPPINGtime, price, shippingPrice history of the lowest used price on the respective eBay locale, including shipping costs
30TRADE_INtime, valueTrade-in price history (Amazon trade-in is not available for every locale)
31RENTtime, valueNot provided. This index is retired and is never populated; it is listed only so the positions of the following types are unambiguous.
32BUY_BOX_USED_SHIPPINGtime, price, shippingThe Used buy box price history (any sub-condition), including shipping costs. If no offer qualified for the used buy box, the price has the value -1. Requires the offers parameter.
33PRIME_EXCLtime, valuePrice history of the lowest Prime exclusive New offer. Requires the offers parameter.
34COUNT_NEW_FBAtime, valueNew FBA offer count history (includes Amazon offer). Added March 2026.
35COUNT_NEW_FBMtime, valueNew FBM offer count history. Added March 2026.

Important csv information#

  • We only append a new entry to the history array if the price/value changed, not every time we update the product.
  • Shipping and handling costs are not included unless specified.
  • For NEW, USED, COLLECTIBLE, and REFURBISHED time series, the pricing definition is as follows: entries dated before Feb 23, 2026, reflect the lowest listing price. Entries dated on or after Feb 23, 2026, reflect the lowest landing price (listing price + shipping).
  • Amazon is considered to be part of the marketplace. If Amazon has the overall lowest new price, the marketplace new price in the corresponding time interval is identical to the Amazon price.
  • The following types are only set if the offers parameter was used in the Product Request: NEW_FBM_SHIPPING, WAREHOUSE, NEW_FBA, RATING, COUNT_REVIEWS, BUY_BOX_SHIPPING, USED_*_SHIPPING, COLLECTIBLE_*_SHIPPING, REFURBISHED_SHIPPING, BUY_BOX_USED_SHIPPING, and PRIME_EXCL.

Note – Lightning Deals: If a deal is currently active, the last entry of the history array will contain the end date (a future date) with a price of -1. When accessing the current deal price, handle this special case. Alternatively, use the current price array of the stats object to access the current price. If no deal is currently active but the last entry has the value -1 with a date in the future, it means an upcoming deal is announced (scheduled to start at that date).

Note – eBay prices: eBay listings often have incorrect information and/or product codes, causing item mismatches and incorrect pricing information. Use eBay price history information with caution and do not rely on their accuracy. We update eBay prices at different intervals than Amazon prices.

Important: We can add new data types to the csv field from time to time without announcement. Do not expect a fixed size of the first array dimension in your implementation.

Decoding the Price History#

The second dimension of the csv array contains the price/value history in the format Keepa time minutes, value, […] or, if the type includes *_SHIPPING costs, the format: Keepa time minutes, price, shipping costs, […]. If history is unavailable, it is null.

  • The price is an integer of the respective Amazon locale’s smallest currency unit (e.g., euro cents or yen).
  • If no offer was available in the given interval (e.g., out of stock), the price has the value -1.
  • Timestamps are Keepa Time minutes – see the conversion below.

A minimal Python decoder:

KEEPA_TIME_OFFSET = 21564000  # minutes; Keepa Time -> Unix epoch offset

def keepa_time_to_unix_ms(keepa_minutes):
    return (keepa_minutes + KEEPA_TIME_OFFSET) * 60000

def decode_csv(history, with_shipping=False):
    """Decode one csv history array into a list of data points.

    Plain types:      [keepaTime, value, keepaTime, value, ...]
    *_SHIPPING types: [keepaTime, price, shipping, keepaTime, price, shipping, ...]
    A value/price of -1 means no offer was available in that interval.
    """
    if history is None:
        return []  # no history available for this type
    step = 3 if with_shipping else 2
    points = []
    for i in range(0, len(history), step):
        point = {
            "timestamp_ms": keepa_time_to_unix_ms(history[i]),
            "value": history[i + 1],
        }
        if with_shipping:
            point["shipping"] = history[i + 2]
        points.append(point)
    return points

# csv index constants (see table above)
AMAZON, NEW, USED, SALES, BUY_BOX_SHIPPING = 0, 1, 2, 3, 18

product = response["products"][0]
amazon_history = decode_csv(product["csv"][AMAZON])
buy_box_history = decode_csv(product["csv"][BUY_BOX_SHIPPING], with_shipping=True)

Keepa Time Minutes#

Keepa Time minutes is the time format used for all timestamps of the product object. To convert a Keepa Time minutes value to an uncompressed Unix epoch time:

  • For milliseconds: (keepaTime + 21564000) * 60000
  • For seconds: (keepaTime + 21564000) * 60
from datetime import datetime, timezone

def parse_keepa_time(keepa_minutes):
    """Convert Keepa Time minutes to a timezone-aware datetime (UTC)."""
    return datetime.fromtimestamp((keepa_minutes + 21564000) * 60, tz=timezone.utc)

Example#

Product objects are returned in the products array of a Product Request response. A basic request:

KeepaAPI api = new KeepaAPI("YOUR_API_KEY");
Request r = Request.getProductRequest(AmazonLocale.US, null, null, "B00M0QVG3W");
api.sendRequest(r)
    .done(result -> {
        Product product = result.products[0];
        // newest value of the AMAZON price history
        int price = ProductAnalyzer.getLast(
                product.csv[Product.CsvType.AMAZON.index], Product.CsvType.AMAZON);
        System.out.println(product.title + ": " + price);
    })
    .fail(failure -> System.out.println(failure));
<?php
use Keepa\KeepaAPI;
use Keepa\API\Request;
use Keepa\API\ResponseStatus;
use Keepa\objects\AmazonLocale;

$api = new KeepaAPI("YOUR_API_KEY");
$response = $api->sendRequestWithRetry(Request::getProductRequest(AmazonLocale::US, null, null, null, 1, true, ['B00M0QVG3W']));
if ($response->status == ResponseStatus::OK) {
    $product = $response->products[0];
    $amazonHistory = $product->csv[0]; // AMAZON price history
    echo $product->title . ": " . end($amazonHistory);
}
import requests

params = {"key": "YOUR_API_KEY", "domain": 1, "asin": "B00M0QVG3W"}
r = requests.get("https://api.keepa.com/product", params=params)
product = r.json()["products"][0]

print(product["title"])
amazon = product["csv"][0]  # AMAZON price history: [keepaTime, price, ...]
print("Latest Amazon price (cents):", amazon[-1])  # -1 = out of stock
const res = await fetch("https://api.keepa.com/product?key=YOUR_API_KEY&domain=1&asin=B00M0QVG3W");
const data = await res.json();
const product = data.products[0];

console.log(product.title);
const amazon = product.csv[0]; // AMAZON price history: [keepaTime, price, ...]
console.log("Latest Amazon price (cents):", amazon[amazon.length - 1]);
curl -s "https://api.keepa.com/product?key=YOUR_API_KEY&domain=1&asin=B00M0QVG3W"

Example product object#

{
  "productType": 0,
  "asin": "B00M0QVG3W",
  "domainId": 1,
  "title": "Canon PowerShot SX400 Digital Camera with 30x Optical Zoom (Black)",
  "trackingSince": 2711319,
  "listedSince": 2705011,
  "lastUpdate": 7664520,
  "lastRatingUpdate": 7664201,
  "lastPriceChange": 7664520,
  "lastEbayUpdate": 7660034,
  "images": [
    {
      "l": "81bRlmLRyPL.jpg",
      "lH": 1500,
      "lW": 1500,
      "m": "g1dlEmb2mq3.jpg",
      "mH": 500,
      "mW": 500,
      "variant": "MAIN"
    }
  ],
  "rootCategory": 502394,
  "categories": [281052],
  "categoryTree": [
    { "catId": 502394, "name": "Camera & Photo" },
    { "catId": 281052, "name": "Point-and-Shoot Digital Cameras" }
  ],
  "parentAsin": null,
  "frequentlyBoughtTogether": ["B00T85PMWY"],
  "eanList": ["8714574623290"],
  "upcList": ["013803243871"],
  "manufacturer": "Canon",
  "brand": "Canon",
  "websiteDisplayGroup": "photo_display_on_website",
  "websiteDisplayGroupName": "photo",
  "salesRankDisplayGroup": "photo_display_on_website",
  "type": "CAMERA_DIGITAL",
  "partNumber": "9542B001",
  "binding": "Electronics",
  "model": "SX400",
  "color": "Black",
  "numberOfItems": 1,
  "releaseDate": 20140929,
  "features": [
    "30x Optical Zoom with 24mm Wide-Angle lens",
    "16.0 Megapixel CCD sensor with DIGIC 4+ Image Processor"
  ],
  "packageHeight": 91,
  "packageLength": 175,
  "packageWidth": 137,
  "packageWeight": 540,
  "packageQuantity": 1,
  "itemHeight": 69,
  "itemLength": 104,
  "itemWidth": 80,
  "itemWeight": 313,
  "availabilityAmazon": 0,
  "buyBoxEligibleOfferCounts": [3, 5, 1, 2, 0, 0, 0, 0],
  "competitivePriceThreshold": 18990,
  "ebayListingIds": [273344490183, 0],
  "isAdultProduct": false,
  "isHeatSensitive": false,
  "launchpad": false,
  "isSNS": false,
  "urlSlug": "Canon-PowerShot-SX400-Digital-Optical",
  "isEligibleForSuperSaverShipping": true,
  "fbaFees": {
    "lastUpdate": 7664213,
    "pickAndPackFee": 384
  },
  "referralFeePercentage": 8,
  "coupon": [200, 0],
  "salesRankReference": 281052,
  "salesRanks": {
    "281052": [7650101, 4823, 7660440, 5102, 7664520, 4991]
  },
  "lastSoldUpdate": 7664100,
  "monthlySold": 100,
  "monthlySoldHistory": [7620400, 50, 7650300, 100],
  "csv": [
    [7650101, 19900, 7655230, 18999, 7664520, 19499],
    [7650101, 18990, 7660440, 18500],
    [7650101, 14999, 7663880, 15250],
    [7650101, 4823, 7660440, 5102, 7664520, 4991],
    [7650101, 24999],
    null,
    null,
    [7650101, 18990, 450, 7660440, 18500, 499]
  ]
}

Object shortened for readability; illustrative values only. Real product objects contain many more fields, and the csv array covers the history types listed above (null where no history exists) – here it is truncated after index 7 (NEW_FBM_SHIPPING, which uses the time, price, shipping triplet format). Prices are integers in the locale’s smallest currency unit; timestamps are Keepa Time minutes.