Skip to content

Dataset for property research

UAE property listings dataset with price history

Track advertised property prices across the UAE, compare local markets, and see how listings shift over time. This independently compiled dataset pulls together sale and rental records from Bayut, plus a separate table of tracked changes.

Offered by HappyEndpoint through BayutAPI. Not affiliated with, endorsed by or sponsored by Bayut. Bayut is referenced only to identify the data source.

Inventory snapshot: . Final scope, availability and permitted use are confirmed before purchase.

Listing records accumulated
1,456,695
Recorded history events
4,193,440
Dates with history records
45

What is in the dataset?

The archive covers UAE residential and commercial ads for both sale and rent. Collection aims at all seven emirates. Ask for a breakdown by location and property type before you buy. An overall count does not guarantee solid coverage for every segment.

Latest observed listing records

listings keeps one row per source listing ID. Each row shows the most recent values plus the first and last observation dates. Older listings stay in the table, so the total is not the number of properties currently listed on the market.

History of tracked changes

listing_history records tracked changes and lifecycle events. Rows join to listings through externalID. This is an event log, not a daily snapshot of every listing. An event does not always mean a price change.

At the stated snapshot date, history runs from 21 June to 9 September 2026, with records on 45 of 81 calendar dates. Collection is scheduled daily, yet the archive has gaps. Updates and the exact date range of your delivery need separate agreement.

Measured results from the archive

These results come from read-only queries against the 9 September 2026 database. They describe the accumulated archive, including older listings, rather than the number of properties available today.

705,961 sale records

Records whose latest observed purpose is for-sale.

750,734 rental records

Records whose latest observed purpose is for-rent.

An example of price-history analysis

On 9 September 2026, 2,691 history rows had a positive numeric price that differed from a positive numeric prevPrice. Of these, 1,773 recorded a lower price and 918 recorded a higher price. This demonstrates how the history table can identify recorded price movements without comparing entire daily exports.

The comparison includes both sale and rental advertisements and does not control for changes in rental period or other listing attributes. It is a count of recorded events, not a market-wide price index, a count of completed deals or proof of when each price changed.

Field presence in the same inventory

  • Price: all 1,456,695 records contain a positive numeric value.
  • Bedroom count: all 1,456,695 records contain a non-null rooms value.
  • Emirate label: 1,456,690 records contain a non-empty label; 5 do not.

Presence does not establish accuracy. A room count may be zero, a price may be hidden by the source, and location labels still need validation and normalisation. These checks do not certify every record as analysis-ready.

Selected data dictionary

These are real column names from the dataset schema. The list focuses on fields useful for property analysis. A column existing does not mean every record has a value. Request a completeness report for any extract you plan to use.

Selected columns across the listings and listing_history tables
FieldTypeMeaning and use
externalIDTextSource listing identifier and join key between the two tables. It identifies an advertisement, not a unique physical property.
purpose, categoryMain, categoryTypeTextSale or rent and property classification. Use these to separate comparable segments.
price, rentFrequency, hidePriceNumber / textAdvertised asking price, rental period and price visibility flag. Compare rents only after checking their frequency.
rooms, bathsIntegerBedroom and bathroom counts reported by the source. Missing values should not be treated as zero.
area, plotAreaNumberSource area values. Confirm units in the agreed export dictionary before calculating price per unit of area.
emirate, city, subArea, buildingTextLocation labels for geographic filtering. Coverage and field availability vary by listing.
furnishingStatus, completionStatusTextSource labels for furnishing and construction status. These can help segment a comparison.
firstSeenDate, lastSeenDateDate textFirst and most recent collection dates for a listing in this archive. These are observation dates, not proven dates on market.
scrapeDate, changeTypeDate text / textHistory event date and type: first_seen, changed, delisted or relisted. Availability events are inferred from collection.
changedFields, prevPriceText / numberNames of changed tracked fields and the previous price recorded for the event. Events can concern fields other than price.

The collection source does not currently return listing descriptions, permit numbers or street names, even though columns exist for them. Do not count on those fields. Photos, listing copy, personal contact details and the internal raw JSON archive stay outside this public preview.

See the record shape before you enquire

This is a synthetic example that uses a subset of the actual field names. The ID and values are made up to show structure. It is not a real property, a market figure or a downloadable customer extract.

{
  "externalID": "EXAMPLE-001",
  "purpose": "for-sale",
  "categoryType": "Apartments",
  "emirate": "Dubai",
  "rooms": 2,
  "baths": 2,
  "price": 1500000,
  "rentFrequency": null,
  "firstSeenDate": "2026-09-01",
  "lastSeenDate": "2026-09-09"
}

The working archive lives in SQLite. CSV extracts can be prepared for spreadsheet or dataframe work. The JSON above is only a readable illustration. Confirm the delivery format you need when you request a quote.

Questions you can explore

How do asking prices compare?

Group listings by location, property type and bedroom count. Keep sales and rentals separate. Standardise rental periods, then check missing prices and outliers before looking at medians.

Which listings changed price?

Filter history records that include a price change and compare the new price with prevPrice. Skip rows where the previous price is missing or zero when you calculate percentage changes.

How does advertised supply change?

Look at first-seen dates and lifecycle events inside a defined collection window. Account for coverage gaps before treating any drop as a real market shift.

For historical work, rely on values stored in the history table. Joining an old event to the latest listing attributes can pull in information that was not known on the event date. The archive does not keep every field historically.

What this data can and cannot tell you

  • Asking prices are not transaction prices. These are advertisements, not registered sales, completed rental contracts or verified valuations.
  • A listing is not a unique property. Different ads can describe the same unit. Deduplicating by listing ID does not remove physical-property duplicates.
  • Observation dates are not exact market dates. First seen means first recorded in this archive. A disappearance may reflect removal, expiry or a collection gap, not necessarily a sale or letting.
  • No event is not proof of daily observation. An unchanged listing may generate no history row. A missed collection cannot show changes that occurred between observations.
  • Source quality varies. Missing values, inconsistent labels and incomplete coverage can affect results. Review a representative sample before locking in an analysis plan.

Dataset or API: which fits your project?

Pick a scoped dataset extract when you need files for batch analysis, a reproducible research input or the available change history. Check the API documentation if your application needs request-based access. Dataset delivery and history form a separate enquiry. An API subscription does not set the scope or price of a bulk export.

Request a sample and a scoped quote

Tell us the emirates or communities, sale or rental segment, property types, history dates and format you need. Include your intended use and whether you want a one-off extract or ongoing updates.

  1. Define the extract. Specify the locations, fields and history window that matter for your project.
  2. Evaluate fit. Ask for a representative sample, row counts, missing-field details and the applicable usage terms.
  3. Agree the delivery. Confirm price, format, delivery method, update arrangements and permitted use before payment.

Pricing is by quote. There is no published fixed price or automatic download for this dataset. Availability and delivery depend on the agreed scope and applicable rights.

Request a sample and quote

Email happyendpointhq@gmail.com, or visit our contact page.

Delivery and usage

Tell us what you are building so we can help you choose the right extract. We confirm the included data, format, price and usage terms with your quote.

HappyEndpoint independently organises publicly accessible listing data into structured files. We are not affiliated with Bayut. Third-party content remains subject to its owners' rights. See our independence disclaimer for details.

Figures on this page describe the inventory reviewed for 9 September 2026, not a live feed. Ask for a current inventory when requesting an extract.