# Changelog of Subito.it Automotive Scraper (`emastra/subito-it-motori`) Actor

- **URL**: https://apify.com/emastra/subito-it-motori/changelog.md
- **Full Actor documentation**: https://apify.com/emastra/subito-it-motori.md

## Changelog

### 2.0 — 2026-10-14

Existing saved tasks, schedules and API integrations keep working without changes: an input that does not set the new options gets the `legacy` output and no phone numbers.

#### New options

- **Private sellers only** (`onlyPrivate`): keeps only listings from private individuals. Subito's own "Privato" filter also includes some professionals; the Actor leaves them out too. A seller filter already in the start URL wins. Does not apply to single listing URLs.
- **Phone numbers** (`extractPhoneNumber`, paid): adds the phone number of private sellers who published one, charged **only when a number is found**. `advertiser_phone` holds the number published on Subito or, when there is none, the first number written in the description, as digits only; one number and one charge per listing. Businesses are never looked up. Off unless you switch it on, and only with the `flat` format: `legacy` has no phone column, so with `legacy` the option is ignored, with a warning, and nothing is charged.
- **Result format** (`resultFormat`): the new `flat` format is one level, with one column per data point (price, brand, model, version, vehicle type, condition, year, km, fuel, power, emission class, …), ready for spreadsheets. `flat` adds `phone_extraction_status`, which explains why a number is present or missing. `legacy`, the original nested format, stays the format for inputs that do not set this option.

#### Changes to `legacy` values

Its fields and structure are unchanged. These values change:

- Image URLs now load: they pointed at an address Subito's image server rejects.
- `publication_date.local` now shows the publication time; it showed the time of the scrape.
- A listing whose data was missing a feature value (emission class, power or seats) or the whole feature list made the page of 30 listings fail. It is now saved, with `null` for that value.

#### Results

- Each listing is saved once per run. Subito moves listings between pages while a run reads them, and overlapping searches return the same listing: these duplicates were saved, and charged, more than once.
- With `maxResultItems`, a search's pages are read in order, so the limit keeps the first listings of the search and nothing past the limit is fetched.
- A search start URL already on page N is now paginated from there; it used to read only that page.
- Single listing URLs work again: they returned nothing since Subito changed its listing pages. They now produce the same fields as search results, in the chosen format. Their `legacy` output no longer includes `advertiser_shop_data`, and `advertiser_type` follows the same rule as search results.

#### Other

- A failed page is reported in the log instead of adding a `#debug` row to the results, so the dataset contains listings only and you are no longer charged for those rows.
- Any Subito.it URL is accepted as a start URL (single listings ending in `.htm`, everything else as a search); URLs from other sites are skipped with a clear message.
- Start URLs given as `{ "url": "…" }` objects are read, and Subito.it URLs written inside a longer text (for example a whole input pasted as one start URL) are used, with a warning.
- A run with no usable start URL finishes with no listings and a status message saying why. An empty `startUrls` list is rejected before the run starts.
- The Output tab in Apify Console shows the columns in the documented order, with a separate view for the `legacy` format. Through the API, add `view=results` for the same order.
- The run's status message tells you when private sellers published phone numbers that were not extracted because the option was off.
