Deraah Saudi Fragrance avatar

Deraah Saudi Fragrance

Pricing

from $3.00 / 1,000 successfully parsed product rows

Go to Apify Store
Deraah Saudi Fragrance

Deraah Saudi Fragrance

Deraah Saudi perfume prices in SAR, stock, fragrance specifications and bundle contents from explicit URLs or bounded initial-category discovery.

Pricing

from $3.00 / 1,000 successfully parsed product rows

Rating

0.0

(0)

Developer

Vixendata

Vixendata

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Collect Deraah Saudi perfume prices, stock, fragrance specifications, and bundle contents as structured product rows. Useful for assortment checks, promotion snapshots, and fragrance research in SAR.

What you get

  • Product title, SKU/MPN, brand, canonical detail URL and image URLs
  • Current SAR offer price and explicitly crossed-out regular price
  • Source availability and nullable stock flag
  • Source description, specifications, concentration, size text and scent-note sentences when present
  • Bundle flag and separately listed bundle contents
  • Source locale, source-text language classification and collection timestamp

Missing data stays null or empty. Source text is preserved, not translated. The language field is a conservative script heuristic: Arabic-only ar, Latin-only en for this English storefront, mixed mixed, otherwise und; it is not general-purpose language detection. No reviews, ratings, sales estimates or customer information are manufactured. No per-milliliter price is calculated. A package price is the entire package's price, never an individual bottle price.

The genuine fixture examples are Al-Sarim new spray 100 ml at 96 SAR (crossed-out 240 SAR), and Al-Fakhr Package at 288 SAR (crossed-out 824 SAR). The latter separately lists three fragrances. Prices are historical examples from 2026-10-07, not promises of current pricing.

Inputs

Supply clean https://www.deraahstore.com/en_sa/.../SKU.html product URLs in productUrls, or set discoverFromCategory to true. Empty or omitted product URLs never inject example products. Without URLs or discovery, input fails clearly.

maxProducts defaults to 10, range 1–100. Explicit URLs have priority; discovered URLs follow. requestDelaySeconds defaults to 2, range 2–30, with longer robots delays respected.

Discovery reads only https://www.deraahstore.com/en_sa/perfumes/all-perfumes. The observed initial page supplied 12 product links. This is not all 348 displayed products: no load-more endpoint, API or pagination is used, and no complete-catalog coverage is claimed.

Ready-to-run tiny inputs are INPUT.direct-smoke.json and INPUT.category-smoke.json, each capped at one detail page. The direct run needs two requests (robots and detail), category run three (robots, category and detail), absent redirects.

Output and limitations

The default dataset contains product rows; RUN_SUMMARY in the default key-value store records detail attempts, discovery coverage and errors. Individual ordinary HTTP/parse failures are reported and remaining URLs continue. Access blocks stop the whole host immediately. A zero-row run fails instead of appearing successful. sample-output.json contains parser output from sanitized genuine source fixtures, not a hosted run result.

JSON-LD matching the fetched product URL is authoritative for current price and stock. Regular price is taken only from unambiguous crossed-out price elements; the specification panel's reference “Price” is not treated as the current offer. Bundle detection is based on explicit package/set wording or a fragrance-count label; source contents remain separate strings. promotionText is currently null because no stable independent promotion-label selector is asserted.

Responsible access

Only the exact HTTPS host and English Saudi product/category paths are accepted. Account, checkout, cart, search and wishlist paths are forbidden. Every run checks robots first; unavailable or invalid robots fails closed. Redirects stay in the same permitted URL class and recheck robots. No proxies, login, credentials, hidden APIs, CAPTCHA solving or bypass.

Concurrency is one. HTTP 401/403/429 or challenge pages stop without retries. Bounds: three redirect attempts per logical request, at most 3 * (maxProducts + 2) HTTP requests, four MB per response, 50 MB total response bytes, 30-second HTTP timeout, up to 100 discovered URLs and 100 input URLs.

Validation

Pinned Python runtime dependencies: Apify 4.0.2, Crawlee 1.10.4 and Pydantic 2.13.5. Fresh isolated installation and offline fixture/security/schema tests are recorded in test-results.txt and runtime-freeze.txt. Official Apify input and dataset metaschemas were validated. Fixtures retain only public product JSON-LD, specifications and crossed-out-price elements; provenance hashes are in evidence/fixture-provenance.json.

A bounded direct HTTP live check from this build environment stopped on DNS resolution before any response; see evidence/live-check.json. The upstream researcher separately obtained HTTP 200 category and both detail fixtures. Hosted runtime success remains to be established by the deployment owner. This package makes no claims of a completed hosted run.

For local tests, install requirements.txt plus requirements-test.txt, then run python -m unittest discover -s tests -v. Schema tests use the included official metaschema snapshots. Run the Actor with python -m src and normal Apify input storage.