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

Extract Otomoto.pl vehicle listings across Poland with rich specs, seller contacts, pricing, mileage, media, equipment data, and listing signals. Built for enterprise-grade automotive intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/otomoto-pl-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Lead generation, E-commerce, Agents
- **Stats:** 30 total users, 7 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 vehicle 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/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

## Otomoto PL Vehicle Scraper

**Slug:** `fatihtahta/otomoto-pl-scraper`

### Overview

Otomoto PL Vehicle Scraper collects structured vehicle listing records from Otomoto search pages, category pages, and individual listing URLs, including core listing identity, pricing, vehicle specifications, seller details, optional seller phone numbers, location, media, equipment, and source context. [Otomoto](https://www.otomoto.pl) is one of Poland's major vehicle marketplaces, making its public listing data useful for market analysis, pricing research, inventory monitoring, and vehicle data enrichment. The actor turns public marketplace pages into repeatable JSON datasets that can be used by analysts, operators, and automated downstream systems. It is designed for recurring data acquisition workflows where consistent output structure, configurable collection scope, and operational repeatability matter. Use it to collect dependable snapshots of publicly available Otomoto data without making manual exports part of your process.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for pricing, mileage, make/model mix, regional supply, and market intelligence reporting.
- **Product and content teams:** enrich catalogs, comparison pages, internal directories, and editorial research with normalized public vehicle attributes.
- **Developers and data engineers:** feed downstream systems, ETL jobs, search indexes, and warehouse tables with predictable JSON records.
- **Lead generation and enrichment teams:** identify public seller, listing, and vehicle attributes for qualification, segmentation, and CRM enrichment pipelines.
- **Monitoring and competitive tracking teams:** schedule repeatable collection for inventory movement, price changes, availability checks, and operational reporting.

### Common Use Cases

- **Market intelligence:** monitor supply, pricing, mileage, vehicle age, fuel type, location, and segment movement across Otomoto listings.
- **Lead generation:** build targeted prospect lists from public listings and seller profiles for compliant outreach or account research.
- **Competitive monitoring:** track comparable vehicles, seller inventory, promotion signals, and listing availability over time.
- **Catalog and directory building:** populate internal vehicle databases with structured public listing records and media references.
- **Data enrichment:** add current public attributes such as price, mileage, technical specifications, equipment, and location to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, warehouse refreshes, and trend analysis.

### Quick Start

1. Choose one or more Otomoto search result, category, or individual listing URLs that match the vehicles you want to collect.
2. Set a small `limit` for the first validation run, such as `10` or `25`.
3. Decide whether to enable `enrich_data` when you need richer detail such as description, equipment, image gallery, seller location, and technical specifications.
4. Enable `get_contact` when available seller phone numbers are needed.
5. Run the actor in Apify Console.
6. Inspect the first dataset records to confirm the output shape, identifiers, and nested fields match your use case.
7. Increase the limit, add more URLs, or schedule recurring runs once the dataset is verified.

### Input Parameters

This actor accepts Otomoto URLs, optional detail and contact enrichment toggles, and an optional per-URL result limit.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `startUrls` | array of strings | One or more Otomoto URLs to collect from. Use search result pages for broader discovery, category pages for a vehicle segment, or individual listing pages when you already know the exact vehicles to collect. | – |
| `enrich_data` | boolean | Enables richer vehicle listing details, including fields such as description, equipment, image gallery, seller location, and technical specifications when available. Detail-rich runs may take longer. | `false` |
| `get_contact` | boolean | Collects available dealer phone numbers from listing pages and stores them in `seller.phone_number` and `seller.phone_numbers` when available. Contact runs may take longer because listing pages are opened. | `false` |
| `limit` | integer | Maximum number of listing records to save per URL. Minimum value is `1`. Leave empty to collect all available results the actor can reach from the provided inputs. | – |

### Choosing Inputs

Use `startUrls` to define the collection scope. A category or search results URL is best for discovering multiple listings, while an individual listing URL is best when you need a specific vehicle record. Use separate URLs for distinct segments, such as different makes, body types, or search filters created on Otomoto. If `limit` is set, start small to validate output quality and increase it after confirming the records are useful. Enable `enrich_data` for detail-heavy workflows, enable `get_contact` when seller phone numbers are needed, and leave both disabled when standard listing fields are enough for faster sampling.

### Example Inputs

#### Scenario: Category Discovery With Standard Fields

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

#### Scenario: Detail-Rich Vehicle Collection

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

#### Scenario: Dealer Contact Collection

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

#### Scenario: Direct Listing Validation

```json
{
  "startUrls": [
    "https://www.otomoto.pl/osobowe/oferta/audi-a6-avant-example-IDEXAMPLE.html"
  ],
  "enrich_data": true,
  "get_contact": true,
  "limit": 1
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

The example output contains one vehicle listing record shape. If future runs produce multiple entity types or record shapes, each shape should be documented separately based on the corresponding output examples.

#### Record Envelope And Stable Identifiers

Each dataset item represents one Otomoto vehicle listing. The strongest recommended idempotency key is `listing_id`; when syncing across systems, use `url` as a secondary matching key and `source_context.record_fingerprint` as an additional run-stable comparison value when present. For deduplication and upserts, match on `listing_id` first, then update mutable fields such as `pricing`, `status`, `media`, `attributes.source_dates`, and `source_context.scraped_at`. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The `source_context.source_url` field identifies the input URL that produced the record. The `source_context.record_fingerprint` field provides an additional fingerprint for comparing records generated during collection.

#### Examples

##### Example: vehicle listing

```json
{
  "listing_id": "EXAMPLE-LISTING-001",
  "url": "https://www.otomoto.pl/osobowe/oferta/audi-a6-avant-example-IDEXAMPLE.html",
  "title": "Audi A6 Avant 45 TDI quattro",
  "status": "ACTIVE",
  "description": "Samochód z polskiego salonu, regularnie serwisowany, gotowy do sprawdzenia podczas jazdy próbnej. Dealer udostępnia pełną historię serwisową i dodatkowe zdjęcia na życzenie.",
  "pricing": {
    "amount": 26108,
    "currency": "EUR",
    "evaluation": "NONE"
  },
  "vehicle": {
    "make": "Audi",
    "model": "A6",
    "version": "Avant 45 TDI quattro",
    "year": 2021,
    "mileage_km": 158900,
    "fuel_type": "Diesel",
    "gearbox": "Automatyczna",
    "engine_capacity_cc": 1995,
    "engine_power_hp": 231,
    "body_type": "SUV",
    "color": "Czarny",
    "door_count": 5,
    "seat_count": 5,
    "transmission": "4x4 (dołączany automatycznie)",
    "main_features": [
      "2021",
      "158 900 km",
      "1 995 cm3",
      "Diesel"
    ]
  },
  "location": {
    "city": "Kraków",
    "region": "Małopolskie",
    "address": "ul. Przykładowa 12",
    "coordinates": {
      "latitude": 50.06143,
      "longitude": 19.93658
    }
  },
  "seller": {
    "id": "EXAMPLE-SELLER-001",
    "uuid": "11111111-2222-4333-8444-555555555555",
    "name": "Example Auto Sp. z o.o.",
    "type": "PROFESSIONAL",
    "phone_number": "500 123 456",
    "phone_numbers": [
      "500 123 456"
    ],
    "badges": [
      "Firma",
      "Sprzedający na OTOMOTO od 2018"
    ]
  },
  "media": {
    "thumbnail_url": "https://example.com/otomoto/images/example-audi-a6-thumb.jpg",
    "image_urls": [
      "https://example.com/otomoto/images/example-audi-a6-01.jpg",
      "https://example.com/otomoto/images/example-audi-a6-02.jpg",
      "https://example.com/otomoto/images/example-audi-a6-03.jpg",
      "https://example.com/otomoto/images/example-audi-a6-04.jpg",
      "https://example.com/otomoto/images/example-audi-a6-05.jpg",
      "https://example.com/otomoto/images/example-audi-a6-06.jpg",
      "https://example.com/otomoto/images/example-audi-a6-07.jpg",
      "https://example.com/otomoto/images/example-audi-a6-08.jpg",
      "https://example.com/otomoto/images/example-audi-a6-09.jpg",
      "https://example.com/otomoto/images/example-audi-a6-10.jpg",
      "https://example.com/otomoto/images/example-audi-a6-11.jpg",
      "https://example.com/otomoto/images/example-audi-a6-12.jpg",
      "https://example.com/otomoto/images/example-audi-a6-13.jpg",
      "https://example.com/otomoto/images/example-audi-a6-14.jpg",
      "https://example.com/otomoto/images/example-audi-a6-15.jpg",
      "https://example.com/otomoto/images/example-audi-a6-16.jpg",
      "https://example.com/otomoto/images/example-audi-a6-17.jpg",
      "https://example.com/otomoto/images/example-audi-a6-18.jpg",
      "https://example.com/otomoto/images/example-audi-a6-19.jpg",
      "https://example.com/otomoto/images/example-audi-a6-20.jpg",
      "https://example.com/otomoto/images/example-audi-a6-21.jpg",
      "https://example.com/otomoto/images/example-audi-a6-22.jpg"
    ],
    "image_count": 22
  },
  "features": {
    "equipment": [
      "Apple CarPlay",
      "Android Auto",
      "Interfejs Bluetooth",
      "Radio",
      "Gniazdo USB",
      "System nawigacji satelitarnej",
      "System nagłośnienia",
      "Ekran dotykowy",
      "Dostęp do internetu",
      "Klimatyzacja automatyczna",
      "Tapicerka skórzana",
      "Elektrycznie ustawiany fotel kierowcy",
      "Elektrycznie ustawiany fotel pasażera",
      "Siedzenie z pamięcią ustawienia",
      "Sportowe fotele - przód",
      "Podłokietniki - przód",
      "Podłokietniki - tył",
      "Kierownica skórzana",
      "Kierownica sportowa",
      "Kolumna kierownicy regulowana elektrycznie",
      "Kierownica wielofunkcyjna",
      "Czujnik deszczu",
      "Tempomat",
      "Lampy przednie w technologii LED",
      "Kontrola odległości z przodu (przy parkowaniu)",
      "Kontrola odległości z tyłu (przy parkowaniu)",
      "Asystent parkowania (Park Assistant)",
      "Kamera parkowania tył",
      "Kontrola zmiany pasa ruchu (Lane assist)",
      "Kontrola odległości od poprzedzającego pojazdu",
      "Kontrola trakcji",
      "Automatyczna kontrola zjazdu ze stoku",
      "Aktywne rozpoznawanie znaków ograniczenia prędkości",
      "Asystent świateł drogowych",
      "Czujnik zmierzchu",
      "Lampy przeciwmgielne",
      "Lampy przeciwmgielne w technologii LED",
      "Lampy tylne w technologii LED",
      "Oświetlenie drogi do domu",
      "System Start/Stop",
      "Elektryczny hamulec postojowy",
      "Felgi aluminiowe 18",
      "Opony runflat",
      "Zawieszenie sportowe",
      "ABS",
      "ESP",
      "System wspomagania hamowania",
      "System ostrzegający o możliwej kolizji",
      "System wykrywania zmęczenie kierowcy",
      "System powiadamiania o wypadku",
      "Poduszka powietrzna kierowcy",
      "Poduszka powietrzna pasażera",
      "Poduszka kolan pasażera",
      "Kurtyny powietrzne - przód",
      "Boczne poduszki powietrzne - przód",
      "Kurtyny powietrzne - tył",
      "Boczne poduszki powietrzne - tył",
      "Isofix (punkty mocowania fotelika dziecięcego)"
    ],
    "equipment_groups": [
      {
        "key": "audio_and_computing",
        "label": "Audio i multimedia",
        "values": [
          {
            "key": "apple_carplay",
            "label": "Apple CarPlay"
          },
          {
            "key": "android_auto",
            "label": "Android Auto"
          },
          {
            "key": "bluetooth_interface",
            "label": "Interfejs Bluetooth"
          },
          {
            "key": "radio",
            "label": "Radio"
          },
          {
            "key": "usb_in",
            "label": "Gniazdo USB"
          },
          {
            "key": "navigation_system",
            "label": "System nawigacji satelitarnej"
          },
          {
            "key": "soundsystem",
            "label": "System nagłośnienia"
          },
          {
            "key": "touchscreen_monitor",
            "label": "Ekran dotykowy"
          },
          {
            "key": "internet_access",
            "label": "Dostęp do internetu"
          }
        ]
      },
      {
        "key": "comfort_and_addons",
        "label": "Komfort i dodatki",
        "values": [
          {
            "key": "air_conditioning_type",
            "label": "Klimatyzacja automatyczna"
          },
          {
            "key": "upholstery_type",
            "label": "Tapicerka skórzana"
          },
          {
            "key": "driver_seat_electrically_adjustable",
            "label": "Elektrycznie ustawiany fotel kierowcy"
          },
          {
            "key": "passenger_seat_electrically_adjustable",
            "label": "Elektrycznie ustawiany fotel pasażera"
          },
          {
            "key": "memory_seat",
            "label": "Siedzenie z pamięcią ustawienia"
          },
          {
            "key": "sport_seats_front",
            "label": "Sportowe fotele - przód"
          },
          {
            "key": "armrest_front",
            "label": "Podłokietniki - przód"
          },
          {
            "key": "armrest_rear",
            "label": "Podłokietniki - tył"
          },
          {
            "key": "leather_steering_wheel",
            "label": "Kierownica skórzana"
          },
          {
            "key": "sports_steering_wheel",
            "label": "Kierownica sportowa"
          },
          {
            "key": "steering_wheel_electrically_adjustable",
            "label": "Kolumna kierownicy regulowana elektrycznie"
          },
          {
            "key": "multi_functional_steering_wheel",
            "label": "Kierownica wielofunkcyjna"
          },
          {
            "key": "rain_sensor",
            "label": "Czujnik deszczu"
          }
        ]
      },
      {
        "key": "electronics_and_driver_assistance",
        "label": "Systemy wspomagania kierowcy",
        "values": [
          {
            "key": "cruisecontrol_type",
            "label": "Tempomat"
          },
          {
            "key": "headlight_lamp_type",
            "label": "Lampy przednie w technologii LED"
          },
          {
            "key": "park_distance_control_front",
            "label": "Kontrola odległości z przodu (przy parkowaniu)"
          },
          {
            "key": "park_distance_control_rear",
            "label": "Kontrola odległości z tyłu (przy parkowaniu)"
          },
          {
            "key": "park_assistant",
            "label": "Asystent parkowania (Park Assistant)"
          },
          {
            "key": "rear_view_camera",
            "label": "Kamera parkowania tył"
          },
          {
            "key": "lane_control_assistant",
            "label": "Kontrola zmiany pasa ruchu (Lane assist)"
          },
          {
            "key": "distance_control",
            "label": "Kontrola odległości od poprzedzającego pojazdu"
          },
          {
            "key": "traction_control",
            "label": "Kontrola trakcji"
          },
          {
            "key": "hill_descent_control",
            "label": "Automatyczna kontrola zjazdu ze stoku"
          },
          {
            "key": "active_speed_sign_recognition",
            "label": "Aktywne rozpoznawanie znaków ograniczenia prędkości"
          },
          {
            "key": "automated_high_beam_assist",
            "label": "Asystent świateł drogowych"
          },
          {
            "key": "automatic_dimlight_activation",
            "label": "Czujnik zmierzchu"
          },
          {
            "key": "fog_lamps",
            "label": "Lampy przeciwmgielne"
          },
          {
            "key": "led_fog_lamps",
            "label": "Lampy przeciwmgielne w technologii LED"
          },
          {
            "key": "led_rear_lights",
            "label": "Lampy tylne w technologii LED"
          },
          {
            "key": "follow_me_home",
            "label": "Oświetlenie drogi do domu"
          },
          {
            "key": "startstop_system",
            "label": "System Start/Stop"
          },
          {
            "key": "electric_parking_brake",
            "label": "Elektryczny hamulec postojowy"
          }
        ]
      },
      {
        "key": "performance_and_tuning",
        "label": "Osiągi i tuning",
        "values": [
          {
            "key": "alloy_wheels_type",
            "label": "Felgi aluminiowe 18"
          },
          {
            "key": "runflat_tyres",
            "label": "Opony runflat"
          },
          {
            "key": "sport_suspension",
            "label": "Zawieszenie sportowe"
          }
        ]
      },
      {
        "key": "security",
        "label": "Bezpieczeństwo",
        "values": [
          {
            "key": "antilock_brake_system",
            "label": "ABS"
          },
          {
            "key": "esp",
            "label": "ESP"
          },
          {
            "key": "power_assisted_brakes",
            "label": "System wspomagania hamowania"
          },
          {
            "key": "collision_warning_system",
            "label": "System ostrzegający o możliwej kolizji"
          },
          {
            "key": "driver_conditioning_monitoring",
            "label": "System wykrywania zmęczenie kierowcy"
          },
          {
            "key": "automatic_emergency_call",
            "label": "System powiadamiania o wypadku"
          },
          {
            "key": "driver_airbag",
            "label": "Poduszka powietrzna kierowcy"
          },
          {
            "key": "passenger_airbag",
            "label": "Poduszka powietrzna pasażera"
          },
          {
            "key": "knee_airbag_passenger",
            "label": "Poduszka kolan pasażera"
          },
          {
            "key": "head_airbags_front",
            "label": "Kurtyny powietrzne - przód"
          },
          {
            "key": "side_airbag_driver_and_passenger",
            "label": "Boczne poduszki powietrzne - przód"
          },
          {
            "key": "head_airbags_rear",
            "label": "Kurtyny powietrzne - tył"
          },
          {
            "key": "side_airbags_rear",
            "label": "Boczne poduszki powietrzne - tył"
          },
          {
            "key": "child_seat_fixation",
            "label": "Isofix (punkty mocowania fotelika dziecięcego)"
          }
        ]
      }
    ]
  },
  "signals": {
    "highlighted": false,
    "promoted": true,
    "cepik_verified": false,
    "enriched": true
  },
  "attributes": {
    "parameters": {
      "has_vin": {
        "label": "has_vin",
        "display_value": "Tak",
        "value": "1"
      },
      "is_imported_car": {
        "label": "is_imported_car",
        "display_value": "Nie",
        "value": "0"
      },
      "catalog_urn": {
        "label": "catalog_urn",
        "display_value": "orn:otomotopl:catalog:example-100001",
        "value": "orn:otomotopl:catalog:example-100001"
      },
      "make": {
        "label": "make",
        "display_value": "Audi",
        "value": "audi"
      },
      "model": {
        "label": "model",
        "display_value": "A6",
        "value": "a6"
      },
      "version": {
        "label": "version",
        "display_value": "Avant 45 TDI quattro",
        "value": "ver-avant-45-tdi-quattro"
      },
      "generation": {
        "label": "generation",
        "display_value": "C8 (2018-)",
        "value": "gen-c8-2018"
      },
      "apple_carplay": {
        "label": "apple_carplay",
        "display_value": "Tak",
        "value": "1"
      },
      "year": {
        "label": "year",
        "display_value": "2021",
        "value": "2021"
      },
      "mileage": {
        "label": "mileage",
        "display_value": "158 900 km",
        "value": "158900"
      },
      "engine_capacity": {
        "label": "engine_capacity",
        "display_value": "1 995 cm3",
        "value": "1995"
      },
      "vin": {
        "label": "vin",
        "display_value": "EXAMPLE-ENCRYPTED-VIN",
        "value": "EXAMPLE-ENCRYPTED-VIN"
      },
      "fuel_type": {
        "label": "fuel_type",
        "display_value": "Diesel",
        "value": "diesel"
      },
      "engine_power": {
        "label": "engine_power",
        "display_value": "231 KM",
        "value": "231"
      },
      "gearbox": {
        "label": "gearbox",
        "display_value": "Automatyczna",
        "value": "automatic"
      },
      "android_auto": {
        "label": "android_auto",
        "display_value": "Tak",
        "value": "1"
      },
      "transmission": {
        "label": "transmission",
        "display_value": "4x4 (dołączany automatycznie)",
        "value": "all-wheel-auto"
      },
      "bluetooth_interface": {
        "label": "bluetooth_interface",
        "display_value": "Tak",
        "value": "1"
      },
      "damaged": {
        "label": "damaged",
        "display_value": "Nie",
        "value": "0"
      },
      "body_type": {
        "label": "body_type",
        "display_value": "SUV",
        "value": "suv"
      },
      "door_count": {
        "label": "door_count",
        "display_value": "5",
        "value": "5"
      },
      "nr_seats": {
        "label": "nr_seats",
        "display_value": "5",
        "value": "5"
      },
      "color": {
        "label": "color",
        "display_value": "Czarny",
        "value": "black"
      },
      "radio": {
        "label": "radio",
        "display_value": "Tak",
        "value": "1"
      },
      "rhd": {
        "label": "rhd",
        "display_value": "Po lewej",
        "value": "0"
      },
      "usb_in": {
        "label": "usb_in",
        "display_value": "Tak",
        "value": "1"
      },
      "navigation_system": {
        "label": "navigation_system",
        "display_value": "Tak",
        "value": "1"
      },
      "soundsystem": {
        "label": "soundsystem",
        "display_value": "Tak",
        "value": "1"
      },
      "touchscreen_monitor": {
        "label": "touchscreen_monitor",
        "display_value": "Tak",
        "value": "1"
      },
      "internet_access": {
        "label": "internet_access",
        "display_value": "Tak",
        "value": "1"
      },
      "air_conditioning_type": {
        "label": "air_conditioning_type",
        "display_value": "Klimatyzacja automatyczna",
        "value": "automatic-climate-control"
      },
      "upholstery_type": {
        "label": "upholstery_type",
        "display_value": "Tapicerka skórzana",
        "value": "leather-upholstery"
      },
      "driver_seat_electrically_adjustable": {
        "label": "driver_seat_electrically_adjustable",
        "display_value": "Tak",
        "value": "1"
      },
      "passenger_seat_electrically_adjustable": {
        "label": "passenger_seat_electrically_adjustable",
        "display_value": "Tak",
        "value": "1"
      },
      "memory_seat": {
        "label": "memory_seat",
        "display_value": "Tak",
        "value": "1"
      },
      "sport_seats_front": {
        "label": "sport_seats_front",
        "display_value": "Tak",
        "value": "1"
      },
      "armrest_front": {
        "label": "armrest_front",
        "display_value": "Tak",
        "value": "1"
      },
      "armrest_rear": {
        "label": "armrest_rear",
        "display_value": "Tak",
        "value": "1"
      },
      "leather_steering_wheel": {
        "label": "leather_steering_wheel",
        "display_value": "Tak",
        "value": "1"
      },
      "sports_steering_wheel": {
        "label": "sports_steering_wheel",
        "display_value": "Tak",
        "value": "1"
      },
      "steering_wheel_electrically_adjustable": {
        "label": "steering_wheel_electrically_adjustable",
        "display_value": "Tak",
        "value": "1"
      },
      "multi_functional_steering_wheel": {
        "label": "multi_functional_steering_wheel",
        "display_value": "Tak",
        "value": "1"
      },
      "rain_sensor": {
        "label": "rain_sensor",
        "display_value": "Tak",
        "value": "1"
      },
      "cruisecontrol_type": {
        "label": "cruisecontrol_type",
        "display_value": "Tempomat",
        "value": "cruise-control"
      },
      "headlight_lamp_type": {
        "label": "headlight_lamp_type",
        "display_value": "Lampy przednie w technologii LED",
        "value": "led-front-dim-light"
      },
      "park_distance_control_front": {
        "label": "park_distance_control_front",
        "display_value": "Tak",
        "value": "1"
      },
      "park_distance_control_rear": {
        "label": "park_distance_control_rear",
        "display_value": "Tak",
        "value": "1"
      },
      "park_assistant": {
        "label": "park_assistant",
        "display_value": "Tak",
        "value": "1"
      },
      "rear_view_camera": {
        "label": "rear_view_camera",
        "display_value": "Tak",
        "value": "1"
      },
      "lane_control_assistant": {
        "label": "lane_control_assistant",
        "display_value": "Tak",
        "value": "1"
      },
      "distance_control": {
        "label": "distance_control",
        "display_value": "Tak",
        "value": "1"
      },
      "traction_control": {
        "label": "traction_control",
        "display_value": "Tak",
        "value": "1"
      },
      "hill_descent_control": {
        "label": "hill_descent_control",
        "display_value": "Tak",
        "value": "1"
      },
      "active_speed_sign_recognition": {
        "label": "active_speed_sign_recognition",
        "display_value": "Tak",
        "value": "1"
      },
      "automated_high_beam_assist": {
        "label": "automated_high_beam_assist",
        "display_value": "Tak",
        "value": "1"
      },
      "automatic_dimlight_activation": {
        "label": "automatic_dimlight_activation",
        "display_value": "Tak",
        "value": "1"
      },
      "fog_lamps": {
        "label": "fog_lamps",
        "display_value": "Tak",
        "value": "1"
      },
      "led_fog_lamps": {
        "label": "led_fog_lamps",
        "display_value": "Tak",
        "value": "1"
      },
      "led_rear_lights": {
        "label": "led_rear_lights",
        "display_value": "Tak",
        "value": "1"
      },
      "follow_me_home": {
        "label": "follow_me_home",
        "display_value": "Tak",
        "value": "1"
      },
      "startstop_system": {
        "label": "startstop_system",
        "display_value": "Tak",
        "value": "1"
      },
      "electric_parking_brake": {
        "label": "electric_parking_brake",
        "display_value": "Tak",
        "value": "1"
      },
      "alloy_wheels_type": {
        "label": "alloy_wheels_type",
        "display_value": "Felgi aluminiowe 18",
        "value": "light-alloy-wheels-18"
      },
      "runflat_tyres": {
        "label": "runflat_tyres",
        "display_value": "Tak",
        "value": "1"
      },
      "sport_suspension": {
        "label": "sport_suspension",
        "display_value": "Tak",
        "value": "1"
      },
      "antilock_brake_system": {
        "label": "antilock_brake_system",
        "display_value": "Tak",
        "value": "1"
      },
      "esp": {
        "label": "esp",
        "display_value": "Tak",
        "value": "1"
      },
      "power_assisted_brakes": {
        "label": "power_assisted_brakes",
        "display_value": "Tak",
        "value": "1"
      },
      "collision_warning_system": {
        "label": "collision_warning_system",
        "display_value": "Tak",
        "value": "1"
      },
      "driver_conditioning_monitoring": {
        "label": "driver_conditioning_monitoring",
        "display_value": "Tak",
        "value": "1"
      },
      "automatic_emergency_call": {
        "label": "automatic_emergency_call",
        "display_value": "Tak",
        "value": "1"
      },
      "driver_airbag": {
        "label": "driver_airbag",
        "display_value": "Tak",
        "value": "1"
      },
      "passenger_airbag": {
        "label": "passenger_airbag",
        "display_value": "Tak",
        "value": "1"
      },
      "knee_airbag_passenger": {
        "label": "knee_airbag_passenger",
        "display_value": "Tak",
        "value": "1"
      },
      "head_airbags_front": {
        "label": "head_airbags_front",
        "display_value": "Tak",
        "value": "1"
      },
      "side_airbag_driver_and_passenger": {
        "label": "side_airbag_driver_and_passenger",
        "display_value": "Tak",
        "value": "1"
      },
      "head_airbags_rear": {
        "label": "head_airbags_rear",
        "display_value": "Tak",
        "value": "1"
      },
      "side_airbags_rear": {
        "label": "side_airbags_rear",
        "display_value": "Tak",
        "value": "1"
      },
      "child_seat_fixation": {
        "label": "child_seat_fixation",
        "display_value": "Tak",
        "value": "1"
      },
      "version_label": {
        "label": "version_label",
        "display_value": "Avant 45 TDI quattro",
        "value": "Avant 45 TDI quattro"
      },
      "autorenew": {
        "label": "autorenew",
        "display_value": "Nie",
        "value": "0"
      },
      "deactivation_reason_id": {
        "label": "deactivation_reason_id",
        "display_value": "12",
        "value": "12"
      },
      "new_used": {
        "label": "new_used",
        "display_value": "Używany",
        "value": "used"
      }
    },
    "details": {
      "make": {
        "label": "Marka pojazdu",
        "display_value": "Audi",
        "value": "Audi",
        "group": "basic_information"
      },
      "model": {
        "label": "Model pojazdu",
        "display_value": "A6",
        "value": "A6",
        "group": "basic_information"
      },
      "version": {
        "label": "Wersja",
        "display_value": "Avant 45 TDI quattro",
        "value": "Avant 45 TDI quattro",
        "group": "basic_information"
      },
      "color": {
        "label": "Kolor",
        "display_value": "Czarny",
        "value": "Czarny",
        "group": "basic_information"
      },
      "door_count": {
        "label": "Liczba drzwi",
        "display_value": "5",
        "value": "5",
        "group": "basic_information"
      },
      "nr_seats": {
        "label": "Liczba miejsc",
        "display_value": "5",
        "value": "5",
        "group": "basic_information"
      },
      "year": {
        "label": "Rok produkcji",
        "display_value": "2021",
        "value": "2021",
        "group": "basic_information"
      },
      "generation": {
        "label": "Generacja",
        "display_value": "C8 (2018-)",
        "value": "C8 (2018-)",
        "group": "basic_information"
      },
      "vin": {
        "label": "VIN",
        "display_value": "EXAMPLE-ENCRYPTED-VIN",
        "value": "EXAMPLE-ENCRYPTED-VIN",
        "group": "basic_information"
      },
      "fuel_type": {
        "label": "Rodzaj paliwa",
        "display_value": "Diesel",
        "value": "Diesel",
        "group": "technical_specs"
      },
      "engine_capacity": {
        "label": "Pojemność skokowa",
        "display_value": "1 995 cm3",
        "value": "1 995 cm3",
        "group": "technical_specs"
      },
      "engine_power": {
        "label": "Moc",
        "display_value": "231 KM",
        "value": "231 KM",
        "group": "technical_specs"
      },
      "body_type": {
        "label": "Typ nadwozia",
        "display_value": "SUV",
        "value": "SUV",
        "group": "technical_specs"
      },
      "gearbox": {
        "label": "Skrzynia biegów",
        "display_value": "Automatyczna",
        "value": "Automatyczna",
        "group": "technical_specs"
      },
      "transmission": {
        "label": "Napęd",
        "display_value": "4x4 (dołączany automatycznie)",
        "value": "4x4 (dołączany automatycznie)",
        "group": "technical_specs"
      },
      "mileage": {
        "label": "Przebieg",
        "display_value": "158 900 km",
        "value": "158 900 km",
        "group": "condition_history"
      },
      "new_used": {
        "label": "Stan",
        "display_value": "Używany",
        "value": "Używany",
        "group": "condition_history"
      }
    },
    "category": {
      "code": "osobowe",
      "name": "Osobowe"
    },
    "source_dates": {
      "created_at": "2026-05-29T10:30:00Z",
      "updated_at": "2026-05-29T12:15:00Z",
      "original_created_at": "2026-05-28T09:00:00Z",
      "bump_date": "2026-05-29T13:45:00Z"
    }
  },
  "source_context": {
    "source_url": "https://www.otomoto.pl/osobowe/audi",
    "seed_id": "example-seed-001",
    "seed_type": "url",
    "page_index": 1,
    "record_fingerprint": "example-fingerprint-001",
    "scraped_at": "2026-05-29T14:00:00.000000Z"
  }
}
```

### Field Reference

#### Vehicle Listing Record

**listing\_id** *(string, required)*: Stable Otomoto listing identifier.

**url** *(string, required)*: Public listing URL.

**title** *(string, optional)*: Listing title.

**status** *(string, optional)*: Listing availability status, such as `ACTIVE`.

**description** *(string, optional)*: Public listing description when collected.

**pricing.amount / pricing.currency** *(number/string, optional)*: Listing price and ISO-style currency code, such as `EUR` or `PLN`.

**pricing.evaluation** *(string, optional)*: Price evaluation label when available.

**vehicle.make / vehicle.model / vehicle.version** *(string, optional)*: Vehicle make, model, and version.

**vehicle.year** *(integer, optional)*: Production year.

**vehicle.mileage\_km** *(integer, optional)*: Mileage in kilometers.

**vehicle.fuel\_type** *(string, optional)*: Fuel type.

**vehicle.gearbox** *(string, optional)*: Gearbox label.

**vehicle.engine\_capacity\_cc** *(integer, optional)*: Engine capacity in cubic centimeters.

**vehicle.engine\_power\_hp** *(integer, optional)*: Engine power in horsepower.

**vehicle.body\_type** *(string, optional)*: Body type.

**vehicle.color** *(string, optional)*: Vehicle color.

**vehicle.door\_count / vehicle.seat\_count** *(integer, optional)*: Door and seat counts.

**vehicle.transmission** *(string, optional)*: Drive or transmission description.

**vehicle.main\_features** *(array of strings, optional)*: Display-friendly feature highlights from the listing.

**location.city / location.region / location.address** *(string, optional)*: Public listing location fields.

**location.coordinates.latitude / location.coordinates.longitude** *(number, optional)*: Geographic coordinates when available.

**seller.id** *(string, optional)*: Seller identifier.

**seller.uuid** *(string, optional)*: Seller UUID when available.

**seller.name** *(string, optional)*: Public seller name.

**seller.type** *(string, optional)*: Seller type, such as `PROFESSIONAL`.

**seller.phone\_number** *(string, optional)*: First available seller phone number when `get_contact` is enabled and a number is available.

**seller.phone\_numbers** *(array of strings, optional)*: Available seller phone numbers collected from the listing when `get_contact` is enabled.

**seller.badges** *(array of strings, optional)*: Public seller badges.

**media.thumbnail\_url** *(string, optional)*: Primary thumbnail image URL.

**media.image\_urls** *(array of strings, optional)*: Image URLs associated with the listing.

**media.image\_count** *(integer, optional)*: Number of image URLs included.

**features.equipment** *(array of strings, optional)*: Equipment and feature labels.

**features.equipment\_groups** *(array of objects, optional)*: Equipment grouped by category.

**features.equipment\_groups\[].key** *(string, optional)*: Equipment group key.

**features.equipment\_groups\[].label** *(string, optional)*: Equipment group display label.

**features.equipment\_groups\[].values\[].key** *(string, optional)*: Equipment item key.

**features.equipment\_groups\[].values\[].label** *(string, optional)*: Equipment item label.

**signals.highlighted / signals.promoted / signals.cepik\_verified / signals.enriched** *(boolean, optional)*: Listing-level flags for public listing state and whether detail enrichment was applied.

**attributes.parameters** *(object, optional)*: Raw-style listing parameters keyed by parameter name.

**attributes.parameters.\*.label** *(string, optional)*: Parameter label.

**attributes.parameters.\*.display\_value** *(string, optional)*: Human-readable parameter value.

**attributes.parameters.\*.value** *(string, optional)*: Normalized parameter value when available.

**attributes.details** *(object, optional)*: Detail fields keyed by detail name.

**attributes.details.\*.label** *(string, optional)*: Detail label.

**attributes.details.\*.display\_value** *(string, optional)*: Human-readable detail value.

**attributes.details.\*.value** *(string, optional)*: Detail value.

**attributes.details.\*.group** *(string, optional)*: Detail group, such as `basic_information`, `technical_specs`, or `condition_history`.

**attributes.category.code / attributes.category.name** *(string, optional)*: Listing category code and display name.

**attributes.source\_dates.created\_at** *(string, optional)*: Source creation timestamp when available.

**attributes.source\_dates.updated\_at** *(string, optional)*: Source update timestamp when available.

**attributes.source\_dates.original\_created\_at** *(string, optional)*: Original source creation timestamp when available.

**attributes.source\_dates.bump\_date** *(string, optional)*: Source bump timestamp when available.

**source\_context.source\_url** *(string, required)*: Input URL that produced the record.

**source\_context.seed\_id** *(string, optional)*: Stable identifier for the provided input URL.

**source\_context.seed\_type** *(string, optional)*: Input source type, such as `url`.

**source\_context.page\_index** *(integer, optional)*: Result page index associated with the record.

**source\_context.record\_fingerprint** *(string, optional)*: Record fingerprint useful for comparison and deduplication support.

**source\_context.scraped\_at** *(string, required)*: Timestamp when the record was collected.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, or UI experiments.
- **Optional fields:** null-check optional values in downstream code, especially nested fields such as seller metadata, coordinates, media, equipment, and detailed attributes.
- **Deduplication:** use `listing_id` as the primary stable key, with `url` and `source_context.record_fingerprint` as supporting keys when needed.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or monitoring systems.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one vehicle segment, category URL, or filtered Otomoto URL per run when you need cleaner segmentation.
- Use multiple `startUrls` when you want to collect comparable segments in one run.
- Enable `enrich_data` when equipment, detailed specifications, descriptions, or image galleries are important.
- Enable `get_contact` when seller phone numbers are important for your workflow.
- Leave `enrich_data` disabled for faster sampling when standard listing fields are sufficient.
- Schedule recurring runs for monitoring workflows instead of relying on manual one-off exports.
- Use `listing_id` for deduplication when storing results over time.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Configure the available input fields for the target scope by adding one or more Otomoto URLs.
3. Set the maximum number of outputs to collect with `limit`.
4. Choose whether to enable `enrich_data`.
5. Click **Start** and wait for the run to finish.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

You can schedule runs to keep Otomoto vehicle datasets current for monitoring, reporting, or enrichment workflows. Scheduled runs are useful when you need consistent snapshots of public listings over time.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor pricing, availability, category movement, seller mix, and geographic coverage over time.
- **Data warehouses:** store historical listing snapshots for analysis, reporting, and model-ready datasets.
- **CRM enrichment:** sync public seller and vehicle attributes into lead, account, or opportunity records.
- **Google Sheets or Airtable:** review smaller samples, validate segments, or coordinate lightweight operational workflows.
- **Webhooks:** trigger ingestion, alerting, validation, or notification workflows after each completed run.
- **Data enrichment pipelines:** append current public vehicle attributes to existing inventory, valuation, or analytics datasets.

### Export Formats And Downstream Use

Apify datasets can be exported or consumed by downstream systems for operational workflows, analysis, and data delivery.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what <https://www.otomoto.pl> publicly exposes at run time.
- Some optional fields may be missing on sparse records, older listings, or listings with limited public detail.
- Very broad searches may take longer or require higher `limit` values.
- Target-side changes can affect field availability, naming, or formatting.
- Regional, account, or availability differences may change visible results.
- Detail-rich collection can take longer than standard listing collection.

### Troubleshooting

- **No results returned:** check the direct URLs, confirm they are valid Otomoto pages, and verify that the target pages contain matching public records.
- **Fewer results than expected:** raise the `limit`, use broader Otomoto search or category URLs, or verify that the target contains enough matching listings.
- **Some fields are empty:** optional fields depend on what each record publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public Otomoto vehicle listing data, including listing identity, URL, title, status, pricing, vehicle specifications, location, seller information, media, equipment, attributes, and source context when available.

#### Can I filter by location, category, date, price, or other criteria?

The actor accepts Otomoto URLs. To use filters such as location, category, price, or sorting, configure those filters on Otomoto and provide the resulting search or category URL in `startUrls`.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. A run may return fewer records when the provided URL has fewer matching public listings, listings are unavailable, or the selected scope is narrow.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or with a custom cron schedule for recurring monitoring and reporting workflows.

#### How do I avoid duplicates across runs?

Use `listing_id` as the primary idempotency key. You can also compare `url` and `source_context.record_fingerprint` when building deduplication or upsert logic.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats available in Apify Console.

#### Does this actor collect private data?

No. The actor is intended to collect publicly available information from Otomoto listing pages. Users are responsible for using the resulting data lawfully and responsibly.

#### When should I enable `enrich_data`?

Enable `enrich_data` when you need richer detail fields such as description, equipment, media, seller location, and technical specifications. Leave it disabled for faster sampling when standard listing fields are enough.

#### When should I enable `get_contact`?

Enable `get_contact` when you need available seller phone numbers. It opens listing pages to collect contact details, so runs can take longer than standard listing collection.

#### What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue. Redact any sensitive information before sharing.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available vehicle listing information from **https://www.otomoto.pl** for legitimate business purposes, including:

- **Automotive** research and market analysis
- Vehicle pricing, inventory, and availability monitoring
- Data enrichment for analytics, reporting, and operational workflows

Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and platform terms. This section is informational and not legal advice.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR or CCPA

### Support

For help, use the Issues tab or the actor page on Apify. Include the input used, with sensitive values redacted if needed, the run ID, the expected versus actual behavior, and a small output sample when it helps clarify the problem.

# Actor input Schema

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

Enter one or more Otomoto.pl URLs, such as a search results page, category page, or individual listing. Each URL is treated as a separate starting point for collection.

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

Enable this for more complete vehicle listings. This may make the run slower because the actor may spend more time collecting details for each result. Turn it off for faster runs when the standard result fields are enough.

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

Enable this to collect available dealer phone numbers from each listing page. This may make the run slower because the actor needs to open listing pages to recover contact details.

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

Set the maximum number of listing records to save for each URL. Leave this empty when you want the actor to collect all available results it can reach from the provided inputs.

## Actor input object example

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

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

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/otomoto-pl-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": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/otomoto-pl-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": 100
}' |
apify call fatihtahta/otomoto-pl-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/otomoto-pl-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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