SS.com Scraper - Latvia Classifieds & Marketplace avatar

SS.com Scraper - Latvia Classifieds & Marketplace

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
SS.com Scraper - Latvia Classifieds & Marketplace

SS.com Scraper - Latvia Classifieds & Marketplace

Scrape classified listings from SS.com (SS.lv) - Latvia's largest marketplace. Extract cars, real estate, electronics, jobs, and more. Search by category, keyword, and location. No login or cookies required.

Pricing

from $1.20 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

0.72 hours

Issues response

22 days ago

Last modified

Categories

Share

SS.com Scraper

Scrape classified listings from SS.com (also known as SS.lv) -- Latvia's largest and most popular classifieds platform. Extract cars, real estate, electronics, jobs, and more across 12 categories. No login or cookies required.

Why use this actor?

SS.com is the dominant classifieds marketplace in Latvia with hundreds of thousands of active listings. It covers every major category from vehicles and real estate to jobs, electronics, and agriculture. This actor navigates the site using a headless browser, handles pagination, and extracts structured data from both listing pages and individual detail pages.

Use cases:

  • Car market analysis -- monitor used car prices across all brands in Latvia's largest vehicle marketplace
  • Real estate monitoring -- track apartment and house listings in Riga, Jurmala, and across Latvia
  • Price intelligence -- compare prices for electronics, furniture, and household goods in the Baltic market
  • Job market research -- extract vacancy listings and salary data from Latvia's top jobs board
  • Lead generation -- identify active sellers, dealers, and businesses advertising on SS.com
  • Market research -- analyze listing volumes, pricing trends, and supply across the Latvian market
  • Cross-border sourcing -- find deals on vehicles, electronics, and goods in Latvia for Baltic region buyers

No cookies, no login, no session management -- configure your category and get back structured JSON.

Input

FieldTypeRequiredDescription
searchQueryStringNoSearch term (e.g. "BMW", "iPhone", "dzivoklis"), run through SS.com's own search inside the chosen category. Results include sale and wanted ads; adType says which.
categoryStringNoMain category: transport, real-estate, electronics, work, construction, clothes-footwear, home-stuff, production-work, for-children, animals, agriculture, entertainment
subcategoryStringNoSubcategory path (e.g. "cars", "flats/riga", "phones/apple-iphone")
transactionTypeStringNoFilter: "sell" (default), "buy", "hand_over", "all"
startUrlsArrayNoDirect SS.com URLs to scrape (overrides category settings)
maxResultsIntegerNoMaximum listings to return (default: 100, max: 10,000)
scrapeDetailsBooleanNoVisit detail pages for full data (default: true)
proxyConfigurationObjectNoProxy settings for reliable access

Output

Each result contains:

FieldTypeExample
listingTitleString"BMW 530d 258zs. , automātiskā ātrumkārba"
priceNumber6990
currencyString"EUR"
locationString"Riga"
categoryString"transport"
attributesObject{"Year of issue": "2012", "Engine": "3.0 diesel", "Run, km": "335 000"}
sellerTypeString"private" or "company"
imageUrlStringImage URL
urlStringFull listing URL
listingDescriptionStringFull description text from the detail page
postedDateString"09.06.2026"
scrapedAtStringISO 8601 timestamp

Example output

{
"listingTitle": "BMW 530d 258zs., automātiskā ātrumkārba",
"price": 6990,
"currency": "EUR",
"location": "Tukums and reg.",
"category": "transport",
"attributes": {
"Year of issue": "2012 june",
"Engine": "3.0 diesel",
"Gearbox": "Automatic",
"Run, km": "335 000",
"Color": "Grey metalic",
"Body type": "Sedan",
"Checkup": "07.2027"
},
"sellerType": "company",
"imageUrl": "https://i.ss.com/gallery/8/1508/376885/75376881.800.jpg",
"url": "https://www.ss.com/msg/en/transport/cars/bmw/530/cdofkd.html",
"listingDescription": "Tikko no Vācijas, pilna servisa vēsture...",
"postedDate": "09.06.2026",
"scrapedAt": "2026-06-09T12:00:00.000Z"
}

Vehicle fields (cars and other transport)

For vehicle ads the detail page gives structured fields next to the raw attributes:

FieldExampleNotes
listingId"58116873"SS.com's own ad id
listingTitle"Ford Ranger, 2022, 2.0 diesel"Built from make/model, year and engine. SS.com ads have no title of their own.
issueDate / yearOfIssue / monthOfIssue"04/2022" / 2022 / 4From "Year of issue: 2022 april". yearOfIssueRaw keeps the original.
firstRegistrationDate"18.06.2020"Only when the seller writes it in the description, with firstRegistrationEvidence
mileageKm, color, engine, gearbox, bodyType, technicalInspectionUntil74200, "Grey"
boughtNewInLatviatrueFrom SS.com's "New car was bought in Latvia" note; null when the note is absent
equipment["Climate control", "Seats: With heating"]Only the items SS.com marks as fitted

