SACO Saudi Products
Pricing
from $3.00 / 1,000 successfully parsed product rows
SACO Saudi Products
Extract public SACO Saudi product prices in SAR, availability, brands and identifiers from product URLs or bounded sitemap discovery.
Pricing
from $3.00 / 1,000 successfully parsed product rows
Rating
0.0
(0)
Developer
Vixendata
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Extract public SACO Saudi product prices in SAR, stock status, brands, images and SKU identifiers. Useful for small catalog checks, price comparisons and inventory snapshots. Supply English product URLs or opt in to bounded discovery through SACO's English sitemap.
Quick start
Direct product input:
{"productUrls":["https://www.saco.sa/en/product/tactix-270003-3-in-1-block-plane-2-inch-p-000000000000000515"],"maxProducts":1}
Discovery input (works when the Console omits an empty productUrls array):
{"discoverFromSitemaps":true,"maxProducts":1,"maxSitemaps":1}
Export the default dataset as JSON or CSV. SKU and productId are strings: preserve their leading zeros when importing into spreadsheets. ProductId is the public product identifier encoded in the URL, which must match the JSON-LD SKU; it is not an internal database ID.
Output
Each row contains source, url, productId, sku, title, description, brand, currency, price, regularPrice, salePrice, availability, inStock, images, attributes, rating, ratingCount, reviewCount and collectedAt (UTC).
The current price comes from the matching public Product JSON-LD offer and must be SAR. regularPrice and salePrice are null because the verified source does not distinguish these. Unknown ratings/counts remain null. Attributes are populated only from explicit Product properties. No reviews are invented or separately fetched. Missing products or mismatching identity/currency produce errors rather than guessed rows. Empty runs fail clearly.
The verified example is Tactix 270003 3-in-1 Block Plane 2-inch, SKU 000000000000000515, SAR 29.95, InStock. This is a dated observation, not a price guarantee. Prices and online availability may differ from checkout or a particular store.
Inputs and limits
- productUrls: up to 100 clean HTTPS www.saco.sa/en/product/...-p-SKU URLs; no query strings or external hosts.
- discoverFromSitemaps: false by default. When true, fill remaining product capacity from sitemap_en.xml. Explicit URLs come first. No example URL is ever injected.
- maxProducts: 1–100, default 10; bounds product attempts.
- maxSitemaps: exactly 1; the verified English sitemap is a flat file.
- requestDelaySeconds: 1–30, default 2; robots crawl-delay/request-rate can increase it.
The large sitemap is parsed incrementally in 64 KiB chunks. Discovery closes the HTTP response immediately when the product limit is reached; it does not load the full catalog. Sitemap decompressed responses are capped at 24 MB, other responses at 8 MB. Each fetch permits at most three requests including redirects; each run is capped at 3 × (1 + maxProducts + maxSitemaps) HTTP requests. Only exact allowed hosts and paths can be followed, including redirects. Image URLs are returned as data and never fetched.
Source access and limitations
The Actor fetches robots.txt before products or sitemap, honors the rules for its descriptive SacoProductActor/1.0 user agent, and stops on unavailable/invalid robots, explicit disallow, HTTP 401/403/429 or detected challenges. No login, proxy, CAPTCHA solving, search route, account route or /api/ endpoint is used. There are no retries after blocking signals. A malformed sitemap or network failure aborts rather than falling back to another access route. Product pages that fail ordinary extraction are counted in RUN_SUMMARY. Partial rows can be returned only for ordinary per-product errors, never by continuing past a blocking signal.
Supports the observed English product-page JSON-LD format. Arabic pages, category pagination, store-level inventory, historical prices, authenticated prices and reviews are outside this version. Site markup changes may require maintenance. Use modest limits and ensure your use of retrieved data meets applicable obligations.
Validation
Python 3.12; exact requirements pin Apify 4.0.2, Crawlee 1.10.4 and Pydantic 2.13.5.
python -m venv .venv.venv/bin/pip install -r requirements.txt jsonschema.venv/bin/python -m unittest discover -s tests -v
Tests cover genuine sanitized source data, SAR/identity validation, missing prices, leading-zero preservation, input defaults/limits, robots behavior, redirect restrictions, request caps, blocking signals, streaming discovery and official Apify input/dataset metaschemas. The checked-in fixtures retain only public product JSON-LD, robots text and a short genuine sitemap excerpt. Metaschema snapshots were obtained from the official Apify schemas; attribution is included alongside them.
Source HTTP 200 evidence was collected on 2026-10-07. The local shell's direct network integration attempt was blocked by unavailable DNS; live-check.json distinguishes source evidence from recorded-response replay. Hosted execution must be verified separately before claiming hosted success. No deployment, publication or schedules are performed by this package.