OpenSooq Scraper | 20 Markets Sale & Rent
Pricing
from $2.50 / 1,000 results
OpenSooq Scraper | 20 Markets Sale & Rent
Scrape OpenSooq property listings across 20 MENA markets for sale or rent. Extract prices, beds, area, location & photos. OpenSooq API alternative.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape OpenSooq sale and rent property listings across 20 MENA & North Africa markets — then download structured real estate data as Excel, CSV, or JSON.
This Actor is a practical OpenSooq API alternative for market research, investor screening, rental comps, and lead lists. Choose countries such as Jordan, UAE, Egypt, or Saudi Arabia, pick Buy or Rent, filter by apartments, villas, land, offices, and more — then get listing rows with prices, beds, baths, area, location, attributes, and photos when present on the detail page.
- Pull homes for sale and apartments for rent from OpenSooq country sites (JO, AE, EG, SA, IQ, KW, LB, and 13 more)
- Enrich search results with detail-page fields (description, categories, geo, lister type, media)
- Filter by property category (apartments, villas, land, commercial, offices, …) — or paste known search / detail URLs
- Run multi-market or all 20 markets with fair-split
maxItems - Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or MCP
- Pay per event — Actor start + each Dataset listing; no subscription
What does the OpenSooq Scraper do?
It turns an OpenSooq property search into a clean Apify Dataset of listings across twenty country sites.
Under the hood, the Actor:
- Builds the OpenSooq search URL for your market, channel, location, and property type
- Fetches pages with browser-like TLS (
curl_cffiChrome impersonation) — bare HTTP clients get 403 from AWS ELB - Collects listing cards from SRP DOM (
a.postListItemData) plus JSON-LD when present - Optionally opens detail pages and merges JSON-LD (
Residence/Apartment) with attribute labels - Writes normalized records you can download or push into automations
Apify RESIDENTIAL proxy is recommended on cloud. National URLs (/en/property/{slug}) work without a city slug.
What data can you extract from OpenSooq?
| Data point | Buy | Rent |
|---|---|---|
| Title & listing URL | ✅ | ✅ |
| List price or rent + currency | ✅ | ✅ |
| Beds / baths / size (m²) | ✅ | ✅ |
| Property type & category | ✅ | ✅ |
| Market + currency | ✅ | ✅ |
| City / neighborhood / address | ✅ | ✅ |
| GPS coordinates (when shown) | ✅ | ✅ |
| Lister type / payment method | ✅ | ✅ |
| Furnished / floor / rental period | — | ✅ |
| Photo gallery | ✅ | ✅ |
| Description (detail page) | ✅ | ✅ |
Every Dataset row includes scrapedAt and source = opensooq. An OUTPUT / RUN_SUMMARY record in the key-value store reports counts, search URLs, and warnings.
Why scrape OpenSooq property listings?
Market research and comps
Build sale and rent comps for Amman, Dubai, Cairo, Riyadh, Baghdad, and other OpenSooq markets without copy-pasting from the site.
Multi-country coverage
OpenSooq spans 20 country subdomains. Use market: "all" or a markets list to fair-split collection across countries in one run.
Category-level inventory
Target apartments, villas, land, commercial units, offices, warehouses, hotels, and more — or expand every Buy/Rent leaf category with expandAllCategories.
Automations and AI agents
Schedule runs and send Datasets to Sheets, Slack, CRM, Make, n8n, Zapier, or an AI agent via Apify MCP / API.
How to scrape OpenSooq (no code required)
- Click Try for free
- Choose a market (e.g.
JO,AE,EG) orall - Choose a channel (Buy or Rent)
- Optionally set property type, location city slug, max listings, and whether to open detail pages
- Keep Apify RESIDENTIAL proxy enabled for cloud runs
- Click Start — open the Dataset tab when the run finishes
Start with maxItems: 5–10 and scrapeDetails: false to verify, then scale up.
Markets covered
| Code | Site | Currency |
|---|---|---|
AE | ae.opensooq.com | AED |
BH | bh.opensooq.com | BHD |
DZ | dz.opensooq.com | DZD |
EG | eg.opensooq.com | EGP |
IQ | iq.opensooq.com | IQD |
JO | jo.opensooq.com | JOD |
KW | kw.opensooq.com | KWD |
LB | lb.opensooq.com | LBP |
LY | ly.opensooq.com | LYD |
MA | ma.opensooq.com | MAD |
MR | mr.opensooq.com | MRU |
OM | om.opensooq.com | OMR |
PS | ps.opensooq.com | JOD |
QA | qa.opensooq.com | QAR |
SA | sa.opensooq.com | SAR |
SD | sd.opensooq.com | SDG |
SY | sy.opensooq.com | SYP |
TN | tn.opensooq.com | TND |
TR | tr.opensooq.com | TRY |
YE | ye.opensooq.com | YER |
Default search is national: /{locale}/property/{slug}. Set location (e.g. amman, dubai) for city-scoped SRP URLs.
Property categories
| Key | Buy slug | Rent slug |
|---|---|---|
all | property-for-sale | property-for-rent |
apartment | apartments-for-sale | apartments-for-rent |
villa | villas-palaces-for-sale | villas-palaces-for-rent |
land | lands-for-sale | lands-for-rent |
commercial / office / shop / … | matching *-for-sale | matching *-for-rent |
hotel-apartment | — | hotel-apartments-and-suites |
shared-rooms | — | shared-rooms-for-rent |
Use expandAllCategories: true with propertyType: "all" to fan out every leaf category supported for the channel. maxItems is fair-split across markets × property types.
Pricing — how much does it cost to scrape OpenSooq?
Pay per event. No subscription.
| Event | Price | When charged |
|---|---|---|
apify-actor-start (Actor Start) | $0.005 | When a normal run starts (scaled by allocated memory GB; min 1 event) |
apify-default-dataset-item (result) | $2.50 / 1,000 ($0.0025 each) | Each listing written to the default Dataset |
User pays platform usage costs: Yes — compute, proxy, and other platform usage are billed to the user in addition to event charges.
Free Apify plan limits (set by this Actor's developer)
| Limit | Free Apify plan | Paid Apify plan |
|---|---|---|
| Runs of this Actor | 10 runs total | Unlimited |
| Results per run | Up to 1,000 | Up to schema max (2,000) |
When the run cap is hit, the run finishes with a clear status message — not an Apify platform error. These limits are set by the Actor developer, not Apify.
Example product charges (events only):
| Scenario | Approx. event charge |
|---|---|
| Canary: 10 listings | $0.005 + 10 × $0.0025 = $0.030 |
| City scan: 100 listings | $0.005 + $0.25 = $0.255 |
| 1,000 listings | $0.005 + $2.50 = $2.505 |
Platform usage (proxy + memory × duration) is separate. Default memory is 1024 MB (≈ 1× Actor Start event).
Input
| Field | Description |
|---|---|
market / markets | One of 20 country codes, or all |
channel | BUY (for sale) or RENT (for rent) |
propertyType / propertyTypes | Category keys (apartment, land, …) or OpenSooq slugs |
expandAllCategories | Expand all into every channel-supported leaf category |
location | Optional city slug; empty → national /property/ URL |
locale | en / ar (default en) |
maxItems / maxPages | Caps (1–2000 / 1–100); ≈30 listings per SRP page |
maxSearchUrls | Cap on markets × property-types URL fan-out (default 60) |
scrapeDetails | Enrich each card from the listing detail page |
failOnPartial | Fail the run when SRP/LDP failure rate is high |
unlockerApiKey | Optional ScraperAPI key (or SCRAPERAPI_KEY secret) for unlocker fallback |
startUrls | Optional SRP or LDP URLs (overrides market/channel/type) |
proxyConfiguration | Apify RESIDENTIAL when the worker does not supply its own proxy |
workerBaseUrl | Advanced: per-run worker origin override (default: Actor env WORKER_BASE_URL) |
Open the Input tab in Console for the full form and tooltips.
Worker host migrations: update Actor env WORKER_BASE_URL (and WORKER_AUTH if the API key changed) — no Actor code change required.
Output example
You can download the Dataset as JSON, CSV, Excel, or HTML.
{"id": "284124770","listingId": "284124770","url": "https://jo.opensooq.com/en/search/284124770","source": "opensooq","sourceLayer": "srp+ldp","market": "JO","channel": "BUY","category": "land","title": "Residential land for sale in Amman","price": "109,000 JOD","priceAmount": 109000,"currency": "JOD","propertyType": "Lands for Sale","size": 975,"sizeUnit": "m2","city": "Amman","neighborhood": "Airport Road - Manaseer Gs","latitude": 31.844116,"longitude": 35.855858,"scrapedAt": "2026-07-19T12:00:00+00:00"}
Is it legal to scrape OpenSooq?
Our scrapers are ethical and do not extract private user data such as emails unlocked behind CTAs, full phone numbers from “show phone” flows, or chat messages. They only extract what is publicly shown on listing pages (including masked phone snippets when visible on cards). Personal data may still appear in public listing text; personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason. If you are unsure, consult your lawyers. Always respect OpenSooq’s Terms of Use and robots rules for automated access.
This Actor does not click Call, Chat, or other lead CTAs to reveal hidden contact details.
FAQ
Can I scrape OpenSooq Jordan apartments for sale?
Yes. Set market to JO, channel to BUY, and propertyType to apartment. Leave location empty for national results, or set amman for Amman-only.
Can I scrape OpenSooq UAE, Egypt, or Saudi Arabia?
Yes. Use market: "AE", "EG", or "SA". You can also pass markets: ["AE", "EG", "SA"] or market: "all" for all twenty countries.
Does this work as an OpenSooq API?
There is no official public OpenSooq listings API for this use case. This Actor is a practical OpenSooq API alternative that returns structured Dataset rows you can call via the Apify API, schedules, or integrations.
Why not plain requests or curl?
OpenSooq’s edge returns 403 Forbidden (awselb/2.0) for bare Python-requests / curl clients. This Actor uses Chrome TLS impersonation so browser-like requests receive SSR HTML and RSC detail pages.
What about Live View / Standby?
Standby mode exposes operational endpoints (/, /health, /input-example, /openapi.json) documented in the Standby tab OpenAPI schema. Run sale/rent collection through a normal Actor run — Standby is for readiness and input guidance, not full scrape traffic.
What if curl_cffi is blocked?
Enable Apify RESIDENTIAL proxy first (or rely on the worker’s own PROXY_URL). Optionally set Actor secret SCRAPERAPI_KEY (or input unlockerApiKey) so blocked HTML pages can retry via ScraperAPI unlocker. Full browser (CloakBrowser) is not in the default image yet.
Why did my free-plan run stop after 10 runs?
This Actor allows 10 runs and up to 1,000 listings per run for free Apify plan users. That policy is set by the Actor developer (not Apify). Upgrade to a paid Apify plan for unlimited runs. The run ends with status message FREE_TIER_LIMIT — it is not a platform crash.
Where can I get help?
Open an Issue on the Actor page in Apify Console with the Run ID, input JSON, and a short description of the failure. Include whether 403, empty SRP, or missing detail fields appeared in the log.
Tips for better OpenSooq scraping
- Start small (
maxItems: 5,scrapeDetails: false) to validate a market before large runs - Prefer national URLs (empty
location) for multi-market coverage - Use specific
propertyTypevalues when you need a category;alluses the root property-for-sale/rent slug - Enable
expandAllCategoriesonly when you intentionally want one fair-split quota per leaf category - Raise concurrency carefully — OpenSooq may throttle aggressive detail fetching