Haraj Classifieds Scraper
Pricing
from $0.56 / 1,000 results
Haraj Classifieds Scraper
Saudi classifieds from Haraj: cars, real estate, jobs and general goods by category tag, city or seller. Every row is fully detailed — description, all images, precise location, and category-specific fields (price, car/property/job info).
Pricing
from $0.56 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrapes classified ads from Haraj, Saudi Arabia's largest general classifieds marketplace: cars, real estate, jobs and general goods. Search by category tag, region or seller — or fetch specific ads directly by id.
What you get
One POST row per ad, plus a SEARCH_SUMMARY row per query.
Every row is already complete — unlike almost every other actor in this portfolio, there is no separate "detail pass": the same fields (full description, every image, exact location, category-specific data) come back whether the ad was found via a tag/city search or fetched directly by id.
id · title · bodyTEXT (full ad text) · imagesList (every photo,
full-resolution CDN URLs) · city / geoCity / geoNeighborhood ·
tags (the ad's full category/brand/model breadcrumb) · authorUsername
· postDateISO / updateDateISO · URL · carInfo (model year,
mileage, fuel, gear, condition — for vehicle ads) · realEstateInfo ·
jobsInfo · price (often null — see below) · commentCount ·
isPromoted · and more, passed through verbatim from the site's own API.
Input
{"queries": [{ "tag": "تويوتا", "city": "الرياض" }],"postIds": [186515219],"maxItemsPerQuery": 40}
Each queries entry needs at least one of tag, city, cities, or
authorUsername. postIds fetches specific ads directly, no search
needed.
tag is Haraj's own taxonomy, free text, no enum
Examples: حراج السيارات (cars), تويوتا (Toyota), كامري (Camry),
شقق للايجار (apartments for rent). There are many thousands of tags
(every brand/model/year combination, every product category) and no
lookup endpoint to enumerate them from — but an unrecognised tag is
honest: it returns a genuinely empty result, never a silent fallback
to the whole site.
city filters by REGION, not the city you'd expect — read this first
This is the one thing on this target that will surprise you. Despite the
name, city/cities filter by Saudi Arabia's 13 administrative
regions, not individual municipalities:
city: "جدة" (Jeddah, a city) -> 0 resultscity: "مكة المكرمة" (Makkah, the region Jeddah belongs to) -> real results
All 13 verified working region names: الرياض (Riyadh), مكة المكرمة
(Makkah), المدينة المنورة (Madinah), الشرقية (Eastern Province),
القصيم (Qassim), عسير (Asir), تبوك (Tabuk), حائل (Hail), جازان
(Jazan), نجران (Najran), الباحة (Al-Bahah), الجوف (Al-Jouf),
الحدود الشمالية (Northern Borders). The output row's own city field
carries the same region-level granularity; geoCity and
geoNeighborhood on each row are the actual municipality/district — real
per-ad location detail, just not something you can filter a query by.
Known limits
1. price is often null even on formally-licensed listings. One
REGA-registered real-estate agency's listing had price: null and
realEstateInfo: null while spelling out the exact rent price and every
property attribute as plain text inside bodyTEXT (a standard Saudi
real-estate disclosure block). Normal seller behaviour on this
marketplace, not missing data — the actual figures are usually in
bodyTEXT when the structured fields are empty.
2. No total-count field exists anywhere in this API. SEARCH_SUMMARY
reports postsReturned and hasMoreAvailable (a genuine boolean the API
provides), never a totalMatches — there is nothing upstream to report
one from.
3. limit silently clamps above 60. Values 1-60 behave linearly;
61 and above drop to a fixed ~20 items with no error. This actor never
sends more than 60, so it isn't something you'll hit through normal use.
Anti-bot posture
None observed. 8/8 TLS profiles clean on the GraphQL endpoint; ten rapid sequential requests all answered 200 with no rate-limit response. The actor still ships a rotating profile pool, a retry ladder and challenge-marker detection, and paces requests by default.
Policy
haraj.com.sa/robots.txt (User-agent: *) names no
ClaudeBot/anthropic-ai/GPTBot group and does not disallow anything
this actor touches. graphql.haraj.com.sa (the API host) serves no
robots.txt at all.