Hepsiemlak Scraper icon

Hepsiemlak Scraper

Scrape hepsiemlak.com sale and rental listings by city or district, or paste listing links. Every row carries price, area, rooms, seller and location.…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Hepsiemlak Scraper at a glance

Hepsiemlak Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Results are saved to an Apify dataset which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.70 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$2.00 per 1,000 results (Free plan), from $1.70 on paid plans
Output
JSON, CSV, Excel
Inputs
25 options

Scrape hepsiemlak.com sale and rental listings by city or district, or paste listing links. Every row carries price, area, rooms, seller and location. Detail enrichment adds specs, description and contact.

What Hepsiemlak Scraper can do

  • Two ways to find listings. Search by city or district across the country, or paste hepsiemlak.com listing and catalogue links directly.
  • Sale and rental, every property kind. Switch between satilik and kiralik, and narrow to apartments, villas or detached houses.
  • Price and area filters. Bound a search by minimum and maximum price in lira, or minimum and maximum gross area, before a single page is read.
  • Detail reads on demand. Turn on one surcharge per record to add the full spec table, listing number, description and seller contact.
  • Turkish location names, handled. City and district names fold their Turkish letters automatically, so "Şişli" and "Sisli" reach the same search.
  • Built for schedules. Recurring updates return only new and changed listings on repeat runs, and a refused run fails loudly instead of returning an empty dataset.

Choose what to collect

These inputs let you configure Hepsiemlak Scraper - Property Listings, Prices & Contacts. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch mode walks listing pages for each location. URL mode reads each pasted link.

Choices: search, url

listingTypestringsale reads satilik paths, rent reads kiralik paths, seasonal-rent reads sezonluk-kiralik paths.

Choices: sale, rent, seasonal-rent

propertyTypestringNarrow search walks to a property kind. Pasted listing links ignore this.

Choices: any, apartment, villa, detached-house

roomCountstringKeep only listings with this room plan, for example 2+1 (rooms plus living rooms). Empty means any.
ownerOnlybooleanKeep only listings posted by the owner (the site's sahibinden path), not by an agency.
sortBystringOrder of results in Search mode. Pasted links keep their own sort.

Choices: default, price-asc, price-desc, area-asc, area-desc

locationsarrayCity or district names, for example Istanbul, Kadıköy, Izmir Karsiyaka. Each is resolved through the site's own location lookup (Turkish letters are fine); an unknown name stops the run with a message naming it. Empty means the nationwide listing path.
Show 18 more inputs
More input fields
InputWhat it controls
minPriceintegerKeep only listings at or above this price in lira.
maxPriceintegerKeep only listings at or below this price in lira.
minAreaintegerKeep only listings with at least this gross area.
maxAreaintegerKeep only listings with at most this gross area.
urlsarrayOne or more hepsiemlak.com links. A listing page returns that listing; a catalogue page is walked like a search.
fetchDetailsbooleanRead each listing page for the spec table, description and contact. Adds one detail-enrichment charge per record, at most.
maxItemsintegerThe single cap on this run: stop after collecting this many records across all locations and links. Set 0 for unlimited.
maxPagesintegerSafety bound on how many result pages to walk per location or link. Leave at 0 for no page limit: the run then stops at Max items, not here.
maxItemsPerSourceintegerOptional extra cap per location or pasted link, on top of Max items. Leave empty or 0 for no per-source cap.
resumeFromRunIdstringContinue an interrupted crawl: records already collected by this run ID (or dataset ID) are skipped. Cannot be combined with recurring updates on one run.
incrementalModebooleanRemember this setup's listings between runs and label every row NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED. UPDATED is decided by comparing every output field (price, title, rooms, area, photos, seller and the rest) with the stored copy, and changedFields names what moved. Excluded from the comparison (still returned): scrapedAt, sourceType, sourceId, sourceUrl and position, which describe the run rather than the listing, plus any fields you list under Ignore fields below. EXPIRED is only produced after a complete scan, never after a capped run, a page limit, a resume or a link that starts at page 2 or later. Cannot be combined with resume on one run.
stateKeystringName this monitoring setup. Runs with the same key share one baseline; leave empty to derive it from the search setup.
emitUnchangedbooleanReturn UNCHANGED rows too (they still count as dataset items and are billed as such). Off by default: unchanged rows are suppressed.
emitExpiredbooleanReturn EXPIRED rows for listings missing from a complete scan (they still count as dataset items and are billed as such). Only on complete scans.
ignoreFieldsForChangesarrayOptional. Field names to leave out of UPDATED change detection, on top of the built-in exclusions (scrapedAt, sourceType, sourceId, sourceUrl, position). Use a top-level name such as description, or a dotted path such as agent.name for a nested field. The fields are still returned; they just never make a row UPDATED. Changing this list does not cause a wave of UPDATED rows.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "listingId": "1000001-1",
  "url": "https://www.hepsiemlak.com/en/istanbul-satilik/daire/1000001-1",
  "title": "Sample 2+1 apartment near Sample Square",
  "price": 4250000,
  "currency": "TRY",
  "grossSqm": 110,
  "netSqm": 95,
  "rooms": "2+1",
  "bedrooms": 2,
  "propertyTypes": [
    "Apartment"
  ],
  "city": "Istanbul",
  "country": "TR",
  "descriptionSnippet": "Bright 2+1 apartment close to the square, ready to move in.",
  "sellerName": "Sample Realty",
  "sellerOfficeUrl": "https://www.hepsiemlak.com/emlak-ofisi/sample-realty",
  "imageUrl": "https://hecdn01.hemlak.com/sample/listing-photo.jpg",
  "recordType": "listing",
  "sourceType": "search",
  "sourceId": "istanbul",
  "position": 3,
  "scrapedAt": "2026-09-16T00:00:00Z"
}

Ways to use this data

  • Property investors: compare asking prices, gross area and room plans across Turkish cities and districts to spot value.
  • Real estate agencies: watch competing offices' listings and price changes in the districts you work.
  • Rental market research: track kiralik asking rents by district to follow how the rental market moves.
  • Proptech and listing apps: feed clean listing records with price, area, location and seller into your own product.
  • Market monitoring: schedule recurring runs to catch new listings, price edits and listings going off the market.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

How much does Hepsiemlak Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.70 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Recurring updates. Each run then returns only new and updated listings, and unchanged ones are not billed.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "no listings for this search" is never confused with "nothing could be read". Run it again in a few minutes. If only some locations or links could be read, you still get what was found.

Can I use Resume and Recurring updates together?

No. Pick one per run: Resume from run ID continues a single interrupted crawl, while Recurring updates tracks a setup across scheduled runs. Clear one field to use the other.

Ready to collect with Hepsiemlak Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.