Keepa API


Keepa tracks the price history of billions of amazon products which makes it a great tool for a wide range of use cases:
  • Track best seller lists
  • Get the prices of competitive products or sellers
  • View products by seller (eg your competitor)
  • View inventory levels
  • View price increase alerts
  • Graph price changes over time
  • Look at couponing strategies other products use

Just want to sync Keepa Data?

If you don’t want to call the API directly and just want the data sync’d to your data platform of choice SyncWith does this for 100,000s of users and businesses:
notion image

Accessing the Keepa API

Keepa API Tips

  • There are various endpoints available, they all use the same base url and use a HTTPS GET command
  • All requests take your API key using the query parameter key, eg key=<yourAccessKey>
  • All responses are in JSON which can be flattened using SyncWith’s JSON to table transformer
  • domain is a common parameter to most endpoints, it allows you to specify the goeographical location of the amazon store you wish to see, for example
    • 1 - .com
    • 2 -
    • 3 - de
    • 4 - fr
    • 5 -
    • 6 - ca
    • 8 - it
    • 9 - es
    • 10 - in
    • 11 -
  • Keepa does not uses standard timestamps instead they use keepa time minutes which is a form of compressed unix epoch time
  • If you’re moving data into a spreadsheet you probably want the datetime that is recognized by excel or google sheets

/product endpoint

