# Patiotuerca Scraper - Ecuador Used Cars & Dealer Phones (`normdata/patiotuerca-scraper`) Actor

Scrape used cars, motorcycles, trucks and machinery from Patiotuerca, Ecuador's top car marketplace. Get price, discounts, km, year, specs, city and photos, plus seller phone, WhatsApp, dealer and equipment. Filter by brand, model, province, city, price, year, km, fuel and more.

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

## Pricing

from $4.50 / 1,000 vehicles

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?

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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚗 Patiotuerca Scraper - Ecuador Used Cars & Dealer Phones

Extract used cars, motorcycles, trucks, machinery, boats and more from **Patiotuerca (ecuador.patiotuerca.com)**, Ecuador's biggest vehicle marketplace, with about 9,500 listings from dealers and private sellers across the country. For each vehicle you get the **price, old price on price cuts, year, km, transmission, color, body type, vehicle type, city, listing plan, featured and promotion flags, and every photo**. Turn on **vehicle details** to also get the **seller's phone numbers and WhatsApp, seller type (dealer or private), dealer name, rating and verified badge, fuel, drive, engine, A/C, windows, steering, upholstery, plate hints, province, description, equipment, extras and dealer offers**. It collects **1,000 vehicles in about 30 seconds** and can run on a schedule to send you **only new listings**.

### 🎯 Who uses it?

#### 🏪 Car dealers and traders

See what every dealer and private seller in Ecuador is asking, by brand, model, year and km, to price your stock and find cars to buy.

#### 📞 Sales and lead generation teams

Get the phone and WhatsApp of every dealer and private seller: insurers, lenders, detailers, parts shops and importers use them as leads.

#### 📊 Market and pricing analysts

Build used-car price models for Ecuador by brand, model, year, km, province and body type, and track price cuts and promotions over time.

#### 🔔 Car buyers and resellers

Get a daily list of new listings for the cars you want, with the seller's WhatsApp ready.

### ✨ What it does

- **Every vehicle type.** Cars, motorcycles, trucks and buses, heavy machinery, boats and jet skis, bicycles and others (trailers, campers, golf carts).
- **Sort like on the site.** Newest listings, recommended, cheapest, most expensive, fewest or most km, newest or oldest year, most viewed.
- **Many filters.** Brand, model, search words, province, city, price, year, km, fuel, transmission, body type, color, drive (4x4, AWD...), dealer or private seller, only on promotion and only discounted.
- **Smart model match.** "Hilux" finds "Hilux CD 4x4 Diesel", "New Hilux SR" and every other way sellers write it, not only the exact model name.
- **Vehicle details add-on:** opens each vehicle page for the seller's phones and WhatsApp, the dealer, the specs, the equipment and every full-size photo.
- **Or paste links.** Vehicle pages, or any search results page from the site with the filters you set there. Filters are not used with links.
- **Monitoring:** run it on a schedule with **Only new vehicles**, and each run saves only the listings you haven't received yet.

### 🏆 Why this scraper

- **Fast.** 1,000 vehicles in about 30 seconds without details.
- **Complete.** The site sometimes fails to load one results page. The scraper notices, and reads the list again in another order to get the vehicles that were missing.
- **Clean, typed data.** Prices, km and years are numbers. Phones and WhatsApp are in international format (+593...). Machinery mileage says it is in hours.
- **All the seller's numbers.** Call phone, WhatsApp and every other number on the page, in one list.
- **Nothing to set up.** No proxy, no login.

### ⚖️ How it compares

