Aqar.fm Scraper avatar

Aqar.fm Scraper

Pricing

from $2.00 / 1,000 dataset items

Go to Apify Store
Aqar.fm Scraper

Aqar.fm Scraper

Scrapes Saudi real estate listings from aqar.fm. Supports Arabic search paths, start URLs, and categoryId/cityId structured searches.

Pricing

from $2.00 / 1,000 dataset items

Rating

0.0

(0)

Developer

Data Scrapers

Data Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Aqar.fm Scraper creates a structured dataset of Saudi real estate listings collected from aqar.fm. Each dataset item is one listing and can include the listing id and URL, Arabic title, category, sale or rent type, price, area, beds, bathrooms, city, district, coordinates, images, and advertiser fields. Query the source with Arabic search paths, a category and city, or start URLs, limit results with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.

Aqar.fm Scraper — input to structured data

Dataset at a glance

PropertyValue
Sourceaqar.fm (sa.aqar.fm listing URLs)
Record unitOne property listing
Input methodssearchQueries, categoryId plus cityId, or startUrls
Main identifiersid
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, and other Apify dataset exports
Update modelFresh records per Actor run
Pricing$0.002 per dataset-item ($2.00 per 1,000 listings) on every plan

Coverage and available records

The Actor collects listing cards from aqar.fm search results. A run needs at least one of searchQueries, startUrls, or categoryId. cityId is combined with categoryId when you use the dropdown search.

Supported:

  • Arabic search paths such as دور-للبيع/الرياض and full search URLs on sa.aqar.fm
  • Category and city filters from the input dropdowns
  • Sale and rent categories exposed by those dropdowns
  • Pagination, with 20 listings observed per search page
  • maxItems and maxPages limits. 0 means no cap for that control
  • Locale ar or en on the request

Observed on search cards:

  • Listing id, public URL, title, category, price text, area, beds, living rooms, bathrooms
  • City, direction, district, address, and coordinates
  • Main image and image URL list
  • Advertiser user id, name, user type, and company name when the card includes them

Not currently collected:

  • A separate detail-page body beyond the search card
  • Historical price series
  • Listings the search response does not return

rentPeriod is present on the record and is null for sale listings. isAuction may be null.

Data dictionary

Types match a saved Riyadh sale listing. Nested objects are listed after the main table.

FieldTypeNullableDescriptionExample
idintegerNoAqar listing id. Best field for deduplication.6710892
urlstringNoPublic listing URL on sa.aqar.fm.https://sa.aqar.fm/...-6710892
titlestring or nullYesArabic listing title.دور للبيع في شارع بدر...
categoryinteger or nullYesNumeric category id.22
categoryNamestring or nullYesCategory label.دور للبيع
gaListingTypestring or nullYesSale or rent marker from the card.sale
gaPropertyCategorystring or nullYesProperty category marker.floor
pricenumber or nullYesNumeric price. Currency is the source listing currency, observed as SAR on these cards.599000
regaTotalPricenumber or nullYesREGA total price when the card includes it.599000
priceTextstring or nullYesFormatted price text.599,000
rentPeriodinteger or nullYesRent period code. Null on the saved sale card.null
rentPeriodTextstring or nullYesRent period label. Empty string on the saved sale card.""
areanumber or nullYesArea in square meters.183
bedsinteger or nullYesBedroom count.3
livingsinteger or nullYesLiving-room count.1
wcinteger or nullYesBathroom count.3
addressstring or nullYesStreet, district, city, and region line.شارع بدر, حي بدر, مدينة الرياض, منطقة الرياض
addressTextstring or nullYesShorter district and city line.حي بدر, الرياض
districtstring or nullYesDistrict name.حي بدر
districtIdinteger or nullYesDistrict id.648
directionstring or nullYesCity direction label.جنوب الرياض
directionIdinteger or nullYesDirection id.1
citystring or nullYesCity name.الرياض
cityIdinteger or nullYesCity id.21
latitudenumber or nullYesLatitude copied from location.24.503137
longitudenumber or nullYesLongitude copied from location.46.723204
publishedboolean or nullYesPublished flag from the card.true
dailyRentableboolean or nullYesDaily-rent flag.false
isAuctionboolean or nullYesAuction flag. Null on the saved card.null
mainImagestring or nullYesPrimary image URL.https://images.aqar.fm/...
imageUrlsarray of stringsNoImage URLs. Empty when the card has none.See example
userIdinteger or nullYesAdvertiser user id.5293649
userNamestring or nullYesAdvertiser name as shown on the card.Source name string
userTypeinteger or nullYesAdvertiser type code.1
userReviewnumber or nullYesAdvertiser review score. Null on the saved card.null
companyNamestring or nullYesCompany name when present.Source company string
searchPathstringNoSearch path that produced the card.دور-للبيع/الرياض
pageintegerNoResult page number.1
pathstring or nullYesListing path./دور-للبيع/الرياض/...

