TL;DR
- E-commerce product scraping is difficult because price, stock, variants, shipping, and availability can change independently.
- Prefer public structured endpoints or embedded product data when available; use rendered pages only for fields that require it.
- Store observations with URL, SKU, currency, timestamp, region, and content hash so price changes are distinguishable from parser errors.
- Nstdata Crawl fits bounded catalog collection and rendered product pages; your application still owns schema validation and business rules.
Why product pages need more than a title and price
Use Nstdata Crawl when catalog discovery and rendered artifacts are the repeated burden.
An e-commerce page can expose a list price, sale price, variant price, seller price, or a region-specific price. Stock can be represented as quantity, a boolean, a shipping promise, or a disabled purchase control. A scraper that stores only visible text creates ambiguous records. Start with Nstdata Crawl when catalog scope, rendering, and repeatable artifacts are part of the problem.
The Schema.org Product vocabulary gives a useful common language for offers, SKU, brand, and availability. It is a schema aid, not proof that a target page’s data is complete or current.
Define a product observation schema
| Field | Why it matters |
|---|---|
| Canonical URL | Stable page identity |
| SKU or GTIN | Variant and product matching |
| Name and brand | Human-readable identity |
| Price, currency, and type | Avoids mixing sale and list prices |
| Availability | Separates in-stock from preorder or unknown |
| Region and timestamp | Prices and stock are contextual |
| Content hash | Detects unchanged pages and parser drift |
Extract structured data before rendered text
Check JSON-LD and other permitted structured fields first. If fields are absent or incomplete, render the page and apply selectors to stable semantic attributes, not generated CSS class names. A simple validation function should reject missing currency, impossible negative prices, and records with no product identity.
def accept_product(row: dict) -> bool: required = ("url", "name", "currency", "observed_at") if any(not row.get
This is illustrative validation, not a universal product parser. Keep rejected records and reasons so a markup change does not look like a market change.
Use Nstdata Crawl for catalog collection
Nstdata Crawl can provide bounded discovery, JavaScript rendering, and Markdown, HTML, JSON, link, or PDF artifacts depending on the current configuration. The Crawl pricing page explains the separate URL and proxy cost dimensions. For pipeline design, see the ETL glossary and RAG guide.
Do not collect private customer data, checkout information, or credentials. Respect site terms, robots preferences, rate limits, and applicable law. Product monitoring should use public or explicitly authorized pages.
For related implementation context, see the MCP web-access guide, RAG knowledge-base guide, web-crawling glossary, and ETL glossary.
RFC 9309 and W3C Data on the Web Best Practices provide useful collection and quality context.
Turn product pages into timestamped observationsUse Nstdata Crawl for bounded catalog collection while your application owns field validation. Explore Nstdata Crawl |
Markdown
JSON
{
"title": "...", "url": "..." } Screenshot
|
Conclusion
Treat each product record as a timestamped observation, not a permanent truth. Validate identity, price semantics, currency, availability, and region; then compare accepted records across runs. Use Nstdata Crawl when rendered catalog collection and bounded discovery are the recurring burden.
FAQ
Q: Is JSON-LD enough for product scraping?
It is a useful first source, but validate completeness against the page and your required product fields.
Q: How should I track price changes?
Store currency, region, observation time, canonical URL, SKU, and parser version with each observation.
Q: Can I scrape checkout or customer data?
Only with explicit authorization and a lawful data process; this guide focuses on public product information.
Q: Why did stock change without a page change?
Availability can be served from an API or vary by region, session, or fulfillment location even when the HTML template is unchanged.





