Domclick RU Property Scraper - Listings, Prices & Agent Data avatar

Domclick RU Property Scraper - Listings, Prices & Agent Data

Pricing

from $1.50 / 1,000 listing results

Go to Apify Store
Domclick RU Property Scraper - Listings, Prices & Agent Data

Domclick RU Property Scraper - Listings, Prices & Agent Data

Extract property listings from domclick.ru, one of Russia’s largest real estate portals. Search by city or use listing/search URLs. Returns 70+ fields including price, area, rooms, floor, address, GPS, metro info, photos, seller and agency details, developer data, discounts, and mortgage flags.

Pricing

from $1.50 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

8

Total users

1

Monthly active users

10 days ago

Last modified

Share

Domclick Property Scraper

Pull structured property data from Domclick, one of the largest property portals in Russia, in seconds. Search by city with rich filters, or paste any Domclick search or listing link and the scraper walks results forward. Every listing comes back as a flat JSON record with 70+ fields: price, price per square meter, area, rooms, floor, build year, full address, GPS, metro stations with walking time, the full photo gallery, the seller description, seller and agency details, verification badges, new building and developer info, discounts, and mortgage flags. Turn on extra details for a market valuation estimate, nearby places, and agent deal stats.

Why this scraper

  • 70+ fields per listing, far more than most alternatives expose
  • Two modes: build a search from filters, or paste search and listing URLs verbatim
  • All of Russia: any city or region, resolved automatically from its name
  • Sale and rent, residential, commercial, and garage categories
  • Filter by rooms, price, area, floor, and sort seven ways, all applied server side so counts stay accurate
  • Optional extra details: market valuation estimate (low / mid / high), nearby places, and agent deal history
  • Fast and inexpensive: an optimized data path keeps runs quick and light on proxy usage

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
id0000000000
urlhttps://domclick.ru/card/sale__flat__0000000000
dealTypesale
offerTypeflat
price34999000
squarePrice466653
currencyRUB
area75
rooms2
floor14
totalFloors17
buildYear2026
isApartmentfalse
addressМосква, набережная Примерная, 1 к1
latitude55.0000
longitude37.0000
nearestSubwayТехнопарк
subwayWalkMinutes12
subways[{ "name": "Технопарк", "walkMinutes": 12, "lineColors": ["#3EA332"] }]
descriptionFull seller description text appears here.
photoCount11
photos["https://img.dmclk.ru/vitrina/owner/00/00/000.jpg"]
complexNameSample Complex
buildingEndYear2026
buildingPathhttps://msk.domclick.ru/building/sample-building
localityPathhttps://msk.domclick.ru/sample-district
subdomainmsk
sellerNameAgent Name
sellerCasId0000000
isAgencytrue
companyNameSample Company
companyFiasId00000000-0000-0000-0000-000000000000
isRosreestrApprovedtrue
isSberCollateralfalse
hasDiscounttrue
discountValue0
hasFamilyMortgagetrue
publishedDate2026-01-01T00:00:00+00:00
marketPrice30280000
minMarketPrice25740000
maxMarketPrice34820000
agentDealsCompleted31
poiCount50

The full seller and agency block is also passed through verbatim as sellerRaw so no upstream field is ever dropped.

How to use

Search one city:

{
"mode": "search",
"locations": ["Москва"],
"dealType": "sale",
"category": "living",
"offerType": "flat",
"maxListings": 100
}

Search with filters:

{
"mode": "search",
"locations": ["Санкт-Петербург"],
"dealType": "sale",
"rooms": ["2", "3"],
"minPrice": 10000000,
"maxPrice": 25000000,
"minArea": 50,
"sortBy": "price_asc",
"maxListings": 200
}

Multiple cities with extra details (valuation, nearby places, agent stats):

{
"mode": "search",
"locations": ["Москва", "Сочи", "Казань"],
"fetchDetails": true,
"maxPages": 3
}

Paste URLs:

{
"mode": "url",
"urls": [
"https://domclick.ru/search?deal_type=rent&category=living&offer_type=flat&address=1d1463ae-c80f-4d19-9331-a1b68a85b553",
"https://domclick.ru/card/sale__flat__0000000000"
],
"maxListings": 50
}

Input parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds a query from filters; url reads pasted links
locationsarray["Москва"]City or region names, or address GUIDs. Search mode only
dealTypestringsalesale or rent
categorystringlivingliving, commercial, or garage
offerTypestringflatflat or layout (new building plan)
roomsarray[]Any of studio, 1, 2, 3, 4+
minPrice / maxPriceintegernonePrice range in rubles
minArea / maxAreaintegernoneArea range in square meters
minFloor / maxFloorintegernoneFloor range
sortBystringrelevancerelevance, newest, updated, price_asc, price_desc, price_per_m2_asc, price_per_m2_desc
urlsarraynoneDomclick search or listing links. URL mode only
fetchDetailsbooleanfalseAdd valuation estimate, nearby places, agent stats (loads each card page; slower)
maxPagesinteger(empty)Result pages per city or URL, about 30 listings each. Leave empty to walk every result page (the item cap and end-of-catalogue detection still bound the run).
maxListingsinteger20Overall cap across all targets. 0 means unlimited.
proxyobjectResidential RUProxy configuration
resumeFromRunIdstring(empty)A previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by id) are skipped, so this run only saves the new ones.
incrementalModebooleanfalseRecurring monitoring: remembers the previous run of the same search and only returns changed listings on later runs. See "Incremental mode" below.
stateKeystring(empty)Only used with incrementalMode. Identifies the saved baseline. Leave empty to derive it automatically from your search filters.
emitUnchangedbooleanfalseOnly used with incrementalMode. Also return (and bill) listings with no changes, marked changeType: UNCHANGED.
emitExpiredbooleanfalseOnly used with incrementalMode. Also return (and bill) a row for a listing that's no longer found, marked changeType: EXPIRED. Only fires after a complete, uncapped, non-resumed scan.

