Amazon Kindle Scraper avatar

Amazon Kindle Scraper

Pricing

from $2.99 / 1,000 kindle books

Go to Apify Store
Amazon Kindle Scraper

Amazon Kindle Scraper

Scrapes Amazon Kindle ebook listings including pricing, ratings, and metadata.

Pricing

from $2.99 / 1,000 kindle books

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

This existing local implementation is the maintained equivalent for the assigned Kindle Book Deals Scraper row (CSV rank 1569, store slug lucascode/kindle-book-deals-scraper). It was reused rather than creating a duplicate folder.

Search the public Amazon Kindle Store and return structured ebook listing records. The actor uses serialized direct HTTPS requests and a linkedom HTML parser. It does not use a browser, stealth fingerprinting, retries, proxies, CAPTCHA solving, sign-in, or paywalled content. If Amazon returns an access challenge or denial, the run stops and reports status and counts in OUTPUT_SUMMARY; failure details stay in the run logs.

Extracted fields

Listing records can include:

  • ASIN, title, name, author, authors, and public author URLs
  • Rating, rating-count text, normalized review count, publication date, price, price text, and currency
  • Kindle Edition format, seller, availability, Kindle Unlimited eligibility, sponsored status, badges, and series text
  • Stable product/canonical URLs, request/search-page URL, cover image URLs, and bounded source-card text
  • Optional public detail metadata: description, publisher, publication date, language, file size, print length, ISBN-13, bestseller ranks, and additional image URLs
  • Common evidence fields: direct transport, HTTP status, access/fetch status, field coverage, data-quality counts, and stable record IDs

The dataset contains source-backed Kindle listing rows only. Empty results complete with status: SUCCEEDED and dataStatus: NO_RESULTS; access blocks and genuine request or extraction failures produce status: FAILED and dataStatus: FAILED when no source rows were saved. Failure details stay in the run logs; no diagnostic dataset rows are written.

Input

FieldTypeDefaultDescription
keywordstring, required—Book title, author, topic, or genre
countrystringusAmazon marketplace: us, uk/gb, de, fr, it, in, ca, au, es, jp, or br
localestringmarketplace localeBCP 47 locale used for Accept-Language
maxItemsinteger40Maximum listing records, from 1 to 500
startPageinteger11-based search page to start from
maxPagesinteger0Page limit; 0 derives a bounded limit from maxItems
sortBystringrelevancerelevance, rating, newest, priceLowToHigh, priceHighToLow, or bestsellers
kindleUnlimitedOnlybooleanfalseKeep only cards marked Kindle Unlimited
minRatingnumber—Optional local minimum rating from 0 to 5
dateRangestring—last30Days, last90Days, or comingSoon
minPrice / maxPricenumber—Optional displayed-price bounds
excludeSponsoredbooleanfalseDrop cards visibly marked Sponsored
includeDetailsbooleanfalseFetch public product pages for detail metadata
maxDetailItemsinteger10Maximum detail-page attempts
includeMediabooleantrueInclude cover and responsive image URLs
dedupeBystringasinasin, title, or none
requestDelayMsinteger1000Delay between serialized page and detail requests
requestTimeoutSecsinteger180Maximum direct HTTP request time

The legacy pageRenderWaitMs, maxConcurrency, maxRequestRetries, navigationTimeoutSecs, and proxyConfiguration fields remain accepted for input compatibility, but are ignored by the direct-only runner. The older Amazon sort aliases are also accepted.

Example input

{
"keyword": "science fiction",
"country": "us",
"maxItems": 20,
"sortBy": "rating",
"kindleUnlimitedOnly": false,
"includeDetails": true,
"maxDetailItems": 5,
"requestDelayMs": 1200
}

Output

Listing records include position, asin, title, author, rating, reviewCount, price, currency, format, isKindleUnlimited, sourceUrl, imageUrl, keyword, country, and scrapedAt, plus optional public detail fields. Source labels, transport/access flags, fieldCoverage, dataQuality, and run metadata are removed from rows. See .actor/dataset_schema.json for the full contract.

Every run writes OUTPUT_SUMMARY to the declared key-value store. It includes request/page counts, candidate/filter/duplicate counts, detail outcomes, data availability, proxy usage (false), status, and failure counts. successfulItems counts source-backed dataset rows; diagnosticCount counts operational issues and never dataset rows; invalidSourceRecordCount counts candidates rejected before a Dataset write for missing listing identity fields.

Access and reliability

Amazon may vary markup, prices, availability, localization, and anti-bot behavior. Public search and detail pages may return a CAPTCHA, Akamai interstitial (bm-verify/_sec/verify), or other access challenge; the actor reports that state instead of attempting to bypass it. Requests are serialized and use a transparent actor user agent. A blocked request is fail-closed and is not retried.

Local development

Create local input at storage/key_value_stores/default/INPUT.json, then run:

apify run

Useful checks:

apify validate-schema
npm test
node validate-datasets.js

Local run output stays under storage/ and is not uploaded automatically.

Run summaries include the required status, runStatus, and dataStatus fields. status and runStatus are SUCCEEDED when source-backed rows were saved or a run completed cleanly with no matches; they are FAILED only when a real failure occurs before any rows are saved. dataStatus is COMPLETE, PARTIAL, NO_RESULTS, or FAILED. Failure details stay in the run logs; key-value summaries retain counts only.