Pricing
Pay per usage
E-commerce Price & Stock Monitor
Monitors product prices, stock levels, availability and ratings from e-commerce sites. Auto-detects listing vs product pages, handles pagination, and outputs clean JSON/CSV. Schedule for daily/weekly price tracking. Retries and error logging built in.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Monitor product price, stock and availability automatically from any category/listing page or direct product URL on books.toscrape.com β a public e-commerce sandbox site. Give it a category page and it auto-paginates through every product; give it direct product URLs and it scrapes them straight away. Clean, structured data lands in your dataset in seconds, ready to download as JSON, CSV or Excel, or to schedule on the Apify platform for recurring price/stock tracking.
This Actor targets the books.toscrape.com sandbox as a portfolio demonstration of a production-style monitoring pattern. The same architecture (content-based page detection, auto-pagination, per-item error isolation, scheduled re-runs) is what a real price/stock monitor for a live store would use.
Why use this Actor?
- Price monitoring β track competitor or supplier prices over time by scheduling daily/hourly runs and diffing dataset exports.
- Stock alerting β know the moment a product goes out of stock, or drops below a threshold, by feeding the
stockCountfield into your own alerting. - Catalog audits β pull a clean, structured snapshot of an entire category (title, price, rating, category) without writing any scraping code.
- No browser overhead β built on
CheerioCrawler(HTTP + HTML parsing only), so it's fast and cheap to run on the Apify platform compared to a headless-browser actor.
How to use
- Open the Actor and go to the Input tab.
- Add one or more Start URLs β mix and match freely:
- A category/listing URL (e.g. the homepage, or a category like
/catalogue/category/books/mystery_3/index.html) β the Actor follows pagination automatically and visits every product on it. - A direct product URL β the Actor scrapes it immediately, no listing page needed.
- A category/listing URL (e.g. the homepage, or a category like
- Set Max products to scrape (
maxItems) to cap how many products get scraped in this run (default100). - Click Start. Results stream into the Dataset tab as they're scraped.
- To monitor a category over time, save the run as a Task and add a Schedule (Apify Console β Schedules β Create new β pick your Task β set a cron interval, e.g. every 6 hours).
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array of { url } | yes | [{ "url": "https://books.toscrape.com/" }] | Category/listing and/or direct product URLs. |
maxItems | integer | no | 100 | Stops the run once this many products have been scraped. |
Example input:
{"startUrls":[{"url":"https://books.toscrape.com/catalogue/category/books/mystery_3/index.html"},{"url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"}],"maxItems":50}
Output
Each scraped product is one row in the Dataset, and the full set is also written as a CSV file to the Key-value store under the key OUTPUT_CSV (visible in the Storage tab once a run finishes). You can also export the dataset directly from the Console in JSON, CSV, Excel, XML or RSS.
Example dataset item:
{"title":"A Light in the Attic","price":51.77,"currency":"GBP","availability":"In stock (22 available)","stockCount":22,"rating":3,"category":"Poetry","url":"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html","scrapedAt":"2026-06-27T08:26:11.488Z"}
Data fields
| Field | Type | Description |
|---|---|---|
title | string | Product title. |
price | number | Current price, numeric only (no currency symbol). |
currency | string | 3-letter currency code, derived from the price symbol (Β£βGBP, $βUSD, β¬βEUR). |
availability | string | Raw availability text as shown on the page. |
stockCount | number | null | Units in stock, parsed out of availability when present. |
rating | number | null | 1β5 star rating. |
category | string | null | Product category from the page breadcrumb. |
url | string | Final product page URL. |
scrapedAt | string | ISO 8601 timestamp of when the item was scraped. |
Pricing
This Actor uses CheerioCrawler (plain HTTP requests, no browser), so it's cheap to run: roughly 100 products take ~25 seconds of compute. On the Apify Free plan, that's a negligible fraction of the monthly compute-unit allowance β you can comfortably run scheduled monitoring on hundreds of products per day for free.
Tips
- Point
startUrlsat a narrow category instead of the homepage to monitor a focused product set with fewer requests. - Lower
maxItemsfor quick test runs; raise it (or omit a low value) for full catalog snapshots. - Combine with Apify's Schedule feature for recurring monitoring, and the Webhooks feature to get notified when a run finishes.
FAQ & limitations
- Is this legal? books.toscrape.com is a public sandbox built specifically for scraping practice β there's no Terms-of-Service concern here. For any real store, always check
robots.txtand the site's ToS before scraping. - What if a page fails to load or doesn't look like a product/listing page? The Actor logs it and continues; a count and list of failed URLs is printed in the run log at the end. No partial/incorrect records are pushed for a failed page.
- Does it support free-text search? Not currently β books.toscrape.com's search is JavaScript-driven and doesn't expose a crawlable results page. Category/listing and direct product URLs are fully supported.
- Found a bug or want this adapted to a different e-commerce site? Open an issue on the Actor's Issues tab β custom adaptations are available on request.
Local development
npminstallapify run # uses storage/key_value_stores/default/INPUT.json as inputnpmtest# unit tests for the pure parsers/CSV builder + a live crawl smoke test
To deploy:
apify loginapify push
