# Otomoto.pl Scraper with Contacts (`parsebird/otomoto-scraper`) Actor

Scrape Otomoto.pl car listings from any search, category, dealer or listing URL: price, mileage, year, engine, fuel, location, seller, photos, equipment, VIN, and optional seller phone numbers.

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

## Pricing

from $0.59 / 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?

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

### Otomoto.pl Scraper with Contacts

**Otomoto.pl Scraper** extracts vehicle listings from [Otomoto.pl](https://www.otomoto.pl), one of Poland's largest marketplaces for cars, motorcycles, vans, trucks, trailers and machinery. Paste any Otomoto search, category, dealer or listing URL and get the price, mileage, year, engine, fuel, location, seller and photos, plus optional **seller phone numbers**, **VIN**, equipment and full descriptions, as clean JSON, CSV or Excel.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Use any Otomoto search with all its filters and sort order, a dealer's whole inventory, or single listings, and get 40+ structured fields per vehicle, with phone numbers for dealers and private sellers, VIN and registration number, the full equipment and parameter list (80+ items on well-equipped cars), and every photo on demand.
</td>
</tr></table>

##### Copy to your AI assistant

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

```
Apify Actor: parsebird/otomoto-scraper. Scrapes vehicle listings from Otomoto.pl (Polish marketplace for cars, motorcycles, vans, trucks, trailers, construction and agricultural machinery). Call via ApifyClient: client.actor("parsebird/otomoto-scraper").call(run_input={"startUrls": ["https://www.otomoto.pl/osobowe/bmw"], "limit": 100, "enrich_data": true, "get_contact": true}). Inputs: startUrls (array of strings: Otomoto search result or category URLs like https://www.otomoto.pl/osobowe/audi?search[filter_float_price:to]=60000 with any filters and sort order, dealer pages like https://<dealer>.otomoto.pl, or listing URLs https://www.otomoto.pl/osobowe/oferta/...html), limit (integer, max listings per URL, empty = all), enrich_data (boolean, default false: adds description, all photos, equipment, every parameter, VIN, registration number and date, seller address, coordinates, badges), get_contact (boolean, default false: adds seller phone numbers), proxyConfiguration (object, optional). Output: one record per listing with listing_id, url, title, status, short_description, description, pricing {amount, currency, evaluation, is_gross, labels}, vehicle {make, model, version, generation, year, mileage_km, fuel_type, gearbox, engine_capacity_cc, engine_power_hp, body_type, color, door_count, seat_count, transmission, condition, damaged, vin, registration_number, first_registration_date, main_features}, location {city, region, address, postal_code, coordinates}, seller {id, uuid, name, type, website_url, phone_number, phone_numbers, badges, active_ads, package}, media {thumbnail_url, image_urls, image_count}, features {equipment, equipment_groups}, signals {highlighted, promoted, cepik_verified, enriched}, attributes {parameters, details, category, source_dates}, source_context {source_url, seed_id, seed_type, page_index, position, scraped_at, record_fingerprint}. Pricing: pay per listing, plus per enriched listing and per listing with a phone number. Full API spec: https://apify.com/parsebird/otomoto-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is Otomoto.pl Scraper?

**Otomoto.pl Scraper** turns Otomoto listings into a structured dataset. Set up your search on Otomoto the way you normally would, copy the URL, and paste it into the Actor. Every filter in the URL is applied (make, model, generation, price, year, mileage, fuel, gearbox, body type, location and radius, seller type, damage status) along with the sort order.

It works as an **Otomoto API alternative**: you don't need an Otomoto account, an API key or a browser. Turn on **Get seller phone numbers** to add the numbers sellers show on their listings, which makes it a simple **car dealer lead** source for Poland.

### What can Otomoto.pl Scraper do?

- 🔎 **Any Otomoto search.** Paste search result or category URLs with any filters and sort order. Several URLs run in one go, each with its own limit.
- 🏢 **Whole dealer inventories.** Paste a dealer page (`https://<dealer>.otomoto.pl`) to collect every listing the dealer has, across all categories.
- 🚗 **Single listings.** Paste listing URLs (`/oferta/...html`) to collect specific vehicles.
- 📞 **Seller phone numbers.** Add the phone numbers dealers and private sellers show on their listing.
- 🧾 **Full listing details.** Add the description, every photo, the equipment list, every technical parameter, VIN, registration number, first registration date, seller address and map coordinates.
- 🚚 **All vehicle categories.** Cars (`osobowe`), motorcycles, vans, trucks, trailers, construction and agricultural machinery.
- ♻️ **No duplicates.** Promoted listings that repeat across pages or URLs are saved once.
- 📅 **Scheduling and monitoring.** Run daily with [Apify Schedules](https://docs.apify.com/platform/schedules) to track prices and new stock.
- 🔌 **API and integrations.** Use the [Apify API](https://docs.apify.com/api/v2), or send listings to Google Sheets, Zapier, Make, Slack or webhooks with [Apify integrations](https://docs.apify.com/platform/integrations). Export as JSON, CSV, Excel, XML or HTML.

### What data can you extract from Otomoto.pl?

| Field | Description |
|-------|-------------|
| `listing_id` / `url` / `title` | Otomoto listing ID, listing page and title |
| `pricing.amount` / `currency` | Price and currency (PLN or EUR) |
| `pricing.evaluation` | Otomoto's price indicator: `BELOW`, `IN`, `ABOVE` (market range) or `NONE` |
| `pricing.is_gross` / `labels` | Gross or net price, and labels like `INVOICE_ISSUED` (VAT invoice) or `INCLUDE_VAT` |
| `vehicle.make` / `model` / `version` / `generation` | Make, model, version and generation |
| `vehicle.year` / `mileage_km` | Production year and mileage |
| `vehicle.fuel_type` / `gearbox` / `transmission` | Fuel, gearbox and drive |
| `vehicle.engine_capacity_cc` / `engine_power_hp` | Engine capacity and power |
| `vehicle.body_type` / `color` / `door_count` / `seat_count` | Body type, color, doors and seats |
| `vehicle.condition` / `damaged` / `country_origin` | New or used, damaged flag, country of origin |
| `vehicle.vin` / `registration_number` / `first_registration_date` | VIN, Polish registration number and first registration date (with enrichment, when the seller provides them) |
| `location.city` / `region` | Listing city and voivodeship |
| `location.address` / `postal_code` / `coordinates` | Seller address, postal code and map position (with enrichment) |
| `seller.name` / `type` / `id` / `website_url` | Seller name, `PROFESSIONAL` or `PRIVATE`, Otomoto seller ID and dealer page |
| `seller.phone_number` / `phone_numbers` | Seller phone numbers (with **Get seller phone numbers** on) |
| `seller.badges` / `active_ads` / `package` | Seller badges like "Sprzedający na OTOMOTO od 2020", number of active ads and dealer package (with enrichment) |
| `media.thumbnail_url` / `image_urls` / `image_count` | Main photo, and every photo with enrichment |
| `description` / `short_description` | Full listing description (with enrichment) and the short subtitle shown in search |
| `features.equipment` / `equipment_groups` | Equipment list, flat and grouped like on Otomoto (with enrichment) |
| `signals` | Highlighted, promoted, CEPiK-verified, and whether the record was enriched |
| `attributes.parameters` / `details` | All raw Otomoto parameters and the detail table with labels and groups |
| `attributes.source_dates` | Created, updated, originally created and last bump dates |
| `source_context` | Input URL, page, position, scrape time and a record fingerprint |

Fields stay empty when the listing doesn't have them. Labels and values are in Polish, as Otomoto shows them.

### How to scrape Otomoto.pl

1. Go to [Otomoto.pl](https://www.otomoto.pl), pick a category and set your filters (make, model, price, year, location and so on).
2. Copy the URL from your browser's address bar, for example `https://www.otomoto.pl/osobowe/bmw?search[filter_float_price:to]=100000`.
3. Open [Otomoto.pl Scraper](https://apify.com/parsebird/otomoto-scraper) on Apify Store and click **Try for free**.
4. Paste the URL into **Otomoto URLs**. Add more search, dealer or listing URLs if you like.
5. Set **Max listings per URL**, or leave it empty to collect every result.
6. Optionally turn on **Enrich with listing details** and **Get seller phone numbers**.
7. Click **Start**. When the run finishes, download the listings as JSON, CSV, Excel, XML or HTML from the **Output** tab, or read them with the API.

### How much does it cost to scrape Otomoto.pl?

Otomoto.pl Scraper uses **pay-per-event** pricing. You pay for each listing saved, for each listing enriched when **Enrich with listing details** is on, and for each listing where a phone number is found when **Get seller phone numbers** is on. Compute and proxy costs are included in the event prices.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| `listing` (per listing) | $0.00089 | $0.00079 | $0.00069 | $0.00059 |
| `enrichment` (per enriched listing) | $0.00079 | $0.00069 | $0.00059 | $0.00049 |
| `contact` (per listing with a phone number) | $0.00069 | $0.00059 | $0.00049 | $0.00039 |
| Per 1,000 listings | **$0.89** | **$0.79** | **$0.69** | **$0.59** |
| Per 1,000 enriched listings | **$0.79** | **$0.69** | **$0.59** | **$0.49** |
| Per 1,000 listings with phone numbers | **$0.69** | **$0.59** | **$0.49** | **$0.39** |

For example, 1,000 listings cost $0.89 on the Free plan, or $2.37 with enrichment and phone numbers for all of them. Listings without a phone number are not charged for contacts. You can set a maximum cost per run in Apify Console, and the Actor stops when it's reached.

### Input

See the [Input tab](https://apify.com/parsebird/otomoto-scraper/input-schema) for the full form.

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | array | **Yes** | — | Otomoto search result, category, dealer or listing URLs |
| `limit` | integer | No | empty (all) | Listings to save per URL. Minimum 1 |
| `enrich_data` | boolean | No | `false` | Add description, photos, equipment, all parameters, VIN, registration, address and coordinates |
| `get_contact` | boolean | No | `false` | Add seller phone numbers |
| `proxyConfiguration` | object | No | none | Not needed; see the FAQ |

**BMW cars, standard fields**

```json
{
    "startUrls": ["https://www.otomoto.pl/osobowe/bmw"],
    "limit": 25
}
```

**Detail-rich collection for two makes**

```json
{
    "startUrls": [
        "https://www.otomoto.pl/osobowe/audi",
        "https://www.otomoto.pl/osobowe/mercedes-benz"
    ],
    "enrich_data": true,
    "limit": 50
}
```

**Volkswagen sellers with phone numbers**

```json
{
    "startUrls": ["https://www.otomoto.pl/osobowe/volkswagen"],
    "get_contact": true,
    "limit": 25
}
```

**One listing with everything**

```json
{
    "startUrls": ["https://www.otomoto.pl/osobowe/oferta/volkswagen-arteon-ID6IhNhA.html"],
    "enrich_data": true,
    "get_contact": true
}
```

### Output example

Each listing is one row in the dataset. This one has enrichment and contacts on; the photo, equipment, parameter and detail lists are shortened here.

```json
{
    "listing_id": "6151196798",
    "url": "https://www.otomoto.pl/osobowe/oferta/volkswagen-arteon-ID6IhNhA.html",
    "title": "Volkswagen Arteon 2.0 TDI R-Line DSG",
    "status": "ACTIVE",
    "short_description": "Pierwszy właściciel niski przebieg",
    "description": "VOLKSWAGEN ARTEON – Elegancki sedan z 2022 roku, łączący nowoczesny design z komfortem i zaawansowanymi technologiami. ...",
    "pricing": {
        "amount": 140000,
        "currency": "PLN",
        "evaluation": "IN",
        "is_gross": true,
        "labels": []
    },
    "vehicle": {
        "make": "Volkswagen",
        "model": "Arteon",
        "version": "2.0 TDI R-Line DSG",
        "generation": null,
        "year": 2022,
        "mileage_km": 80000,
        "fuel_type": "Diesel",
        "gearbox": "Automatyczna",
        "engine_capacity_cc": 1968,
        "engine_power_hp": 200,
        "body_type": "Sedan",
        "color": "Czarny",
        "door_count": 5,
        "seat_count": 5,
        "transmission": "Na przednie koła",
        "condition": "Używany",
        "damaged": false,
        "country_origin": null,
        "vin": "WVWZZZ3HZPE006363",
        "registration_number": "GD3G296",
        "first_registration_date": null,
        "main_features": ["2022", "80 000 km", "1 968 cm3", "Diesel"]
    },
    "location": {
        "city": "Rokocin",
        "region": "Pomorskie",
        "address": "Ogrodowa 7 - 83-200 Rokocin, starogardzki, Pomorskie (Polska)",
        "postal_code": "83-200",
        "coordinates": {
            "latitude": 53.94063,
            "longitude": 18.47296,
            "radius_m": 0
        }
    },
    "seller": {
        "id": "12293373",
        "uuid": "67a18855-40b7-4bfc-ad9f-d3555d285977",
        "name": "DS SERWIS s.c. Dariusz Szalewski, Bartosz Sengerski",
        "type": "PROFESSIONAL",
        "website_url": "https://DSSERWIS.otomoto.pl",
        "phone_number": "792 752 669",
        "phone_numbers": ["792 752 669"],
        "badges": ["Firma", "Sprzedający na OTOMOTO od 2020"],
        "active_ads": 1,
        "package": "Ultra"
    },
    "media": {
        "thumbnail_url": "https://ireland.apollo.olxcdn.com/v1/files/ivm9x5kwsgwg-OTOMOTOPL/image;s=640x480",
        "image_urls": [
            "https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Iml2bTl4NWt3c2d3Zy1PVE9NT1RPUEwiLCJ3IjpbeyJmbiI6IndnNGducXA2eTFmLU9UT01PVE9QTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.PLL-SvERmYclVQgcxUXBJHypg5THd05brmc_QEMbups/image"
        ],
        "image_count": 6
    },
    "features": {
        "equipment": ["Apple CarPlay", "Android Auto", "Interfejs Bluetooth", "Radio", "Zestaw głośnomówiący", "Gniazdo USB"],
        "equipment_groups": [
            {
                "key": "audio_and_computing",
                "label": "Audio i multimedia",
                "values": [
                    {"key": "apple_carplay", "label": "Apple CarPlay"},
                    {"key": "android_auto", "label": "Android Auto"}
                ]
            }
        ]
    },
    "signals": {
        "highlighted": false,
        "promoted": true,
        "cepik_verified": false,
        "enriched": true
    },
    "attributes": {
        "parameters": {
            "make": {"label": "make", "display_value": "Volkswagen", "value": "volkswagen"},
            "mileage": {"label": "mileage", "display_value": "80 000 km", "value": "80000"},
            "vin": {"label": "vin", "display_value": "WVWZZZ3HZPE006363", "value": "WVWZZZ3HZPE006363"}
        },
        "details": {
            "make": {"label": "Marka pojazdu", "display_value": "Volkswagen", "value": "Volkswagen", "group": "basic_information"}
        },
        "category": {"code": "osobowe", "name": "Osobowe"},
        "source_dates": {
            "created_at": "2026-10-17T18:42:18Z",
            "updated_at": "2026-10-18T07:00:53.022817Z",
            "original_created_at": "2026-10-17T18:37:35Z",
            "bump_date": null
        }
    },
    "source_context": {
        "source_url": "https://www.otomoto.pl/osobowe/volkswagen",
        "seed_id": "f89d762b84c0",
        "seed_type": "search_url",
        "page_index": 1,
        "position": 3,
        "scraped_at": "2026-10-19T00:46:54.089274Z",
        "record_fingerprint": "5ede5cafff30279e"
    }
}
```

Use `listing_id` as the key when you merge repeated runs, and `source_context.record_fingerprint` to spot listings whose title, price, mileage or year changed.

### Use the Otomoto.pl Scraper API

Call the Actor from your own code with the [Apify API client](https://docs.apify.com/api/client/python). Find your token in [Apify Console → Settings → Integrations](https://console.apify.com/settings/integrations).

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/otomoto-scraper").call(run_input={
    "startUrls": ["https://www.otomoto.pl/osobowe/toyota?search%5Bfilter_float_price%3Ato%5D=80000"],
    "limit": 200,
    "get_contact": True,
})

for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(car["title"], car["pricing"]["amount"], car["pricing"]["currency"], car["seller"]["name"], car["seller"]["phone_number"])
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/otomoto-scraper').call({
    startUrls: ['https://www.otomoto.pl/osobowe/skoda/octavia'],
    limit: 100,
    enrich_data: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((car) => console.log(car.title, car.vehicle.vin, car.media.image_count));
```

You can also start runs over plain HTTP from the [API tab](https://apify.com/parsebird/otomoto-scraper/api), or connect the Actor to AI agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Use cases

- **Dealer lead generation.** Build lists of Polish car dealers and private sellers for a make, model or region, with phone numbers.
- **Price monitoring.** Track prices and Otomoto's price evaluation for the models you buy or sell.
- **Competitor inventory.** Pull a competing dealer's whole stock with prices, mileage and equipment.
- **Car import and export.** Find vehicles by VIN, year, mileage and price for cross-border trading.
- **Market research.** Compare used vehicle prices by year, mileage, fuel, equipment and voivodeship.

### How it works

1. For each search URL, the Actor reads the filters and sort order that Otomoto applies to that URL, including any redirect Otomoto makes.
2. It loads the matching listings page by page (32 per page) until it reaches your limit or the end of the results. If the URL has a `page` parameter, it starts from that page.
3. Dealer pages are expanded into one search per category the dealer sells in.
4. With enrichment or contacts on, the Actor opens each listing page and reads the details and phone numbers there. A listing that has been sold or removed is skipped with a warning and not charged.

### FAQ

**Do I need an Otomoto account?**
No. The Actor reads only public listings that anyone can see on Otomoto.pl.

**Which Otomoto URLs work?**
Search result and category pages on `www.otomoto.pl` (with any filters), dealer pages on `<dealer>.otomoto.pl`, and listing pages (`/oferta/...html`). Other pages, like the homepage, are skipped with a warning.

**Why does my search return a different model or more results than expected?**
The Actor uses the filters Otomoto itself applies to your URL. Otomoto redirects some URLs (for example `/osobowe/audi/a4` to `/osobowe/audi/a4-avant`) and ignores path parts it doesn't recognize. The run log shows when a redirect happens. Open the URL in your browser to see the same results.

**Which phone numbers do I get?**
The numbers the seller shows on the listing behind Otomoto's "show number" button, for dealers and private sellers alike. Some dealers list several numbers; all of them are in `phone_numbers`. A few sellers don't publish a number, and those listings are not charged for contacts.

**Why is the VIN or registration number empty?**
Sellers can leave them out, and some enter a placeholder (like "ZAPYTAJSPRZEDAWCE", "ask the seller"). `vehicle.vin` is filled only with a VIN-shaped value; the raw value stays in `attributes.parameters.vin`.

**Is the first result different from what I see on Otomoto?**
Otomoto rotates promoted listings, so the first positions can change between visits. The rest follow the same sort order as the website.

**Do I need a proxy?**
No. The Actor connects directly and switches to [Apify Proxy](https://docs.apify.com/platform/proxy) on its own if Otomoto starts refusing requests.

**Can I schedule runs or export to Google Sheets?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) for recurring runs and [integrations](https://docs.apify.com/platform/integrations) for Google Sheets, Zapier, Make, Slack and webhooks.

**Something is missing or broken?**
Open an issue on the [Issues tab](https://apify.com/parsebird/otomoto-scraper/issues). Feedback and feature requests are welcome there too.

### Is it legal to scrape Otomoto.pl?

The Actor collects only public listings that Otomoto.pl shows to every visitor. It doesn't log in or access any account data. Listings can include private sellers' first names and phone numbers, and vehicles' registration numbers, which are personal data under the GDPR. Make sure you have a lawful basis to store and use them, and follow Polish rules on direct marketing before you contact sellers. Read more in Apify's blog post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other vehicle and Polish scrapers

| Actor | What it does |
|-------|--------------|
| [Cars.com Scraper with Contacts](https://apify.com/parsebird/cars-com-scraper) | Scrape US car listings and dealer phone numbers from Cars.com |
| [Coches.net Scraper](https://apify.com/parsebird/coches-net-scraper) | Scrape Spanish car and motorcycle listings from Coches.net |
| [AutoTrader.co.uk Scraper](https://apify.com/parsebird/autotrader-scraper) | Scrape UK car listings from AutoTrader.co.uk |
| [AutoTrader Canada Scraper](https://apify.com/parsebird/autotrader-ca-scraper) | Scrape Canadian car listings from AutoTrader.ca |
| [IAAI Vehicles Scraper](https://apify.com/parsebird/iaai-vehicles-scraper) | Scrape salvage and insurance auction vehicles from IAAI |
| [Allegro.pl Product Scraper](https://apify.com/parsebird/allegro-scraper) | Scrape products and prices from Allegro.pl |
| [Pracuj.pl Jobs Scraper](https://apify.com/parsebird/pracuj-jobs-scraper) | Scrape Polish job offers from Pracuj.pl |

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/otomoto-scraper/changelog.md

# Actor input Schema

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

Otomoto search result or category URLs (e.g. otomoto.pl/osobowe/bmw?search\[filter_float_price:to]=50000), dealer pages (e.g. dealer.otomoto.pl) or listing URLs (otomoto.pl/osobowe/oferta/...). Every filter and sort order in the URL is applied.

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

Stop after saving this many listings from each URL. Leave empty to collect every listing the URL returns.

## `enrich_data` (type: `boolean`):

Open each listing page to add the full description, all photos, equipment list, every technical parameter, VIN, registration number and date, seller address, map coordinates and seller badges. Charged per enriched listing; runs take longer.

## `get_contact` (type: `boolean`):

Add the phone numbers the seller shows on the listing (dealers and private sellers). Charged only for listings where a number is found; runs take longer.

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

Optional. The scraper connects directly and switches to Apify Proxy on its own if Otomoto starts refusing requests.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.otomoto.pl/osobowe/bmw"
  ],
  "limit": 20,
  "enrich_data": false,
  "get_contact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.otomoto.pl/osobowe/bmw"
    ],
    "limit": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/otomoto-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 = {
    "startUrls": ["https://www.otomoto.pl/osobowe/bmw"],
    "limit": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/otomoto-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 '{
  "startUrls": [
    "https://www.otomoto.pl/osobowe/bmw"
  ],
  "limit": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parsebird/otomoto-scraper --silent --output-dataset

```

## MCP server setup

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