# Pincali Mexico Real Estate Scraper (`parsebird/pincali-scraper`) Actor

Scrape Pincali.com Mexico property listings: title, price, currency, bedrooms, bathrooms, floor size, location, images, description, and availability. Filter by keyword, price, type, and rooms. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/pincali-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.69 / 1,000 listings

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### Pincali Mexico Real Estate Scraper

Pincali Mexico Real Estate Scraper extracts **structured property data from [Pincali.com](https://www.pincali.com)** — Mexico's EasyBroker-powered real estate marketplace. Paste a **Pincali search URL** for apartments, houses, or rentals, add optional filters, and get clean listing data ready for analysis, monitoring, or lead generation.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Turn any Pincali search into an analysis-ready dataset — title, asking price and currency, bedrooms, bathrooms, floor size, neighborhood, region, coordinates, every listing photo, description, and availability — for sale and rental property across Mexico.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Actor: parsebird/pincali-scraper — scrapes property listings from pincali.com (Mexico real estate, sale + rent). Input: {"startUrl": "https://www.pincali.com/en/properties/apartments-for-sale", "keyword": "Tulum", "min_price": 2000000, "max_price": 9000000, "property_type_ids": ["29057"], "min_bedrooms": 2, "max_bedrooms": 4, "min_bathrooms": 2, "max_bathrooms": null, "results_wanted": 50, "max_pages": 10, "proxyConfiguration": {"useApifyProxy": true}}. startUrl is a Pincali search URL (/en/properties/apartments-for-sale, /houses-for-sale, /properties-for-rent) or a single listing URL. property_type_ids: Apartment 29057, House 29058. All filter fields are optional. results_wanted caps saved listings; max_pages caps result pages (~42 listings/page). Run via ApifyClient("YOUR_TOKEN").actor("parsebird/pincali-scraper").call(run_input=input). Output per listing: listing_id, easybroker_id, title, url, image_url, image_urls, description, property_type, bedrooms, bathrooms, floor_size, floor_size_unit, locality, region, country, price, currency, offers, availability, date_posted, latitude, longitude, exact_location, source_url, page, scraped_at. Get an API token at https://console.apify.com/account#/integrations. Full API spec: https://apify.com/parsebird/pincali-scraper/api
```

### What does Pincali Mexico Real Estate Scraper do?

Pincali Mexico Real Estate Scraper is a **Pincali scraper and Mexico real estate data extractor**. Pincali aggregates listings from thousands of agencies through the EasyBroker network — apartments, houses, land, and commercial property for sale and for rent across every Mexican state — and this actor reads that public search data into a structured dataset. No Pincali account or API key is required.

🔍 **Search or single listing** — paste a Pincali search-results URL (the scraper mirrors the operation type in the URL) or a single property URL for a one-off record.

🏙️ **Filter the search** — layer a **keyword** (neighborhood, city, or development name), **min/max price**, **property type IDs** (Apartment `29057`, House `29058`), **min/max bedrooms**, and **min/max bathrooms** on top of the Start URL.

📄 **Auto-pagination** — the scraper walks result pages for you up to your `max_pages` limit and stops at `results_wanted`. Do not add `?page=` to the URL.

💰 **Price and offers** — asking price, currency code, and the full `offers` array with availability status.

📐 **Property detail** — property type, bedrooms, bathrooms, and built floor size with its unit code.

📍 **Location** — locality (neighborhood or municipality), region (state), country, and exact latitude/longitude from the listing card.

🖼️ **Media** — the primary image plus the card's image gallery.

#### Why scrape Pincali?

- Build a **Mexico real estate dataset** — price per m², bedrooms, and supply by city or state
- Track **new listings** in a target neighborhood and get notified when they appear
- Generate **agency and development leads** from active listings
- Feed a **property portal, CRM, or valuation model** with structured Pincali data
- Run **rent vs. buy** and price analysis across Mexican markets

### What data can you extract from Pincali?

| Field | Type | Description |
|-------|------|-------------|
| listing\_id | string | null | Pincali listing identifier when published |
| easybroker\_id | string | null | EasyBroker public code (e.g. `EB-WZ0763`) |
| title | string | Listing headline |
| url | string | Direct public listing URL |
| image\_url | string | null | Primary image URL |
| image\_urls | string\[] | Image URLs available on the listing card |
| description | string | null | Published listing description |
| property\_type | string | null | Property type supplied by the listing |
| bedrooms / bathrooms | number | null | Bedroom and total bathroom counts |
| floor\_size / floor\_size\_unit | number / string | Built area value and unit code (e.g. `MTK` for m²) |
| locality | string | null | City, locality, or neighborhood |
| region | string | null | State or broader region |
| country | string | null | Country from the listing |
| price | number | null | Main asking price |
| currency | string | null | Currency code for the asking price |
| offers | object\[] | null | Full schema.org offers array (price, currency, availability) |
| availability | string | null | Published availability status |
| date\_posted | string | null | Original publication date when available |
| latitude / longitude | number | null | Coordinates from the listing card |
| exact\_location | boolean | Whether Pincali marks the pin as exact |
| source\_url | string | Search page used to collect the record |
| page | number | Result page number where the record was found |
| scraped\_at | string | ISO 8601 timestamp of the run |

### How to scrape Pincali.com

1. Open [Pincali Mexico Real Estate Scraper](https://apify.com/parsebird/pincali-scraper) and click **Try for free**.
2. On [pincali.com](https://www.pincali.com), open the search you want — apartments for sale, houses for sale, or properties for rent — and copy the URL from your browser.
3. Paste it into **Start URL**. Do not add `?page=` — pagination is automatic.
4. Add optional filters: **keyword**, **min/max price**, **property type IDs** (`29057` apartment, `29058` house), **min/max bedrooms**, **min/max bathrooms**.
5. Set **Results wanted** and **Max pages** (start low to keep the first run cheap and fast).
6. Click **Start**, then export the dataset as **JSON, CSV, Excel, or HTML**, or pull it via the API.

#### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| startUrl | string | **Yes** | Apartments for sale | Pincali listing or search URL |
| keyword | string | No | — | Free-text search applied with the other filters |
| min\_price / max\_price | integer | No | — | Price bounds in the listing currency |
| property\_type\_ids | string\[] | No | — | Pincali property type IDs (Apartment `29057`, House `29058`) |
| min\_bedrooms / max\_bedrooms | integer | No | — | Bedroom bounds |
| min\_bathrooms / max\_bathrooms | integer | No | — | Bathroom bounds |
| results\_wanted | integer | No | 20 | Maximum listings to save |
| max\_pages | integer | No | 5 | Maximum result pages to visit (~42 listings per page) |
| proxyConfiguration | object | No | Residential | Proxy configuration. Pincali blocks datacenter IPs, so an Apify residential proxy is used by default |

### Output example

```json
{
  "listing_id": "6240763",
  "easybroker_id": "EB-WZ0763",
  "title": "Modern apartment with terrace in Polanco",
  "url": "https://www.pincali.com/en/home/oportunidad-3ra-seccion-polanco",
  "image_url": "https://assets.easybroker.com/property_images/6240763/110707248/EB-WZ0763.jpeg",
  "image_urls": [
    "https://assets.easybroker.com/property_images/6240763/110707248/EB-WZ0763.jpeg",
    "https://assets.easybroker.com/property_images/6240763/110707250/EB-WZ0763.jpeg"
  ],
  "description": "Apartment in Polanco III Sección, Miguel Hidalgo",
  "property_type": "Apartment",
  "bedrooms": 3,
  "bathrooms": 2,
  "floor_size": 254,
  "floor_size_unit": "MTK",
  "locality": "Miguel Hidalgo",
  "region": "Mexico City",
  "country": "Mexico",
  "price": 15400000,
  "currency": "MXN",
  "offers": [
    { "@type": "Offer", "price": 15400000.0, "priceCurrency": "MXN", "availability": "https://schema.org/InStock" }
  ],
  "availability": "https://schema.org/InStock",
  "date_posted": "2026-09-10T04:43:53-06:00",
  "latitude": 19.4314779,
  "longitude": -99.201924,
  "exact_location": true,
  "source_url": "https://www.pincali.com/en/properties/apartments-for-sale",
  "page": 1,
  "scraped_at": "2026-09-10T11:00:00Z"
}
```

Download results in **JSON, CSV, Excel, or HTML** from the Apify Console or via the API.

### Use cases

- 📊 **Mexico housing market research** — price-per-m² and supply datasets by city, state, or property type
- 🔔 **New-listing monitoring** — schedule the actor and alert on fresh listings in a target area
- 🧲 **Real estate lead lists** — pull active listings for a neighborhood or development
- 🏠 **Property portals and search tools** — power a property-finder with structured Pincali data
- 🤖 **Dashboards and bots** — feed a BI dashboard or chatbot with live Mexican real estate listings
- 💹 **Investment analysis** — compare asking prices and rental yields across regions

### How it works

1. **Search spec** — the Start URL sets the operation type (sale or rent); your filters are layered on as Pincali `search_criteria` parameters.
2. **Solve once** — the actor solves Pincali's anti-bot challenge a single time with a real browser engine, then reuses the session for fast page requests.
3. **Paginate** — result pages are fetched in order until `results_wanted`, `max_pages`, or the last page is reached; repeated pages are detected and stop the run.
4. **Parse** — each listing card's structured data (schema.org JSON-LD) plus its coordinates and image gallery are mapped to a clean record.
5. **Output** — records are de-duplicated by URL and pushed to the dataset.

### How much does it cost to scrape Pincali?

Pincali Mexico Real Estate Scraper uses [pay-per-event pricing](https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event). One event is charged per listing pushed to the dataset. Platform compute is included.

| Plan | Price per listing | Price per 1,000 listings |
|------|-------------------|--------------------------|
| Free | $0.00099 | **$0.99** |
| Bronze | $0.00089 | **$0.89** |
| Silver | $0.00079 | **$0.79** |
| Gold | $0.00069 | **$0.69** |

**Example:** a run that saves 500 listings costs $0.50 on the Free plan. Listings dropped by the result cap are never charged.

You can run Pincali Mexico Real Estate Scraper with the [free monthly usage credits](https://apify.com/pricing) on every Apify plan.

### Integrations and API access

Pincali Mexico Real Estate Scraper works with the full [Apify platform](https://docs.apify.com/platform):

- **API access** — run it and fetch results via the [REST API](https://docs.apify.com/api/v2) or the Python and JavaScript clients
- **Scheduling** — set up recurring runs with the [Apify Scheduler](https://docs.apify.com/platform/schedules) to track new listings
- **Webhooks** — trigger downstream work when a run finishes
- **Integrations** — push data to [Google Sheets](https://apify.com/apify/google-sheets), [Slack](https://docs.apify.com/platform/integrations/slack), [Zapier](https://docs.apify.com/platform/integrations/zapier), [Make](https://docs.apify.com/platform/integrations/make), Airtable, and more

#### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run_input = {
    "startUrl": "https://www.pincali.com/en/properties/houses-for-sale",
    "property_type_ids": ["29058"],
    "max_price": 5000000,
    "min_bathrooms": 2,
    "results_wanted": 50,
    "max_pages": 10,
}

run = client.actor("parsebird/pincali-scraper").call(run_input=run_input)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["price"], row["currency"], row["bedrooms"], row["locality"], row["url"])
```

#### JavaScript example

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const input = {
    startUrl: 'https://www.pincali.com/en/properties/properties-for-rent',
    keyword: 'Tulum',
    min_bedrooms: 1,
    max_bedrooms: 3,
    results_wanted: 30,
    max_pages: 5,
};

const run = await client.actor('parsebird/pincali-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((l) => console.log(`${l.price} ${l.currency}\t${l.bedrooms}bd\t${l.locality}\t${l.url}`));
```

### Pricing

| Event | Price per event (Free) | Price per 1,000 |
|-------|------------------------|-----------------|
| listing | $0.00099 | **$0.99** |

One event per listing in the dataset. Bronze, Silver, and Gold plans pay less — see the cost section above.

### FAQ

**Where does the data come from?**
Pincali's public property search pages — the same data anyone browsing [pincali.com](https://www.pincali.com) sees. No login and no Pincali account is required.

**How do I scrape houses instead of apartments?**
Use a `houses-for-sale` Start URL, or pass `property_type_ids: ["29058"]`. For apartments use `29057`.

**How do I filter by neighborhood or development?**
Put its name in **keyword** (e.g. `Vista Lomas`, `Tulum`). The keyword is submitted as part of the same Pincali search as the price, type, and room filters.

**How many listings can I get per run?**
As many as `results_wanted`, bounded by `max_pages` × ~42 listings per page. For very large collections, split the search by city, price band, or property type and run each URL.

**Why does the first minute of a run show no results?**
Pincali is protected by an anti-bot challenge that the actor solves once at the start of each run before it begins collecting listings. This warm-up usually takes one to three minutes; scraping is fast afterwards.

**Why did my run return fewer results than `results_wanted`?**
The search may have fewer matching listings than your cap, or `max_pages` was reached first. Pincali also repeats the last page for out-of-range page numbers — the scraper detects this and stops.

**Does it cover rentals?**
Yes. Use a `properties-for-rent` Start URL. Prices are then monthly rents in the listing currency.

**Can I schedule recurring runs?**
Yes — use [Apify scheduling](https://docs.apify.com/platform/schedules) and webhooks to keep a listings feed fresh.

**Found a bug or need a field added?**
Open the **Issues** tab on the Actor page.

### Is it legal to scrape Pincali?

Pincali Mexico Real Estate Scraper collects publicly available information: property listings that Pincali publishes for anyone to browse. It does not log in, submit inquiries, or access personal data.

Scraping public data is generally legal, as reaffirmed by the [US Ninth Circuit in hiQ Labs v. LinkedIn](https://www.eff.org/deeplinks/2022/04/scraping-public-websites-still-isnt-crime-court-reaffirms). Make sure your use complies with applicable law (including Mexican data-protection rules) and with Pincali's Terms of Use. This actor is independent and not affiliated with or endorsed by Pincali or EasyBroker. See Apify's guide to [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related actors

- [Trulia Property Scraper](https://apify.com/parsebird/trulia-property-scraper) — US homes for sale and rent with prices and details
- [Apartments.com Scraper & API](https://apify.com/parsebird/apartments-com-scraper) — US rental listings, prices, and property detail
- [LandWatch.com Scraper](https://apify.com/parsebird/landwatch-scraper) — US rural land and land agents
- [Craigslist Real Estate Scraper](https://apify.com/parsebird/craigslist-real-estate-scraper) — for-sale and rental listings from Craigslist
- [Milanuncios Scraper](https://apify.com/parsebird/milanuncios-scraper) — Spanish classifieds including real estate

# Actor input Schema

## `startUrl` (type: `string`):

A Pincali listing or search URL, e.g. https://www.pincali.com/en/properties/apartments-for-sale , /houses-for-sale , or /properties-for-rent. Do not add ?page= — pagination is automatic.

## `keyword` (type: `string`):

Free-text search applied together with the other filters, such as a neighborhood, city, or development name (e.g. "Tulum", "Vista Lomas").

## `property_type_ids` (type: `array`):

Pincali property type IDs. Apartment is 29057; House is 29058. Leave empty to use whatever the Start URL slug implies.

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

Minimum price in the listing currency (MXN unless the search is set otherwise).

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

Maximum price in the listing currency.

## `min_bedrooms` (type: `integer`):

Minimum bedroom count.

## `max_bedrooms` (type: `integer`):

Maximum bedroom count.

## `min_bathrooms` (type: `integer`):

Minimum bathroom count.

## `max_bathrooms` (type: `integer`):

Maximum bathroom count.

## `results_wanted` (type: `integer`):

Maximum number of listings to save.

## `max_pages` (type: `integer`):

Maximum number of result pages to visit (about 42 listings per page).

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

Pincali is behind AWS WAF, which blocks datacenter IPs. A residential proxy is required — the default is Apify residential proxy.

## Actor input object example

```json
{
  "startUrl": "https://www.pincali.com/en/properties/apartments-for-sale",
  "property_type_ids": [],
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrl": "https://www.pincali.com/en/properties/apartments-for-sale",
    "property_type_ids": [],
    "results_wanted": 20,
    "max_pages": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/pincali-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 = {
    "startUrl": "https://www.pincali.com/en/properties/apartments-for-sale",
    "property_type_ids": [],
    "results_wanted": 20,
    "max_pages": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/pincali-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 '{
  "startUrl": "https://www.pincali.com/en/properties/apartments-for-sale",
  "property_type_ids": [],
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parsebird/pincali-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/pincali-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/0Ga1TSMDrhY8LqRon/builds/5jsgx43J1fbXfzbIq/openapi.json
