# MGF Imoveis Scraper - Brazil Property Listings & Prices (`recordsdata/mgfimoveis-br-scraper`) Actor

Scrape MGF Imoveis, now deztop.com, Brazil's national property portal: sale, rent and holiday listings with BRL prices, areas, rooms, address, photos, agency profiles, market snapshots and price-change monitoring. No login. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/recordsdata/mgfimoveis-br-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $22.00 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## 🏠 MGF Imoveis Scraper: Brazil Property Listings, Agencies and Market Prices - RecordsData

> 🚀 **Export Brazilian property listings in seconds.** Apartments, houses, land and commercial space for sale, rent and holiday stays, with prices in BRL, areas, rooms, address, photos and the agency behind each ad. 81 fields, 5 record types, no login, no browser, no proxy.

> **Quick answer:** The MGF Imoveis Scraper exports public Brazilian property listings for sale, rent and holiday stays from MGF Imoveis, which now runs as deztop.com, to CSV, Excel, JSON or XML. Filter by place, property type, price and rooms. No login, no cookies, no API key and no proxy needed. Free plans return up to 10 rows per run.

**MGF Imoveis Scraper** reads the public pages of MGF Imoveis, a national Brazilian property classifieds portal that moved from mgfimoveis.com.br to **deztop.com**. The listing numbers, the agencies and the inventory stayed the same. The Actor reads the new address and still accepts the old mgfimoveis.com.br search and listing addresses, so links you saved earlier keep working.

On 2 November 2026 the portal counted about 2.96 million apartments for sale, 1.86 million rentals and 21,424 holiday rentals across all 27 states. Each page shows 31 ads. One search answers at most 100 pages (3,100 ads); bigger searches are cut into price bands automatically, so one run can reach far more.

Typical users: real estate investors and analysts, agencies and brokers, proptech and data teams, and rental platforms that need asking-price benchmarks, competitor stock tracking and clean listing feeds.

### 📋 MGF Imoveis scraper: what does it do?

Choose what to collect under **What to collect**. One run can mix the three choices.

- **Property listings:** one row per ad with price, deal type, property type, rooms, area and address. Switch on **Fetch full listing pages** to add the long description, up to 50 photos, amenities, condominium fee, IPTU tax, building age, update date and the agency.
- **Agency profiles:** one profile per real estate business found behind the ads, with its listing count and price statistics from a sample of its ads.
- **Market snapshots:** one statistics row per search: listing count, price median, average, minimum and maximum, price per square meter and the top cities.
- **Price changes:** turn on **Track price changes** with a **Monitor name** and each scheduled run adds a row for every ad whose price moved since the last run, with the old price, the change and the percentage.

Build a search from deal type, property types and places, or paste links from the site. Places can be a state (`sp`), a city path (`sp/campinas`), a neighborhood path (`sp/campinas/cambui`) or text such as `Cambuí, Campinas - SP`.

### 📊 MGF Imoveis output: what does a result look like?

Every row carries `recordType` (listing, listing-detail, agency, market-snapshot or price-change), `sourceSite`, `country` and `scrapedAt`. Keys keep the same order within a record type. A value the ad does not publish is left out, never replaced by a placeholder. The dataset has 81 fields.

| Field | Record type | Example |
|---|---|---|
| `listingId`, `url`, `title` | listing, listing-detail | 312894360 |
| `operation` / `price` / `priceUnit` / `currency` | listing, listing-detail | sale / 2300000 / total / BRL |
| `propertyType`, `bedrooms`, `suites`, `bathrooms`, `parkingSpaces` | listing, listing-detail | Apartamento, 3, 3, 5, 3 |
| `areaPrivate`, `areaTotal`, `pricePerM2` | listing, listing-detail | 157 m2, 157 m2, 14649.68 |
| `address`, `neighborhood`, `city`, `state` | listing, listing-detail | Cambuí, Campinas, SP |
| `condoFee`, `iptu`, `floor`, `yearBuilt`, `amenities`, `images` | listing-detail | 1900, 630, 11, 2023 |
| `advertiserName`, `advertiserUrl` | listing-detail | Vide Imóveis (businesses only) |
| `listingCount`, `sampleSize`, `priceMedian`, `topCities` | agency, market-snapshot | 189, 31, 434000 |
| `previousPrice`, `priceChange`, `priceChangePercent`, `changeType` | price-change | 750, -150, -20, price-drop |