| | **This Actor** | scrapers_lat/patiotuerca-scraper |
| --- | --- | --- |
| Vehicle types | Cars, motorcycles, trucks, machinery, boats, bicycles, others | Cars |
| Filters | 16: brand, model, search words, province, city, price, year, km, fuel, transmission, body, color, drive, seller type, promotion, discount | Make and model |
| Seller phone | Yes, plus WhatsApp, WhatsApp link and every other number | Phone |
| Dealer name, rating, verified badge, logo | Yes | No |
| Equipment, extras, dealer offers, description | Yes | No |
| Plate hints, A/C, windows, steering, upholstery | Yes | No |
| Every photo, full size | Yes | No |
| Old price on price cuts, promotion end date | Yes | No |
| Only new listings (monitoring) | Yes | No |
| Price per vehicle with phone (Free plan) | $0.018 ($0.006 base + $0.012 details) | $0.02 |
| Price per vehicle without phone (Free plan) | $0.006 | No such option |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `imageUrl` | Main photo, full size. |
| `title` | Brand, model and year. |
| `brand`, `model` | Brand and model, as the seller wrote them. |
| `year` | Model year. |
| `price` | Asking price in US dollars (Ecuador uses the dollar). |
| `originalPrice` | Price before a price cut. |
| `currency` | Always USD. |
| `mileage`, `mileageUnit` | Kilometers driven and the unit (km, mi, or hours for machinery). Empty when the seller did not say. |
| `transmission` | Transmission, like Automática, Manual or CVT. |
| `color` | Color, in Spanish (Blanco, Plata, Negro...). |
| `bodyType` | Body type, like SUV, Sedán or Camioneta Doble Cabina. |
| `vehicleType` | Autos, Motos, Pesados, Maquinarias, Acuáticos, Bicicletas or Otros. |
| `city` | City the vehicle is in. |
| `id` | The site's vehicle ID. |
| `listingPlan` | Paid listing plan (GOLD or STANDAR) and featured flag. Empty for vehicle links. |
| `photoCount` | Number of photos. |
| `sellerType` | *(Vehicle details)* Dealer or Private. |
| `priceType` | *(Vehicle details)* Negociable (negotiable) or fixed. |
| `fuel` | *(Vehicle details)* Fuel, like Gasolina, Diesel, Híbrido or Eléctrico. |
| `drive` | *(Vehicle details)* Drive, like 4 x 2, 4 x 4 or AWD. |
| `engine`, `engineSize` | *(Vehicle details)* Engine and engine size as the seller wrote them. |
| `airConditioning`, `windows`, `steering`, `upholstery` | *(Vehicle details)* Air conditioning, windows, steering and upholstery, in Spanish. |
| `plateFirstLetter`, `plateLastDigit` | *(Vehicle details)* First letter of the plate (the province it was registered in) and its last digit (sets the "pico y placa" driving day). |
| `province` | *(Vehicle details)* Province the vehicle is in. |
| `description` | *(Vehicle details)* Seller's description. |
| `dealerId`, `dealerName` | *(Vehicle details)* Seller's site ID and name (dealer or private person). |
| `dealerRating`, `dealerReviews` | *(Vehicle details)* Dealer rating (1 to 5) and number of reviews. |
| `phone`, `whatsapp`, `featured` | *(Vehicle details)* Seller's phone and WhatsApp, in +593 format. |
| `onPromotion` | The site runs a promotion on it, and until when. |
| `financingAvailable` | *(Vehicle details)* The seller offers financing. |
| `dealerVerified` | *(Vehicle details)* The site verified the seller. |
| `url` | Link to the vehicle page. |
| `dealerLogoUrl`, `whatsappUrl` | *(Vehicle details)* Dealer logo and WhatsApp chat link. |
| `photos` | Every photo, full size (all of them with the add-on). |
| `phones` | *(Vehicle details)* Every phone number of the seller. |
| `features` | *(Vehicle details)* Equipment, like "Airbag" or "Cámara de retroceso", in Spanish. |
| `extras` | *(Vehicle details)* Extras, like "Acepto Vehículo" (takes a trade-in) or "Documentos al día". |
| `promotions`, `promotionUntil` | *(Vehicle details)* Dealer's promotions on this vehicle. |
| `scrapedAt` | When this row was saved. |
| `error` | Only present when a row failed. The fields that loaded are still there. |

Fields marked *Vehicle details* only appear when that add-on is on.

#### Example row (trimmed)

