# Subito Listings Scraper (`piotrv1001/subito-listings-scraper`) Actor

The Subito Listings Scraper exports classified ads from Subito.it, Italy's largest marketplace, by keyword, category, region and price: price, condition, shipping, description, photos, private/company seller and location with coordinates, past the 10,000-ad limit — for price research.

- **URL**: https://apify.com/piotrv1001/subito-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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

### 🚀 Subito Listings Scraper

Export classified ads from **Subito.it**, Italy's largest classifieds marketplace. The **Subito Listings Scraper** searches by keyword, category, region and price and returns clean, structured ads. Each ad includes its price, condition, shipping, full description, photos, seller type and exact location with coordinates. It covers everything from phones and furniture to cars and apartments.

### ✨ Features

- 🔍 **Search by filters, not URLs**: Keywords, any of Subito's 45 categories, any of the 20 regions, price range, shippable only, and ad type (for sale, wanted, for rent, holiday rent, free).
- 🎯 **Relevant results**: Keywords match ad titles by default. Subito's regular search also returns loosely related ads (a search for "divano" returns consoles and cars); switch this off to get exactly what the website shows.
- 📚 **More than 10,000 ads per search**: Subito shows at most 10,000 ads per search. Ask for more and the scraper splits the search by region and price automatically.
- 📍 **Precise location**: Region, province (with code), town, official ISTAT code and latitude/longitude.
- 🏷️ **Normalized fields**: Numeric price, condition, shippable flag, shipping method, category, post and expiry dates (ISO), private or company seller, plus all category-specific details (e.g. mileage, rooms, phone type).
- 📅 **Posted after**: Only the ads you haven't collected yet.
- 🔒 **No personal contacts**: No seller names, phone numbers or emails. Any left in ad text are removed.

### 🛠️ How It Works

1. **Search**: Enter keywords (e.g. `iphone`, `divano`, `bicicletta`) and/or choose a category and region.
2. **Filter**: Price range, shippable only, ad type and "posted after".
3. **Run the scraper**: Get one row per ad, newest first, ready to export as JSON, CSV or Excel.

### 💰 Pricing

| Event   | Price  | When          |
| ------- | ------ | ------------- |
| Listing | $0.001 | Each ad saved |

1,000 ads cost $1.

### 📊 Sample Output Data

```json
[
    {
        "keyword": "iphone",
        "id": "662035559",
        "urn": "id:ad:24552eaf-c691-4fd9-8c24-156b77e5c990:list:662035559",
        "url": "https://www.subito.it/telefonia/iphone-15-nero-lecce-662035559.htm",
        "title": "Iphone 15 nero",
        "description": "Iphone 15 nero\nCondizioni 8.5/10\nBatteria 100% (appena sostituita con ricevuta,)\nFunziona perfettamente\nSchermo perfetto\nFotocamere perfette\nIn aggiunta dò anche pellicola privacy\n\nDifetti: \n- chip nfc non funzionante\n- vetro posteriore scheggiato (vedere foto)\n\nPer qualsiasi informazione contattatemi pure.",
        "price": 450,
        "condition": "Ottimo - poco usato e ben conservato",
        "shippable": true,
        "shippingMethod": "Spedizione con TuttoSubito",
        "category": "Telefonia",
        "categoryId": "12",
        "adType": "In vendita",
        "postedAt": "2026-09-24T20:04:55.8+0200",
        "expiresAt": "2027-09-24T20:04:55.8+0200",
        "region": "Puglia",
        "province": "Lecce",
        "provinceCode": "LE",
        "town": "Aradeo",
        "townIstat": "075006",
        "latitude": 40.129386,
        "longitude": 18.132021,
        "sellerType": "private",
        "sellerId": "106712139",
        "image": "https://images.sbito.it/api/v1/sbt-ads-images-pro/images/fd/fd8b2c9c-7a63-4e7a-a8c0-dd06641f87ee?rule=fullscreen-1x-auto",
        "images": [
            "https://images.sbito.it/api/v1/sbt-ads-images-pro/images/fd/fd8b2c9c-7a63-4e7a-a8c0-dd06641f87ee?rule=fullscreen-1x-auto",
            "https://images.sbito.it/api/v1/sbt-ads-images-pro/images/7b/7b1b0334-934e-41e5-951d-aa09e211e0fe?rule=fullscreen-1x-auto"
        ],
        "features": {
            "Disponibile alla spedizione": "Sì",
            "Corrieri per la spedizione": "poste_italiane, ups, inpost, bartolini",
            "Peso del pacco": "Piccolo - fino a 2kg",
            "Tipologia telefoni": "Cellulari e Smartphone",
            "Costo della spedizione": "0,99 €"
        },
        "scrapedAt": "2026-09-24T18:30:00.000Z"
    }
]
```

### ❓ Good to Know

- **Prices are in euros.** `price` is empty when the seller did not set one.
- **`features`** holds every category-specific detail Subito shows, in Italian, e.g. `"Chilometraggio"` for cars or `"Locali"` for apartments.
- **Above 10,000 ads per keyword** the results are collected region by region, so they are no longer in strict date order. Ads without a price can be missed in the rare case of a single region with more than 10,000 results.
- **`sellerId`** is Subito's anonymous user number, useful for grouping ads by seller. It does not identify a person.

Explore the Italian second-hand market with the **Subito Listings Scraper** today! 🚀

# Actor input Schema

## `keywords` (type: `array`):

Search words, e.g. `iphone`, `divano`, `bicicletta`. Each keyword is searched separately. Leave empty to list the newest ads in the chosen category and region.

## `titleOnly` (type: `boolean`):

Only return ads whose title contains the keywords. Subito's regular search also matches loosely related ads (e.g. `divano` returns consoles and cars); turn this off to get the same results as the Subito website.

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

Only search this category. Leave empty for all categories.

## `region` (type: `string`):

Only search this region. Leave empty for all of Italy.

## `adType` (type: `string`):

For sale, wanted, for rent, holiday rent or free.

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

Only ads priced at or above this amount.

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

Only ads priced at or below this amount.

## `shippableOnly` (type: `boolean`):

Only ads the seller will ship.

## `postedAfter` (type: `string`):

Only save ads posted on or after this date.

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

Maximum number of ads to save for each keyword, newest first. Subito shows at most 10,000 ads per search; above that the search is split by region and price, and results are no longer strictly newest first.

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

Proxy servers used to reach Subito.

## Actor input object example

```json
{
  "keywords": [
    "iphone"
  ],
  "titleOnly": true,
  "adType": "s",
  "shippableOnly": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "keywords": [
        "iphone"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/subito-listings-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 = {
    "keywords": ["iphone"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/subito-listings-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 '{
  "keywords": [
    "iphone"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/subito-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/subito-listings-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/SjJxYDS90BvPQJ0xr/builds/bgxb3sDS6dDwB29QM/openapi.json