Real rows from cloud runs on 2 November 2026 (shortened):

```json
{
    "recordType": "listing-detail",
    "title": "Apartamento Alto Padrão a Venda no Cambuí | 3 Suítes | 3 Vagas com Deposito",
    "listingId": "312894360",
    "url": "https://deztop.com/br/imovel/312894360/apartamento-3-quartos-cambui-campinas-sp-piscina",
    "operation": "sale",
    "propertyType": "Apartamento",
    "price": 2300000,
    "priceUnit": "total",
    "currency": "BRL",
    "pricePerM2": 14649.68,
    "condoFee": 1900,
    "iptu": 630,
    "address": "Rua Doutor Emílio Ribas, Cambuí, Campinas - SP",
    "bedrooms": 3,
    "bathrooms": 5,
    "parkingSpaces": 3,
    "areaPrivate": 157,
    "yearBuilt": 2023,
    "advertiserName": "Vide Imóveis",
    "advertiserUrl": "https://deztop.com/br/pro/vide-imove-d882b3444f92f4"
}
```

A market snapshot row has `listingCount`, `sampleSize`, `priceMin`, `priceMedian`, `priceMax` and `pricePerM2Median`: Apartamentos à Venda em Campinas showed 50,219 listings and a median of R$680,000 in a sample of 62. An agency row: Web Imóveis in Curitiba has 189 listings and a sample of 31 ads gives a median of R$434,000. Download the dataset as JSON, CSV, Excel, HTML or XML.

### ✨ Why choose the MGF Imoveis Scraper?

- **Follows the move to deztop.com.** Old mgfimoveis.com.br search and listing addresses still resolve, so existing links and schedules keep working.
- **Deep scans.** A price-band split lifts the 3,100-ad ceiling. A full scan of apartments for sale in Cambuí, Campinas returned 7,414 unique ads in 251 requests, for 7,527 counted by the site, with no duplicates.
- **Private sellers stay private.** Names, phones and emails of private owners are never output.

### How does it compare with other Brazilian property scrapers? (read on 2026-11-03)

No Apify Store actor is dedicated to MGF Imoveis or deztop.com. The Brazilian property actors that exist read other portals.

| | MGF Imoveis Scraper | Other Brazilian property actors |
|---|---|---|
| Actors | This one | memo23/zapimoveis-scraper, scrapesage/vivareal-zap-imoveis-scraper, ocrad/brazil-real-estate-scraper |
| Rate | $0.022 per listing | $0.0015, $0.004 and $0.007 per listing |
| Site | MGF Imoveis (deztop.com) | ZAP, VivaReal, OLX and others |
| Beyond 3,100 ads per search | Yes, by price bands | Not stated |
| Agency and market rows, monitoring | Yes | Varies |

Those actors read other sites and cost less per row. Choose this one when you need the MGF Imoveis inventory, its agencies and market statistics.

Listings are shared across Brazilian portals, so the same flat can appear on several of them. This Actor covers only the ads published on MGF Imoveis and Deztop.

### 🚀 How to scrape MGF Imoveis in 4 steps