```json
{
  "imageUrl": "https://images.patiotuerca.com/thumbs/w/lg/amz_ptf_ecuador/22102026/1993626/o_o/pt_1993626_1792710397646_156.jpg",
  "title": "Toyota Agya 2024",
  "brand": "Toyota",
  "model": "Agya",
  "year": 2024,
  "price": 15900,
  "currency": "USD",
  "mileage": 20900,
  "mileageUnit": "km",
  "transmission": "Manual",
  "color": "Gris",
  "bodyType": "Hatchback (5 Puertas)",
  "vehicleType": "Autos",
  "city": "Quito",
  "id": "1993626",
  "listingPlan": "GOLD",
  "photoCount": 21,
  "sellerType": "Dealer",
  "priceType": "Negociable",
  "fuel": "Gasolina",
  "drive": "4 x 2",
  "engine": "1.2 WA-VE Dual",
  "engineSize": "1200",
  "airConditioning": "Aire Acondicionado",
  "windows": "Eléctricos",
  "steering": "Asistida",
  "upholstery": "Tela",
  "plateFirstLetter": "P",
  "plateLastDigit": "9",
  "province": "Pichincha",
  "description": "Este Toyota Agya del año 2024 es un auto compacto y ágil, ideal para la ciudad. Su diseño moderno combina practicidad y estilo, perfecto para quienes buscan un vehículo eficiente ...",
  "dealerId": "1306",
  "dealerName": "Autocor Av. Eloy Alfaro",
  "dealerRating": 5,
  "dealerReviews": 1,
  "phone": "+593990436699",
  "whatsapp": "+593990436699",
  "featured": true,
  "onPromotion": false,
  "financingAvailable": false,
  "dealerVerified": true,
  "url": "https://ecuador.patiotuerca.com/vehicle/autos-toyota-agya-quito-2024/1993626",
  "dealerLogoUrl": "https://images.patiotuerca.com/thumbs/s/100xC/amz_ptf_ecuador/dealers/1306/micrositio.jpg",
  "whatsappUrl": "https://wa.me/593990436699",
  "photos": [
    "https://images.patiotuerca.com/thumbs/w/lg/amz_ptf_ecuador/22102026/1993626/o_o/pt_1993626_1792710397646_156.jpg",
    "https://images.patiotuerca.com/thumbs/w/lg/amz_ptf_ecuador/22102026/1993626/o_o/pt_1993626_1792710398645_302.jpg",
    "https://images.patiotuerca.com/thumbs/w/lg/amz_ptf_ecuador/22102026/1993626/o_o/pt_1993626_1792710399839_90.jpg"
  ],
  "phones": ["+593990436699", "+593983005861"],
  "extras": ["Acepto Vehículo", "Documentos al día", "Garantía de Casa"],
  "promotions": ["En Autocor compra de contado y recibe bonos de descuento."],
  "scrapedAt": "2026-10-23T04:09:45.652Z"
}
```

### 💡 Use cases

**Every dealer and private seller phone for Toyota and Chevrolet pickups in Guayas and Pichincha:**

```json
{
  "vehicleTypes": ["cars"],
  "brands": ["Toyota", "Chevrolet"],
  "bodyTypes": ["Camioneta Doble Cabina", "Camioneta Cabina Simple"],
  "provinces": ["Guayas", "Pichincha"],
  "includeDetails": true
}
```

**Hilux and D-Max 4x4 diesel, 2019 or newer, under 35,000 USD:**

```json
{
  "brands": ["Toyota", "Chevrolet"],
  "models": ["Hilux", "D-Max"],
  "drives": ["4 x 4"],
  "fuels": ["Diesel"],
  "minYear": 2019,
  "maxPrice": 35000
}
```

**Private sellers only, with their WhatsApp:**

```json
{
  "vehicleTypes": ["cars"],
  "sellerType": "private",
  "includeDetails": true,
  "maxItems": 500
}
```

**Hybrid and electric SUVs in Quito and Cuenca, cheapest first:**

