
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape ricardo.ch listings (auctions and buy-now offers): title, price, current bid, bids, condition, brand, seller, location, shipping, end date and images. Search by keyword, category, shop or URL.
Get every listing from ricardo.ch, Switzerland's largest online marketplace: title, price, current bid, number of bids, buy-now price, condition, brand, location, shipping options, start and end dates and photos. Paste a search, category, brand or shop URL, or just type a keyword. 1,000 listings take about 12 seconds, no login or ricardo.ch account is needed, and you pay $0.80 per 1,000 listings.
Turn on Include listing details to also get the full description, all photos, item attributes, bid steps, delivery and payment options, views, watchers and the seller's nickname, rating and verification for each listing.
| Field | What it does |
|---|---|
startUrls | ricardo.ch searches (/de/s/bike%20fully/), categories (/de/c/velos-82249/), brand pages (/de/b/lego/), seller shops (/de/shop/<seller>/offers/) or listings (/de/a/<title>-<id>/). Filters in the URL are kept. |
searchQueries | Keywords, each run as its own search with the filters below. |
maxItems | Maximum listings in total (default 20, 0 = no limit). |
maxItemsPerSearch | Optional limit per search, category or shop. |
offerType, condition, minPrice, maxPrice, sellerType, shipping, listingType, zipCode, radiusKm, excludeWords, sortBy | The site's own filters. |
includeDetails | Also read each listing page (extra event per listing). |
onlyNewListings | Save only listings not seen by earlier runs of the same search. |
language | de, fr or it for keyword searches, links and listing details. |
{
"searchQueries": ["iphone 15"],
"startUrls": ["https://www.ricardo.ch/de/c/velos-82249/"],
"maxItems": 200,
"offerType": "auction",
"maxPrice": 800,
"sortBy": "close_to_end",
"includeDetails": false
}
One row per listing.
| Field | Description |
|---|---|
id, title, url | Listing id, title and link |
price | Buy-now price, or the current bid / start price for auction-only listings (CHF) |
bidPrice, bidsCount | Current bid (or start price while there are no bids) and number of bids |
buyNowPrice, offerType | Fixed price and auction, buy_now or auction_and_buy_now |
conditionKey, brand, size, productTypeKey, categoryId | Item data |
city, zipCode | Where the item is |
shipping, shippingCost, freeShipping, pickupPossible | Delivery options and costs |
startDate, endDate, creationDate | Listing dates (UTC) |
image, imageLarge | Main photo |
sellerId, isPromo, highlight, isMoneyGuard, co2Savings | Seller id, promotion and protection flags |
searchQuery, sourceUrl, position, scrapedAt | Where and when the listing was found |
With details: description, images, attributes, startPrice, nextMinimumBid, bidIncrement, currentBid, deliveryOptions, paymentMethods, views, watchers, categoryPath, sellerNickname, sellerUrl, sellerType, sellerRatingsCount, sellerPositivePercent, sellerIdVerified, ... | Listing page data |
Example (real listing from a test run, trimmed):
{
"id": "1333065648",
"title": "Mountainbike Trek Modell Fuel EX",
"url": "https://www.ricardo.ch/de/a/mountainbike-trek-modell-fuel-ex-1333065648/",
"price": 11,
"currency": "CHF",
"buyNowPrice": null,
"bidPrice": 11,
"bidsCount": 4,
"offerType": "auction",
"conditionKey": "acceptable",
"brand": "Trek",
"productTypeKey": "bicycle",
"categoryId": 82249,
"imageLarge": "https://img.ricardostatic.ch/images/d0fb616c-3bb7-4611-8bd8-e6c48cd9477e/t_1000x750/mountainbike-trek-modell-fuel-ex",
"sellerId": "355337302",
"city": "Appenzell Eggerst.",
"zipCode": "9050",
"shipping": [{"key": "get_by_buyer", "cost": 0, "zipCode": "9050", "city": "Appenzell Eggerst."}],
"pickupPossible": true,
"startDate": "2026-10-20T16:48:00Z",
"endDate": "2026-10-27T16:45:00Z",
"searchQuery": "bike fully",
"position": 3
}
With Include listing details a row also has, for example:
{
"description": "Apple iPhone 15. Farbe schwarz. Speicher 128 GB. Akkukapazität: 86%. ...",
"imagesCount": 3,
"startPrice": 297,
"nextMinimumBid": 297,
"bidIncrement": 5,
"categoryPath": "Handy, Festnetz, Funk > Handys / Smartphones",
"attributes": [{"key": "mobile_phone_model", "name": "Modell", "value": "iPhone 15"}, {"key": "mobile_phone_storage_capacity", "name": "Speicherkapazität", "value": "128 GB"}],
"paymentMethods": ["bank_transfer"],
"views": 94,
"watchers": 6,
"sellerNickname": "example_seller",
"sellerType": "private",
"sellerRatingsCount": 41,
"sellerPositivePercent": 97.6,
"sellerPhoneVerified": true
}
Example: 1,000 listings ≈ $0.80 + $0.002 usage ≈ $0.80. 1,000 listings with details ≈ $0.80 + $0.50 + $0.04 ≈ $1.34.
You can set a maximum cost per run; the run stops cleanly when it is reached and keeps everything it saved.
Is it legal to scrape ricardo.ch? The actor only reads public listing pages that anyone can open without an account. Check the site's terms and your local rules (for example on personal data such as seller nicknames) for your use case.
Do I need a ricardo.ch account, cookies or my own proxy? No. Swiss residential and datacenter proxies are included and chosen automatically per page type.
How many results can I get? As many as the site has. ricardo.ch shows at most 60,000 listings (1,000 pages) for one search; when you ask for more, the actor splits the search into price bands by itself.
Why is a field empty?
Fields are filled only when the listing has them: buyNowPrice is empty for auction-only listings, bidPrice for fixed-price listings, brand or size when the seller did not set them, and every details field when Include listing details is off.
Can I schedule it or use the API?
Yes. Schedule the actor (with Only new listings for alerts) or start it over the API and read the dataset as JSON, CSV or Excel. Moving from a similar actor on another platform? Your start URLs and maxItems work as they are.
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.
startUrlsarrayOptionalRicardo.ch URLs
Paste ricardo.ch pages: searches (https://www.ricardo.ch/de/s/bike%20fully/), categories (https://www.ricardo.ch/de/c/velos-82249/), brand pages (https://www.ricardo.ch/de/b/lego/), seller shops (https://www.ricardo.ch/de/shop//offers/) or single listings (https://www.ricardo.ch/de/a/-/). Filters and sort order inside a URL are kept; the filters below are added where the URL has none.
searchQueriesarrayOptionalSearch queries
Keywords as you would type them into the ricardo.ch search box (for example lego technic, iphone 15, rolex). Each query is its own search with the filters below; listings found by several searches are saved once.
maxItemsintegerOptionaldefault 20Max results
Maximum number of listings to save in total. Use 0 for no limit (every listing of every search).
maxItemsPerSearchintegerOptionalMax results per search
Optional limit for each search, category or shop. 0 or empty: no per-search limit.
offerTypeenumOptionalOffer type
Only auctions or only fixed-price offers.
conditionarrayOptionalCondition
Only listings in one of these conditions. Empty: any condition.
minPriceintegerOptionalMinimum price (CHF)
Only listings priced at least this much (Swiss francs).
maxPriceintegerOptionalMaximum price (CHF)
Only listings priced at most this much (Swiss francs).
sellerTypeenumOptionalSeller type
Only private or only professional sellers.
shippingarrayOptionalDelivery
Only listings with one of these delivery options. Empty: any.
listingTypeenumOptionalSpecial listings
The site's quick filters: listings with bids, CHF 1 auctions, new today or ending within 24 hours.
zipCodestringOptionalZIP code
Swiss postcode (4 digits, for example 8001) to search around. Use with the radius.
radiusKmintegerOptionalRadius around the ZIP code (km)
Distance in kilometres around the ZIP code.
excludeWordsstringOptionalExclude words
Leave out listings whose title contains these words (space-separated).
sortByenumOptionalSort by
Order of the listings.
includeDetailsbooleanOptionaldefault falseInclude listing details
Also open each listing page for the full description, all photos, item attributes, start price and next minimum bid, delivery and payment options, views and watchers, and the seller's nickname, rating and verification. Charged as an extra event per listing; slower than search data alone.
onlyNewListingsbooleanOptionaldefault falseOnly new listings (monitoring)
Save only listings that earlier runs of the same search did not see. Use it with a schedule to get each new listing once.
languageenumOptionaldefault "de"Language of links
Language for search queries, result links and listing details (category names, attributes). Start URLs keep the language they are written in.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy
ricardo.ch answers Swiss residential IPs; datacenter IPs get a security check. Swiss residential proxies are the default.
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 | ricardo.ch listing id |
| title | string | null | Listing title |
| url | string | Listing page |
| price | number | null | Buy-now price, or the current bid / start price when the listing is an auction only (CHF) |
| currency | string | null | Always CHF |
| buyNowPrice | number | null | Fixed (buy-now) price in CHF, null for auction-only listings |
| bidPrice | number | null | Current bid, or the start price while there are no bids (CHF), null for fixed-price listings |
| bidsCount | number | null | Number of bids |
| offerType | string | null | auction, buy_now or auction_and_buy_now |
| hasAuction | boolean | null | Listing can be bid on |
| hasBuyNow | boolean | null | Listing can be bought at a fixed price |
| canMakeAnOffer | boolean | null | Seller accepts price offers |
| conditionKey | string | null | Item condition: new, like_new, used, acceptable, defective, ... |
| brand | string | null | Brand |
| size | string | null | Size |
| productTypeKey | string | null | Product type (for example bicycle, smartphone) |
| categoryId | number | null | ricardo.ch category id |
| image | string | null | Main photo (thumbnail) |
| imageLarge | string | null | Main photo (1000x750) |
| sellerId | string | null | Seller id |
| city | string | null | Item location: city |
| zipCode | string | null | Item location: Swiss postcode |
| shipping | array | null | Delivery options of the search card: key, cost (CHF), zipCode, city |
| shippingCost | number | null | Cheapest shipping cost (CHF); 0 means free shipping; null when the item is pickup only |
| freeShipping | boolean | null | Free shipping offered |
| pickupPossible | boolean | null | Pickup by the buyer possible |
| isPromo | boolean | null | Promoted listing |
| promoOption | string | null | Promotion package |
| highlight | string | null | Highlight type |
| isMoneyGuard | boolean | null | Buyer protection (MoneyGuard) available |
| co2Savings | string | null | Estimated CO2e saved by buying second-hand |
| startDate | string | null | Listing start (UTC) |
| endDate | string | null | Listing end (UTC) |
| creationDate | string | null | Listing created (UTC) |
| searchQuery | string | null | Search query that found the listing |
| sourceUrl | string | null | Start URL that found the listing |
| position | number | null | Position in the search results |
| scrapedAt | string | null | When the listing was scraped (UTC) |
| description | string | null | Details: description as plain text |
| descriptionHtml | string | null | Details: description as HTML |
| descriptionLanguage | string | null | Details: language of the description |
| images | array | null | Details: all photos (1800x1350) |
| imagesCount | number | null | Details: number of photos |
| startPrice | number | null | Details: auction start price (CHF) |
| nextMinimumBid | number | null | Details: next minimum bid (CHF) |
| bidIncrement | number | null | Details: bid increment (CHF) |
| currentBid | number | null | Details: highest bid (CHF), null without bids |
| quantity | number | null | Details: quantity offered |
| remainingQuantity | number | null | Details: quantity left |
| acceptsPriceOffers | boolean | null | Details: seller accepts price offers |
| minimumOfferPrice | number | null | Details: minimum offer (CHF) |
| warranty | string | null | Details: warranty |
| listingStatus | string | null | Details: listing status |
| categoryName | string | null | Details: category name |
| categoryPath | string | null | Details: category path |
| categoryUrl | string | null | Details: category page |
| productType | string | null | Details: product type |
| attributes | array | null | Details: item attributes (key, name, value), e.g. colour, frame size, storage |
| deliveryOptions | array | null | Details: delivery methods with cost, description and payment methods |
| paymentMethods | array | null | Details: accepted payment methods |
| views | number | null | Details: page views |
| watchers | number | null | Details: people who saved the listing |
| sellerNickname | string | null | Details: seller nickname |
| sellerUrl | string | null | Details: seller shop page |
| sellerType | string | null | Details: private or professional |
| sellerIsPro | boolean | null | Details: professional seller |
| sellerRatingsCount | number | null | Details: number of seller ratings |
| sellerPositivePercent | number | null | Details: share of positive ratings (%) |
| sellerListingsCount | number | null | Details: seller's listings |
| sellerCity | string | null | Details: seller city |
| sellerZipCode | string | null | Details: seller postcode |
| sellerCountry | string | null | Details: seller country |
| sellerAvatar | string | null | Details: seller picture |
| sellerIdVerified | boolean | null | Details: seller ID verified |
| sellerPhoneVerified | boolean | null | Details: seller phone verified |
| sellerAddressVerified | boolean | null | Details: seller address verified |
| detailsScraped | boolean | null | True when the listing page details are included |
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 details | Add-on per listing with its listing page data (when Include listing details is on, and for listing URLs): description, all photos, attributes, bid steps, delivery and payment options, views, watchers and seller profile. | $0.0005 |
| Result | One saved ricardo.ch listing: title, link, price, current bid, bids, offer type, condition, brand, location, shipping, dates and photo. | $0.0008 |
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/ricardo-scraper').call({
"startUrls": [
"https://www.ricardo.ch/de/s/bike%20fully/"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
],
"scrapelyProxyCountry": "CH"
}
})
// 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/ricardo-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/ricardo-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.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.