location object:

FieldTypeNullableDescription
latnumberYesLatitude
lngnumberYesLongitude

specs is an array of { "value", "key", "icon" } display chips. value and key are strings or null. The saved card uses keys such as area, beds, wc, and livings.

Example dataset record

Saved from category 22 (floor for sale) in city 21 (Riyadh), search path دور-للبيع/الرياض, page 1. The stored imageUrls list is longer; this example keeps the first two URLs. specs keeps the first chip. Advertiser name fields are omitted here and are present on the stored record.

{
"id": 6710892,
"url": "https://sa.aqar.fm/%D8%AF%D9%88%D8%B1-%D9%84%D9%84%D8%A8%D9%8A%D8%B9/%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6/%D8%AC%D9%86%D9%88%D8%A8-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6/%D8%AD%D9%8A-%D8%A8%D8%AF%D8%B1/%D8%B4%D8%A7%D8%B1%D8%B9-%D8%A8%D8%AF%D8%B1-%D8%AD%D9%8A-%D8%A8%D8%AF%D8%B1-%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6-%D9%85%D9%86%D8%B7%D9%82%D8%A9-%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6-6710892",
"title": "دور للبيع في شارع بدر, حي بدر, مدينة الرياض, منطقة الرياض",
"category": 22,
"categoryName": "دور للبيع",
"gaListingType": "sale",
"gaPropertyCategory": "floor",
"price": 599000,
"regaTotalPrice": 599000,
"priceText": "599,000",
"rentPeriod": null,
"rentPeriodText": "",
"area": 183,
"beds": 3,
"livings": 1,
"wc": 3,
"address": "شارع بدر, حي بدر, مدينة الرياض, منطقة الرياض",
"addressText": "حي بدر, الرياض",
"district": "حي بدر",
"districtId": 648,
"direction": "جنوب الرياض",
"directionId": 1,
"city": "الرياض",
"cityId": 21,
"location": { "lat": 24.503137, "lng": 46.723204 },
"latitude": 24.503137,
"longitude": 46.723204,
"published": true,
"dailyRentable": false,
"isAuction": null,
"mainImage": "https://images.aqar.fm/m/mini/052936495_1780255618476.jpg",
"imageUrls": [
"https://images.aqar.fm/m/mini/052936495_1780255618476.jpg",
"https://images.aqar.fm/m/mini/052936497_1780255618430.jpg"
],
"specs": [{ "value": "183م²", "key": "area", "icon": "v2/area" }],
"userId": 5293649,
"userType": 1,
"userReview": null,
"searchPath": "دور-للبيع/الرياض",
"page": 1,
"path": "/دور-للبيع/الرياض/جنوب-الرياض/حي-بدر/شارع-بدر-حي-بدر-مدينة-الرياض-منطقة-الرياض-6710892"
}

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
searchQueriesstring arrayNo[]Arabic search path segmentsExample prefill: دور-للبيع/الرياض.
categoryIdstringNoNoneCategory ids in the input dropdownCombined with city to build a search.
cityIdstringNoNoneCity ids in the input dropdownPrefill 21 is Riyadh.
startUrlsURL arrayNo[]Full aqar.fm search URLsUsed as search sources.
maxItemsintegerNo00 or a positive integerMaximum listings. 0 means no item cap.
maxPagesintegerNo00 or a positive integerMaximum pages per search. 0 means no page cap.
localestringNoarar, enRequest locale.
proxyConfigurationobjectNoApify residential proxyApify proxy editorProxy for search requests.