VAT and net price

  • vatIncluded is true only for an explicit VAT-included claim (the "*PVN included" price note, or text like "Cena ar PVN"), false only for an explicit VAT-excluded claim ("+ PVN", "bez PVN"), and null when nothing is stated. A missing note is not read as a margin-scheme sale, and seller type is never used to guess it.
  • vatSource and vatEvidence hold the source text.
  • netPrice is filled only when the seller states a net price ("Netto cena 30 000 EUR"), with netPriceEvidence.
  • vatRateStated is a rate the seller wrote. vatRateCalculated is our own calculation from price and netPrice.

VIN and registration plate

SS.com shows the VIN and the plate only after a Google reCAPTCHA check, per ad. The actor does not solve CAPTCHAs, so:

  • vin is filled only when the seller wrote a valid 17-character VIN in the description (vinSource: "sellerDescription", vinEvidence holds the sentence).
  • Otherwise vin is null and vinStatus says why: captchaProtected (the ad has a VIN behind the check) or notListed.
  • plate and plateStatus work the same way.

Sold, removed and redirected ads

SS.com answers a removed ad's URL with HTTP 200 and a different ad from the same model. It also does not always serve the same ad at the same URL: on 29 Sep 2026 one Land Cruiser URL returned an expired Sell ad on about 1 in 10 requests from fresh IPs and a Buy ad on the rest, with no redirect. The actor checks every detail page:

  • listingStatus: "identityMismatch" when the page shows a different ad than the listingId you passed. No data from the other ad is attached; servedListingId says which ad SS.com showed.
  • listingStatus: "notForSale" when a single ad URL without a listingId shows a Buy ad. No data from that ad is attached.
  • listingStatus: "possiblyUnavailable" when the phone and e-mail contacts are gone. SS.com removes them when an ad is closed, but this alone does not prove a sale.
  • servedListingIds lists every ad id SS.com returned for the URL. When the first page is not the ad the actor can accept (a Buy ad, or not the listingId you passed), it requests the URL up to 8 more times through fresh proxy sessions and uses the matching ad if one comes back. Those extra requests are not charged as results.
  • identityVerified: true only when SS.com's ad id was compared with a known id and matched (identityCheck: "listingId"). Ads found through a list page always get this check. identityCheck: "categoryPath" with identityVerified: false means only the category path was compared, which does not catch a replacement ad of the same model.

To verify single ad URLs by id, pass the listingId from an earlier run in userData:

{
"startUrls": [
{
"url": "https://www.ss.com/msg/en/transport/cars/ford/ranger/cegeph.html",
"userData": { "listingId": "58116873" }
}
],
"scrapeDetails": true
}

Old ad URLs and the car that used to be there

An SS.com URL does not stay tied to one car. When an ad is removed, the same URL can serve a different ad, and SS.com keeps no archive of the original. The actor cannot recover or verify the original listing from the URL alone. What it can do is compare every ad served at the URL today with an earlier snapshot of the car that you already have.

Pass the snapshot in userData.expectedVehicle. Every field is optional:

{
"startUrls": [
{
"url": "https://www.ss.com/msg/en/transport/cars/toyota/land-cruiser/dkffd.html",
"userData": {
"expectedVehicle": {
"make": "Toyota", "model": "Land Cruiser", "year": 2020, "issueDate": "03/2020",
"engine": "2.8 diesel", "bodyType": "Jeep", "gearbox": "Automatic", "color": "Blue",
"mileageKm": 146000, "price": 38000, "sellerName": null, "sellerType": "company",
"location": "Riga", "adType": "Sell", "listingId": null, "vin": null,
"observedAt": "2024-05-10",
"tolerances": { "minMaterialConflicts": 2, "decisiveYearGap": 2 }
}
}
}
],
"scrapeDetails": true
}

engine is parsed into a volume and a fuel type ("2.8 diesel", "4.5D"). You can also pass engineVolumeL and fuel directly. observedAt is the date of your snapshot and sets how much mileage growth is plausible.

How each field is compared with a served ad:

FieldClassRule
vinDecisiveCompared only when the ad shows the VIN in its text. On most ads the VIN is behind a Google reCAPTCHA, which the actor does not solve, so the check is notComparable. A different visible VIN means another car.
make, modelDecisiveA different make or model means another car. The same make and model identify nothing.
yearDecisive above decisiveYearGap (default 2), material otherwiseA 2010 car is never a 2020 car. A one-year difference can be a typo or a registration year, so it only counts as one material conflict. Set decisiveYearGap to null to make year material only.
issueDate / monthOfIssue, engineVolumeL (tolerance 0.15 L), fuel, bodyType, gearbox, colorMaterialThese do not change on a real car. Colours are grouped, so silver and grey count as the same colour.
mileageKmMaterial when it goes down by more than mileageDecreaseKm (1,000) or grows faster than maxKmPerYear (60,000) since observedAt (without observedAt: more than maxMileageGrowthKmWithoutDate, 100,000 km). A signal otherwise.Ordinary use of the car is not a conflict.
price, sellerName, sellerType, location, listingId, adTypeSignalA car can be repriced, sold on to a dealer, moved or relisted under a new id. These are reported in identitySignals and never decide the result.

