Zap Imóveis Scraper - Properties, Prices & 80+ Fields
Pricing
from $1.00 / 1,000 results
Zap Imóveis Scraper - Properties, Prices & 80+ Fields
Scrape Zap Imóveis sale, rental and new-development listings by city, filters or URL. Extract 80+ fields including prices, fees, addresses, GPS, agencies, CRECI, amenities, nearby POIs, scores, H3 location data and media.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
2
Bookmarked
37
Total users
9
Monthly active users
5 days ago
Last modified
Categories
Share
ZAP Imoveis Scraper: Brazil Property Listings with Price, Contacts and Location Data
ZAP Imoveis Scraper turns zapimoveis.com.br, one of Brazil's largest property portals, into structured data. Get price, condo fee, IPTU, full address, GPS coordinates, agency contact details, license numbers, seller ratings, AI-tagged amenities and the platform's own quality score for sale, rental and new-development listings. Search a city, neighborhood, zone or whole state with the site's own filters, or paste any ZAP link straight from your browser, then export to JSON, CSV or Excel, or pull the results into your app through the API.
Why This Scraper?
- 80+ structured fields per listing, including price, condo fee, IPTU (monthly and yearly), price per m², total monthly cost, full address, GPS, agency contact, tier and CRECI license number, plus a verbatim copy of the source record.
- Every filter the site offers: 21 property types (multi-select), residential or commercial, 226 amenities, condo fee range, near metro, below-market price, rent without guarantor, virtual tour, development stage (on the plan, under construction, ready to move in) and six sort orders.
- Paste any ZAP link: city, zone, neighborhood and whole-state searches, amenity pages, development-stage pages, links built by the site's filter panel, a single listing or just its listing code. Every link keeps its own filters and starts on the page it points to.
- Agency intelligence: an Agency Leads summary with one entry per advertiser (contacts, CRECI, cities, neighborhoods, property types, price range), plus the advertiser's public rating and lead response numbers on request.
- Location intelligence: an H3 spatial-hash array at three resolutions, a curated points-of-interest list (bus stops, train stations, pharmacies, markets) and "valuable zones" tags.
- Built for recurring monitoring: Resume from run ID continues one interrupted run without re-charging what it already collected, and Incremental mode tracks a saved search over time, classifying every listing as new, updated, unchanged, expired or reappeared.
- Past the 1,200-result limit: Maximize Coverage splits a large search into price bands so you can collect more than the site shows for one search.
Use Cases
- Real estate investors and analysts: compare price per square meter, condo fees and IPTU across neighborhoods to spot mispriced listings.
- PropTech and valuation tools: feed structured listings with GPS, POIs and H3 index straight into a pricing or heatmap model.
- Lead generation for agencies and brokers: use the Agency Leads summary to build a list of advertisers with phones, WhatsApp, CRECI license, ratings and the areas they cover.
- Market researchers: track new-development (lancamento) launches by construction stage across a city or a whole state over time.
- Automated workflows: pipe fresh or changed listings into Notion, Airtable or a spreadsheet for a house search or a client-facing shortlist.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "0000000001" |
url | "https://www.zapimoveis.com.br/imovel/apartamento-sample/id-0000000001/" |
title | "Sample Listing Title" |
price / currency | 450000 / "BRL" |
business | "SALE" (also "RENTAL") |
unit_type / usage_type | "APARTMENT" / "RESIDENTIAL" |
bedrooms / bathrooms / parking_spaces | 2 / 2 / 1 |
usable_area / total_area | 80 / 95 |
price_per_sqm | 5625.0 |
monthly_condo_fee / iptu / yearly_iptu | 850 / 220 / 2640 |
total_monthly_cost | 1219.33 (rentals: the rent all-in; sales: condo fee + IPTU per month) |
city / state_code / neighborhood | "Sao Paulo" / "SP" / "Centro" |
zip_code | "01000000" |
latitude / longitude | -23.5500 / -46.6333 |
lqs | 90 |
location.h3 | [{"index":"...","resolution":7},{"index":"...","resolution":8}] |
location.pois_list | ["BS:Sample Bus Stop","CS:Sample Market"] |
attributes.amenities | ["GARAGE","ELEVATOR"] |
attributes.construction_status | "UNDER_CONSTRUCTION" (new developments) |
entities.seller.name / .tier | "Sample Agency" / "GOLD" |
entities.seller.license_number | "00000-F-SP" |
entities.seller.rating | {"stars": 4.5, "total_ratings": 4, "total_feedbacks": 10} (Fetch Seller Ratings) |
contact.whatsapp | "+5500000000000" |
media.images[0].url | "https://resizedimgs.zapimoveis.com.br/img/.../000-fit-in-800x600.webp" |
raw | the complete source listing, account and media objects |
Every record also carries the full namespaced objects behind these flat fields, so nothing is lost: identity (external, source and legacy IDs), source_context (the URL or location that seeded this listing plus its page number), timestamps, content.description, pricing.offers (one entry per business type ZAP has active for that unit, since a property can be listed for both sale and rent), availability, the full location object, media.videos, and entities.seller's complete profile (verified flag, billing address, logo). With Fetch Full Listing Details on, each record also gets the full description, last-updated date, publishing portals, the seller's trust score, total listings and service areas, and development unit variants. When Incremental mode is on, each record additionally carries changeType, changedFields, firstSeenAt and lastSeenAt.
Output tabs: Listings (overview table), Seller / Agency Info (one row per listing with the advertiser's contacts), Incremental Changes (the change columns for monitoring runs) and Agency Leads (one entry per advertiser, saved as the AGENCY_LEADS record in the run's key-value store, never billed as extra results).
How to Use
- Pick a mode:
search(places plus filters) orurl(paste ZAP links). - For
search, fill in Locations with what you would type on the site: a city (Sao Paulo, SP), a neighborhood or zone (Moema, Sao Paulo) or a two-letter state code (SP) for a whole state, then pick filters. Forurl, paste the links; each link's own filters apply and the walk starts on the page it points to. - Set Max Listings (and optionally Max Pages Per Search) to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search a neighborhood and a whole state for rentals:
{"mode": "search","locations": ["Moema, Sao Paulo", "SC"],"businessType": "RENTAL","rentWithoutGuarantor": true,"maxListings": 100,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR" }}
Apartments and penthouses with a pool near the metro, smallest first:
{"mode": "search","locations": ["Sao Paulo, SP", "Rio de Janeiro, RJ"],"businessType": "SALE","propertyTypes": ["APARTMENT", "PENTHOUSE"],"amenities": ["POOL"],"nearTransit": true,"minPrice": 300000,"maxPrice": 800000,"sortBy": "area-asc","maxListings": 200,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR" }}
New developments still on the plan, with full details and seller ratings:
{"mode": "search","locations": ["Sao Paulo, SP"],"businessType": "SALE","listingType": "DEVELOPMENT","constructionStatus": "PLAN_ONLY","fetchDetails": true,"fetchSellerRatings": true,"maxListings": 100,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR" }}
Paste ZAP links from your browser:
{"mode": "url","urls": ["https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-sul+moema/","https://www.zapimoveis.com.br/aluguel/apartamentos/rj+rio-de-janeiro/?precoMaximo=5000&quartos=2","https://www.zapimoveis.com.br/imovel/venda-apartamento-3-quartos-com-academia-vila-mariana-zona-sul-sao-paulo-sp-87m2-id-2901801013/"],"maxListings": 250,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR" }}
Supported URL shapes
| Shape | Example | What happens |
|---|---|---|
| City search | .../venda/apartamentos/sp+sao-paulo/ | Walks that city's results for the link's business and property type. |
| Zone search | .../aluguel/imoveis/sp+sao-paulo+zona-oeste/ | Matched to the exact ZAP zone and walked. |
| Neighborhood search | .../venda/apartamentos/sp+sao-paulo+zona-sul+moema/ or .../pr+curitiba++batel/ | Matched to the exact ZAP neighborhood (the site's own location key, never a look-alike name). If no exact match is found the link is skipped with a warning instead of widening to the whole city. |
| Whole state | .../venda/casas/sc/ | Walks every listing in that state. |
| Amenity page | .../venda/apartamentos/sp+sao-paulo/elevador/ | Applies that amenity as a filter. |
| New developments | .../lancamentos/imoveis/sp+sao-paulo/ | Walks launches for that place. |
| Development stage | .../lancamentos/imoveis/sp+sao-paulo/na-planta/ (also em-construcao, pronto-para-morar) | Keeps launches in that construction stage. |
| Search with filters | .../sp+sao-paulo/?precoMaximo=500000&quartos=2 | Price, bedrooms, bathrooms, parking, area and condo fee keys map to the matching filter; tracking parameters (utm_*, gclid, ...) are dropped. |
| Filter-panel link | .../venda/cobertura/sp+sao-paulo/?onde=...&tipos=cobertura_residencial | The site's own location, property type, amenities, sort and business from the link are used as they are. |
| Home search widget link | https://www.zapimoveis.com.br/?onde=...&transacao=aluguel&tipos=... | Scoped by its onde location, never nationwide. |
| Pagination and sort | ?pagina=2&ordenarPor=preco_menor or /page-3/ | Starts the walk on that page with that sort. |
| Listing or development page | .../imovel/...-id-2901801013/ or .../lancamentos/alma-pinheiros-id-2900789998/ | Fetched directly by its listing code: exactly that one record. |
| Listing code | 2915514667 | Same as pasting the listing page. |
| Agency page or any other section | .../imobiliaria/234940/, .../guia-de-bairros/..., .../blog/... | Logs a warning naming the link and skips it, never runs a nationwide search. A search link with no place at all (.../venda/apartamentos/) is skipped the same way. |
The older pasted form with the neighborhood after a slash (.../sp+sao-paulo/jardins/) still works, although the site itself now answers it with a "page not found".
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/zapimoveis-scraper").call(run_input={"mode": "search","locations": ["Sao Paulo, SP"],"businessType": "RENTAL","maxListings": 100,"proxy": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR"},})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["title"], listing["price"], listing["city"])leads = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("AGENCY_LEADS")
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/zapimoveis-scraper').call({mode: 'search',locations: ['Sao Paulo, SP'],businessType: 'RENTAL',maxListings: 100,proxy: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'], apifyProxyCountry: 'BR' },});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Resume and recurring updates
- Resume from run ID (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every listing already collected there, so you don't pay twice. It does not classify anything. - Incremental mode (
incrementalMode) is for scheduled runs over the same saved search. It remembers the previous run itself, keyed on a hash of your locations, URLs and filters (or on astateKeyyou set), so nothing needs to be pasted between runs. Each listing is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),EXPIREDorREAPPEARED.EXPIREDrows requireemitExpiredto be on and a run that walked every page of every planned search without hitting a cap; a capped, banded or resumed run cannot tell "gone" apart from "not yet reached", so it skips that classification for the run rather than guessing. A listing is classifiedREAPPEAREDwhen it shows up again after an earlier run marked itEXPIRED. Once a real Incremental baseline exists for a search, running it withresumeFromRunIdat the same time is refused, since a resumed run is only a partial scan. Changing only Max Listings or Max Pages keeps the same baseline; changing a filter starts a new one. - Ignore fields when detecting changes (
ignoreFieldsForChanges) extends the list of output fields that never make a listing count asUPDATED. Use a dotted path for a field nested inside another object (for exampleattributes.lqs); a bare name matches that key at the top level only. Ignored fields are still returned in the output; they are only left out of change detection. By default this already ignores the agency/seller fields that change for every listing of an agency whenever the agency's own profile changes (seller_name,seller_tier,seller_license_number,seller_legacy_zap_id,phones,whatsapp,entities.sellerincluding its rating,raw.account,raw.account_link),raw.listing.score(ZAP's internal ranking score, measured to drift on repeat fetches of an unchanged listing) andscraped_at.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (places plus filters) or url (pasted ZAP links) |
locations | array[string] | none (prefill: ["Sao Paulo, SP"]) | Places to search: a city, a neighborhood or zone, or a two-letter state code for a whole state. Diacritics optional; each entry resolves to one ZAP location and the log names it |
businessType | string | SALE | SALE or RENTAL |
listingType | string | USED | USED (resale) or DEVELOPMENT (lancamento) |
propertyType | string | ANY | ANY, APARTMENT, HOME, PENTHOUSE, STUDIO, ALLOTMENT_LAND, FARM, OFFICE, COMMERCIAL_BUILDING, SHED_DEPOSIT_WAREHOUSE, BUSINESS |
minPrice | integer | none | Minimum price in BRL |
maxPrice | integer | none | Maximum price in BRL |
minBedrooms | integer | none | Minimum bedrooms |
minBathrooms | integer | none | Minimum bathrooms |
minParkingSpaces | integer | none | Minimum parking spots |
minUsableArea | integer | none | Minimum usable area in m² |
maxUsableArea | integer | none | Maximum usable area in m² |
sortBy | string | relevance | relevance, price-asc, price-desc, newest, area-desc or area-asc |
propertyTypes | array[string] | none | One or more of 21 property types (apartment, studio, kitnet, house, gated-community house, village house, two-story house, penthouse, flat, loft, land, office, floor, store, commercial house, building, warehouse, hotel, parking space, farm...); overrides Property Type |
usageType | string | ANY | RESIDENTIAL or COMMERCIAL only; used when no property type is picked |
amenities | array[string] | none | Listings that have ALL picked amenities (226 site values: pool, gym, elevator, pets allowed, furnished, 24h concierge...) |
minCondoFee | integer | none | Minimum monthly condo fee in BRL |
maxCondoFee | integer | none | Maximum monthly condo fee in BRL |
nearTransit | boolean | false | Only listings near a metro or train station |
belowMarketPrice | boolean | false | Only listings the site flags as priced below the market reference |
rentWithoutGuarantor | boolean | false | Rentals that need no guarantor (sem fiador) |
hasVirtualTour | boolean | false | Only listings with a virtual or video tour |
constructionStatus | string | ANY | New developments only: PLAN_ONLY (na planta), UNDER_CONSTRUCTION or BUILT (ready to move in) |
urls | array[string] | one example of every supported link shape (see "Supported URL shapes") | ZAP links to collect in URL mode. Run URL mode without editing this field and the actor scrapes those 12 example links; the search filters above are ignored here, the link's own filters apply |
maxPages | integer | none (empty walks every result page) | Optional bound on result pages per search or link, up to 24 listings per page |
maxListings | integer | 20 | Total maximum number of listings across all searches; 0 for unlimited |
fetchDetails | boolean | false | One extra request per listing for the full description, last-updated date, portals, seller trust score, total listings, service areas and development units |
fetchSellerRatings | boolean | false | Adds the advertiser's public rating (stars, ratings, feedbacks, answered leads, liked points) as entities.seller.rating; one request per distinct advertiser |
maximizeCoverage | boolean | false | Splits a search larger than the site's 1,200-result limit into price bands to collect more of it |
proxy | object | Apify Proxy, groups ["RESIDENTIAL"], country BR (applied even if this field is left out) | Connection settings; see Plan Requirement below |
resumeFromRunId | string | none | ID of a previous run (or dataset) of this actor; listings already there are skipped |
incrementalMode | boolean | false | Track this same search across scheduled runs and classify each listing (see "Resume and recurring updates") |
stateKey | string | none (derived from the search scope) | Name or share this monitoring campaign's saved state |
emitUnchanged | boolean | false | Also return (and bill) listings unchanged since the last Incremental run |
emitExpired | boolean | false | Also return (and bill) listings that disappeared since the last Incremental run, as EXPIRED rows, when this run completed a full scan |
ignoreFieldsForChanges | array[string] | none (the default ignore list always applies) | Extra output fields (dotted path for nested ones) to leave out of UPDATED detection in Incremental mode |
mcpConnectors | array | none | Optional: send a summary of each record to apps you authorized under Integrations |
notionParentPageUrl | string | none | Notion connector only: page under which item pages are created |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run; does not affect the dataset |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"identity": {"id": "0000000001","external_id": "REF-0001","source_id": "00000000-0000-0000-0000-000000000000","provider_id": null,"fingerprint": null,"image_source_id": null,"legacy_id": null},"source_context": {"url": "https://www.zapimoveis.com.br/imovel/.../id-0000000001/","source_url": "https://www.zapimoveis.com.br/aluguel/imoveis/sp+sao-paulo/","page_index": 1,"seed": { "id": "BR>Sao Paulo>NULL>Sao Paulo", "type": "location", "value": "Sao Paulo, SP" }},"timestamps": {"published_at": "2026-01-01T00:00:00.000Z","created_at": "2026-01-01T00:00:00.000Z","updated_at": "2026-01-01T00:00:00.000Z","delivered_at": null},"content": {"title": "Sample Listing Title","description": "Sample description text.","ai_searchable_amenities": "Garage, Elevator"},"pricing": {"amount": 450000,"currency": "BRL","offers": [{"business_type": "SALE","amount": 450000,"currency": "BRL","monthly_condo_fee": 850,"iptu": 220,"iptu_period": "MONTHLY","yearly_iptu": 2640,"rental_period": null,"rental_warranties": [],"monthly_rental_total_price": null}]},"availability": {"status": "ACTIVE","show_price": true,"accept_exchange": null,"resale": false,"transacted": false,"non_activation_reason": null},"location": {"street": "Sample Street","neighborhood": "Centro","city": "Sao Paulo","state_code": "SP","zip_code": "01000000","full_address": "Sample Street Centro Sao Paulo SP","coordinates": { "latitude": -23.5500, "longitude": -46.6333, "source": "GOOGLE" },"h3": [{ "index": "0000000000000000", "resolution": 7 },{ "index": "0000000000000000", "resolution": 8 },{ "index": "0000000000000000", "resolution": 9 }],"pois_list": ["BS:Sample Bus Stop", "CS:Sample Market", "PH:Sample Pharmacy"],"valuable_zones": [{ "name": "Sample Zone", "category": "DISTRICT" }]},"media": {"images": [{ "id": "00000000000000000000000000000000", "url": "https://resizedimgs.zapimoveis.com.br/img/vr-listing/00000000000000000000000000000000/vivareal-fit-in-800x600.webp" }],"videos": [],"other": [],"video_tour_link": null},"attributes": {"business": "SALE","listing_type": "USED","property_type": "UNIT","unit_types": ["APARTMENT"],"merged_amenities": ["GARAGE", "ELEVATOR"],"ai_amenities": ["GARAGE", "ELEVATOR"],"lqs": 90,"condominium_name": "Sample Condominium","rooms": { "bedrooms": 2, "bathrooms": 2, "suites": 1, "parking_spaces": 1 },"area": { "usable_area": 80, "total_area": null }},"entities": {"seller": {"account_id": "00000000-0000-0000-0000-000000000000","name": "Sample Agency","profile_url": "https://www.zapimoveis.com.br/imobiliaria/0000/","license_number": "00000-F-SP","tier": "GOLD","verified": true,"is_chat_enabled": true,"rating": {"stars": 4.5,"total_ratings": 4,"total_feedbacks": 10,"answered_leads": 4,"not_answered_leads": 6,"answered_rate": 0,"liked": ["agileService", "professionalism"],"to_improve": []}}},"contact": {"phones": ["1100000000", "11900000000"],"whatsapp": "11900000000","chat": null},"id": "0000000001","url": "https://www.zapimoveis.com.br/imovel/.../id-0000000001/","title": "Sample Listing Title","price": 450000,"city": "Sao Paulo","state_code": "SP","lqs": 90,"raw": { "listing": {}, "account": {}, "medias": [], "link": {}, "account_link": {} }}
Plan Requirement
A reliable run needs a residential-style connection, so the input form's Proxy Configuration field is prefilled with Apify Proxy, groups ["RESIDENTIAL"], country BR. That same default applies even if you call this actor from the API and leave the proxy field out of your input entirely.
If your account's plan doesn't include Residential proxy, the actor automatically continues on a backup connection so the run can still complete; a one-time warning in the log explains this and points at the Apify pricing page, which shows what each plan includes. When no page could be loaded at all, the run ends as failed with a message saying why, rather than reporting a misleading success with zero listings.
FAQ
How much does it cost?
You pay per listing returned, at the rate your Apify plan applies to this actor, plus a small fee per run start. The Pricing tab on the actor page shows current rates. Use Max Listings to cap what any single run can return. Fetch Full Listing Details and Fetch Seller Ratings add extra requests (and run time) but no extra charge per listing, and the Agency Leads summary is free.
Is it legal to scrape ZAP Imoveis?
This actor collects only publicly available listing data. You are responsible for how you use it: follow ZAP Imoveis's terms and the laws that apply to you, and get legal advice before any commercial redistribution of contact details or leads.
Can I track a saved search and get only what changed?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then classifies every listing against what that same search returned last time, and unchanged listings are not billed unless you turn that on. Getting EXPIRED rows additionally needs Emit expired listings on and a run that completes a full scan without a page or listing cap cutting it short.
What's the difference between Resume from run ID and Incremental mode?
Resume from run ID continues one specific interrupted run using a pasted run or dataset ID: it skips listings that run already collected and adds no classification. Incremental mode is for a recurring, scheduled search: it remembers that search's own state automatically between runs, with nothing to paste, and classifies each listing as new, updated, unchanged, expired or reappeared.
Why do my property-type results differ from older runs?
Earlier versions sent some property types in a form the site treated as the whole group: Penthouse and Studio returned every apartment, Allotment Land and Farm returned every property, and a pasted /venda/apartamentos/... link returned every type. They now send the site's own type rules, so each option returns what it names. This can mean fewer rows than before for a type the site scopes narrowly (Penthouse in Sao Paulo for sale went from about 437,000 results to about 23,500) or more rows for a type the old code under-scoped (Office in Sao Paulo for sale went from about 12,800 to about 43,800), both now matching the site's own count. A pasted /venda/apartamentos/... link narrows the same way (about 847,800 to about 461,500). The default Property Type: Any search is unchanged. Pasted zone and neighborhood links (sp+sao-paulo+zona-sul+moema) used to fall back to a loose city-name search; they now resolve to that exact neighborhood.
Why did a run return zero listings, or fail instead?
The actor needs to reach ZAP through a connection the site accepts. If the configured proxy lacks residential access, it automatically retries over a backup connection, so most plan-access problems never surface as zero listings. The run fails explicitly (instead of reporting a misleading zero-item success) when no page could be loaded, when a pasted Resume from run ID cannot be resolved, or when Resume from run ID is combined with Incremental mode after a baseline already exists. Filters that are too narrow, such as a tight price range or an uncommon bedroom count, can still legitimately return zero listings, and links the actor cannot scope (an agency page, a link with no place) are skipped with a warning in the log.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more real estate data?
Pair this actor with these related scrapers from the same team:
| 🏠 QuintoAndar Scraper Scrape QuintoAndar property listings across Brazil with 80+ fields, including rent, sale... | 🏠 Apartments.com Scraper From $1.50/1K. Scrape Apartments.com rentals by city, ZIP, neighborhood, address or URL... |
| 🛒 Americanas Brazil Scrape Americanas Brazil (americanas.com.br) by keyword, department or pasted link... | 🧩 Mercado Livre Brazil Scrape Mercado Livre Brazil by keyword or URL. Filter by category, brand, price... |
| 🔌 Casas Bahia Brazil Electronics & Home Goods Scraper Scrape products from Casas Bahia Brazil by keyword, department, or URL. Filter by brand... | 🛒 Drogasil Brazil Pharmacy, Health & Beauty Scraper Scrape Drogasil (drogasil.com.br) medicines, health and beauty products by keyword... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.