Real Estate Price Index (Roll-up) avatar

Real Estate Price Index (Roll-up)

Pricing

from $8.50 / 1,000 city price index rows

Go to Apify Store
Real Estate Price Index (Roll-up)

Real Estate Price Index (Roll-up)

Build one live asking-price index per city from eight in-process real-estate source adapters. Returns median/mean price and price per m² with honest sample, partial, and error metadata.

Pricing

from $8.50 / 1,000 city price index rows

Rating

0.0

(0)

Developer

Tim Zinin

Tim Zinin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

Real Estate Price Index

Build one asking-price snapshot per city from live real-estate listings. The Actor fetches each source directly through a bounded in-process adapter, then returns sample size, median price, mean price, and median price per square meter in the city's native currency.

Supported cities

City keySourceCurrencyDefault market slice
almatyKrisha.kzKZTapartments for sale
tbilisiSS.geGELall property/deal types
viennaWillhabenEURapartments for sale
londonRightmoveGBPproperties for sale
istanbulEmlakjetTRYapartments for sale
lisbonImovirtualEURapartments for sale
dubaiProperty FinderAEDproperties for sale
podgoricaRealiticaEURapartments for sale

baku is not currently supported. Tap.az requires an Azerbaijan residential proxy plus strict redirect-target enforcement. The earlier baku key depended on a separate run and has been retired until an in-process proxy-aware adapter passes that security and reliability acceptance. Requests that still contain baku receive a free found:false, reason:"unknown_city" row; migrate by removing that key for now.

What you get

  • One paid price-index row per city only when at least five native-currency prices come from a complete source scan.
  • Median and mean only when at least five priced listings are available. Smaller samples remain visible, but statistics stay null instead of presenting noise as a market signal.
  • A separate price-per-m² sample, because some priced listings do not publish area.
  • Free error/empty rows with explicit reasons; source failures are never sold as valid data.
  • A free summary row listing delivered, missing, and partial cities.
  • Bounded parallelism: at most five city sources are fetched at once.

Pricing

Pay per event starts at $0.005 per run + $0.01 per delivered city index. The six account tiers use exact start/result pairs: FREE .005/.010, BRONZE .00475/.0095, SILVER .0045/.009, GOLD .00425/.0085, PLATINUM .0041/.0082, DIAMOND .004/.008. Runtime accepts only one complete pair and no extra event. Unknown cities, source errors, partial source scans, samples below five native-currency prices, and the summary row are not charged. Partial scans are returned as explicit free evidence and never sold as an index. A paid row is pushed and charged atomically; if the remaining-budget read fails, paid delivery stops and the run fails honestly.

Input

FieldRequiredDescription
citiesnoCity keys from the supported table. Default: almaty, tbilisi. Duplicate/case variants are normalized and deduplicated.
max_items_per_citynoMaximum listing rows per source sample. Default 30, range 1–200.
max_pages_per_citynoMaximum pages per source. Default 2, range 1–10.
max_concurrencynoCity sources fetched simultaneously. Default 2, range 1–5.
{
"cities": ["almaty", "tbilisi", "vienna"],
"max_items_per_city": 30,
"max_pages_per_city": 2,
"max_concurrency": 2
}

Output

A successful city row keeps the established price-index fields:

{
"city": "almaty",
"found": true,
"source_portal": "krisha-kz",
"currency": "KZT",
"deal_type": "sale",
"property_type": "apartment",
"sample_size": 10,
"median_price": 41500000,
"mean_price": 43750000,
"sample_size_price_per_sqm": 8,
"median_price_per_sqm": 630000,
"partial": false,
"partial_reason": null,
"currency_filtered_rows": 0,
"currency_missing_rows": 0,
"note": null,
"scan_duration_ms": 842,
"child_run_duration_ms": 842,
"scraped_at": "2026-08-08T00:00:00.000Z"
}

child_run_duration_ms remains only as a backward-compatible field name for existing consumers; its value now equals scan_duration_ms, the in-process source scan duration.

A listing is aggregated only when it declares the city's exact native currency. Explicit mismatches and missing currency are excluded rather than guessed; currency_filtered_rows and currency_missing_rows report those removals. At least five remaining native-currency prices and a complete source scan are required for a paid index; a smaller sample returns a free insufficient_sample row, while a sufficiently large but partial scan returns a free source_partial evidence row.

An unavailable source is explicit and free:

{
"city": "almaty",
"found": false,
"reason": "source_failed",
"error": "source-specific failure",
"source_portal": "krisha-kz",
"scraped_at": "2026-08-08T00:00:00.000Z"
}

Every run ends with a summary row containing requested_cities, succeeded_cities, missing_cities, partial_cities, partial, and supported_cities.

Limitations

  • These are asking prices from current listings, not completed-sale valuations or appraisals.
  • Currencies are not converted. Compare cities only after applying an exchange-rate policy appropriate to your use case.
  • A source can rate-limit, change markup, or return only a partial page set. Such cases are marked partial or source_failed rather than silently accepted.

Built by zinin.