A field that is missing on either side, or hidden behind a CAPTCHA, is notComparable. It is never counted as a match.

The result is in vehicleIdentity:

  • mismatch: one decisive conflict, or at least minMaterialConflicts (default 2) material conflicts. The row gets listingStatus: "identityMismatch" and carries no price, VAT, VIN, mileage or availability from the served car: contactsPresent is null, and whether the served ad showed contacts is in servedContactsPresent.
  • vinMatch: the VIN shown on the ad equals yours. The only verified match.
  • consistent: at least one material field agrees and nothing conflicts. Consistent, but not verified.
  • inconclusive: one material conflict, below the threshold. Check the listed conflict yourself.
  • notComparable: nothing beyond make and model could be compared, or the served ad is a Buy ad. notChecked: no expectedVehicle was given.

Identity and sale outcome are kept apart. expectedVehicleOutcome is servedAtThisUrl (VIN match), possiblyServedAtThisUrl (consistent or inconclusive), noLongerAtThisUrl (every sale ad served conflicts) or unknown. A replacement only proves your car is not the one served at the URL now. It does not prove your car was sold, so saleOutcome stays unknown.

SS.com does not always serve the same ad at the same URL. With expectedVehicle and no userData.listingId, the actor requests the URL 8 more times through fresh proxy sessions and compares each distinct ad separately, Buy ads included. servedCandidates lists every ad seen, with how often it was served, when it was first seen, its own values, where each value came from on the page, and its own comparison. The served values stay in servedCandidates and never replace the values of your snapshot, which is echoed back unchanged in expectedVehicle. vehicleIdentityRule repeats the rule and tolerances used for the row.

userData.listingId pins the ad itself: a different ad id at the URL is identityMismatch. expectedVehicle.listingId is only a signal, because the same car can come back under a new ad.

Without a listingId, identityVerified stays false and statusReason says the row describes the ad SS.com serves at the URL now. possiblyUnavailable (no contacts) is about that served ad only. It says nothing about what happened to an earlier ad at the same URL.

At the dkffd URL above SS.com mostly serves a Buy ad (38072784). When every request returns that Buy ad, the row is listingStatus: "notForSale" with vehicleIdentity: "notComparable", and it carries no data from the served ad.

Tips for best results

Browse by category (default): Set category to "transport" and subcategory to "cars" to get all car listings. Works well for broad market scans.

Use start URLs for specific pages: If you know the exact SS.com page you want (e.g. BMW listings in Riga), paste the URL into startUrls for precise targeting.

Disable detail scraping for speed: Set scrapeDetails to false to only extract data from list pages. Much faster but returns less data per listing.

Transaction types matter: SS.com separates "sell", "buy", and "hand_over" (rent) listings. Default is "sell" which shows items for sale.

Categories available

CategoryDescriptionExample subcategories
transportCars, trucks, motorcycles, bicyclescars, cargo, motorcycles, bicycles
real-estateApartments, houses, land, officesflats, houses, land, offices
electronicsPhones, computers, audio, TVphones, computers, audio-video
workJobs, vacancies, courses, servicesvacancies, job-search, courses
constructionBuilding materials, tools, plumbingbuilding-materials, tools
clothes-footwearMen's, women's, children's clothingwomens-clothes, mens-clothes
home-stuffFurniture, health, antiques, giftsfurniture, health-beauty
for-childrenToys, baby items, school suppliestoys, clothing, carriages
animalsDogs, cats, birds, exotic animalsdogs, cats, fish, birds
agricultureMachinery, livestock, seeds, gardeningmachinery, animal-husbandry
entertainmentSports, music, books, tourismsports, music, books

Cost estimate

It costs $0.02 per run plus $0.002 per result — about $0.22 per 100 results — regardless of whether detail page scraping is on.

Limitations

  • SS.com content is primarily in Latvian. The English version (/en/) has translated navigation but listing content remains in Latvian.
  • Some attribute names may vary between categories (cars have "Engine", real estate has "Rooms").
  • The attributes field is a flexible key-value object that adapts to whatever data the listing contains.
  • Data is scraped from the public website and structure may change without notice.
  • Respect the website's terms of service and use responsibly.

How to scrape SS.com data

  1. Go to this actor's page on the Apify Store.
  2. Click Try for free to open it in Apify Console.
  3. Choose a category (transport, real-estate, electronics, etc.) and optionally enter a search query.
  4. Set the maximum number of results and adjust proxy settings if needed.
  5. Click Start and wait for the run to finish.
  6. Download your data in JSON, CSV, Excel, or connect it to your workflow via API.

You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the Apify API.