Resuming a full-catalogue walk

For an unbounded pull (maxPages empty, maxListings: 0), two things protect a long run:

  • resumeFromRunId lets you continue in a brand-new run: paste the ID of a previous run (or its dataset), and this run skips every listing id already saved there, appending only new listings.
  • A checkpoint is saved automatically as the run progresses. If the run is interrupted by an Apify platform migration or you click Resurrect on a failed run, it picks back up from where it left off in the same run, without re-saving (or re-charging for) listings it already collected. No input is needed for this; it's automatic.

Incremental mode (recurring monitoring)

Turn on incrementalMode for a search you run on a schedule (e.g. daily) and only want what changed since last time. The actor remembers a baseline of every listing it has seen for that search (keyed by stateKey, or automatically by a hash of your filters — mode, deal type, category, property type, rooms, price/area/floor range, sort, locations/URLs, and whether extra details are on) and classifies every listing it sees against that baseline:

  • NEW — never seen before
  • UPDATED — a real field changed (price, area, floor, rooms, status, discounts, seller/verification info, market valuation, etc.) — the changedFields array lists which ones
  • UNCHANGED — nothing changed since last time; skipped from the output (and not billed) by default — turn on emitUnchanged to include these rows too
  • REAPPEARED — was previously marked expired and is back
  • EXPIRED — was seen before but is no longer found; only emitted when emitExpired is on, and only after a run that scanned every result page for every location/URL with no page or item cap and no resume in effect (a capped or partial run can't tell "gone" apart from "not reached yet", so it's skipped rather than guessed)

Every emitted row also gets firstSeenAt and lastSeenAt timestamps.

How the item cap interacts with incremental mode — read this before you schedule a run. maxListings counts rows returned, not rows examined. So on a later run the actor skips the unchanged listings it already knows and keeps walking deeper until it has filled your quota with listings you have not seen before. A daily run with maxListings: 20 therefore keeps returning (and billing for) up to 20 rows — but they are 20 listings that are genuinely new to you, never repeats of what you already received. If you would rather a quiet run return nothing and cost almost nothing, run uncapped (maxListings: 0, maxPages empty): then a run that finds no changes returns zero rows and prints its scanned-but-unchanged count instead — the normal, healthy outcome of monitoring a stable search, not an error.

What counts as a change: description, photos, and subways are tracked for presence but not compared field-by-field in the baseline (they're dropped from the stored snapshot to keep it small at scale — see below); every other field, including price, area, floor, rooms, status, discounts, and promo/placement flags, is compared and will trigger UPDATED on a genuine change. Measured against a live search (two fetches of the same listings 8 seconds apart): the only field that ever differs without a real change is the internal scrape timestamp, which is excluded from comparison.

incrementalMode is a separate mechanism from resumeFromRunId and the automatic migration checkpoint above — all three can be used together. Using incrementalMode together with resumeFromRunId on a search that already has a saved incremental baseline is rejected (the two would disagree about which listings are "new"); remove resumeFromRunId or pick a different stateKey to start a separate monitoring baseline.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"id": "0000000000",
"url": "https://domclick.ru/card/sale__flat__0000000000",
"dealType": "sale",
"offerType": "flat",
"price": 34999000,
"squarePrice": 466653,
"currency": "RUB",
"area": 75,
"rooms": 2,
"floor": 14,
"totalFloors": 17,
"buildYear": 2026,
"address": "Москва, набережная Примерная, 1 к1",
"latitude": 55.0000,
"longitude": 37.0000,
"nearestSubway": "Технопарк",
"subwayWalkMinutes": 12,
"complexName": "Sample Complex",
"sellerName": "Agent Name",
"sellerCasId": 0,
"isAgency": true,
"companyName": "Sample Company",
"companyFiasId": "00000000-0000-0000-0000-000000000000",
"isRosreestrApproved": true,
"hasDiscount": true,
"photoCount": 11,
"photos": ["https://img.dmclk.ru/vitrina/owner/00/00/000.jpg"],
"publishedDate": "2026-01-01T00:00:00+00:00",
"marketPrice": 30280000,
"minMarketPrice": 25740000,
"maxMarketPrice": 34820000,
"agentDealsCompleted": 31,
"poiCount": 50,
"query": "Москва",
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan requirement

Domclick only accepts traffic from Russian residential connections. Use Apify Residential proxy with country set to RU, available on the Starter plan and above. On the free plan, which does not include residential proxy, runs will likely return zero items. The actor prints a clear notice at the start of a run when residential proxy is not available.