# SS.lv Scraper — Latvia Classifieds, Property & Prices (`logiover/ss-lv-scraper`) Actor

Scrape job postings for Brazil from Talent.com: title, hiring company, city, quick-apply flag, update recency and a description snippet. Keyless, no login. Export JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/ss-lv-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## SS.lv Scraper — Latvia Classifieds, Property & Prices

Export listings from **SS.lv**, Latvia's dominant classifieds site — street, rooms, floor area, floor, building series and price — to JSON, CSV or Excel. Keyless, no login.

### What does SS.lv Scraper do?

SS.lv still serves a plain HTML table, and for a scraper that is an advantage rather than a limitation: **rooms, floor area, floor and price each sit in their own cell**, so they come out as clean, sortable columns instead of having to be parsed out of a sentence the way most modern portals require.

The Actor walks the listing pages of whichever section you point it at and de-duplicates on the listing ID. Property sections return the full structured set — street, rooms, m², floor, Soviet-era building series, price per m² and total price. Other sections (cars, electronics, jobs) return their own three attribute columns plus the price, because SS.lv reuses the same table with different headings.

Prices are kept twice: the label as displayed (`510,000 €`, `600 €/mēn.`) and a numeric value, so sale and rental listings can both be sorted without string surgery.

### Who is it for?

- **Property analysts** tracking Riga and regional asking prices.
- **Estate agencies** benchmarking competing inventory.
- **Investors** filtering by price per square metre across districts.
- **Proptech builders** who need a Latvian feed.
- **Researchers** measuring supply by building series and size.

### Use cases

- Compare price per m² between Riga's Centre, Purvciems and Teika.
- Track how many new flats are listed in a district each week.
- Filter to a size and price band for an investment shortlist.
- Separate Soviet-era series (Hruščova, Lietuviešu) from new builds by column.
- Export a rental snapshot to model yield against sale prices.

### Why use this Actor?

- **Keyless** — no account, no token, no login.
- **Genuinely structured** — rooms, area and price are numeric columns, not text.
- **Building series included**, which is how the Latvian market actually prices flats.
- **Sale and rent** in one Actor via a deal-type switch.
- **Latvian or English** interface.
- **Time-budgeted** — a slow page ends the run cleanly with rows saved.

### What data can you extract?

Property rows carry `street`, `rooms`, `areaSqm`, `floor`, `series`, `pricePerSqmLabel`, `priceLabel` and `priceAmount`. Non-property sections return `attribute1`–`attribute3` in place of the property-specific columns, matching whatever that section's table publishes. Every row also carries the listing text, URL, image and a timestamp.

### How to use it

1. Set the **category path** — copy it from the SS.lv URL, e.g. `real-estate/flats/riga/centre`.
2. Choose sale or rent.
3. Set **Maximum results** and run, then export JSON, CSV or Excel.

### Input example

```json
{
  "categoryPath": "real-estate/flats/riga/centre",
  "dealFilter": "sell",
  "maxResults": 1000
}
```

### Notes and limits

- Column meaning depends on the section. Property paths fill the property columns; other sections fill the generic attribute columns instead — SS.lv reuses one table for everything.
- Some rows (land, garages, unusual formats) omit rooms or area; those stay `null` rather than being guessed.
- Listing text is written by sellers, mostly in Latvian and Russian.
- Prices are asking prices, not transaction prices.
- You are responsible for how you use listing and seller data, including under GDPR.

### FAQ

**Do I need an SS.lv account?**
No. Listings are public and this Actor needs nothing from you.

**Can I scrape cars or electronics too?**
Yes — point `categoryPath` at any SS.lv section. Property sections get the richer column set.

**Why do some rows have no room count?**
Because that listing type does not publish one, e.g. land or a garage.

**Is rental pricing handled?**
Yes. Set the deal type to rent; `priceAmount` then holds the monthly figure.

**How am I charged?**
Pay per result — you pay for the listings delivered.

# Actor input Schema

## `categoryPath` (type: `string`):

SS.lv URL path after the language, e.g. "real-estate/flats/riga/centre", "real-estate/homes-summer-residences/riga-region", "transport/cars".

## `dealFilter` (type: `string`):

SS.lv splits listings by deal: sell or hand over (rent).

## `language` (type: `string`):

Interface language for the listing pages.

## `maxResults` (type: `integer`):

Stop after this many listings. The Actor walks pages until the target is met.

## `proxyConfiguration` (type: `object`):

SS.lv serves plain HTML; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "categoryPath": "real-estate/flats/riga/centre",
  "dealFilter": "sell",
  "language": "lv",
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listingId` (type: `string`):

No description

## `description` (type: `string`):

No description

## `listingUrl` (type: `string`):

No description

## `street` (type: `string`):

No description

## `rooms` (type: `string`):

No description

## `areaSqm` (type: `string`):

No description

## `floor` (type: `string`):

No description

## `series` (type: `string`):

No description

## `pricePerSqmLabel` (type: `string`):

No description

## `priceLabel` (type: `string`):

No description

## `priceAmount` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `attribute1` (type: `string`):

No description

## `attribute2` (type: `string`):

No description

## `attribute3` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `country` (type: `string`):

No description

## `source` (type: `string`):

No description

## `scrapedAt` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categoryPath": "real-estate/flats/riga/centre",
    "dealFilter": "sell",
    "language": "lv",
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/ss-lv-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categoryPath": "real-estate/flats/riga/centre",
    "dealFilter": "sell",
    "language": "lv",
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/ss-lv-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categoryPath": "real-estate/flats/riga/centre",
  "dealFilter": "sell",
  "language": "lv",
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/ss-lv-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/ss-lv-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ig2mwefwoza9j7FNs/builds/ooUunLPkPIFQxIVbK/openapi.json