A run must include searchQueries, startUrls, or categoryId.

Minimal request:

{
"categoryId": "22",
"cityId": "21",
"maxItems": 10,
"maxPages": 1
}

Path request:

{
"searchQueries": ["دور-للبيع/الرياض"],
"maxItems": 20
}

Retrieve the data through the API

  1. Start datascrapers/aqar-fm-scraper with the JSON input.
  2. Wait until the run finishes, or call the synchronous dataset endpoint.
  3. Read items from the run's default dataset.
  4. Paginate with dataset offset and limit, or export from the Apify console.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("datascrapers/aqar-fm-scraper").call(
run_input={
"searchQueries": ["دور-للبيع/الرياض"],
"maxItems": 20,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["id"], item["city"], item["price"])

Other languages are listed on the Actor's API tab. This is the Apify Actor API, not an aqar.fm API.

Data quality and record handling

  • One pushed record is one search-card listing. The charge event name is dataset-item.
  • Deduplicate on id. url is the public address for the same listing.
  • The same id can appear if overlapping searches return it. Compare id before you merge runs.
  • Null category, price, area, and advertiser fields mean the card omitted them. They are not backfilled.
  • latitude and longitude repeat location when coordinates exist.
  • searchPath and page are added by the Actor so you can trace which query produced the row.
  • Image URLs point at aqar.fm image files. They are links, not downloaded files.
  • A failed search page does not create a placeholder listing.

Pricing and cost examples

The price file in the Actor folder sets $2.00 per 1,000 listings. That is $0.002 per dataset-item, the same amount on every Apify plan. One charge is created for each listing pushed to the dataset. maxItems and maxPages limit how many charges a run can create. Platform usage, including compute and proxy, is billed separately by Apify.

Listings pushedEstimated event cost
1,000$2.00
10,000$20.00

The folder note about lower plan rates is not a separate tier table. These examples use the flat $0.002 event price.

Limitations and responsible data use

  • Coverage is the public search results your query returns, not a guaranteed national inventory.
  • Arabic and English locales change request language. Stored labels follow the response.
  • Prices, photos, and published flags change on the source. This dataset is not a historical archive.
  • Advertiser names and company names are public card fields. Use them in line with the privacy and advertising rules that apply to your project.
  • You are responsible for complying with aqar.fm's terms and applicable law.

Dataset questions

What does one dataset item represent?

One aqar.fm property listing from a search result.

Which field should I use as a unique identifier?

Use id. The same number is the suffix of url.

Are fields nullable or conditional?

Yes. Price, area, rent period, auction state, and advertiser fields are null when the card omits them. Sale cards in the saved sample have rentPeriod null and rentPeriodText as an empty string.

Can I retrieve the records as CSV or JSON?

Yes. Export the default dataset as JSON, CSV, Excel, XML, or another Apify format.

How do I paginate large datasets?

Set maxItems and maxPages on the run. Read the dataset with limit and offset. Search pages observed in this Actor hold 20 listings.

Does the Actor return historical data?

No. Each run returns the listings available at request time. page is the search page, not a history version.

What counts as a billable result?

Each listing pushed with the dataset-item event. The price is $0.002 per listing.

  • Apartments Scraper collects apartment listings you can compare on price, beds, and location fields.
  • 99acres Scraper is another national listings dataset with property price and area fields.
  • 99.co Scraper collects listing records for a different property portal.
  • Aengevelt Scraper collects property records from a commercial brokerage site.
  • Asunnot Oikotie.fi collects Finnish listing cards with price, size, and address fields.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.