# Otomoto.pl Scraper (`shahidirfan/otomoto-pl-scraper`) Actor

Extract car listings from Otomoto.pl instantly. Scrape prices, specifications, photos & seller details automatically. Perfect for dealers, price monitoring, market analysis & lead generation in Poland's top automotive marketplace.

- **URL**: https://apify.com/shahidirfan/otomoto-pl-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Automation, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Cars Scraper

Extract detailed car listings from Otomoto.pl at scale. Collect listing titles, prices, locations, seller details, photo links, and other key information in a clean dataset for research, monitoring, and lead generation. Built for fast, reliable collection with pagination handled automatically.

### Features

- **Detailed listing data** — Collect titles, prices, locations, seller information, and photo links in one run.
- **Fast collection** — Save time with automated pagination that continues until your target count is reached.
- **Flexible searches** — Start from a specific Otomoto page and narrow results with built-in filters on the listing URL.
- **Clean datasets** — Receive organized records ready for analysis, reporting, or downstream automation.
- **Proxy support** — Use Apify Proxy for more reliable runs when collecting larger volumes.

### Use Cases

#### Vehicle Market Research
Track car inventory across Otomoto.pl to understand what is available in a specific category, city, or price range. Use the output to compare availability, spot trends, and build market reports.

#### Price Monitoring
Monitor how listing prices change over time for vehicles you care about. This is useful for dealerships, resellers, and analysts who need up-to-date pricing visibility.

#### Lead Generation
Collect seller details and listing URLs for outreach workflows. Build focused prospect lists for vehicle buying, sourcing, or brokerage use cases.

#### Competitive Intelligence
Compare inventory volume, location coverage, and vehicle variety across segments. Use the dataset to support strategy, benchmarking, and sales planning.

#### Data Enrichment
Feed structured listing data into spreadsheets, dashboards, CRMs, or internal tools. Keep your systems updated with fresh car listing records.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | `https://www.otomoto.pl/osobowe` | Otomoto listing page to start from. You can use a specific search page if you want narrower results. |
| `query` | String | No | `""` | Optional search text to narrow the listings, such as a brand, model, or keyword. |
| `results_wanted` | Integer | No | `20` | Maximum number of listings to collect in one run. |
| `max_pages` | Integer | No | `20` | Safety limit for how many pages the actor can process. |
| `proxyConfiguration` | Object | No | Apify Proxy disabled | Proxy configuration for more reliable collection. |

---

### Output Data

Each item in the dataset contains:

| Field | Type | Description |
|-------|------|-------------|
| `id` | String | Unique listing identifier. |
| `title` | String | Listing title. |
| `description` | String | Listing description when available. |
| `url` | String | Direct listing URL. |
| `offerType` | String | Seller offer type. |
| `createdAt` | String | When the listing was published. |
| `updatedAt` | String | When the listing was last updated. |
| `photos` | Array | Photo links found for the listing. |
| `priceCurrency` | String | Currency code for the price. |
| `priceGrossMinor` | Number | Gross price in minor units. |
| `priceNetMinor` | Number | Net price in minor units when available. |
| `priceIsNet` | Boolean | Indicates whether the listing price is net. |
| `priceIsNegotiable` | Boolean | Indicates whether the price can be negotiated. |
| `locationName` | String | Human-readable location. |
| `cityCode` | String | City slug or code. |
| `cityId` | String | City identifier. |
| `regionId` | String | Region identifier. |
| `districtId` | String | District identifier when available. |
| `categoryId` | Number | Category identifier. |
| `categoryName` | String | Category name. |
| `sellerId` | String | Seller identifier. |
| `sellerName` | String | Seller display name. |
| `sellerType` | String | Seller type. |
| `sellerPhones` | Array | Seller phone numbers when available. |
| `sellerLogoId` | String | Seller logo identifier when available. |
| `sellerLogoUrl` | String | Seller logo link when available. |
| `sourceUrl` | String | Original start URL used for the run. |

---

### Usage Examples

#### Basic Collection

Collect the first 20 listings from the main osobowe page:

```json
{
  "startUrl": "https://www.otomoto.pl/osobowe",
  "results_wanted": 20
}
````

#### Search by Keyword

Focus on a specific make or model:

```json
{
  "startUrl": "https://www.otomoto.pl/osobowe",
  "query": "bmw",
  "results_wanted": 50,
  "max_pages": 10
}
```

#### Narrow Search Page

Start from a more specific Otomoto search page:

```json
{
  "startUrl": "https://www.otomoto.pl/osobowe?search%5Bfilter_float_price:from%5D=50000",
  "results_wanted": 40,
  "max_pages": 8
}
```

***

### Sample Output

```json
{
  "id": "6146143723",
  "title": "Seat Ibiza 1.4 16V Reference Salsa",
  "url": "https://www.otomoto.pl/osobowe/oferta/seat-ibiza-polift-1-4-mpi-klimatyzacja-ele-szyby-podgrz-fotele-ID6HVAKn.html",
  "offerType": "BUSINESS",
  "createdAt": "2026-03-09T14:37:27Z",
  "updatedAt": "2026-03-24T14:37:14Z",
  "photos": [
    "https://ireland.apollo.olxcdn.com/v1/files/example/image-1",
    "https://ireland.apollo.olxcdn.com/v1/files/example/image-2"
  ],
  "priceCurrency": "PLN",
  "priceGrossMinor": 2300000,
  "priceNetMinor": 1869919,
  "priceIsNet": false,
  "priceIsNegotiable": false,
  "locationName": "Cieszyn, cieszyński, Śląskie",
  "cityCode": "cieszyn",
  "cityId": "4541",
  "regionId": "6",
  "categoryId": 29,
  "categoryName": "Osobowe",
  "sellerId": "16323143",
  "sellerName": "KOMIS SAMOCHODOWY CIESZYN WILCARS KACPER & RAFAŁ",
  "sellerType": "ProfessionalSeller",
  "sourceUrl": "https://www.otomoto.pl/osobowe"
}
```

***

### Tips for Best Results

#### Start With a Relevant Page

- Use a specific Otomoto listing page when you want narrower results.
- Keep the start page aligned with the vehicles you actually need.

#### Keep Runs Small for Testing

- Start with `results_wanted: 20` to verify your setup quickly.
- Increase the value only after you confirm the results look right.

#### Use Keyword Search Wisely

- Add a make, model, or fuel type in `query` to reduce noise.
- Try different keywords if you need a tighter result set.

#### Limit Large Searches

- Use `max_pages` to prevent unexpectedly long runs.
- Keep the page limit conservative when exploring new searches.

#### Use Proxy When Needed

- Enable Apify Proxy for more stable large runs.
- Residential proxy groups can help when collecting bigger result sets.

***

### Integrations

Connect your data with:

- **Google Sheets** — Review car listings in a spreadsheet.
- **Airtable** — Build a searchable vehicle database.
- **Excel** — Prepare reports for analysis and sharing.
- **Slack** — Send alerts about new listings.
- **Zapier** — Trigger automations from fresh results.
- **Make** — Create no-code workflows around your data.
- **Webhooks** — Send output to custom systems and apps.

#### Export Formats

Download the dataset in multiple formats:

- **JSON** — Best for development and automation.
- **CSV** — Useful for spreadsheet analysis.
- **Excel** — Good for reporting and business teams.
- **XML** — Suitable for system integrations.

***

### Frequently Asked Questions

#### How many listings can I collect?

You can collect as many listings as your `results_wanted` and `max_pages` settings allow. For quick checks, start small and scale up when you are happy with the results.

#### Can I use a specific Otomoto page?

Yes. Set `startUrl` to the exact Otomoto page you want to begin from.

#### Can I narrow the results by keyword?

Yes. Use the `query` field to focus on a make, model, or other keyword.

#### What if some fields are missing?

Some listings do not provide every field. The actor only keeps data that is available.

#### Are photo links included?

Yes. When photo links are available, they are included in the `photos` field.

#### How do I keep runs fast?

Use a smaller `results_wanted` value first, then increase it once your setup is confirmed.

#### Can I use proxies?

Yes. Proxy support is available and recommended for more reliable larger runs.

***

### Support

If you need help or want to request a feature, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection. Users are responsible for complying with applicable laws, website terms, and data usage policies. Use collected data responsibly.

# Actor input Schema

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

Otomoto listing URL to start from. Filters in URL query params are automatically applied.

## `query` (type: `string`):

Optional free-text query (for example: bmw, audi a4, diesel).

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

Maximum number of listings to save.

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

Safety limit on pagination loops.

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

Residential proxy is recommended for best reliability.

## Actor input object example

```json
{
  "startUrl": "https://www.otomoto.pl/osobowe",
  "results_wanted": 20,
  "max_pages": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrl": "https://www.otomoto.pl/osobowe",
    "query": "",
    "results_wanted": 20,
    "max_pages": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/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 = {
    "startUrl": "https://www.otomoto.pl/osobowe",
    "query": "",
    "results_wanted": 20,
    "max_pages": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/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 '{
  "startUrl": "https://www.otomoto.pl/osobowe",
  "query": "",
  "results_wanted": 20,
  "max_pages": 20
}' |
apify call shahidirfan/otomoto-pl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Otomoto.pl Scraper",
        "description": "Extract car listings from Otomoto.pl instantly. Scrape prices, specifications, photos & seller details automatically. Perfect for dealers, price monitoring, market analysis & lead generation in Poland's top automotive marketplace.",
        "version": "1.0",
        "x-build-id": "6svb17MnG3tUuB8Z2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~otomoto-pl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/shahidirfan~otomoto-pl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/shahidirfan~otomoto-pl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Otomoto listing URL to start from. Filters in URL query params are automatically applied."
                    },
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Optional free-text query (for example: bmw, audi a4, diesel)."
                    },
                    "results_wanted": {
                        "title": "Maximum number of listings",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to save.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum number of pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety limit on pagination loops.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxy is recommended for best reliability.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