We’ll do a deep dive on the /product endpoint. Which allows us to get a product by Amazon ASIN for a given Amazon Domain. It’s aways handy to look at the official description of the Keepa product object via the official Keepa API specs as it goes into a lot more detail then the endpoint docs.
As an example let’s say we want to look at Bounty Quick-Size Paper Towels
notion image
We need to get the ASIN which you can find under the Product details section:
notion image
With the ASIN and the domain (in this case we can get Keep to send us back the product object.
  • Send a GET request to
  • Include the following query parameters:
    • key = your Keepa API key
    • asin = B07MHJFRBJ
    • domain = 1
  • Pulling all that together you get the url (replace MYKEY with your API key)

Optional Query Parameters

  • stats Will compute a bunch of standard statistics against the historical data in products.csv - it’s not creating any new information but it is useful in that it will add data to the json response with the statistics already pre calculated. You pass the stats query parameter a time range to calculate the stats over eg:
    • stats=90 - last 90 days
    • stats=&stats=2021-11-15,2021-12-21 - eg 2021 christmas rush
  • history Will determine whether any historic data is included. If you set history=0 then product.csv will not be returned
  • days lets you limit the historic data to the last x days, eg days=180 would limit the historical data to the last 180 days
  • offers specifies how many offers you want returned. Valid values are 20-100. Will return all valid marketplace offers. Returns a Marketplace offer object. Eg offers=40
  • only-live-offers will ensure that any offers returned are only currently valid ones vs historical ones. Eg only-live-offers=1

Keepa Product Object JSON Response

Keepa will send back the product object as JSON, and it will be giant, if you put the request into chrome and looked at the response it would look like a giant wall of numbers and text:
notion image
So we need to do something useful to transform the JSON.
The JSON has all the historical data in the CSV object, for example price data:
"csv": [ [ 5862668, // <- this is a date in Keep Time Minutes 2065, // <- this is the price for that date 5867406, 1990, 5867588, 2065, 5867934, 1990, 5868648, -1, 5868672, 1990, 5876576, 2065, 5876988, 1990, 5882292, 2065, 5882732, 1990, 5886004, 2065, 5886722, 1990 ]
The JSON also includes product information like:
"imagesCSV": "51TN4JR0z2L.jpg,51+lIkeMhmL.jpg,51U0b+OKMhS.jpg,51Yg-FoDpbL.jpg,41URNLKx5fL.jpg,51uNsd+E-vL.jpg,51zOXI6wq1L.jpg,41N6-ho-kyL.jpg,51fHNV9MdyL.jpg", "manufacturer": "Procter & Gamble (P&G-2)", "title": "Bounty Quick-Size Paper Towels, White, 8 Family Rolls = 20 Regular Rolls", "lastUpdate": 5995600, "lastPriceChange": 5995584, "rootCategory": 3760901, "productType": 0, "parentAsin": "B0B1WW4W39", "variationCSV": "B0B1WWH9NB,B0B1WY2J57,B07MHJFRBJ", "asin": "B07MHJFRBJ", "domainId": 1, "type": "PAPER_TOWEL", "hasReviews": true, "trackingSince": 4210216, "brand": "Bounty", "productGroup": "Drugstore", "partNumber": "SG_B07MHJFRBJ_US", "model": "SG_B07MHJFRBJ_US", "color": "white", "size": "8 Count (Pack of 1)", "edition": null, "format": null, "packageHeight": 294, "packageLength": 610, "packageWidth": 318, "packageWeight": 3062, "packageQuantity": 10, "isAdultProduct": false, "isEligibleForTradeIn": false, "isEligibleForSuperSaverShipping": true, "offers": null, "buyBoxSellerIdHistory": null, "isRedirectASIN": false, "isSNS": true, "author": null, "binding": "Health and Beauty", "numberOfItems": 8, "numberOfPages": -1, "publicationDate": 20181201, "releaseDate": 20190210, "languages": null, "lastRatingUpdate": 5995608, "ebayListingIds": [ 12044049899, 0 ], "lastEbayUpdate": 5870904, "eanList": [ "0037000750260", "0037000325840" ], "upcList": [ "037000750260", "037000325840" ], "liveOffersOrder": null, "frequentlyBoughtTogether": [ "B0798DVT69" ], "features": [ "Pack contains 8 Family Rolls of Bounty Quick Size paper towels, equal to 20 Regular Rolls", "This pack contains 40 more sheets per pack which means 5 extra days' worth of paper vs. Bounty Select-A-Size 8 Huge Roll Estimated based on manufacturer data. Actual usage may vary by household", "Bounty, the Quicker Picker Upper.Do not flush", "2X More Absorbent vs. leading ordinary brand", "Bounty's shortest sheets are now even more absorbent for a versatile clean (versus previous product)" ], "description": "Don't let spills and messes get in your way. Lock in confidence with Bounty, the Quicker Picker Upper. This pack contains Bounty Quick Size paper towels. Bounty's shortest sheets are now even more absorbent* for a versatile clean (*versus previous product). Shorter sheets also allow you to choose how much you use! vs. Select-A-Size.", "promotions": [ { "type": "SNS", "eligibilityRequirementDescription": null, "benefitDescription": null, "promotionId": null, "amount": 2194, "discountPercent": 5 } ], "newPriceIsMAP": false, "coupon": [ 0, -5 ], "availabilityAmazon": 0, "listedSince": 4163040, "fbaFees": { "storageFee": -1, "storageFeeTax": -1, "pickAndPackFee": 1936, "pickAndPackFeeTax": -1 }

Getting the JSON Response into a useful format for Google Sheets

Syncwith allows you to pull data via the Keepa API directly into google sheets and keep the data synced it also allows you to visually transform with out needing to author JMES paths or write any code.

Don’t Have SyncWith?

  • SyncWith is a Google Sheets Add On
  • SyncWith allows you to move data from any API into Google Sheets
  • Learn more about why Marketers love SyncWith
  • Check out our Google Workspace Listing and see why we’re the highest rated API add on with over 100,000 installs. Install today and get your data into Sheets in minutes.

Having Trouble Getting Your Keep Data into Google Sheets

Paying customers can contact us at support and we’ll help you custom craft your connections and get your data syncing to Google Sheets.

Other Popular Keepa Endpoints

/seller endpoint

  • <APIKey> - Your private Keepa API key.
  • <domainId>Integer value for the Amazon domain you want
  • <sellerId>The seller id of the merchant. Can be comma seperated for multiple merchants. you want to request.
    • For batch requests a comma separated list of sellerIds (up to 100).
    • You can get the seller ID from the Sellers URL, eg:
    • notion image
      Our URL for P&K Trading Co. seller page is: