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

Scrape willhaben.at listings from marketplace, real estate, cars and jobs by URL or keyword: price, full description, attributes, seller type and phone, address with coordinates, images and dates. No login needed.
Scrape willhaben.at, Austria's largest classifieds site, in seconds. Get marketplace items, apartments and houses, used cars and motorcycles, and jobs with price, full description, every attribute, seller type and phone, address with coordinates, images and dates. Paste a search URL or type a keyword. No login, no browser, no cookies.
| Field | Description |
|---|---|
startUrls | willhaben.at search, category, listing or job URLs. Pages are followed automatically. |
searchQueries | Keywords, one per line. |
maxItems | Maximum listings per run (default 20). |
category | Section for keywords: marketplace, apartments-rent, apartments-buy, houses-rent, houses-buy, land, commercial-rent, commercial-buy, cars, motorcycles, commercial-vehicles, jobs. |
region, minPrice, maxPrice, sellerType, postedLast48Hours, sortBy | Filters for keyword searches. |
includeDetails | Open every listing for the full description, all attributes, seller profile and phone numbers (default on). |
includeRawData | Also add willhaben's complete original JSON in a raw field. |
{
"startUrls": [{ "url": "https://www.willhaben.at/iad/immobilien/mietwohnungen/wien" }],
"searchQueries": ["golf 7"],
"category": "cars",
"region": "wien",
"maxPrice": 15000,
"maxItems": 100
}
| Field | Description |
|---|---|
id, url, title, description | Listing ID, link, title and full description |
vertical, category | Section (marketplace, real-estate, vehicles, jobs) and category path |
price, priceText, currency | Price or monthly rent as a number and as shown |
location, street, postalCode, city, district, state, latitude, longitude | Address and coordinates |
sellerType, sellerName, sellerId, sellerRegisteredAt, sellerActiveAds, companyName, contactName, phones, website | Seller and contact |
imageUrls, imageCount, mainImage | Full-size images |
publishedAt, firstPublishedAt, changedAt, endsAt, status | Dates and status |
livingAreaM2, rooms, propertyType, pricePerM2, constructionYear, energyHwb, energyClass, ... | Real estate fields |
make, model, modelVariant, year, mileageKm, fuel, transmission, powerKw, powerHp, ... | Vehicle fields |
company, companyIndustry, companyVatId, employmentModes, applyUrl, ... | Job fields |
features, attributes | All features and every raw willhaben attribute |
{
"id": "1412934978",
"url": "https://www.willhaben.at/iad/immobilien/d/mietwohnungen/wien/wien-1100-favoriten/-absolute-ruhelage-wohntraum-inkl-garagenplatz-1412934978/",
"title": "Absolute Ruhelage - Wohntraum inkl. Garagenplatz!",
"description": "Ankommen, wohlfühlen und genießen - diese charmante Mietwohnung in 1100 Wien ...",
"vertical": "real-estate",
"category": "Immobilien > Wohnung mieten > Wien > Wien, 10. Bezirk, Favoriten",
"price": 1070,
"priceText": "€ 1.070",
"currency": "EUR",
"location": "Wien, 10. Bezirk, Favoriten",
"postalCode": "1100",
"city": "Wien",
"state": "Wien",
"latitude": 48.13678,
"longitude": 16.407698,
"sellerType": "dealer",
"sellerName": "Example Immobilien GmbH",
"contactName": "Maria Muster",
"phones": ["+43660000000"],
"imageCount": 15,
"mainImage": "https://cache.willhaben.at/mmo/8/141/293/4978_102501725.jpg",
"publishedAt": "2026-10-16T00:51:36+02:00",
"livingAreaM2": 43.28,
"rooms": 2,
"propertyType": "Wohnung",
"pricePerM2": 24.72,
"constructionYear": 2019,
"energyClass": "A",
"features": { "Ausstattung": ["Fahrstuhl", "Garage", "Keller", "Parkplatz"], "Freiflächen": "Balkon" }
}
You pay $0.75 per 1,000 listings ($0.00075 per listing) and no start fee. Platform usage (compute and proxy traffic) is billed on top and is small: willhaben's data is compact, so a 1,000-listing run with details measured about $0.01 of usage. Example: 1,000 listings ≈ $0.76 in total. You are only charged for listings that are saved.
Is it legal to scrape willhaben? The actor only reads publicly visible listings, the same data any visitor sees without logging in. Check that your use complies with willhaben's terms and data protection law (GDPR), especially for personal data such as private sellers' names and phone numbers.
Do I need a willhaben account or my own proxies? No. No login is used, and the built-in datacenter proxies work well. If willhaben ever blocks them, the run switches to Austrian residential proxies by itself.
How many listings can I get? As many as the search has: pagination is followed to the end. Narrow big searches with filters to get exactly what you need.
Why is a field empty? Fields are only filled when the seller provided them (for example, phone numbers or energy class). Turn off includeDetails and you get search data only, which has a shorter description and fewer attributes.
Can I schedule runs or use the API? Yes. Schedule the actor to watch new listings, and read results through the API, webhooks or integrations.
I used another willhaben scraper. Can I switch? Yes, paste the same search URL. Every original willhaben attribute is still available in attributes, and includeRawData adds the complete original JSON.
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.
startUrlsarrayOptionalwillhaben URLs
Search result, category or single listing URLs from willhaben.at: marketplace (kaufen-und-verkaufen), real estate (immobilien), cars and motorcycles (gebrauchtwagen) and jobs (jobs/suche or jobs/job). Filters in the URL are kept and pages are followed automatically.
searchQueriesarrayOptionalSearch keywords
One keyword per line, e.g. 'iphone 15', 'golf 7', 'dachgeschoss'. Searched in the category below with the filters below.
maxItemsintegerOptionaldefault 20Max listings
Maximum number of listings saved in this run, across all URLs and keywords.
categoryenumOptionaldefault "marketplace"Category for keywords
Where the keywords are searched. URLs always keep their own category.
regionenumOptionalFederal state
Limit keyword searches to one Austrian federal state (not used for jobs).
minPriceintegerOptionalMin price (EUR)
Lowest price (or monthly rent) in euros. Not used for jobs.
maxPriceintegerOptionalMax price (EUR)
Highest price (or monthly rent) in euros. Not used for jobs.
sellerTypeenumOptionaldefault "all"Seller type
Private sellers or commercial sellers (dealers, agencies). Not used for jobs.
postedLast48HoursbooleanOptionaldefault falseOnly listings from the last 48 hours
Only listings published in the last 48 hours. Not used for jobs.
sortByenumOptionaldefault "newest"Sort by
Order of keyword search results. Not used for jobs.
includeDetailsbooleanOptionaldefault trueInclude listing details
Open every listing for the full description, all attributes and features, seller profile, phone numbers and full-size images. Turn off for a faster run with search data only (short description, main attributes).
includeRawDatabooleanOptionaldefault falseInclude raw willhaben data
Also add the complete original willhaben JSON of each listing in a 'raw' field.
maxConcurrencyintegerOptionaldefault 20Max concurrency
How many listings are loaded in parallel.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for willhaben. The run switches to residential proxies in Austria by itself if datacenter IPs get blocked.
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 |
|---|---|---|
| id | string | null | Listing ID |
| url | string | null | Listing URL |
| title | string | null | Title |
| description | string | null | Full description |
| vertical | string | null | marketplace, real-estate, vehicles or jobs |
| category | string | null | Category path |
| price | number | null | Price or monthly rent in EUR |
| priceText | string | null | Price as shown |
| location | string | null | Location |
| postalCode | string | null | Postal code |
| city | string | null | City |
| state | string | null | Federal state |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| sellerType | string | null | private or dealer |
| sellerName | string | null | Seller name |
| phones | array | null | Phone numbers |
| imageUrls | array | null | Full-size image URLs |
| mainImage | string | null | Main image |
| publishedAt | string | null | Published at |
| livingAreaM2 | number | null | Living area (m²) |
| rooms | number | null | Rooms |
| make | string | null | Make |
| model | string | null | Model |
| year | number | null | Year |
| mileageKm | number | null | Mileage (km) |
| company | string | null | Employer (jobs) |
| attributes | object | null | All willhaben attributes |
| features | object | null | Features |
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 |
|---|---|---|
| Listing | One willhaben listing saved to the dataset. | $0.00075 |
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/willhaben-scraper').call({
"startUrls": [
{
"url": "https://www.willhaben.at/iad/immobilien/mietwohnungen/wien"
}
],
"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/willhaben-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/willhaben-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.
Cars from 5,000 to 20,000 EUR with details.
Listings from a Willhaben category URL.
Quick list of cars without detail pages.
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.