Bahrain Product Facts
Under maintenancePricing
from $3.00 / 1,000 successfully parsed product rows
Bahrain Product Facts
Under maintenanceIndependent public product facts, exact BHD prices and source availability. Bounded homepage 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
23 days ago
Last modified
Categories
Security
Limited permissionsShare
Independent extractor of factual product data from public Cazasouq Bahrain pages. Returns SKU, model, title, BHD price, original displayed price, explicit source availability and stock quantity when numeric. No logo, affiliation, copied descriptions, reviews, images or inferred variants.
Input and coverage
Supply productUrls, or enable discoverProducts to discover product cards on the public homepage. Omitted/empty URLs never inject an example. See smoke/direct.json and smoke/discovery.json for minimal one-product runs.
productUrls: up to 100 clean HTTPS www.cazasouq.com product URLs ending in a numeric identifier. Queries, fragments, PHP routes and other hosts are rejected.discoverProducts: default false. One homepage only; no category, pagination or full-catalog claim. Discovery currently exposes a bounded subset of homepage products, which can change.maxProducts: 1–100, default 5, after SKU deduplication.maxRequests: 2–150, default 15; includes robots, redirects, homepage and products. Exhaustion fails closed.
The source sitemap index was reachable on 7 October 2026, but its product shard twice returned HTTP 200 containing a 504 error page. This release intentionally does not fetch or advertise sitemap discovery.
Data meaning
BHD uses three decimals and integer fils: source 245.50 becomes price 245.500, priceFils 245500. Decimal arithmetic rejects sub-fils precision. sourcePrice retains the original numeric string. originalPrice is the struck-through displayed source price, not a verified MSRP or price history. Prices and availability are snapshots, not checkout quotes.
availability preserves the source Schema.org value; inStock is true only for explicit InStock, false for explicit OutOfStock/SoldOut/Discontinued, and null otherwise. stockText preserves the visible source field. stockQuantity is populated only for a fully numeric source stock field, not inferred from in-stock status. Missing optional facts are null and listed in missingFields. Brand is not inferred from the title. Language variants deduplicate by SKU; no translation or variant completeness is claimed.
The source emits duplicate Product JSON-LD blocks. Their SKU/model/name and offer URL/currency/price/availability must agree. The parser checks canonical URL, visible SKU/model and current price where present. Source date, descriptions, image sizes and seller metadata are not extracted. Unsupported offer lists or ambiguous products fail closed.
Access and restrictions
Robots is fetched and checked before public content. Sequential requests are paced at least one second, increased for robots crawl-delay/request-rate. HTTP 401/403/429, active challenge, unsafe redirect, missing identity, request or byte budget exhaustion fail the run without partial dataset publication. No login, proxy rotation, CAPTCHA solving, browser bypass, internal APIs, query filters, sorting or pagination. Every request is bounded to 30 seconds and 12 MB (robots 1 MB); redirects are limited and revalidated.
Cazasouq is identified solely as the factual source. Terms: https://www.cazasouq.com/الأحكام-والشروط . Their terms protect original content and require written permission for trademark use in products/services. This package uses generic independent branding, no logo or copied long-form content and no affiliation claim. Research found no explicit blanket scraping prohibition; that is a limited screen, not legal advice or a permission grant.
Reproduction and validation
Python 3.12. Install requirements.txt, then python -m src.main under Apify/local Apify storage. Tests: install jsonschema==4.26.0 as a test-only dependency and run python -m unittest discover -s tests -v. Official Apify input/dataset metaschemas are bundled for self-contained metadata tests. Runtime pins: Apify 4.0.2, Crawlee 1.10.4, Pydantic 2.13.5.
Two genuine product HTML responses and homepage links were sanitized to factual extraction markup; provenance is in tests/fixtures/provenance.json. Out-of-stock, unknown stock, JSON-LD graph, conflicting data, access denials and precision cases are synthetic regression tests. They do not imply live coverage of those conditions. No full-catalog or all-language coverage is claimed. sample-output.json contains fixture-derived rows, not a hosted production run. Hosted build and smoke verification are separate deployment steps.
Local direct live smoke on 7 October 2026 stopped at robots DNS resolution in the restricted executor. No source HTTP denial occurred and no alternative route was attempted. Fixture and mocked transport checks passed; hosted verification remains required. Rebuild upload map/manifest with python package.py.
Pricing
The price is $3 per 1,000 product rows saved to the default dataset, plus $0.00005 per run start, with usage included; check the Store pricing panel for the price applying to your run.