1. Create a free account at [console.apify.com](https://console.apify.com) .
2. Open the Actor, choose **Deal type**, **Property types** and **Places**, or paste site addresses under **Site addresses**.
3. Set **Maximum items**, then click **Run**.
4. Download the dataset from the **Output** tab as CSV, Excel, JSON or XML.

### Input

The form groups its fields under What to collect, Where, Filters, Details and Monitoring. The main ones:

| Field | Type | Default | Meaning |
|---|---|---|---|
| `recordTypes` | array | `listings` | What to collect: `listings`, `agencies`, `snapshots` |
| `maxItems` | integer | 50 | Maximum rows, all record types together (free plans: 10) |
| `operations` | array | sale | Deal type: `sale`, `rent`, `season` |
| `propertyTypes` | array | all | 16 types, such as `apartment`, `house`, `land`, `store` |
| `locations` | array | all Brazil | State, city path, neighborhood path or text |
| `startUrls` / `listingIds` | array | empty | Pasted site addresses, or single listing numbers |
| `minPrice` / `maxPrice` | integer | none | BRL; per month for rent, per day for season |
| `minBedrooms`, `minSuites`, `minBathrooms`, `minParking` | integer | none | Minimum room counts |
| `minArea` / `maxArea` / `maxCondoFee` / `maxIptu` | integer | none | Area in m2, monthly condominium fee and IPTU in BRL |
| `directOwnerOnly`, `furnishedOnly`, `newOnly`, `auctionOnly`, `features`, `rentGuarantees` | boolean / array | false / empty | Listing flags, amenities, rent guarantees |
| `sortBy` | string | `newest` | Stable order; relevance reshuffles between requests |
| `fetchDetails` | boolean | false | Open each listing page for the full record |
| `includeContactDetails` / `includeRaw` | boolean | false | Business contacts, raw structured data |
| `splitLargeSearches` / `maxPagesPerSearch` | boolean / integer | true / 100 | Price-band split beyond 3,100 ads |
| `onlyNew` / `trackPriceChanges` | boolean | false | Monitor mode and price-change rows |
| `stateKey` / `resetSeen` | string / boolean | empty / false | Monitor name, and a reset |
| `maxConcurrency` / `requestDelayMs` / `proxyConfiguration` | integer / integer / object | 3 / 250 / off | Speed controls, proxy not needed |

Example input:

```json
{
    "operations": ["sale"],
    "propertyTypes": ["apartment"],
    "locations": ["sp/campinas"],
    "maxPrice": 800000,
    "minBedrooms": 2,
    "maxItems": 100
}
```

### How much does the MGF Imoveis Scraper cost?

Pay per result, no monthly fee. Rates are USD per result on the Free tier.

| Event | Charged for | Per result | Per 1,000 |
|---|---|---|---|
| Listing record | One listing from a search card | $0.022 | $22.00 |
| Listing detail record | One listing opened on its own page (`fetchDetails`), billed instead of the listing record | $0.033 | $33.00 |
| Agency record | One agency profile | $0.033 | $33.00 |
| Market snapshot record | One statistics row per search | $0.033 | $33.00 |
| Changed listing record | One listing whose price moved since the last run | $0.022 | $22.00 |

Worked examples: 1,000 listings cost $22.00. 1,000 listings with full pages cost $33.00. 100 agency profiles cost $3.30. A weekly monitor of 500 new listings and 20 repriced ones costs $11.00 + $0.44 = $11.44. Error rows and rows skipped by monitor mode are never charged.

### Is it legal to scrape MGF Imoveis? Limits and responsible use

The Actor reads publicly visible listing pages, does not log in and does not collect names, phones or emails of private sellers. The site terms may restrict automated access, so check the site terms and your local rules before republishing the data commercially. This is not legal advice.

Limits:

- One search answers at most 100 pages of 31 ads (3,100). Large searches are split by price band.
- The counter shown by the site includes ads it no longer lists: in tests the real ads were 92 to 99 percent of it.
- Free Apify plans are limited to 10 items per run.

### Monitor new listings and repricing

Switch on **Only new records** with a **Monitor name** and scheduled runs return only unseen ads. Add **Track price changes** and an ad whose rate moved comes back with `previousPrice`, `priceChange` and `priceChangePercent`.

### Use with AI agents (MCP)

Connect the Apify MCP server to Claude, Cursor or another MCP client and this Actor appears as a tool: `https://mcp.apify.com?tools=RecordsData/mgfimoveis-br-scraper`.

Example prompt: "Use the MGF Imoveis Scraper to list the 20 newest apartments for rent in Curitiba under 3,000 BRL with 2 or more bedrooms, and tell me the median rent per square meter."

### Run it from code

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('RecordsData/mgfimoveis-br-scraper').call({ operations: ['sale'], locations: ['sp/campinas'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].price);
```

Python client, the Apify API, Make, Zapier, n8n, Google Sheets, webhooks and Apify schedules also work.

### Frequently Asked Questions

#### What data can I scrape from MGF Imoveis?

Public property ads for sale, rent and holiday stays: amount in BRL, property type, rooms, areas, address, photos, amenities, condominium fee, IPTU, update date and the advertising agency. The Actor also builds agency profiles and market statistics from the same pages, so one run can return listings, agencies and snapshots together.

#### Does it still work now that mgfimoveis.com.br moved to deztop.com?

Yes. The Actor reads deztop.com, where MGF Imoveis now lives. Old mgfimoveis.com.br search and listing addresses are still accepted and resolved to the new site, so saved links, bookmarks and schedules keep working. Rows now carry deztop.com listing addresses and the same listing numbers.

#### How many listings can one run return?

The site answers at most 100 pages of 31 ads, which is 3,100 per search. With Split large searches on, a bigger search is cut into price bands, so a run can read thousands more. The count the site shows is an upper bound: in tests the ads it really lists were 92 to 99 percent of it.

#### Does it output phone numbers or names of private sellers?

No. Names, phones and emails of private owners are never output and are removed from descriptions. For ads from businesses, contacts written in the description appear only when you switch on Include business contacts, and you should do that only if you have a lawful reason to process them.

#### What happens when an ad shows no amount?

Some ads say "PREÇO SOB CONSULTA", meaning price on request. Those rows have no price field and the priceText field keeps the original wording. The Actor never replaces a missing amount with zero, and it keeps the ad in your dataset.

#### How do I get only new listings?

Turn on Only new records and keep the same Monitor name between runs. The first run delivers rows, and later runs skip what you already received, without charging for the skipped rows. Track price changes adds a row for every ad whose price moved, with the old value, the change and the percentage.

#### How fast is it?

A small run of 3 results takes a few seconds. A page of 31 ads is one request, and the 7,414-ad scan of Cambuí, Campinas needed 251 requests. Fetching full listing pages adds one request per listing, so detail runs take longer than card-only runs.

#### What do free plans get?

Free Apify plans can fetch up to 10 results per run, which is enough to test the fields and your filters. Paid plans have no cap beyond the Maximum items value you set.

#### Do I need a proxy?

No. The site answers plain requests from Apify cloud servers, so there is no browser and no proxy in a normal run. A proxy field exists but stays off by default; turn it on only if requests start failing. You also need no login, cookie or API key from the site.

#### Is it legal to scrape MGF Imoveis?

The Actor reads only publicly visible pages, adds no login and never collects personal data of private sellers. The site terms of use may restrict automated access, so check the site terms and your local rules before commercial use. You stay responsible for how you use the data, and this is not legal advice.

#### In which currency are amounts shown?

Brazilian reais (BRL), in the currency field. Rent amounts are per month and holiday amounts per day, and the priceUnit field says which one applies, so you can compare sale, rent and season listings without guessing. Sale amounts are totals for the property.

### Recommended Actors

- [Tatui Imoveis Scraper](https://apify.com/recordsdata/tatuiimoveis-scraper) for property ads and agencies in Tatuí, Brazil.
- [Argenprop Scraper](https://apify.com/recordsdata/argenprop-scraper) for real estate listings in Argentina.
- [Ciencuadras Scraper](https://apify.com/recordsdata/ciencuadras-scraper) for Colombia property listings.

> 💡 **Pro Tip:** browse the complete [RecordsData collection](https://apify.com/RecordsData) for more data scrapers.

**🆘 Need Help?** Write to contact.punkrecordsdata@gmail.com with your run link and what you expected.

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by or sponsored by MGF Imoveis or Deztop. All trademarks belong to their owners. It collects only publicly available data.

Last updated: 2026-11-03

# Actor input Schema

## `recordTypes` (type: `array`):

listings = property ads with BRL price, areas, rooms and address (add the detail fetch below for the full description, up to 50 photos and the advertiser). agencies = one profile per real estate business found behind the ads, with its listing count and market statistics. snapshots = one market-statistics row per search (listing count, price median, price per m2, top cities).

## `maxItems` (type: `integer`):

Stops after this many rows (all record types together). Free plans are limited to 10 items per run. Leave empty for 50.

## `operations` (type: `array`):

sale = properties for sale, rent = long-term rentals (price per month), season = holiday rentals (price per day). One search is made per deal type. Leave empty for sale.

## `propertyTypes` (type: `array`):

Limits the search to these kinds of property. Leave empty for all types.

## `locations` (type: `array`):

Where to search, one per line: a state code (sp), a city path (sp/campinas), a neighbourhood path (sp/campinas/cambui) or text such as "Campinas, SP" or "Cambui, Campinas - SP". The site only knows places it has listings for; an unknown place gives a free error row. Leave empty for all of Brazil.

## `sortBy` (type: `string`):

newest is stable and repeatable. relevance is the site default and reshuffles between requests. Price sorts order within each price band.

## `startUrls` (type: `array`):

deztop.com search pages (/br/imoveis/sp/campinas/venda/apartamento?pricemax=500000), listing pages (/br/imovel/<number>) and advertiser pages (/br/pro/<name>). Old mgfimoveis.com.br search and listing addresses work too. Filters you set below do not change an address you paste.

## `listingIds` (type: `array`):

Single listings by number (the listingId of a row), one per line, for example 312862341. Each one is read in full. A number the site no longer has produces a free error row.

## `minPrice` (type: `integer`):

Lowest price in reais (per month for rent, per day for season).

## `maxPrice` (type: `integer`):

Highest price in reais (per month for rent, per day for season).

## `minBedrooms` (type: `integer`):

At least this many bedrooms.

## `minSuites` (type: `integer`):

At least this many suites.

## `minBathrooms` (type: `integer`):

At least this many bathrooms.

## `minParking` (type: `integer`):

At least this many parking spaces.

## `minArea` (type: `integer`):

Smallest total area in square metres.

## `maxArea` (type: `integer`):

Largest total area in square metres.

## `maxCondoFee` (type: `integer`):

Highest monthly condominium fee in reais.

## `maxIptu` (type: `integer`):

Highest property tax (IPTU) in reais.

## `directOwnerOnly` (type: `boolean`):

Only listings published by the owner, without an agency.

## `furnishedOnly` (type: `boolean`):

Only furnished properties.

## `newOnly` (type: `boolean`):

Only properties flagged as new.

## `auctionOnly` (type: `boolean`):

Only properties flagged as auction or foreclosure.

## `features` (type: `array`):

Only properties that have all of these features.

## `rentGuarantees` (type: `array`):

Rent searches only: properties that accept these guarantees.

## `fetchDetails` (type: `boolean`):

On: one extra request per listing for the full description, up to 50 photos, amenities, condominium fee, IPTU, floor, building age, update time and the advertiser (billed as a listing detail record). Off: the search-card fields only (billed as a listing record).

## `includeContactDetails` (type: `boolean`):

Adds phones and emails written in the description of a listing published by a real estate business. Private owners are never included, whatever this setting. Turn on only if you have a lawful reason to process contact data.

## `includeRaw` (type: `boolean`):

Adds a raw field with the unmapped structured data of the listing page (JSON-LD offer details). Seller contact data is never included.

## `onlyNew` (type: `boolean`):

Skips records delivered by an earlier run of the same search. Nothing skipped is charged.

## `trackPriceChanges` (type: `boolean`):

With only new records on, listings seen before are delivered again when their price changed, as a price-change row with the previous price, the difference and the percentage. Turns on Only new records.

## `stateKey` (type: `string`):

Optional label to keep several monitors with identical settings apart.

## `resetSeen` (type: `boolean`):

Clears the memory of this search before the run, so everything counts as new.

## `splitLargeSearches` (type: `boolean`):

The site answers at most 100 pages (3,100 listings) per search. On: a bigger search is cut into price bands so every listing can be read. Off: only the first 3,100 are read.

## `maxPagesPerSearch` (type: `integer`):

Pages of 31 listings read per search or price band. The site never answers more than 100.

## `snapshotSamplePages` (type: `integer`):

Market snapshots compute price statistics from this many pages (31 listings each) of the search.

## `maxConcurrency` (type: `integer`):

How many listing pages are fetched at once. Requests still start at least 250 ms apart.

## `requestDelayMs` (type: `integer`):

Minimum time between two requests to the site. The Actor never goes below 250 ms, whatever is set here.

## `proxyConfiguration` (type: `object`):

Optional. Leave proxy off (the default): the site works without one. Turn it on only if requests start failing.

## Actor input object example

```json
{
  "recordTypes": [
    "listings"
  ],
  "maxItems": 10,
  "operations": [
    "sale"
  ],
  "propertyTypes": [
    "apartment"
  ],
  "locations": [
    "sp/campinas"
  ],
  "sortBy": "newest",
  "startUrls": [],
  "listingIds": [],
  "directOwnerOnly": false,
  "furnishedOnly": false,
  "newOnly": false,
  "auctionOnly": false,
  "features": [],
  "rentGuarantees": [],
  "fetchDetails": false,
  "includeContactDetails": false,
  "includeRaw": false,
  "onlyNew": false,
  "trackPriceChanges": false,
  "stateKey": "",
  "resetSeen": false,
  "splitLargeSearches": true,
  "maxPagesPerSearch": 100,
  "snapshotSamplePages": 2,
  "maxConcurrency": 3,
  "requestDelayMs": 250,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "recordTypes": [
        "listings"
    ],
    "maxItems": 10,
    "operations": [
        "sale"
    ],
    "propertyTypes": [
        "apartment"
    ],
    "locations": [
        "sp/campinas"
    ],
    "startUrls": [],
    "maxPagesPerSearch": 100,
    "snapshotSamplePages": 2,
    "maxConcurrency": 3,
    "requestDelayMs": 250,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/mgfimoveis-br-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 = {
    "recordTypes": ["listings"],
    "maxItems": 10,
    "operations": ["sale"],
    "propertyTypes": ["apartment"],
    "locations": ["sp/campinas"],
    "startUrls": [],
    "maxPagesPerSearch": 100,
    "snapshotSamplePages": 2,
    "maxConcurrency": 3,
    "requestDelayMs": 250,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/mgfimoveis-br-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "recordTypes": [
    "listings"
  ],
  "maxItems": 10,
  "operations": [
    "sale"
  ],
  "propertyTypes": [
    "apartment"
  ],
  "locations": [
    "sp/campinas"
  ],
  "startUrls": [],
  "maxPagesPerSearch": 100,
  "snapshotSamplePages": 2,
  "maxConcurrency": 3,
  "requestDelayMs": 250,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/mgfimoveis-br-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/mgfimoveis-br-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DcVQnW3kQHdZ4X7Ab/builds/lz4ZUUebp2KdVzqGs/openapi.json
