
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape subito.it listings in every category (real estate, cars, motorbikes, jobs, electronics) by URL or keyword: price, description, all attributes, location with coordinates, images, seller type and name, and optional phone numbers.
Scrape listings from Subito.it, Italy's largest classifieds site, in every category: apartments and houses, cars and motorbikes, jobs, electronics, furniture and more. Paste a search URL or type a keyword and get clean rows with price, full description, every attribute, location with coordinates, images, seller type and name, and optionally the seller's phone number. No login, no browser, a few seconds per hundred listings.
attributes object with everything Subito shows..htm work too).| Field | Description |
|---|---|
startUrls | Subito search URLs (any region, category and filters) or single listing URLs. |
searchQueries | Keywords, one per line. Uses the filters below. |
maxItems | Maximum number of listings in total (default 20). |
category, adType, region, province | Category, listing type (sale, rent, wanted, holiday rent, free), region and province for keyword searches. |
minPrice, maxPrice, sellerType, titleOnly, shippableOnly, sortBy | More keyword search filters. |
includeSellerName | Look up private sellers' public names (on by default). |
extractPhoneNumbers | Add the phone number the seller published (off by default, charged per number found). |
{
"startUrls": [{ "url": "https://www.subito.it/annunci-lazio/vendita/appartamenti/roma/" }],
"searchQueries": ["golf 7"],
"category": "auto",
"region": "lombardia",
"minPrice": 5000,
"maxPrice": 15000,
"maxItems": 100,
"extractPhoneNumbers": true
}
| Field | Description |
|---|---|
listingId, url, title, description | Listing ID, link, title and full text |
price, priceLabel, currency | Price in euros |
adType, category, macroCategory | Listing type (In vendita, In affitto, ...) and category |
publishedAt, expiresAt | Dates (ISO 8601, Italian time) |
town, province, provinceCode, region, latitude, longitude | Location |
advertiserType, advertiserName, advertiserId, shopName, vatNumber | Seller (privato or azienda) |
hasPhone, phone | Whether a phone number is published, and the number (when requested) |
sizeSqm, rooms, bathrooms, pricePerSqm, floor, energyClass, heating | Real estate facts |
brand, model, version, year, mileageKm, fuel, gearbox, powerKw, powerHp | Vehicle facts |
condition, shippable, shippingCost | Marketplace facts |
attributes, features | Every attribute Subito shows (by field name, and with Italian labels) |
imageUrl, imageCount, images | Images |
Example (seller details shortened):
{
"listingId": "664615708",
"url": "https://www.subito.it/auto/vw-golf-7-1-6tdi-2013-gancio-traino-1500kg-milano-664615708.htm",
"title": "VW GOLF 7 1.6TDI 2013 GANCIO TRAINO 1500KG",
"price": 5100,
"priceLabel": "5100 €",
"currency": "EUR",
"adType": "In vendita",
"category": "Auto",
"macroCategory": "Motori",
"publishedAt": "2026-10-15T10:48:59+02:00",
"town": "Pregnana Milanese",
"province": "Milano",
"provinceCode": "MI",
"region": "Lombardia",
"latitude": 45.516823,
"longitude": 9.009059,
"advertiserType": "azienda",
"advertiserName": "Example Auto Srl",
"hasPhone": true,
"brand": "VOLKSWAGEN",
"model": "Golf 7ª serie",
"version": "Golf 1.6 TDI 5p. Highline BlueMotion Technology",
"year": 2013,
"mileageKm": 281000,
"fuel": "Diesel",
"gearbox": "Manuale",
"powerKw": 77,
"powerHp": 105,
"attributes": { "car_type": "Berlina", "pollution": "Euro 5", "doors": "4/5", "seats": "5" },
"imageUrl": "https://images.sbito.it/api/v1/sbt-ads-images-pro/images/8b/8bd92c71-b5b3-4d8f-994d-b1144d30e6a0?rule=fullscreen-1x-auto",
"imageCount": 29
}
result-item event).Example: 1,000 listings ≈ $2.00 in listing events plus about a cent of usage.
Is it legal to scrape Subito.it? The scraper only reads public listings that anyone can see without an account. You are responsible for how you use the data, including personal data such as names and phone numbers (GDPR).
Do I need an account or a proxy? No. No login is used. Datacenter proxies are used by default and the scraper switches to Italian residential proxies by itself if it gets blocked.
How many listings can I get? Subito returns up to 10,000 listings per search. For more, split the search by region, province, category or price range.
Why is a field empty? Sellers fill in different attributes. Real estate facts are empty for cars and the other way round. Latitude, longitude and the expiry date are not shown on single listing pages, so they are empty for listings scraped from a .htm URL.
Why do some sellers have no phone? Many sellers only accept messages. hasPhone tells you whether a number exists; you pay for phone numbers only when one is found.
Can I schedule it or use the API? Yes. Schedule runs to monitor new listings, and start runs or read results through the API.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalSubito.it URLs
Search result or single listing URLs from subito.it, for any category: real estate, cars and motorbikes, jobs, electronics and more. Filters already set in the URL (region, province, town, price, private/company, category filters) are kept, and pages are followed automatically.
searchQueriesarrayOptionalSearch keywords
One keyword per line, e.g. 'iphone 15', 'golf 7', 'bilocale'. The filters below apply to these keyword searches (not to URLs).
maxItemsintegerOptionaldefault 20Max listings
Maximum number of listings saved in this run, across all URLs and keywords. Subito returns up to 10,000 listings per search.
Applied to the search keywords. For URLs, set the filters on subito.it and paste the URL.
categoryenumOptionalCategory
Limit keyword searches to one category.
adTypeenumOptionalListing type
Type of listing. Rent and holiday rent apply to real estate. Default: for sale.
regionenumOptionalRegion
Limit keyword searches to one Italian region.
provincestringOptionalProvince
Optional province inside the region, by name or code, e.g. 'Milano' or 'MI'. Needs a region.
minPriceintegerOptionalMin price (€)
Lowest price in euros.
maxPriceintegerOptionalMax price (€)
Highest price in euros.
sellerTypeenumOptionalSeller type
Private sellers or businesses only. Default: all.
titleOnlybooleanOptionalSearch in titles only
Match the keywords against listing titles only.
shippableOnlybooleanOptionalShippable only
Only listings that can be shipped (TuttoSubito).
sortByenumOptionalSort by
Order of the keyword search results. Default: newest first.
includeSellerNamebooleanOptionaldefault trueSeller name
Look up the public name of private sellers (one quick request per seller). Business names are always included.
extractPhoneNumbersbooleanOptionalPhone numbers
Add the phone number the seller published on the listing. Charged as a separate event, only when a number is found.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy
Datacenter proxies work for Subito. If they get blocked the scraper switches to residential proxies in Italy automatically.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| listingId | string | null | Subito listing ID |
| url | string | null | Listing URL |
| title | string | null | Title |
| price | number | null | Price in euros |
| priceLabel | string | null | Price as shown |
| currency | string | null | Currency |
| adType | string | null | Listing type (In vendita, In affitto, ...) |
| adTypeCode | string | null | Listing type code (s, u, k, h, g) |
| category | string | null | Category |
| categoryId | string | null | Category ID |
| macroCategory | string | null | Parent category |
| macroCategoryId | string | null | Parent category ID |
| description | string | null | Full listing text |
| publishedAt | string | null | Published (ISO 8601, Italian time) |
| expiresAt | string | null | Expires (ISO 8601) |
| town | string | null | Town (comune) |
| townIstat | string | null | Town ISTAT code |
| zone | string | null | Zone / district |
| province | string | null | Province |
| provinceCode | string | null | Province code |
| region | string | null | Region |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| advertiserType | string | null | privato or azienda |
| isCompany | boolean | null | Business seller |
| advertiserName | string | null | Seller name (shop name for businesses) |
| advertiserId | string | null | Seller user ID |
| shopId | string | null | Shop ID |
| shopName | string | null | Shop name |
| vatNumber | string | null | Business VAT number (jobs) |
| hasPhone | boolean | null | Seller published a phone number |
| phone | string | null | Phone number (when requested and published) |
| condition | string | null | Item condition |
| shippable | boolean | null | Can be shipped |
| shippingCost | number | null | TuttoSubito shipping cost (EUR) |
| sizeSqm | number | null | Size in m² |
| rooms | number | null | Rooms |
| bathrooms | number | null | Bathrooms |
| pricePerSqm | number | null | Price per m² |
| floor | string | null | Floor |
| energyClass | string | null | Energy class |
| heating | string | null | Heating |
| brand | string | null | Vehicle brand |
| model | string | null | Vehicle model |
| version | string | null | Vehicle version |
| mileageKm | number | null | Mileage (km) |
| year | number | null | Registration year |
| registrationDate | string | null | Registration date (MM/YYYY) |
| powerKw | number | null | Power (kW) |
| powerHp | number | null | Power (hp) |
| fuel | string | null | Fuel |
| gearbox | string | null | Gearbox |
| attributes | object | null | Every listing attribute, keyed by Subito field name |
| features | array | null | Every listing attribute with its Italian label |
| imageUrl | string | null | First image |
| imageCount | number | null | Number of images |
| images | array | null | All image URLs |
| urn | string | null | Subito ad URN |
| searchSource | string | null | The URL or keyword the listing came from |
| scrapedAt | string | null | Scraped at (UTC) |
| pageNumber | number | null | Result page on subito.it (30 per page) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Phone number | A seller phone number found on a listing (only when Phone numbers is on). | $0.0015 |
| Listing | One Subito.it listing saved to the dataset. | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/subito-scraper').call({
"startUrls": [
{
"url": "https://www.subito.it/annunci-lazio/vendita/appartamenti/roma/"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/subito-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/subito-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Listings from a Subito search page with seller names.
Cars between 5,000 and 15,000 EUR, cheapest first.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.