Zonaprop.com.ar [Only $1πŸ’°] API Scraper avatar

Zonaprop.com.ar [Only $1πŸ’°] API Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Zonaprop.com.ar [Only $1πŸ’°] API Scraper

Zonaprop.com.ar [Only $1πŸ’°] API Scraper

πŸ’°$1 per 1,000 results - No limits, no quotas. Scrape ZonaProp (Argentina) from website URLs: list-page rows (counts, parseMeta) plus detail rows with flattened list_* fields, full v3 listSummary & v4 posting JSON, merged prices/location/publisher/media/units, and requestResponses for raw API parity

Pricing

from $1.00 / 1,000 results

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Overview

Extract structured real-estate listings from ZonaProp (Argentina). The actor turns website search URLs (SERP-style .html paths) into calls to ZonaProp’s mobile listings API (GET https://bsre.zonaprop.com.ar/v3/postings), then fetches full posting JSON per result (GET …/v4/postings/{posting_id}). You get searchable metadata per API page plus rich detail rows merged for analytics or export.

Use it to monitor filtered markets (operation, property type, amenities, publication age, sort order), back up listing snapshots, or feed downstream systems with normalized fields and raw API payloads for custom mapping.


Features

  • Website URL β†’ mobile search API:

    • Parses paths like departamentos-venta-con-…-orden-visitas-descendente.html into search.parameters and sortByName (not inside search.parameters).
    • Supports clasificado URLs (/propiedades/clasificado/…-{id}.html) for direct detail scraping without a search step.
  • Listings discovery & pagination:

    • Walks v3/postings with paging.limit fixed at 30 and increasing offset.
    • Handles short first pages when paging.total still indicates more results (fixed step pagination).
  • Per-listing detail:

    • One v4/postings/{id} request per listing (until maxItems).
    • Default dataset rows flatten the merged export at the root (same keys as buildZonapropFullExport in zonaprop-full-export.ts): list_* fields from the v3 card, raw listSummary and posting, plus media, requestResponses, etc. Optional nesting under property is available when enabled in code.

How to Use

  1. Set Up: Apify account and this actor (or run locally with apify run / npm run start:dev).
  2. Provide Input: Add one or more ZonaProp website URLs under startUrls (and optional url1, url2, … on the same object for multiple starts).
  3. Configure: Set maxItems (cap on detail API calls), concurrency, retries, and proxy if needed (recommended for bsre).
  4. Run & Export: Download JSON / CSV from the dataset. If API returns OAuth errors, check proxy and credentials in zonaprop-mapper.ts.

Usage Limitations

Free / non-paying Apify users may be subject to platform limits on dataset items or charges. Paid users typically get higher limits; adjust maxItems to control how many detail postings are fetched per run.


Input Configuration

Example input:

{
"startUrls": [
{
"url": "https://www.zonaprop.com.ar/departamentos-venta-con-apto-credito-y-permite-mascotas-y-solarium-y-lavadero-publicado-hace-menos-de-2-dias-orden-visitas-descendente.html"
}
],
"maxItems": 100,
"maxConcurrency": 100,
"minConcurrency": 1,
"maxRequestRetries": 100,
"proxy": {
"useApifyProxy": false,
"proxyUrls": ["http://user:pass@host:port"]
}
}

Input Fields Explanation

  • startUrls (startUrls): Objects whose url, url1, url2, … fields are collected in order. Use search/listing URLs on www.zonaprop.com.ar or clasificado detail URLs.
  • maxItems (maxItems): Maximum number of detail (v4) postings to queue and scrape. Listings API pages still run to discover IDs until this cap is reached. Default 100.
  • maxConcurrency / minConcurrency / maxRequestRetries: Standard Crawlee / actor concurrency and retry behavior.
  • proxy (proxy): Apify proxy or custom proxyUrls for outbound requests (used for token fetch and crawling).
  • Listings page size is fixed at 30 in code (v3/postings paging.limit).

Output Structure

The dataset contains two logical row types:

  1. zonaprop_list_page β€” one row per successful v3/postings response (per offset / page), with counts and parse metadata.
  2. zonaprop_detail β€” one row per listing after v4/postings/{id}: raw listSummary (v3 card), raw posting (v4), list_* flattened fields, and the merged export fields from zonaprop-full-export.ts at the root of the row (unless nesting is enabled in code).

Filter with source === 'zonaprop_list_page' or 'zonaprop_detail' when consuming the dataset.

Sample: zonaprop_detail (first object in data.json)

The JSON below is the first record from a real export. Long strings, featuresListCard, listSummary.pictures, listSummary.features, posting text and URL arrays, and media URL lists are shortened for the README; _readme_* keys exist only in this doc sample. On disk, requestResponses.v3ListingSearchCard duplicates listSummary and requestResponses.v4PostingDetail duplicates posting.

{
"source": "zonaprop_detail",
"listingId": "58724988",
"url": "https://bsre.zonaprop.com.ar/v4/postings/58724988",
"statusCode": 200,
"originalSearchUrl": "https://www.zonaprop.com.ar/departamentos-venta-con-apto-credito-y-permite-mascotas-y-solarium-y-lavadero-publicado-hace-menos-de-2-dias-orden-visitas-descendente.html",
"parseMeta": {
"mode": "mapped",
"webPage": 1,
"propertyTypeSlug": "departamentos",
"operationSlug": "venta",
"locationSlug": null,
"unmappedPathTail": null,
"sortByName": "low_price",
"operationType": 1,
"realEstateType": 2
},
"scrapedAt": "2026-03-31T09:51:26.163Z",
"list_posting_id": "58724988",
"list_title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera",
"list_description": "Corredor Responsable: Fernando Daniel Tombazzi CUCICBA 7622 / CMCPDJLM 1078 - \nContacto: Ivana GimΓ©nez\n DEPARTAMENTO 3 AMBIENTES CENTRO DE EZEIZA APTO",
"list_public_url": "https://www.zonaprop.com.ar/propiedades/clasificado/veclapin-venta-dto-3-amb-en-ezeiza-apto-credito-con-baulera-58724988.html",
"list_location_label": "Rafael Ramos MejΓ­a 200, Ezeiza, Ezeiza, GBA Sur",
"list_postal_code": "B1804",
"list_latitude": -34.8559068,
"list_longitude": -58.5215555,
"list_first_image_url": "https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812352.jpg",
"list_price_label": "USD 98.000",
"list_price_amount": 98000,
"list_price_currency": "USD",
"list_operation_name": "Venta",
"list_publisher_name": null,
"list_publisher_id": "30026294",
"list_publication_begin": "2026-03-30T21:30:22-0400",
"list_site": "ZPAR",
"list_statuses": [
"ONLINE"
],
"list_internal_code": "AR.42.121.131.128.V2",
"list_has_whatsapp": false,
"list_premier": false,
"list_favorite": false,
"list_units_total_area_range": "59 m2",
"list_units_rooms_quantity_range": "3 amb.",
"list_units_bathroom_quantity_range": "1 baΓ±o",
"list_units_garages_quantity_range": null,
"list_units_quantity": null,
"list_real_estate_type_label": "Departamento",
"list_real_estate_subtype_label": "EstΓ‘ndar",
"listSummary": {
"title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera",
"statuses": [
"ONLINE"
],
"description": "Corredor Responsable: Fernando Daniel Tombazzi CUCICBA 7622 / CMCPDJLM 1078 - \nContacto: Ivana GimΓ©nez\n DEPARTAMENTO 3 AMBIENTES CENTRO DE EZEIZA APTO",
"pictures": [
{
"order": 0,
"sizes": [
{
"url": "https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812352.jpg"
}
],
"multimedia_type": {
"name": "imagen",
"metadata": {
"translation": {
"plural": "Fotos",
"singular": "Foto"
}
},
"multimedia_type_id": "2"
}
}
],
"tags": [
{
"metadata": {
"translation": {
"singular": "Video"
}
},
"posting_tag_id": 8
}
],
"favorite": false,
"location": {
"address": {
"name": "Rafael Ramos MejΓ­a 200, Ezeiza, Ezeiza, GBA Sur",
"visibility": "EXACT"
},
"posting_geolocation": {
"geolocation": {
"longitude": -58.5215555,
"latitude": -34.8559068
}
},
"postal_code": "B1804"
},
"features": [
{
"feature": {
"category": {
"metadata": {
"translation": {
"plural": "CaracterΓ­sticas generales",
"singular": "Características generales"
}
},
"feature_category_id": "4",
"name": "Generales"
},
"metadata": {
"translation": {
"singular": "Apto crΓ©dito"
}
},
"feature_id": "1000001"
},
"value": "0"
},
{
"feature": {
"category": {
"metadata": {
"translation": {
"plural": "CaracterΓ­sticas generales",
"singular": "Características generales"
}
},
"feature_category_id": "4",
"name": "Generales"
},
"metadata": {
"translation": {
"singular": "Permite mascotas"
}
},
"feature_id": "1000002"
},
"value": "0"
}
],
"publisher": {
"approved": false,
"logos": [
{
"url": "https://imgar.zonapropcdn.com/empresas/1/00/30/02/62/94/wxh/logo_re-max-legado_1707594159410.jpg"
}
],
"premier": false,
"publisher_id": "30026294",
"tags": [],
"publisher_type": {
"publisher_type_id": "2"
}
},
"publication": {
"publication_plan": {
"publication_areas": [
{
"publication_type": "SIMPLE"
}
]
},
"begin_date": "2026-03-30T21:30:22-0400",
"on_hold": false,
"first_date_online": "2026-03-30T00:00:00-0400"
},
"url": "https://www.zonaprop.com.ar/propiedades/clasificado/veclapin-venta-dto-3-amb-en-ezeiza-apto-credito-con-baulera-58724988.html",
"posting_id": "58724988",
"site": "ZPAR",
"real_estate_type": {
"metadata": {
"translation": {
"plural": "Departamentos",
"singular": "Departamento"
}
},
"real_estate_type_id": "2"
},
"real_estate_subtype": {
"metadata": {
"translation": {
"plural": "EstΓ‘ndar",
"singular": "EstΓ‘ndar"
}
},
"real_estate_sub_type_id": "38"
},
"units_total_area_range": "59 m2",
"units_rooms_quantity_range": "3 amb.",
"units_bathroom_quantity_range": "1 baΓ±o",
"posting_type": {
"metadata": {
"translation": {
"plural": "Properties",
"singular": "Property"
}
},
"posting_type": "PROPERTY"
},
"price_operation_types": [
{
"prices": [
{
"amount": 98000,
"currency": "USD",
"formatted_price": "USD 98.000"
}
],
"operation_type": {
"name": "Venta",
"metadata": {
"connector": "en",
"translation": {
"plural": "Ventas",
"singular": "Venta"
}
},
"operation_type_id": "1"
}
}
],
"internal_code": "AR.42.121.131.128.V2",
"has_whatsapp": false,
"premier": false
},
"posting": {
"id": "58724988",
"site": "ZPAR",
"title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera",
"url": "https://www.zonaprop.com.ar/propiedades/clasificado/veclapin-venta-dto-3-amb-en-ezeiza-apto-credito-con-baulera-58724988.html",
"description": "Corredor Responsable: Fernando Daniel Tombazzi CUCICBA 7622 / CMCPDJLM 1078 - \nContacto: Ivana GimΓ©nez\n DEPARTAMENTO 3 AMBIENTES CENTRO DE EZEIZA APTO CREDITO HIPOTECARIO \nUbicado en la calle Ramos Me…[truncated in README]",
"online": true,
"pills": [
{
"id": "ADMITS_PETS",
"value": "Acepta mascotas"
},
{
"id": "CREDIT",
"value": "Apto crΓ©dito"
}
],
"features": [
{
"name": "CaracterΓ­sticas generales",
"values": [
"Apto crΓ©dito",
"Permite mascotas",
"Cantidad de plantas: 5 o mΓ‘s",
"Pileta",
"Vigilancia"
]
}
],
"publication": {
"publication_type": "SIMPLE"
},
"prices": [
{
"price": "Venta USD 98.000"
}
],
"publisher": {
"id": "30026294",
"name": "RE/MAX Legado",
"logo": "https://imgar.zonapropcdn.com/empresas/1/00/30/02/62/94/130x70/logo_re-max-legado_1707594159410.jpg",
"premier": false,
"by_owner": false,
"type_id": "2",
"feedback_statistics": {
"score": 4,
"average": "4.4",
"ratings": [
{
"title": "AtenciΓ³n",
"average": "4.4"
},
{
"title": "Tiempo de respuesta",
"average": "4.6"
}
],
"new_publisher": false,
"responded_count": 27
}
},
"location": {
"location": "Ezeiza, Ezeiza, GBA Sur",
"address": "Rafael Ramos MejΓ­a 200",
"visibility": "EXACT",
"geolocation": {
"longitude": -58.5215555,
"latitude": -34.8559068
}
},
"real_estate_type": "Departamento",
"contact_preferences": {
"questions": [
"ΒΏSigue disponible?",
"ΒΏValor de las expensas?",
"ΒΏEn quΓ© piso estΓ‘?",
"ΒΏCuΓ‘ndo puedo visitarlo?"
],
"has_whatsapp": false,
"dni_required": false
},
"pictures_urls": [
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812352.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812331.jpg"
],
"videos_urls": [
"https://www.youtube.com/embed/ZhID5Nry4Y4"
],
"main_features": [
{
"id": "CFT101",
"value": "55 mΒ² cub."
},
{
"id": "CFT100",
"value": "59 mΒ² tot."
},
{
"id": "CFT1",
"value": "3 amb."
},
{
"id": "CFT2",
"value": "2 dorm."
},
{
"id": "CFT3",
"value": "1 baΓ±o"
},
{
"id": "CFT5",
"value": "11 aΓ±os"
}
],
"posting_codes": "CΓ³d. del anunciante: AR.42.121.131.128.V2 | CΓ³d. Zonaprop: 58724988",
"publication_statistics": "Publicado ayer"
},
"postingId": "58724988",
"site": "ZPAR",
"online": true,
"propertyUrl": "https://www.zonaprop.com.ar/propiedades/clasificado/veclapin-venta-dto-3-amb-en-ezeiza-apto-credito-con-baulera-58724988.html",
"apiDetailUrl": "https://bsre.zonaprop.com.ar/v4/postings/58724988",
"title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera",
"description": "Corredor Responsable: Fernando Daniel Tombazzi CUCICBA 7622 / CMCPDJLM 1078 - \nContacto: Ivana GimΓ©nez\n DEPARTAMENTO 3 AMBIENTES CENTRO DE EZEIZA APTO CREDITO HIPOTECARIO \nUbicado en la calle Ramos Mejia al 200 entre Paso de la Patria y Yatay. Centro de Ezeiza a una cuadra de la …[truncated in README]",
"listCardFlags": {
"internal_code": "AR.42.121.131.128.V2",
"favorite": false,
"has_whatsapp": false,
"premier": false
},
"hasWhatsapp": false,
"dniRequired": false,
"suggestedQuestions": [
"ΒΏSigue disponible?",
"ΒΏValor de las expensas?",
"ΒΏEn quΓ© piso estΓ‘?",
"ΒΏCuΓ‘ndo puedo visitarlo?"
],
"labels": {
"realEstateType": "Departamento",
"realEstateSubtype": "EstΓ‘ndar",
"postingType": "Property"
},
"ids": {
"real_estate_type_id": "2",
"real_estate_sub_type_id": "38",
"posting_type_code": "PROPERTY"
},
"location": {
"neighborhood": "Ezeiza, Ezeiza, GBA Sur",
"streetAddress": "Rafael Ramos MejΓ­a 200",
"visibility": "EXACT",
"latitude": -34.8559068,
"longitude": -58.5215555,
"listCardAddressLine": "Rafael Ramos MejΓ­a 200, Ezeiza, Ezeiza, GBA Sur",
"postalCode": "B1804",
"mapsUrl": "https://www.google.com/maps?q=-34.8559068,-58.5215555"
},
"prices": {
"displayLines": [
"Venta USD 98.000",
"USD 98.000"
],
"amounts": [
{
"amount": 98000,
"currency": "USD"
}
],
"detailPricesArray": [
{
"price": "Venta USD 98.000"
}
],
"listPriceOperationTypes": [
{
"prices": [
{
"amount": 98000,
"currency": "USD",
"formatted_price": "USD 98.000"
}
],
"operation_type": {
"name": "Venta",
"metadata": {
"connector": "en",
"translation": {
"plural": "Ventas",
"singular": "Venta"
}
},
"operation_type_id": "1"
}
}
],
"operationsSummary": [
{
"operation_type_id": "1",
"operation_name": "Venta",
"operation_singular": "Venta",
"prices": [
{
"amount": 98000,
"currency": "USD",
"formatted_price": "USD 98.000"
}
]
}
]
},
"realEstateType": "Departamento",
"listRealEstateType": {
"metadata": {
"translation": {
"plural": "Departamentos",
"singular": "Departamento"
}
},
"real_estate_type_id": "2"
},
"listRealEstateSubtype": {
"metadata": {
"translation": {
"plural": "EstΓ‘ndar",
"singular": "EstΓ‘ndar"
}
},
"real_estate_sub_type_id": "38"
},
"listPostingType": {
"metadata": {
"translation": {
"plural": "Properties",
"singular": "Property"
}
},
"posting_type": "PROPERTY"
},
"units": {
"totalAreaRange": "59 m2",
"roomsRange": "3 amb.",
"bathroomRange": "1 baΓ±o",
"garagesRange": null,
"units_quantity": null
},
"publisher": {
"id": "30026294",
"name": "RE/MAX Legado",
"logo": "https://imgar.zonapropcdn.com/empresas/1/00/30/02/62/94/130x70/logo_re-max-legado_1707594159410.jpg",
"premier": false,
"by_owner": false,
"type_id": "2",
"feedback_statistics": {
"score": 4,
"average": "4.4",
"ratings": [
{
"title": "AtenciΓ³n",
"average": "4.4"
},
{
"title": "Tiempo de respuesta",
"average": "4.6"
},
{
"title": "RecomendaciΓ³n",
"average": "4.3"
}
],
"new_publisher": false,
"responded_count": 27
}
},
"publisherFlat": {
"id": "30026294",
"name": "RE/MAX Legado",
"premier": false,
"by_owner": false,
"type_id": "2",
"approved": null,
"logoUrls": [],
"logo": "https://imgar.zonapropcdn.com/empresas/1/00/30/02/62/94/130x70/logo_re-max-legado_1707594159410.jpg",
"feedback": {
"score": 4,
"average": "4.4",
"responded_count": 27,
"new_publisher": false,
"ratings": [
{
"title": "AtenciΓ³n",
"average": "4.4"
},
{
"title": "Tiempo de respuesta",
"average": "4.6"
},
{
"title": "RecomendaciΓ³n",
"average": "4.3"
}
]
}
},
"publicationMerged": {
"publication_type": "SIMPLE"
},
"publicationDetail": {
"publication_type": "SIMPLE",
"begin_date": null,
"first_date_online": null,
"on_hold": null,
"publication_plan_types": [],
"publication_plan_raw": null
},
"publicationListCard": {
"publication_type": null,
"begin_date": "2026-03-30T21:30:22-0400",
"first_date_online": "2026-03-30T00:00:00-0400",
"on_hold": false,
"publication_plan_types": [
"SIMPLE"
],
"publication_plan_raw": {
"publication_areas": [
{
"publication_type": "SIMPLE"
}
]
}
},
"contactPreferences": {
"questions": [
"ΒΏSigue disponible?",
"ΒΏValor de las expensas?",
"ΒΏEn quΓ© piso estΓ‘?",
"ΒΏCuΓ‘ndo puedo visitarlo?"
],
"has_whatsapp": false,
"dni_required": false
},
"featuresDetailGroups": [
{
"name": "CaracterΓ­sticas generales",
"values": [
"Apto crΓ©dito",
"Permite mascotas",
"Cantidad de plantas: 5 o mΓ‘s",
"Pileta",
"Vigilancia"
]
},
{
"name": "Servicios",
"values": [
"Laundry",
"Internet/Wifi"
]
},
{
"name": "Ambientes",
"values": [
"Cocina",
"Hall",
"Lavadero",
"Living",
"Living comedor"
]
}
],
"mainFeatures": [
{
"id": "CFT101",
"value": "55 mΒ² cub."
},
{
"id": "CFT100",
"value": "59 mΒ² tot."
},
{
"id": "CFT1",
"value": "3 amb."
},
{
"id": "CFT2",
"value": "2 dorm."
},
{
"id": "CFT3",
"value": "1 baΓ±o"
},
{
"id": "CFT5",
"value": "11 aΓ±os"
}
],
"featuresListCard": [
{
"feature": {
"category": {
"metadata": {
"translation": {
"plural": "CaracterΓ­sticas generales",
"singular": "Características generales"
}
},
"feature_category_id": "4",
"name": "Generales"
},
"metadata": {
"translation": {
"singular": "Apto crΓ©dito"
}
},
"feature_id": "1000001"
},
"value": "0"
},
{
"feature": {
"category": {
"metadata": {
"translation": {
"plural": "CaracterΓ­sticas generales",
"singular": "Características generales"
}
},
"feature_category_id": "4",
"name": "Generales"
},
"metadata": {
"translation": {
"singular": "Permite mascotas"
}
},
"feature_id": "1000002"
},
"value": "0"
}
],
"featuresListCardSimplified": [
{
"categoryId": "4",
"categoryName": "Generales",
"featureId": "1000001",
"featureLabel": "Apto crΓ©dito",
"value": "0",
"valueUnit": null
},
{
"categoryId": "4",
"categoryName": "Generales",
"featureId": "1000002",
"featureLabel": "Permite mascotas",
"value": "0",
"valueUnit": null
},
{
"categoryId": "4",
"categoryName": "Generales",
"featureId": "1000016",
"featureLabel": "Cantidad de plantas",
"value": "1000019",
"valueUnit": null
},
{
"categoryId": "1",
"categoryName": "Servicios",
"featureId": "1000074",
"featureLabel": "Laundry",
"value": "0",
"valueUnit": null
}
],
"tagsListCard": [
{
"metadata": {
"translation": {
"singular": "Video"
}
},
"posting_tag_id": 8
}
],
"statusesListCard": [
"ONLINE"
],
"media": {
"pictureUrls": [
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812352.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812331.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812354.jpg"
],
"pictureUrlsDetailOnly": [
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812352.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812331.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/720x532/2042812354.jpg"
],
"pictureUrlsListCardOnly": [
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812352.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812331.jpg",
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812354.jpg"
],
"pictureCount": 66,
"floorPlansUrls": [],
"videosUrls": [
"https://www.youtube.com/embed/ZhID5Nry4Y4"
],
"toursUrls": [],
"listPicturesRaw": [
{
"order": 0,
"sizes": [
{
"url": "https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812352.jpg"
}
],
"multimedia_type": {
"name": "imagen",
"metadata": {
"translation": {
"plural": "Fotos",
"singular": "Foto"
}
},
"multimedia_type_id": "2"
}
}
],
"listPicturesEnriched": [
{
"order": 0,
"title": null,
"multimediaTypeId": "2",
"multimediaName": "imagen",
"urls": [
"https://imgar.zonapropcdn.com/avisos/1/00/58/72/49/88/wxh/2042812352.jpg"
]
}
],
"_readme_pictureUrls_count": 66,
"_readme_pictureUrlsDetailOnly_count": 33,
"_readme_pictureUrlsListCardOnly_count": 33
},
"codes": "CΓ³d. del anunciante: AR.42.121.131.128.V2 | CΓ³d. Zonaprop: 58724988",
"publicationStatistics": "Publicado ayer",
"detailExtraTopLevel": {
"pills": [
{
"id": "ADMITS_PETS",
"value": "Acepta mascotas"
},
{
"id": "CREDIT",
"value": "Apto crΓ©dito"
}
]
},
"requestResponses": {
"_readme_note": "In the real dataset, v3ListingSearchCard equals listSummary and v4PostingDetail equals posting.",
"v3ListingSearchCard": {
"posting_id": "58724988",
"title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera"
},
"v4PostingDetail": {
"id": "58724988",
"title": "Venta Dto 3 amb en Ezeiza APTO CREDITO con Baulera"
}
}
}

Sample: zonaprop_list_page (listings API metadata row)

{
"source": "zonaprop_list_page",
"url": "https://bsre.zonaprop.com.ar/v3/postings?search.name=listing&paging.limit=30&paging.offset=0&search.parameters=operation_type%3A1%3Breal_estate_type%3A2%3Bexclude_postings_contacted%3Afalse%3Bpublication_date%3A2%3Bgeneral%3A1000090%2C1000001%2C1000002%3Broom.type%3A1000110%3B&sortByName=low_price",
"statusCode": 200,
"originalSearchUrl": "https://www.zonaprop.com.ar/departamentos-venta-con-apto-credito-y-permite-mascotas-y-solarium-y-lavadero-publicado-hace-menos-de-2-dias-orden-visitas-descendente.html",
"offset": 0,
"pageSize": 30,
"returnedCount": 21,
"totalApprox": 21,
"parseMeta": {
"mode": "mapped",
"webPage": 1,
"propertyTypeSlug": "departamentos",
"operationSlug": "venta",
"locationSlug": null,
"unmappedPathTail": null,
"sortByName": "low_price",
"operationType": 1,
"realEstateType": 2
},
"scrapedAt": "2026-03-31T07:49:31.639Z"
}

Output fields (zonaprop_detail)

Row metadata

  • source β€” Always zonaprop_detail for these rows; use it to filter the dataset.
  • listingId β€” ZonaProp posting id (same as v4/postings/{id} path segment).
  • url β€” Exact v4 API URL that returned posting.
  • statusCode β€” HTTP status for that v4 call (e.g. 200).
  • originalSearchUrl β€” Website URL from startUrls that led to this listing (SERP or discovery context).
  • parseMeta β€” How the SERP path was mapped to search.parameters (same shape as list-page rows). mode: mapping strategy (mapped = path recognized). webPage: 1-based page from -pagina-N in the URL. propertyTypeSlug / operationSlug: URL segments (e.g. departamentos / venta). locationSlug: location segment if present, else null. unmappedPathTail: leftover path tokens for debugging. sortByName: sort sent to v3/postings. operationType / realEstateType: numeric API filters echoed from the mapper.
  • scrapedAt β€” ISO-8601 UTC timestamp when the row was written.

Flattened list_* fields (from the v3 search card)

Convenience copies of the list card so spreadsheets and simple pipelines do not need to parse listSummary.

  • list_posting_id β€” Posting id from the card.
  • list_title β€” Headline on the SERP card.
  • list_description β€” Short description from the card (often truncated vs full posting.description).
  • list_public_url β€” Public clasificado URL.
  • list_location_label β€” Single-line address/location string from the card.
  • list_postal_code β€” Postal code when present.
  • list_latitude / list_longitude β€” Coordinates from the card geolocation.
  • list_first_image_url β€” One representative photo URL (first size URL from pictures).
  • list_price_label β€” Human-readable price (e.g. USD 98.000).
  • list_price_amount / list_price_currency β€” Parsed numeric amount and currency from price_operation_types when available.
  • list_operation_name β€” Operation label (e.g. Venta).
  • list_publisher_name β€” Publisher display name on the card (may be null while list_publisher_id is set).
  • list_publisher_id β€” Publisher id.
  • list_publication_begin β€” Publication begin timestamp from the card.
  • list_site β€” Site code (e.g. ZPAR).
  • list_statuses β€” Status strings (e.g. ONLINE).
  • list_internal_code β€” Internal / advertiser code on the card.
  • list_has_whatsapp / list_premier / list_favorite β€” Booleans from the card.
  • list_units_total_area_range / list_units_rooms_quantity_range / list_units_bathroom_quantity_range / list_units_garages_quantity_range / list_units_quantity β€” Surface/rooms/bath/garage/unit count as formatted ranges or null.
  • list_real_estate_type_label / list_real_estate_subtype_label β€” Human-readable type and subtype from translations on the card.

Raw listSummary (v3 posting object)

The exact object returned inside v3/postings results for this listing. Important top-level keys:

  • title, description, url, posting_id, site β€” Core identity and copy.
  • statuses β€” Array of status strings.
  • pictures β€” Gallery: each item has order, sizes[] with url, multimedia_type (id, name, translations).
  • tags β€” Badges (e.g. video): posting_tag_id, metadata.translation.
  • favorite β€” User favorite flag from API context.
  • location β€” address (name, visibility), posting_geolocation.geolocation (latitude, longitude), postal_code.
  • features β€” Rich feature rows: feature.feature_id, category, metadata.translation labels, value / value_unit.
  • publisher β€” Card publisher: publisher_id, publisher_type, logos, approved, premier, tags.
  • publication β€” begin_date, first_date_online, on_hold, publication_plan (areas / plan types).
  • real_estate_type / real_estate_subtype β€” Ids plus metadata.translation.
  • units_*_range β€” Surface, rooms, bathrooms as display strings.
  • posting_type β€” e.g. PROPERTY with translations.
  • price_operation_types β€” Per operation: operation_type (id, name, metadata) and prices (amount, currency, formatted_price).
  • internal_code, has_whatsapp, premier β€” Card codes and flags.

Raw posting (v4 posting object)

Full GET /v4/postings/{id} JSON. Top-level keys in typical responses:

  • id, site, title, url, description, online β€” Core listing data; description is usually the long text body.
  • pills β€” UI chips: id (machine id) and value (Spanish label).
  • features β€” Grouped detail sections: name (group title) and values (string lines).
  • publication β€” Often publication_type and related fields (shape can be slimmer than on the v3 card).
  • prices β€” Array of objects with price display strings (e.g. Venta USD 98.000).
  • publisher β€” id, name, logo, premier, by_owner, type_id, feedback_statistics (score, averages, ratings, counts).
  • location β€” location (area label), address, visibility, geolocation.
  • real_estate_type β€” In v4 often a string label (e.g. Departamento), unlike the nested object on the v3 card.
  • contact_preferences β€” questions (suggested chat prompts), has_whatsapp, dni_required.
  • pictures_urls / videos_urls β€” Flat URL lists for media.
  • main_features β€” Key facts as { id, value } (surface, rooms, age, etc.).
  • posting_codes β€” Human-readable code line(s) for advertiser and ZonaProp ids.
  • publication_statistics β€” Short human-readable stats line (e.g. publication recency).

Merged export (root-level convenience object from buildZonapropFullExport)

These keys are copied onto the dataset row root by default (same as a merged property object when nesting is off).

  • postingId β€” Prefer v4 id, else list posting_id.
  • site, online β€” From v4 when present.
  • propertyUrl β€” Canonical public listing URL.
  • apiDetailUrl β€” Same as row url (the v4 request URL).
  • title, description β€” Prefer v4 strings, else list card.
  • listCardFlags β€” internal_code, favorite, has_whatsapp, premier from the list card.
  • hasWhatsapp β€” From contact_preferences if set, else list card flag.
  • dniRequired β€” From contact_preferences.dni_required.
  • suggestedQuestions β€” contact_preferences.questions array.
  • labels β€” realEstateType, realEstateSubtype, postingType singular strings from list metadata translations.
  • ids β€” real_estate_type_id, real_estate_sub_type_id, posting_type_code from the list card.
  • location β€” Normalized: neighborhood, streetAddress, visibility, latitude, longitude, listCardAddressLine, postalCode, mapsUrl (Google Maps link when coords exist).
  • prices β€” displayLines (deduped strings from v4 + list), amounts (amount, currency from list), detailPricesArray, listPriceOperationTypes, operationsSummary (per-operation id/name + prices).
  • realEstateType β€” v4 value (often a string).
  • listRealEstateType, listRealEstateSubtype, listPostingType β€” Original nested objects from the list card.
  • units β€” totalAreaRange, roomsRange, bathroomRange, garagesRange, units_quantity from list units_* fields.
  • publisher β€” Publisher object preferring v4 over list.
  • publisherFlat β€” Flattened publisher: ids, name, flags, logo, logoUrls, feedback subset.
  • publicationMerged β€” detail.publication ?? list.publication.
  • publicationDetail β€” Flattened v4 publication (publication_type, dates, on_hold, plan types, raw plan).
  • publicationListCard β€” Flattened list publication the same way.
  • contactPreferences β€” Full v4 contact_preferences object.
  • featuresDetailGroups β€” v4 features (grouped).
  • mainFeatures β€” v4 main_features.
  • featuresListCard β€” Raw list features array.
  • featuresListCardSimplified β€” Table-friendly rows: categoryId, categoryName, featureId, featureLabel, value, valueUnit.
  • tagsListCard / statusesListCard β€” List tags and statuses.
  • media β€” pictureUrls (union of v4 pictures_urls and all list picture URLs), pictureUrlsDetailOnly, pictureUrlsListCardOnly, pictureCount, floorPlansUrls, videosUrls, toursUrls, listPicturesRaw, listPicturesEnriched (per picture: order, type, collected URLs).
  • codes β€” String built from v4 posting_codes when it is a string (human-readable codes line).
  • publicationStatistics β€” String from v4 publication_statistics when string-shaped.
  • detailExtraTopLevel β€” Any other v4 top-level keys not mapped above (forward compatibility).
  • requestResponses β€” v3ListingSearchCard: same JSON as listSummary; v4PostingDetail: same JSON as posting.

Output fields (zonaprop_list_page)

  • source β€” zonaprop_list_page.
  • url β€” Full v3/postings request URL (includes search.parameters, paging, sortByName).
  • statusCode β€” HTTP status for that listings call.
  • originalSearchUrl β€” User-supplied website SERP URL.
  • offset β€” paging.offset for this page.
  • pageSize β€” paging.limit (30 in current code).
  • returnedCount β€” Number of result cards on this page.
  • totalApprox β€” Approximate total hits (for pagination); treat as approximate.
  • parseMeta β€” Same fields as on detail rows (see above).
  • scrapedAt β€” When the list page row was written.

Benefits of the ZonaProp Scraper

  • Filter parity with the site: Reuse complex SERP URLs (amenities, publication age, sort) without manually building search.parameters.
  • Full depth: List metadata per API page plus per-posting v4 payloads for rich fields.
  • Traceability: Each row ties back to originalSearchUrl and the exact API url called.
  • Automation-friendly: JSON suitable for warehouses, BI tools, or custom normalization.

Why Choose This Actor?

Built for Argentine real-estate research and monitoring on ZonaProp: market scans, lead lists, and repeatable exports driven by the same URLs users see in the browser, with mobile API stability and session-based token acquisition (with compiled JWT fallback).

Use cases:

  • Track new listings under tight filters (e.g. last 2 days, amenities, sort by price or visits).
  • Enrich internal CRMs with structured merged root fields / posting data.
  • Archive raw requestResponses for compliance or re-parsing when schemas change.

Technical Implementation

  1. URL planning (zonaprop-mapper.ts): Parses www.zonaprop.com.ar paths β†’ search.parameters string + sortByName + initial offset from -pagina-N.
  2. Listings pass: CheerioCrawler requests v3/postings with Bearer + uuid; pushes a zonaprop_list_page row; enqueues v4/postings/{id} for each card until maxItems.
  3. Pagination: If more results exist, enqueues the next v3/postings URL with offset += pageSize.
  4. Detail pass: Parses v4 JSON, merges with list card via buildZonapropFullExport (zonaprop-full-export.ts) and pushes zonaprop_detail (merged fields at dataset row root unless nesting is enabled).

Explore More Scrapers

If you found this actor useful, check out other scrapers at memo23's Apify profile.


Support


Additional Services