# Chaves Na Mao Scraper | $1.5 / 1k | Fast & Reliable (`fatihtahta/chaves-na-mao-scraper`) Actor

Extract structured Brazil property listings from Chaves Na Mão Imoveis with pricing, locations, seller details, media assets, and contact data. Built for enterprise-grade Brazil real estate intelligence, listing monitoring, lead enrichment and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/chaves-na-mao-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Chaves na Mão Scraper

**Slug:** fatihtahta/chaves-na-mao-scraper

### Overview
Chaves na Mão Scraper collects structured real estate listing data from Chaves na Mão, including listing identifiers, pricing breakdowns, location details, property characteristics, seller details, media assets, lead-channel settings, and nearby places. It turns location-based searches and filters into clean JSON records that are ready for analysis, reporting, and downstream systems. [Chaves na Mão](https://www.chavesnamao.com.br) is one of Brazil's widely used property marketplaces, making it a valuable source for housing supply, pricing visibility, and local market research. The actor automates repetitive collection work so teams do not have to search, copy, and normalize listing data by hand. The result is a more consistent dataset and less operational time spent on recurring data collection.

### Why Use This Actor
- **Market researchers and analysts:** Track listing volume, asking prices, property mix, and neighborhood trends across cities or segments.
- **Product and content teams:** Build local market pages, comparison content, and property datasets with structured listing, pricing, and media fields.
- **Developers and data engineers:** Feed ETL jobs, warehouses, internal dashboards, and enrichment workflows with normalized listing records.
- **Lead generation and enrichment teams:** Identify active listings, agencies, and seller details for CRM enrichment, outreach research, or territory mapping.
- **Monitoring and competitive tracking teams:** Watch changes in supply, pricing, below-market opportunities, and transit-friendly inventory over time.

### Input Parameters
Provide a `location` plus any optional filters. The actor resolves a city, neighborhood, district, avenue, or street into the correct Chaves na Mão search flow and then collects normalized listing records from those result pages.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `deal_type` | `string` | Whether to collect all deals, sale listings, or rent listings. Allowed values: `all`, `sale`, `rent`. | `sale` |
| `location` | `string` | A place name or address-style query in Brazil, such as a city, neighborhood, district, avenue, or street. | – |
| `sort_by` | `string` | Sort order for result pages. Allowed values: `most_relevant`, `most_recent`, `lowest_price`, `highest_price`, `smallest_area`, `largest_area`. | `most_relevant` |
| `property_type` | `array[string]` | One or more property types to include. Allowed values: `apartment`, `studio`, `kitnet`, `house`, `gated_house`, `villa_house`, `penthouse`, `flat`, `loft`, `residential_land`, `townhouse`, `farm`, `small_farm`, `store`, `office`, `commercial_house`, `hotel`, `corporate_floor`, `building`, `commercial_land`, `condominium_land`, `storage`, `garage`, `commercial`, `commercial_point`. | – |
| `amenities` | `array[string]` | One or more amenities to require. Allowed values: `air_conditioning`, `planned_cabinets`, `elevator`, `hydromassage`, `fireplace`, `furnished`, `sauna`, `balcony`. | – |
| `min_bedroom` | `string` | Minimum bedroom count to include. Allowed values: `1`, `2`, `3`, `4` for 1+, 2+, 3+, or 4+ bedrooms. | – |
| `min_bathroom` | `string` | Minimum bathroom count to include. Allowed values: `1`, `2`, `3`, `4` for 1+, 2+, 3+, or 4+ bathrooms. | – |
| `min_parking` | `string` | Minimum parking spaces to include. Allowed values: `1`, `2`, `3`, `4` for 1+, 2+, 3+, or 4+ spaces. | – |
| `min_price` | `integer` | Minimum listing price to include. Use whole numbers such as `400000`. | – |
| `max_price` | `integer` | Maximum listing price to include. Use whole numbers such as `3000000`. | – |
| `below_market_price` | `boolean` | When `true`, keeps only listings marked as below market price. | `false` |
| `min_sqm` | `integer` | Minimum usable area in square meters. | – |
| `max_sqm` | `integer` | Maximum usable area in square meters. | – |
| `near_transit` | `boolean` | When `true`, keeps only listings tagged as near transit access. | `false` |
| `maximize_coverage` | `boolean` | When `true`, checks reported counts before deep pagination and recursively splits oversized searches into exact price ranges until every branch is under the safe threshold. | `false` |
| `limit` | `integer` | Maximum number of listings to save for the run. Leave empty to collect all available results for the selected search. | – |

The actor uses Apify Residential proxies in Brazil internally for every run, so `proxyConfiguration` is not exposed as an input parameter.

### Example Inputs

#### Scenario: All deals with an amenity filter
```json
{
  "deal_type": "all",
  "location": "Curitiba",
  "amenities": ["balcony"],
  "limit": 100
}
````

#### Scenario: Broad city sale search

```json
{
  "deal_type": "sale",
  "location": "Sao Paulo",
  "sort_by": "lowest_price",
  "property_type": ["apartment", "house", "commercial"],
  "amenities": ["air_conditioning", "balcony"],
  "min_price": 400000,
  "max_price": 1500000,
  "limit": 250
}
```

#### Scenario: Rental search with commuter-friendly filters

```json
{
  "deal_type": "rent",
  "location": "Pinheiros, Sao Paulo",
  "sort_by": "most_recent",
  "property_type": ["apartment", "studio", "flat"],
  "amenities": ["furnished"],
  "min_bedroom": "1",
  "near_transit": true,
  "max_price": 6000,
  "limit": 150
}
```

#### Scenario: Targeted below-market shortlist

```json
{
  "deal_type": "sale",
  "location": "Belo Horizonte",
  "property_type": ["apartment"],
  "min_bathroom": "2",
  "below_market_price": true,
  "min_sqm": 70,
  "max_sqm": 120,
  "limit": 100
}
```

### Output

The actor writes one normalized listing object per dataset item. Each record is designed for direct use in analytics pipelines, ETL jobs, warehouses, CRMs, and downstream APIs without additional post-processing.

Recommended deduplication keys:

- `identity.fingerprint` for stable upserts across repeated runs
- `identity.id` when you only need the Chaves na Mão listing id

#### Example listing record

This is a representative Chaves na Mão output record based on a real listing shape:

```json
{
  "identity": {
    "id": "41518750",
    "fingerprint": "ef99c3fe16e1dd0bad29"
  },
  "source_context": {
    "url": "https://www.chavesnamao.com.br/imovel/sala-comercial-a-venda-2-salas-sp-sao-paulo-bela-vista-126m2-RS1850000/id-41518750/",
    "source_url": "https://www.chavesnamao.com.br/imoveis/brasil/",
    "page_index": 1,
    "seed": {
      "id": "2af1977af04a",
      "type": "location",
      "value": "Sao Paulo"
    }
  },
  "timestamps": {
    "published_at": "2026-04-13T10:10:06",
    "updated_at": "2026-04-13T10:10:06"
  },
  "content": {
    "title": "Andar / meia laje Comercial com 126 m² em Venda e Aluguel, Cerqueira César - SP",
    "description": "Andar / meia laje Comercial com 126 m² em Venda e Aluguel, Cerqueira César - SP Imóvel comercial de 126 m² disponível para venda e aluguel em Cerqueira César."
  },
  "pricing": {
    "amount": 1850000,
    "currency": "BRL",
    "offers": [
      {
        "business_type": "sale",
        "amount": "R$ 1.850.000",
        "currency": "BRL",
        "monthly_condo_fee": "R$ 2.000",
        "iptu": "R$ 1.000"
      }
    ]
  },
  "availability": {
    "active": true,
    "highlighted": false,
    "pet_friendly": false,
    "show_condominium": true,
    "revision": false,
    "score": 0
  },
  "location": {
    "label": "Avenida Paulista 1765, Bela Vista, São Paulo, SP",
    "street": "Avenida Paulista",
    "street_number": "1765",
    "neighborhood": "Bela Vista",
    "city": "São Paulo",
    "state": "São Paulo",
    "state_code": "SP",
    "postal_code": "01311-200",
    "public_address": true,
    "address_complement": "ANDAR",
    "coordinates": {
      "latitude": -23.56079,
      "longitude": -46.65786
    },
    "nearby_places": {
      "bus_stops": [
        {
          "distance": 70,
          "name": "Avenida Paulista, 1754"
        }
      ],
      "hospitals": [
        {
          "distance": 310,
          "name": "Hospital 9 de Julho"
        }
      ],
      "restaurants": [
        {
          "distance": 40,
          "name": "McDonald's"
        }
      ]
    },
    "address_comp": "ANDAR"
  },
  "media": {
    "images": [
      {
        "id": "image-0",
        "url": "https://www.chavesnamao.com.br/673379/41518750/sp-sao-paulo-bela-vista-avenida-paulista-sala-comercial-a-venda-69dce1aa-00.jpg"
      },
      {
        "id": "image-1",
        "url": "https://www.chavesnamao.com.br/673379/41518750/sp-sao-paulo-bela-vista-avenida-paulista-sala-comercial-a-venda-69dce1aa-01.jpg"
      }
    ],
    "videos": [
      {
        "id": "video-0",
        "url": "https://www.youtube.com/watch?t=2s&v=YcP-iu_3CCk"
      }
    ],
    "other": [
      {
        "type": "featured_image",
        "id": "featured-image",
        "url": "https://www.chavesnamao.com.br/673379/41518750/sp-sao-paulo-bela-vista-avenida-paulista-sala-comercial-a-venda-69dce1aa-00.jpg"
      }
    ],
    "image_count": 16,
    "featured_image": "673379/41518750/sp-sao-paulo-bela-vista-avenida-paulista-sala-comercial-a-venda-69dce1aa-00.jpg"
  },
  "attributes": {
    "business": "sale",
    "property_type": "conj_comercial_sala",
    "category": "commercial",
    "transaction": "sell",
    "realty_type": {
      "name": "Conj. Comercial / Sala",
      "title_name": "Conj. Comercial / Salas",
      "id": 7,
      "url": "sala-comercial",
      "prefix": "deste"
    },
    "segment": "REALTY",
    "commercial_rooms": 2,
    "show_details_characteristics": true,
    "private_items": [
      {
        "name": "Ar Condicionado",
        "id": 5
      }
    ],
    "common_items": [
      {
        "name": "Elevador(es)",
        "id": 40
      }
    ],
    "rooms": {
      "bathrooms": 2
    },
    "area": {
      "usable_area": 126,
      "total_area": 126
    }
  },
  "entities": {
    "seller": {
      "advertiser_id": "673379",
      "name": "ALVELAN IMOBILIÁRIA - CRECI/SP 050527-J",
      "profile_url": "https://www.chavesnamao.com.br/imobiliaria/alvelan-imobiliaria-creci-sp-050527-j/id-673379/",
      "license_number": "050527-J",
      "tier": "PJ",
      "logo_url": "673379-1731416079.png",
      "show_address": false,
      "created_at": "2026-02-26T03:00:00+00:00",
      "category": 0,
      "phones": {
        "cellphone": {
          "number": "(17) 99199-9191",
          "whatsapp": true
        }
      }
    }
  },
  "contact": {
    "phones": [
      "(17) 99199-9191"
    ],
    "whatsapp": "(17) 99199-9191",
    "channels": {
      "leasing": true,
      "schedule_virtual": true,
      "schedule_irl": true,
      "message": true,
      "whatsapp": true,
      "phones": true
    }
  }
}
```

### Field reference

#### Listing fields

- **identity.id** *(string, optional)*: Source listing ID.
- **identity.external\_id** *(string, optional)*: Provider-facing external reference.
- **identity.legacy\_id** *(string, optional)*: Legacy source reference when present.
- **identity.source\_id** *(string, optional)*: Source system identifier.
- **identity.provider\_id** *(string, optional)*: Provider or advertiser reference ID.
- **identity.fingerprint** *(string, optional)*: Record fingerprint for source-level identity tracking.
- **source\_context.url** *(string, optional)*: Listing page URL used for the record.
- **source\_context.source\_url** *(string, optional)*: Search page URL where the listing was discovered.
- **source\_context.page\_index** *(number, optional)*: Search results page index.
- **source\_context.seed.id** *(string, optional)*: Identifier for the originating search seed.
- **source\_context.seed.type** *(string, optional)*: Seed category, such as `location` or `url`.
- **source\_context.seed.value** *(string, optional)*: Original seed value.
- **timestamps.published\_at** *(string, optional)*: Publication timestamp in ISO 8601 format.
- **timestamps.created\_at** *(string, optional)*: Original creation timestamp in ISO 8601 format.
- **timestamps.updated\_at** *(string, optional)*: Last update timestamp in ISO 8601 format.
- **content.title** *(string, optional)*: Listing title.
- **content.description** *(string, optional)*: Listing description text.
- **pricing.amount** *(number, optional)*: Primary displayed price.
- **pricing.currency** *(string, optional)*: Currency code for the primary price.
- **pricing.offers\[]** *(array\[object], optional)*: Offer variants associated with the listing.
- **pricing.offers\[].business\_type** *(string, optional)*: Offer type, such as sale or rent.
- **pricing.offers\[].amount** *(string | number, optional)*: Offer amount as displayed or normalized by the actor.
- **pricing.offers\[].currency** *(string, optional)*: Offer currency code.
- **pricing.offers\[].monthly\_condo\_fee** *(string | number, optional)*: Monthly condo fee when available.
- **pricing.offers\[].iptu** *(string | number, optional)*: IPTU value when available.
- **pricing.offers\[].yearly\_iptu** *(string | number, optional)*: Yearly IPTU value when available.
- **pricing.offers\[].rental\_terms.monthly\_total** *(string | number, optional)*: Rental total when exposed.
- **availability.status** *(string, optional)*: Listing availability status.
- **availability.show\_price** *(boolean, optional)*: Whether price is publicly shown.
- **availability.accept\_exchange** *(boolean, optional)*: Whether exchanges are accepted.
- **availability.resale** *(boolean, optional)*: Whether the listing is marked as resale.
- **availability.non\_activation\_reason** *(string, optional)*: Reason a listing is not active, when present.
- **availability.active** *(boolean, optional)*: Whether the listing is active.
- **availability.highlighted** *(boolean, optional)*: Whether the listing is highlighted on the platform.
- **availability.pet\_friendly** *(boolean, optional)*: Pet-friendly flag when exposed.
- **availability.show\_condominium** *(boolean, optional)*: Whether condominium details are exposed.
- **availability.revision** *(boolean, optional)*: Revision flag when present.
- **availability.score** *(number, optional)*: Listing score when present.
- **location.label** *(string, optional)*: Short location label.
- **location.full\_address** *(string, optional)*: Full address string when available.
- **location.street** *(string, optional)*: Street name.
- **location.street\_number** *(string, optional)*: Street number.
- **location.neighborhood** *(string, optional)*: Neighborhood name.
- **location.city** *(string, optional)*: City name.
- **location.state** *(string, optional)*: Full state name.
- **location.state\_code** *(string, optional)*: State code.
- **location.postal\_code** *(string, optional)*: Postal code.
- **location.public\_address** *(boolean, optional)*: Whether the address is public.
- **location.address\_complement** *(string, optional)*: Address complement when available.
- **location.coordinates.latitude** *(number, optional)*: Latitude.
- **location.coordinates.longitude** *(number, optional)*: Longitude.
- **location.coordinates.approximate** *(boolean, optional)*: Whether the coordinates are approximate.
- **location.coordinates.radius\_meters** *(number, optional)*: Approximate radius in meters when exposed.
- **location.coordinates.source** *(string, optional)*: Coordinate source label.
- **location.nearby\_places** *(object, optional)*: Nearby places grouped by category such as bus stops, hospitals, parks, schools, gyms, restaurants, supermarkets, and pharmacies.
- **location.geocoding.address\_type** *(string, optional)*: Address granularity classification.
- **media.images\[]** *(array\[object], optional)*: Image assets associated with the listing.
- **media.videos\[]** *(array\[object], optional)*: Video assets associated with the listing.
- **media.other\[]** *(array\[object], optional)*: Additional media items.
- **media.image\_count** *(number, optional)*: Reported image count.
- **media.featured\_image** *(string, optional)*: Featured image path or URL.
- **media.tours\[]** *(array\[object], optional)*: Tour or 360 links when available.
- **attributes.business** *(string, optional)*: Business type, such as sale or rent.
- **attributes.contract\_type** *(string, optional)*: Contract classification.
- **attributes.listing\_type** *(string, optional)*: Listing class.
- **attributes.property\_type** *(string, optional)*: High-level property classification.
- **attributes.publication\_type** *(string, optional)*: Publication tier or listing class.
- **attributes.construction\_status** *(string, optional)*: Construction status.
- **attributes.display\_address\_type** *(string, optional)*: Address display mode.
- **attributes.portal** *(string, optional)*: Primary portal name.
- **attributes.portals\[]** *(array\[string], optional)*: Related portal names.
- **attributes.unit\_types\[]** *(array\[string], optional)*: Unit type labels.
- **attributes.unit\_sub\_types\[]** *(array\[string], optional)*: Unit subtype labels.
- **attributes.usage\_types\[]** *(array\[string], optional)*: Usage type labels.
- **attributes.amenities\[]** *(array\[string], optional)*: Amenity labels.
- **attributes.badges\[]** *(array\[string], optional)*: Listing badges or stamps.
- **attributes.condominium\_name** *(string, optional)*: Condominium name when available.
- **attributes.category** *(string, optional)*: Residential or commercial category.
- **attributes.transaction** *(string, optional)*: Transaction type, normalized such as `sell`.
- **attributes.realty\_type** *(object, optional)*: Chaves na Mão realty type object.
- **attributes.segment** *(string, optional)*: Source segment label.
- **attributes.commercial\_rooms** *(number, optional)*: Commercial room count when exposed.
- **attributes.private\_items\[]** *(array\[object], optional)*: Private-unit features.
- **attributes.common\_items\[]** *(array\[object], optional)*: Common-area features.
- **attributes.rooms** *(object, optional)*: Room counts such as bedrooms, bathrooms, suites, and parking spaces.
- **attributes.area** *(object, optional)*: Area values such as usable and total square meters.
- **attributes.variants\[]** *(array\[object], optional)*: Child units or listing variants when available.
- **entities.seller.account\_id** *(string, optional)*: Seller account identifier.
- **entities.seller.advertiser\_id** *(string, optional)*: Advertiser identifier.
- **entities.seller.name** *(string, optional)*: Seller or agency name.
- **entities.seller.profile\_url** *(string, optional)*: Seller profile URL.
- **entities.seller.license\_number** *(string, optional)*: License or registration number.
- **entities.seller.tier** *(string, optional)*: Seller tier or badge level.
- **entities.seller.logo\_url** *(string, optional)*: Seller logo URL.
- **entities.seller.verified** *(boolean, optional)*: Whether the seller is verified.
- **entities.seller.show\_address** *(boolean, optional)*: Whether the seller address is displayed.
- **entities.seller.created\_at** *(string, optional)*: Seller profile creation timestamp in ISO 8601 format.
- **entities.seller.trust\_score** *(number, optional)*: Seller trust score when available.
- **entities.seller.total\_count\_by\_filter** *(number, optional)*: Seller listing count for the current filter when exposed.
- **entities.seller.total\_count\_by\_advertiser** *(number, optional)*: Seller listing count across the advertiser profile when exposed.
- **entities.seller.category** *(number, optional)*: Seller category code.
- **entities.seller.address** *(object, optional)*: Seller address object.
- **entities.seller.phones** *(object | array, optional)*: Seller phone object(s).
- **entities.seller.google\_business** *(object, optional)*: Google Business details when available.
- **entities.developers\[]** *(array\[object], optional)*: Developer entities for new-project records when present.
- **contact.phones\[]** *(array\[string], optional)*: Public phone numbers.
- **contact.whatsapp** *(string, optional)*: Public WhatsApp number.
- **contact.channels** *(object, optional)*: Public lead and communication channels.

### Data guarantees & handling

- **Best-effort extraction:** fields may vary by region, session, listing availability, or site experiments.
- **Optional fields:** null-check in downstream code.
- **Deduplication:** recommend `identity.fingerprint`, with `identity.id` as a simpler fallback.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Enter your location and choose whether to collect sale or rent listings.
3. Add any optional filters you need, then set the maximum number of outputs to collect.
4. Click **Start** and wait for the run to finish.
5. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

You can schedule recurring runs to keep your property dataset fresh without manually starting each job. This is useful for ongoing market tracking, recurring exports, and regular reporting. Scheduled runs help keep your downstream systems aligned with the latest public listings and pricing changes.

- Navigate to **Schedules** in Apify Console
- Create a new schedule (daily, weekly, or custom cron)
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **Webhooks:** Trigger downstream actions when a run completes
- **Zapier:** Connect to 5,000+ apps without coding
- **Make (Integromat):** Build multi-step automation workflows
- **Google Sheets:** Export results to a spreadsheet
- **Slack/Discord:** Receive notifications and summaries
- **Email:** Send automated reports via email

### Performance

- **Small runs (< 1,000 outputs):** ~2–3 minutes
- **Medium runs (1,000–5,000 outputs):** ~5–15 minutes
- **Large runs (5,000+ outputs):** ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available real estate listing information from **https://www.chavesnamao.com.br** for legitimate business purposes. Common use cases include market analysis, listing monitoring, enrichment, and internal reporting workflows. Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and the target site's terms. This section is informational and not legal advice.

- **Real estate** research and market analysis
- **Listing monitoring and portfolio tracking**
- **Data enrichment and reporting**

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable (e.g., GDPR, CCPA)

### Support

If you need help, use the Issues tab or the support section on the actor page. Include the input you used with sensitive values redacted, the run ID, a short note on expected versus actual behavior, and, if helpful, a small output sample.

# Actor input Schema

## `deal_type` (type: `string`):

Decide whether this run should collect properties for sale, properties for rent, or both.

## `location` (type: `string`):

Provide the place name or address-style search you want to use. The scraper will use it to find matching listings in that area.

## `property_type` (type: `array`):

Leave this empty to search across all property types, or select one or more options to keep only those categories.

## `amenities` (type: `array`):

Leave this empty to keep all listings, or select one or more amenities to return properties that advertise those features.

## `min_bedroom` (type: `string`):

Choose the fewest bedrooms a property should have. For example, `2+` keeps listings with 2, 3, or 4 bedrooms.

## `min_bathroom` (type: `string`):

Choose the fewest bathrooms a property should have. For example, `2+` keeps listings with 2, 3, or 4 bathrooms.

## `min_parking` (type: `string`):

Choose the fewest parking spaces a property should have. For example, `1+` keeps listings with 1, 2, 3, or 4 spaces.

## `min_price` (type: `integer`):

Enter the lowest listing price you want in the results. For example, `400000` keeps properties priced at 400,000 and above.

## `max_price` (type: `integer`):

Enter the highest listing price you want in the results. For example, `3000000` keeps properties priced at 3,000,000 and below.

## `min_sqm` (type: `integer`):

Enter the minimum usable area in square meters. For example, `35` keeps listings with 35 sqm or more.

## `max_sqm` (type: `integer`):

Enter the maximum usable area in square meters. For example, `100` keeps listings with 100 sqm or less.

## `sort_by` (type: `string`):

Select the ordering for the listings you want to collect. If you do not change it, the scraper uses the default most relevant order.

## `limit` (type: `integer`):

Enter how many listings to save for this run. Leave it empty if you want to collect as many matching results as possible.

## `maximize_coverage` (type: `boolean`):

Enable this option to help the scraper capture a more complete set of listings for broad searches with many matches.

## Actor input object example

```json
{
  "deal_type": "sale",
  "location": "Sao Paulo",
  "sort_by": "most_relevant",
  "limit": 100,
  "maximize_coverage": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": "Sao Paulo",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/chaves-na-mao-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": "Sao Paulo",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/chaves-na-mao-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "Sao Paulo",
  "limit": 100
}' |
apify call fatihtahta/chaves-na-mao-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/chaves-na-mao-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Chaves Na Mao Scraper | $1.5 / 1k | Fast & Reliable",
        "description": "Extract structured Brazil property listings from Chaves Na Mão Imoveis with pricing, locations, seller details, media assets, and contact data. Built for enterprise-grade Brazil real estate intelligence, listing monitoring, lead enrichment and automated analytics pipelines.",
        "version": "1.0",
        "x-build-id": "f3eaK5kVzYlNaB4S8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~chaves-na-mao-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-chaves-na-mao-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~chaves-na-mao-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-chaves-na-mao-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~chaves-na-mao-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-chaves-na-mao-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "deal_type": {
                        "title": "Choose Which Listings to Search",
                        "enum": [
                            "all",
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Decide whether this run should collect properties for sale, properties for rent, or both.",
                        "default": "sale"
                    },
                    "location": {
                        "title": "Set the Search Location",
                        "type": "string",
                        "description": "Provide the place name or address-style search you want to use. The scraper will use it to find matching listings in that area."
                    },
                    "property_type": {
                        "title": "Pick the Property Types to Include",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Leave this empty to search across all property types, or select one or more options to keep only those categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "apartment",
                                "studio",
                                "kitnet",
                                "house",
                                "gated_house",
                                "villa_house",
                                "penthouse",
                                "flat",
                                "loft",
                                "residential_land",
                                "townhouse",
                                "farm",
                                "store",
                                "office",
                                "commercial_house",
                                "hotel",
                                "corporate_floor",
                                "building",
                                "commercial_land",
                                "storage",
                                "garage"
                            ],
                            "enumTitles": [
                                "🏠 Apartamento | Apartment",
                                "🏠 Studio | Studio",
                                "🏠 Kitnet | Studio apartment",
                                "🏠 Casa | House",
                                "🏠 Casa de Condomínio | Gated community house",
                                "🏠 Casa de Vila | Villa house",
                                "🏠 Cobertura | Penthouse",
                                "🏠 Flat | Serviced apartment",
                                "🏠 Loft | Loft",
                                "🏠 Terreno / Lote / Condomínio | Land / Plot / Condominium lot",
                                "🏠 Sobrados | Townhouse",
                                "🏠 Fazenda / Sítio / Chácara | Farm / Country house",
                                "🏢 Loja / Salão / Ponto Comercial | Store / Shop / Commercial space",
                                "🏢 Conjunto Comercial / Sala | Commercial office / Room",
                                "🏢 Casa Comercial | Commercial house",
                                "🏢 Hotel / Motel / Pousada | Hotel / Motel / Guesthouse",
                                "🏢 Andar / Laje Corporativa | Corporate floor / Office floor",
                                "🏢 Prédio Inteiro | Entire building",
                                "🏢 Terrenos / Lotes Comerciais | Commercial land / Plots",
                                "🏢 Galpão / Depósito / Armazém | Warehouse / Storage / Depot",
                                "🏢 Garagem | Garage"
                            ]
                        }
                    },
                    "amenities": {
                        "title": "Choose Must-Have Amenities",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Leave this empty to keep all listings, or select one or more amenities to return properties that advertise those features.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "air_conditioning",
                                "planned_cabinets",
                                "elevator",
                                "hydromassage",
                                "fireplace",
                                "furnished",
                                "sauna",
                                "balcony"
                            ],
                            "enumTitles": [
                                "Ar-condicionado | Air conditioning",
                                "Armários Planejados | Planned cabinets",
                                "Elevador | Elevator",
                                "Hidromassagem | Hydromassage",
                                "Lareira | Fireplace",
                                "Mobiliado | Furnished",
                                "Sauna | Sauna",
                                "Varanda | Balcony"
                            ]
                        }
                    },
                    "min_bedroom": {
                        "title": "Set a Minimum Number of Bedrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4"
                        ],
                        "type": "string",
                        "description": "Choose the fewest bedrooms a property should have. For example, `2+` keeps listings with 2, 3, or 4 bedrooms."
                    },
                    "min_bathroom": {
                        "title": "Set a Minimum Number of Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4"
                        ],
                        "type": "string",
                        "description": "Choose the fewest bathrooms a property should have. For example, `2+` keeps listings with 2, 3, or 4 bathrooms."
                    },
                    "min_parking": {
                        "title": "Set a Minimum Number of Parking Spaces",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4"
                        ],
                        "type": "string",
                        "description": "Choose the fewest parking spaces a property should have. For example, `1+` keeps listings with 1, 2, 3, or 4 spaces."
                    },
                    "min_price": {
                        "title": "Set the Lowest Price to Include",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the lowest listing price you want in the results. For example, `400000` keeps properties priced at 400,000 and above."
                    },
                    "max_price": {
                        "title": "Set the Highest Price to Include",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the highest listing price you want in the results. For example, `3000000` keeps properties priced at 3,000,000 and below."
                    },
                    "min_sqm": {
                        "title": "Set the Smallest Area to Include (sqm)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the minimum usable area in square meters. For example, `35` keeps listings with 35 sqm or more."
                    },
                    "max_sqm": {
                        "title": "Set the Largest Area to Include (sqm)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the maximum usable area in square meters. For example, `100` keeps listings with 100 sqm or less."
                    },
                    "sort_by": {
                        "title": "Choose How Results Are Ordered",
                        "enum": [
                            "most_relevant",
                            "most_recent",
                            "lowest_price",
                            "highest_price",
                            "smallest_area",
                            "largest_area"
                        ],
                        "type": "string",
                        "description": "Select the ordering for the listings you want to collect. If you do not change it, the scraper uses the default most relevant order.",
                        "default": "most_relevant"
                    },
                    "limit": {
                        "title": "Set a Maximum Number of Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter how many listings to save for this run. Leave it empty if you want to collect as many matching results as possible."
                    },
                    "maximize_coverage": {
                        "title": "Improve Coverage for Large Searches",
                        "type": "boolean",
                        "description": "Enable this option to help the scraper capture a more complete set of listings for broad searches with many matches.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
