OpenSooq Scraper - Sale & Rent Property Listings
Pricing
from $2.20 / 1,000 results
OpenSooq Scraper - Sale & Rent Property Listings
Extract OpenSooq property listings across 20 country markets, including prices, bedrooms, locations and photos. Choose sale or rent and pay per delivered listing row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
OpenSooq Scraper
Extract OpenSooq sale and rent listings from 20 country markets as property rows you can export and compare.
- Collect prices, bedrooms, bathrooms, floor area, locations and photos when available.
- Search by country, city and property category, or supply OpenSooq URLs.
- Include descriptions and advertiser information with optional detail collection.
- Download rows or use them in scheduled reports and AI tools.
- Pay $3.00 per 1,000 rows on the Free plan, plus a small start fee.
What does OpenSooq Scraper do?
OpenSooq Scraper collects property listings from OpenSooq country sites. Each row represents one listing, whether it is a home for sale, a rental, land or commercial property. Multiple countries and property categories can be included in one run.
- Property search: choose
market,marketsorlocation, withchannelset toBUYorRENT. - Supplied URLs: use
startUrlsfor property search pages or individual listing pages. - Detail collection:
scrapeDetailsdefaults totrue, adding available descriptions, attributes and advertiser information to the same row, not a separately billed row. - Listing status:
postStatusselectsactiveorsoldlistings. Sold searches cannot be combined withlocation.
Configured markets are United Arab Emirates (AE), Bahrain (BH), Algeria (DZ), Egypt (EG), Iraq (IQ), Jordan (JO), Kuwait (KW), Lebanon (LB), Libya (LY), Morocco (MA), Mauritania (MR), Oman (OM), Palestine (PS), Qatar (QA), Saudi Arabia (SA), Sudan (SD), Syria (SY), Tunisia (TN), Turkey (TR) and Yemen (YE). Availability and field coverage vary by market; this list is not a guarantee that every search returns rows.
What data can you extract from OpenSooq?
Listing rows
| Field | Description | Example |
|---|---|---|
listingId | OpenSooq listing identifier | 100000001 |
rowType | Kind of row | listing |
url | Listing page | https://jo.opensooq.com/en/search/100000001 |
title | Advertised property title | Apartment for sale in Amman |
market | Country code | JO |
channel | Sale or rent | BUY |
price | Displayed price | 85,000 JOD |
priceAmount | Numeric price | 85000 |
currency | Price currency | JOD |
numBedrooms | Bedroom count or label | 3 |
numBathrooms | Bathroom count or label | 2 |
size | Property area | 150 |
sizeUnit | Area unit | m2 |
category | Listing's own property category | apartment |
requestedPropertyType | Category requested in the input | apartment |
city | City name | Amman |
neighborhood | Area within the city, if shown | null |
address | Area-level location object | {"locality":"Amman","country":"Jordan"} |
geo | Coordinates when available | {"lat":null,"lng":null} |
furnished | Furnishing label | Unfurnished |
rentalPeriod | Rental interval when shown | Monthly |
description | Listing description | Three-bedroom apartment |
images | Photo URLs | [] |
phones | Visible masked phone snippets | [{"value":"+1 555 01XX","type":"mobile","partial":true}] |
person | Individual advertiser information | {"name":"Jane Doe","role":"owner"} |
org | Property agency or shop information | {"name":null} |
leadAbsences | Reasons contact information is missing | {"emails":"本站无"} |
listingStatus | Source listing status | null |
postedAt | Publication timestamp, when available | null |
scrapedAt | Collection timestamp | 2026-10-24T00:00:00+00:00 |
Rows can also include floor, attributes, ownerName, ownerListings and imageCount. Do not confuse requestedPropertyType with the listing's own category. Some values are absent on search pages and require scrapeDetails: true.
leadAbsences may contain source reason labels: 本站无 means not offered by the site, 闸门锁 means restricted contact access, and 未验证 means unverified. leadReveal: "click" describes the site's contact control; it does not mean the Actor retrieved a full phone number.
How to scrape OpenSooq
- Open OpenSooq Scraper in Apify Console.
- Fill a target field, such as
market: "JO". - Set
maxItemsto3for a small first run. IfmaxResultsis also filled, clear it or use the same value because it takes precedence. - Click Start and wait for completion.
- Open the dataset and download rows, or read them through the API.
An empty input starts an example search for apartments for sale in Amman, Jordan, limited to 3 rows. Normal event prices apply. Filling any target field selects the single search mode automatically.
Property search
Choose a country and BUY or RENT. Use a city slug such as amman in location; leave it empty for a national search. With only location filled, the country is Jordan. A nonempty markets list overrides market.
Use propertyType for one category or propertyTypes for several. Categories include apartments, villas, land, offices, shops and warehouses. hotel-apartment and shared-rooms are rent-only. all selects the broad property category; expandAllCategories: true expands its categories. Selected categories share each market's row allowance.
Search or listing URLs
Put OpenSooq URLs into startUrls. These take precedence over generated country and category searches. A search URL returns matching listings; an individual listing URL requests that property. Other page types, such as advertiser profiles, are not supported inputs.
What to fill in
Defaults below describe an ordinary targeted run; the empty-input example uses the form's sample values instead.
| Field | What to enter | Default |
|---|---|---|
startUrls | OpenSooq property search or listing URLs | Empty |
market | Country code, or all | JO when omitted |
markets | Country codes; overrides market | Empty |
location | City slug within the chosen country | National search |
channel | BUY or RENT | BUY |
propertyType | One category | all |
propertyTypes | Categories; overrides propertyType | [] |
expandAllCategories | Expand all into supported categories | false |
locale | en, ar, or empty for market default | en |
postStatus | active or sold; omit city for sold searches | active |
maxItems | Rows per URL or market, from 1 to 2,000 | 70 |
maxResults | Alternative row limit; overrides maxItems | Unset; form sample 3 |
maxPages | Search pages per search URL, from 1 to 100 | 1 |
maxSearchUrls | Maximum generated searches, from 1 to 500 | 60 |
scrapeDetails | Add available listing detail fields | true |
failOnPartial | Request failure when collection is flagged incomplete | false |
requestDelayMillis | Pause between requests, in milliseconds | 800 |
maxConcurrency | Concurrent detail requests, from 1 to 8 | 2 |
Search example:
{"market": "JO","location": "amman","channel": "BUY","propertyType": "apartment","maxItems": 3}
Multiple markets, sharing the same search settings:
{"markets": ["JO", "AE"],"channel": "RENT","propertyType": "apartment","maxItems": 2}
URL input:
{"startUrls": [{"url": "https://jo.opensooq.com/en/property/apartments-for-sale"}],"maxItems": 3}
maxItems is the per-input limit. maxResults and limit are also accepted; prefer one limit field. Unknown fields do not fail the run: close misspellings can be corrected, and other fields are ignored with a note. Unsupported optional filter values can also be dropped with a warning.
Unrunnable input, such as an invalid market, stops with INVALID_INPUT: followed by the field and correction guidance, before any rows are charged. This does not waive the start fee. The INPUT_REPORT record in the default key-value store shows how the Actor interpreted the input, including corrections, ignored fields and example-run selection. Check it if the output differs from your intended search.
Output example
This illustrative row uses example values, not a live property or advertiser.
{"id": "100000001","listingId": "100000001","rowType": "listing","url": "https://jo.opensooq.com/en/search/100000001","source": "opensooq","sourceLayer": "srp+ldp","market": "JO","channel": "BUY","title": "Apartment for sale in Amman","category": "apartment","price": "85,000 JOD","priceAmount": 85000,"currency": "JOD","numBedrooms": 3,"numBathrooms": 2,"size": 150,"sizeUnit": "m2","city": "Amman","phones": [{"value": "+1 555 01XX", "type": "mobile", "partial": true}],"emails": [],"person": {"name": "Jane Doe", "role": "owner"},"org": {"name": null},"images": [],"scrapedAt": "2026-10-24T00:00:00+00:00"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. OUTPUT and RUN_SUMMARY in the key-value store contain counts, warnings and run information, rather than additional property rows.
Why use this OpenSooq scraper?
- Pay for delivered rows. Row charges apply to listings written to your dataset, not pages attempted.
- Keep delivered results. Rows already in the dataset remain available after a stop or timeout. A collection that ends early can also return partial results; inspect
RUN_SUMMARYfor warnings. - Understand failures. Invalid input identifies the field; failed collection writes an
ERROR_SUMMARY. - Avoid invented details. Missing contact values stay empty, and masked phones remain marked partial.
- Compare several inputs. Combine countries or URLs, retaining the market and source URL on each row.
- No proxy configuration. You do not need to set up proxies.
How much does it cost to scrape OpenSooq?
The Actor uses pay-per-event pricing. The start event costs $0.005 per allocated GB, with at least one event. At the default 512 MB memory, the start charge is $0.005.
| Apify plan | Start charge at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
| Platinum | $0.005 | $0.0020 | $2.00 |
| Diamond | $0.005 | $0.0016 | $1.60 |
Platform usage is included in these prices.
maxItemsapplies to each URL or market, defaults to 70, and accepts up to 2,000. Larger requests are collected in parts of 70; categories share their market's allowance.- Free Apify plan users are limited to 200 rows per run and 10 runs of this Actor. These are limits set by the Actor developer.
- The whole run stops at your Maximum cost per run (
maxTotalChargeUsdin the API). Page limits, available listings and collection errors can reduce the delivered count.
Example: two markets returning 3 rows each produce 6 billed rows. On the Free plan, at 512 MB, the charge is $0.005 + 6 × $0.003 = $0.023. Detail fields stay in their listing row and do not add another row charge.
What happens when the run timeout is too short
When the Actor expects results after the available run time, it can pause rather than fail. Its status message is "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The estimate replaces N, and the run temporarily shows ABORTED.
When results are ready, the same run resumes automatically, reports "Resumed: delivering N rows.", writes to the same dataset and finishes as SUCCEEDED if delivery succeeds. Already delivered rows are skipped rather than delivered or charged twice. No manual restart is needed for this pause.
Automatic re-pausing is limited. Keep the default timeout of 3,600 seconds to reduce interruptions. Other failures and a manual abort are not the same as this automatic pause.
Synchronous API calls (run-sync and run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.
Use with AI agents and the API
Apify MCP server
Add this remote server in Claude, ChatGPT, Cursor, VS Code or another compatible MCP client:
https://mcp.apify.com?tools=lentic_clockss/opensooq-real-estate-scraper
Sign in with Apify through OAuth, or provide Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent can then read rows with get-dataset-items.
For clients without remote MCP support, run npx @apify/actors-mcp-server --tools lentic_clockss/opensooq-real-estate-scraper with APIFY_TOKEN set.
Example prompt: "Find three apartments for sale in Amman, Jordan. Include prices, bedrooms and listing URLs."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/opensooq-real-estate-scraper").call(run_input={"market": "JO", "propertyType": "apartment", "maxItems": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/opensooq-real-estate-scraper').call({ market: 'JO', propertyType: 'apartment', maxItems: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~opensooq-real-estate-scraper/runs with the Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your webhook. Apify Schedules can start recurring runs.
FAQ
Is it legal to scrape OpenSooq?
The Actor collects publicly visible listing information. You are responsible for complying with OpenSooq's terms and applicable data protection law. Public personal data still needs a lawful basis for collection and use; seek legal advice if unsure.
Why did my run end as ABORTED?
Check its status message. The automatic pause described above resumes the same run when results are ready. A manually aborted run is different; rows already delivered remain in the dataset.
How many results can I get?
Up to maxItems per URL or market, subject to available listings, maxPages, maxSearchUrls and your spending limit. The default is 70. Free-plan runs stop at 200 rows in total.
Why are some fields empty?
Listings do not all show the same attributes. Detail collection can add fields missing from search results, but it cannot supply information absent from the listing or reveal restricted contact details.
Can I scrape Jordan apartments for sale?
Yes. Use market: "JO", channel: "BUY" and propertyType: "apartment". Add location: "amman" for Amman, or leave it empty for national results.
Can I search UAE, Egypt or Saudi Arabia together?
Use markets: ["AE", "EG", "SA"]. Leave location empty unless the same location input is appropriate for every selected country. Each market receives its own row allowance.
Can I get full phone numbers and email addresses?
No full-phone reveal is provided. The Actor records visible masked snippets as phones with partial: true. Email lists are empty; advertiser names may be available in person or org.
Why did my free-plan runs stop after 10 runs?
The developer's Free-plan allowance is 10 runs of this Actor, not 10 per day. The run reports FREE_TIER_LIMIT when that allowance is exhausted. Paid-plan runs remain subject to their spending limit.
Limitations
- Supported inputs are property searches and listing URLs, not seller profiles, chats or unrelated OpenSooq categories.
postStatus: "sold"cannot be combined withlocation. It is not a guarantee of a complete historical archive.- Addresses are area-level; street, unit and postal-code values are not supplied. Coordinates may be missing.
- Advertiser classification as an individual or agency is an estimate, not verified business identity.
- Websites, social links and complete phone numbers are not supplied. Detail collection does not remove those limits.
- A configured country or category may have no matching or accessible listings. A genuine empty search can succeed with zero rows.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
- Immobiliare.it Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.