```json
{
  "fuels": ["Híbrido", "Eléctrico"],
  "bodyTypes": ["SUV", "Todoterreno", "Crossover"],
  "cities": ["Quito", "Cuenca"],
  "sortBy": "menor-precio"
}
```

**New listings every day (schedule this run):**

```json
{
  "sortBy": "ultimos-publicados",
  "onlyNew": true,
  "monitorName": "daily-listings"
}
```

**Links (filters are not used):**

```json
{
  "startUrls": [
    { "url": "https://ecuador.patiotuerca.com/usados/-/autos/-/kia/sportage" },
    { "url": "https://ecuador.patiotuerca.com/usados/pichincha-quito/autos/-/toyota/fortuner?year_min=2020" },
    { "url": "https://ecuador.patiotuerca.com/vehicle/autos-changan-uni-t-quito-2023/1961665" }
  ],
  "includeDetails": true
}
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty means no limit. |
| **What to scrape** | Vehicle types, sort by, search words, brands, models, provinces, cities and vehicle details (seller phone, WhatsApp, dealer, specs, equipment). |
| **Filters** | Minimum price (USD), maximum price (USD), from year, to year, minimum km, maximum km, fuel, transmission, body type, color, drive, seller, only on promotion and only discounted. |
| **Monitoring** | Only new vehicles and monitor name. |
| **Links** | Links instead of the fields above. Filters are ignored with links. |

### 💰 Pricing

Pay-per-event: a one-time **$0.003** when the run starts, plus a price per vehicle saved to your dataset. The price depends on your Apify plan tier:

| Your Apify plan | Price per vehicle |
| --- | --- |
| Free | $0.006 |
| Bronze | $0.0055 |
| Silver | $0.005 |
| Gold / Platinum / Diamond | $0.0045 |

**Vehicle details add-on:** when **Vehicle details** is on, each vehicle saved with its page details adds one more charge:

| Your Apify plan | Vehicle details, per vehicle |
| --- | --- |
| Free | $0.012 |
| Bronze | $0.011 |
| Silver | $0.010 |
| Gold / Platinum / Diamond | $0.009 |

Approximate total cost:

| Vehicles collected | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| 1,000 | $6.00 | $5.50 | $5.00 | $4.50 |
| 1,000 with details | $18.00 | $16.50 | $15.00 | $13.50 |
| 9,500 (the whole site) | $57.00 | $52.25 | $47.50 | $42.75 |

Vehicle pages that could not be read pay only the base price, and vehicles left out by filters are free. New Apify accounts start with $5 in free credit. On the Free plan, a run saves up to 10 vehicles.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Patiotuerca Scraper.
3. Pick vehicle types, add filters (or keep it empty for everything), then click **Start**.
4. Export the results as CSV, Excel, JSON or XML from the Dataset tab.

### 🤖 Use with AI agents (MCP)

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client, then ask in plain words, for example: *"Get every Kia Sportage under 25,000 USD on Patiotuerca in Guayaquil, with the seller's WhatsApp"*. The agent runs this Actor and reads the results.

### 🔧 Troubleshooting

- **Few or no results.** Fuel, transmission, body type and color use the site's Spanish names (pick them from the lists). Brands and cities are matched without accents or case. Loosen a filter if nothing matches.
- **Search words, models or "Only discounted" are slower.** The site cannot apply them, so every listing of the chosen types is checked. Add a brand or vehicle type to keep it quick.
- **Vehicle details are slower.** Each vehicle page is opened: about 1,000 vehicles in 12 minutes.
- **Some fields are empty.** They are empty on the site too: few listings are on promotion, and motorcycles, machinery and boats have no A/C, windows or upholstery.
- **A few more or fewer vehicles than the site's count.** Listings are added and sold while the run reads the site.

### ❓ FAQ

**How many vehicles are there?** About 9,100 cars, 230 motorcycles, 140 trucks, 60 machines and a few boats, bicycles and others as of October 2026.

**Are prices in dollars?** Yes. Ecuador uses the US dollar.

**What are plateFirstLetter and plateLastDigit?** The site shows only the plate's first letter (the province it was registered in) and its last digit (which sets the "pico y placa" driving restriction day).

**Do I need a proxy?** No.

### 🛡️ Limits & responsible use

This Actor collects vehicle listings that Patiotuerca publishes on its website, at a moderate pace. Use the data in line with the site's terms and Ecuador's data protection law (LOPDP). Seller phones belong to dealers and private people: follow anti-spam rules and only contact them about their listing.

### 📧 Contact

Questions, bugs or a field you need: norm.data.scrapers@gmail.com

### 🧪 Local development

```bash
bun install
bun scripts/gen-schemas.mjs
sh test/run.sh first '{"maxItems":10}'
```

# Actor input Schema

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

Stop after this many vehicles in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `vehicleTypes` (type: `array`):

Empty = every type.

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

The order the site lists them in. Empty = newest listings.

## `searchTerms` (type: `array`):

Keep only vehicles whose name has every word of one of these, like "hilux 4x4" or "rav4 hybrid". Matches brand, model, year, body, city and color.

## `brands` (type: `array`):

Only these brands, like "Toyota", "Chevrolet" or "Kia". Empty = every brand.

## `models` (type: `array`):

Only these models, like "Hilux", "Sportage" or "D-Max". "Hilux" also finds "Hilux CD 4x4 Diesel" and "New Hilux SR". Empty = every model.

## `provinces` (type: `array`):

Only vehicles in these provinces. Empty = all of Ecuador.

## `cities` (type: `array`):

Only vehicles in these cities, like "Quito", "Guayaquil", "Cuenca" or "Cumbayá".

## `includeDetails` (type: `boolean`):

Also read each vehicle page for the seller phone and WhatsApp, seller type, dealer name, rating and logo, fuel, drive, engine, A/C, windows, steering, upholstery, plate hints, province, description, equipment, extras, promotions and every full-size photo. Charged per vehicle as an add-on.

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

Asking price in US dollars.

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

Asking price in US dollars.

## `minYear` (type: `integer`):

Model year, like 2018.

## `maxYear` (type: `integer`):

Model year, like 2024.

## `minMileage` (type: `integer`):

Kilometers driven.

## `maxMileage` (type: `integer`):

Kilometers driven, like 80000. 0 = new or unused.

## `fuels` (type: `array`):

Keep only these fuels.

## `transmissions` (type: `array`):

Keep only these transmissions.

## `bodyTypes` (type: `array`):

Keep only these body types.

## `colors` (type: `array`):

Keep only these colors.

## `drives` (type: `array`):

Keep only these drive types.

## `sellerType` (type: `string`):

Dealers or private sellers. Empty = both.

## `onlyOnPromotion` (type: `boolean`):

Keep only vehicles in a site promotion (a sale price until a set date).

## `onlyDiscounted` (type: `boolean`):

Keep only vehicles with any price cut: promotions and lowered prices (the old price is in originalPrice). Checks every listing, so it takes a few minutes.

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

Skip vehicles saved by earlier runs with the same monitor name.

## `monitorName` (type: `string`):

Runs with the same name share their history. Use a different name for each schedule.

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

Vehicle pages (https://ecuador.patiotuerca.com/vehicle/autos-changan-uni-t-quito-2023/1961665) or search results pages with any filters you set on the site, like https://ecuador.patiotuerca.com/usados/pichincha-quito/autos/-/toyota/fortuner?year_min=2020.

## Actor input object example

```json
{
  "maxItems": 10,
  "vehicleTypes": [
    "cars"
  ]
}
```

# 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 = {
    "maxItems": 10,
    "vehicleTypes": [
        "cars"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/patiotuerca-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 = {
    "maxItems": 10,
    "vehicleTypes": ["cars"],
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/patiotuerca-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 '{
  "maxItems": 10,
  "vehicleTypes": [
    "cars"
  ]
}' |
apify call normdata/patiotuerca-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/patiotuerca-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/Hl8H7pRpkgA5gTZfh/builds/wak7D8r2QGsdSpg05/openapi.json
