# Encuentra24 Scraper — Central America Property & Cars (`logiover/encuentra24-scraper`) Actor

Scrape Encuentra24 across Panama, Costa Rica, Nicaragua, El Salvador, Guatemala and Honduras: price and price per m², area, rooms, bathrooms, coordinates, advertiser name, licence and phone. Property, cars and jobs. Keyless. JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/encuentra24-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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 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

## Encuentra24 Scraper — Central America Property & Cars

Export listings from **Encuentra24**, the largest classifieds network in Central America — price, area, rooms, coordinates and advertiser contact details — to JSON, CSV or Excel. Keyless, no login.

### What does Encuentra24 Scraper do?

Encuentra24 is the dominant marketplace in **Panama, Costa Rica, Nicaragua, El Salvador, Guatemala and Honduras**. This Actor scrapes its property verticals — sale, rent, land, offices and retail — across any of those six markets, and any other category via a path override.

The site is a React Server Components app, which is worth explaining because it changes what is possible. The listings are not present as HTML markup — they are streamed into the page as escaped string chunks. This Actor reassembles that stream and reads the results array out of it, which means it gets the *full* record for every listing rather than only the handful of fields the card happens to display.

That difference is large. From a single search page you get price **and price per square metre**, area and lot size, rooms, bathrooms and parking spaces, exact coordinates, the advertiser's name, company, real-estate **licence number**, phone and WhatsApp — plus the created and last-updated timestamps.

React's stream also carries its own sentinels: dates come through prefixed with `$D` and missing values as the literal text `$undefined`. Both are normalised, because a column full of `$undefined` is worse than an empty one.

### Who is it for?

- **Real-estate agencies** in Panama City, San José or San Salvador tracking competitor stock.
- **Investors** comparing price per m² across Central American cities.
- **Lead-generation teams** building advertiser lists with phone and licence data.
- **Analysts** measuring supply and pricing across six national markets at once.

### Use cases

- Pull every apartment for sale in Panama with price per m², area and coordinates.
- Build an agent and agency contact list, filtered to licensed advertisers.
- Compare rental asking prices between Costa Rica and Panama.
- Track new developments separately using the new-developments category.
- Export office and retail supply for a commercial-market report.

### Why use this Actor?

- **Six countries** from one dropdown.
- **Price per m² computed by the site itself**, not estimated afterwards.
- **Advertiser phone, WhatsApp and licence number** where published.
- **Exact coordinates** on every listing.
- **Created and updated timestamps**, so you can measure time on market.
- **Every property vertical** — sale, rent, land, offices, retail — with a path override for anything else.

### What data can you extract?

Every row carries the listing ID, title and URL, main and sub-category, vertical, price with currency and price per m², area and lot size, rooms, bathrooms and parking, floor, age, pet-friendly and swimming-pool flags, project status, address, locality and city, latitude and longitude, advertiser name, ID, company, licence, type and verified flag, contact phone and WhatsApp, featured level, active flag, image count and cover image, a plain-text description, and the created and updated dates.

### How to use it

1. Choose the **country market** — Panama, Costa Rica, Nicaragua, El Salvador, Guatemala or Honduras.
2. Pick a **category** from the list.
3. To scrape a category that is not listed, paste its path into **Category path override**.
4. Set **Maximum results** and run, then export JSON, CSV or Excel.

### Input example

```json
{
  "market": "costa-rica-es",
  "category": "bienes-raices-venta-de-propiedades-casas",
  "maxResults": 1000
}
```

### Notes and limits

- Prices are asking prices, quoted in the market's own currency — the currency code is exported per row because Panama and El Salvador use USD while Costa Rica uses colones.
- Advertiser phone numbers are the business contact details published on the advert itself. You remain responsible for how you use them, including under local law when sending marketing.
- Sparse columns — floor, project status, pet-friendly — are populated only where the advertiser filled them in; that is the source data, not a gap in the export.
- The description is converted from HTML to plain text and truncated; open the listing URL for the full advert.
- The category list covers Encuentra24's property verticals, which is where the structured fields (area, rooms, price per m²) exist. Other verticals such as vehicles use different slugs and different attributes; use the override field for those and expect the property-specific columns to be empty.

### FAQ

**Do I need an Encuentra24 account?**
No. Listings are public and the Actor needs nothing from you.

**How do I scrape a category that is not in the dropdown?**
Open that category on Encuentra24 and copy the path segment after the country code into the override field.

**Which countries are covered?**
Panama, Costa Rica, Nicaragua, El Salvador, Guatemala and Honduras.

**Is price per m² calculated by this Actor?**
No — it is the site's own figure, which is why it matches what buyers see.

**How am I charged?**
Pay per result — you pay for the listings delivered.

# Actor input Schema

## `market` (type: `string`):

Which Encuentra24 country site to scrape.

## `category` (type: `string`):

Which Encuentra24 category to list.

## `categoryPathOverride` (type: `string`):

Optional. Paste any Encuentra24 category path from a search URL to scrape a category not in the list above. Overrides the dropdown when set.

## `maxResults` (type: `integer`):

Stop after this many listings. Encuentra24 renders 20 per page and the Actor walks pages until the target is met.

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

Encuentra24 streams its listings into the page; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "market": "panama-es",
  "category": "bienes-raices-venta-de-propiedades-apartamentos",
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listingId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `listingUrl` (type: `string`):

No description

## `mainCategory` (type: `string`):

No description

## `subCategory` (type: `string`):

No description

## `vertical` (type: `string`):

No description

## `priceAmount` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `pricePerSqm` (type: `string`):

No description

## `areaSqm` (type: `string`):

No description

## `lotSizeSqm` (type: `string`):

No description

## `rooms` (type: `string`):

No description

## `bathrooms` (type: `string`):

No description

## `parking` (type: `string`):

No description

## `floor` (type: `string`):

No description

## `ageLabel` (type: `string`):

No description

## `petFriendly` (type: `string`):

No description

## `swimmingPool` (type: `string`):

No description

## `projectStatus` (type: `string`):

No description

## `address` (type: `string`):

No description

## `locality` (type: `string`):

No description

## `city` (type: `string`):

No description

## `latitude` (type: `string`):

No description

## `longitude` (type: `string`):

No description

## `advertiserName` (type: `string`):

No description

## `advertiserId` (type: `string`):

No description

## `advertiserCompany` (type: `string`):

No description

## `advertiserLicense` (type: `string`):

No description

## `advertiserType` (type: `string`):

No description

## `isVerifiedAdvertiser` (type: `string`):

No description

## `contactPhone` (type: `string`):

No description

## `contactWhatsapp` (type: `string`):

No description

## `featuredLevel` (type: `string`):

No description

## `isActive` (type: `string`):

No description

## `imageCount` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `description` (type: `string`):

No description

## `dateCreated` (type: `string`):

No description

## `dateUpdated` (type: `string`):

No description

## `source` (type: `string`):

No description

## `scrapedAt` (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 = {
    "market": "panama-es",
    "category": "bienes-raices-venta-de-propiedades-apartamentos",
    "categoryPathOverride": "",
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/encuentra24-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 = {
    "market": "panama-es",
    "category": "bienes-raices-venta-de-propiedades-apartamentos",
    "categoryPathOverride": "",
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/encuentra24-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 '{
  "market": "panama-es",
  "category": "bienes-raices-venta-de-propiedades-apartamentos",
  "categoryPathOverride": "",
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/encuentra24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/encuentra24-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/4doadpRSIAJQq2jIV/builds/FlnMAnNYsgMS8tKKz/openapi.json
