This is the field reference for the three Zonaprop entity types. It differs from the other references on this site in one respect, and the difference is stated up front rather than buried: these fields do not yet carry measured fill rates.
How to read this reference
Every field listed here exists and is populated on real listings. What is not published is how often, because nobody has counted it on a sample large enough to quote — so the Actor's output table says not measured against those fields rather than “always”.
Price and expenses
price_amount with price_currency (USD or ARS) and price_formatted; expenses_amount with its own currency and an expenses_reported flag. A listing advertised for both sale and rent carries every operation. Price-drop information is present where Zonaprop publishes it.
The currency field is load-bearing — this market quotes in two and the Actor does not convert.
Size and layout
| Field | Notes |
|---|---|
total_area_m2 | Total area. The denominator for price per square metre. |
covered_area_m2 | Covered area. The gap between the two is balcony, patio or terrace. |
rooms | Argentine listings count ambientes, which is not the same as bedrooms. |
bedrooms, bathrooms, toilets | Counted separately, as the portal does. |
parking_spaces | A large price factor in central Buenos Aires. |
age_years | Age in years, as published — unusual to get and useful in a valuation. |
layout, orientation, brightness, condition | Qualitative attributes as Zonaprop classifies them. |
rooms deserves a note: an Argentine listing counts ambientes, which includes the living room. A “3 ambientes” apartment has two bedrooms. Mapping it onto a bedroom count without saying so produces a dataset that is off by one everywhere.
Location
address with address_visibility, then neighborhood, city, province, zone, subzone and the full location_path, plus latitude and longitude from the listing itself.
address_visibility is the data-quality field in this group: it records how precise Zonaprop was willing to be about the street, which is what you check before presenting a point on a map as exact. See geolocated property data.
Seller
seller_type — agency or private owner, from Zonaprop's own labelling — with publisher_name, publisher_url, a logo and publisher_since. phone is returned for agencies and withheld for private owners unless explicitly enabled; partial_phone is a separate field and is not the phone number.
Media and status
main_image_url and pictures_total_count, with flags for video, floor plans and virtual tour; status, is_reserved, is_premier and modified_at. Turning on detail pages adds the publication date, the full photo set, plans, videos, tours and the complete description — at roughly ten times the cost of a search result.
is_premier is worth keeping: promoted listings are over-represented in a truncated search, so the flag lets you measure that bias instead of inheriting it.
The three views
overview— the full row, 54 fields.location— identifiers, coordinates, administrative levels and price. The mapping projection.contacts— seller type, name, profile, phone, partial phone and location. The outreach projection.
A view is not a different scrape, it is a projection of the same rows — so use one rather than exporting 54 columns to answer a four-column question.
What “not measured” means here
It means exactly what it says: the field is in the schema and appears on real rows, and no sample has been counted. Measure it yourself on the first small run — that is a two-line query, and it is the number your pipeline actually depends on:
SELECT
COUNT(*) AS rows,
ROUND(100.0 * COUNT(total_area_m2) / COUNT(*), 1) AS area_pct,
ROUND(100.0 * COUNT(age_years) / COUNT(*), 1) AS age_pct,
ROUND(100.0 * COUNT(latitude) / COUNT(*), 1) AS coords_pct
FROM listings;

