Hepsiemlak Scraper - Turkey Properties, Projects & Offices avatar

Hepsiemlak Scraper - Turkey Properties, Projects & Offices

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Hepsiemlak Scraper - Turkey Properties, Projects & Offices

Hepsiemlak Scraper - Turkey Properties, Projects & Offices

Collect Hepsiemlak property listings, residential projects and real-estate offices in Turkey. Export prices, sizes, locations and available contacts. Pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Hepsiemlak Scraper

Collect Hepsiemlak property listings, residential projects and real-estate offices in Turkey as structured rows you can export.

  • Search properties for sale, rent or seasonal stays by city, district or neighborhood.
  • Collect specific listings and projects from their Hepsiemlak URLs.
  • Get prices, room layouts, floor sizes, locations and available contact information.
  • Export office information and its property listings as separate rows.
  • Pay for the rows you receive: $3.00 per 1,000 rows on the Free plan, plus a small start fee.

What does Hepsiemlak Scraper do?

Hepsiemlak Scraper collects real-estate information from hepsiemlak.com for property research, inventory monitoring and agency analysis. Each row represents one listing, project or office, identified by rowType and id.

  • Listing search: use location and choose sale, rent or seasonal in channel.
  • Listing details: provide listing links in detailUrls instead of a search.
  • Projects: select channel=projects for the project directory, or provide project page URLs in projectIds.
  • Offices: select channel=office and provide firmId or officeUrl. The office and its listings share the row limit.

enrichDetails adds available details to existing listing rows; it does not create a separately billed contact row.

What data can you extract from Hepsiemlak?

Fields vary by page and row type. Missing values can be null, empty arrays or absent keys. Examples below illustrate the format, not a promise that each field is present.

Listing rows

FieldDescriptionExample
rowTypeEntity represented by this rowlisting
idString identifier12345-6789
nameListing titleExample apartment in Istanbul
listingUrlDirect Hepsiemlak page linkhttps://www.hepsiemlak.com/istanbul-satilik/daire/12345-6789
priceNumeric asking price, when supplied2850000
priceCurrencySource currency; commonly Turkish liraTRY
roomsTextRoom layout2+1
floorSizeArea; net size when available, otherwise gross size75
floorSizeUnitArea unitm²
propertyTypeProperty categorydaire
addressAvailable city, district and neighborhood information{"region":"İstanbul","country":"TR"}
geoAvailable coordinates; inspect isHidden when presentnull
phonesAvailable phone values and types[{"value":"+1 555 0100","type":"mobile"}]
personNamed contact; role may be unknown{"name":"Jane Doe","role":null}
orgAgency name and identifier{"name":"Example Agency","id":"12345"}
leadAbsencesReasons for missing contact fields{}
qualityAdditional missing-field information, when present{"missingFields":{"status":"not_collected"}}

Project rows

FieldDescriptionExample
rowTypeProject entityproject
projectIdProject identifier12345
nameProject nameExample Residences
listingUrlProject page linkhttps://www.hepsiemlak.com/proje/example-12345
constructorNameDeveloper name, when suppliedExample Developer
priceDisplayDisplay price or price-on-request textPrice on request
roomsAndLivingRoomsAvailable room layouts["2+1","3+1"]

Office rows

FieldDescriptionExample
rowTypeOffice entityoffice
firmIdOffice identifier, also used to associate listings12345
nameOffice name, when confirmedExample Agency
listingUrlOffice page linkhttps://www.hepsiemlak.com/emlak-ofisi/example-12345
orgAgency information{"name":"Example Agency","id":"12345"}
phonesAvailable office contact numbers[]

How to scrape Hepsiemlak

  1. Open Hepsiemlak Scraper in Apify Console. A free Apify account is enough to try it.
  2. Enter istanbul in location, or supply another target described below.
  3. Set maxResults to 5 for a small first run.
  4. Click Start and wait for completion.
  5. Download the dataset or read its rows through the Apify API.

Empty input {} starts an Istanbul sale example with at most 3 rows, using the form's sample values. Inputs with no target fields also use sample targets and the 3-row cap, even if you set a channel or a larger row limit. Normal event pricing applies. A location selects listing search, and projectIds selects projects automatically. Office inputs still require channel=office; filling officeUrl alone does not select that channel.

Sale, rent and seasonal searches

Enter a city slug such as istanbul, ankara, izmir or antalya. Choose the channel explicitly for rent or seasonal stays. Use national, _ or all for a Turkey-wide listing search. Add district and, if needed, neighborhood using the site's slugs.

Specific listings

Paste listing URLs into detailUrls. Use links to individual properties, not search pages. Links on hepsiemlak.com subdomains are accepted; other domains are rejected.

Projects

Set channel=projects to browse the directory. For specific projects, put full page URLs ending in a numeric project identifier into projectIds; bare numeric IDs are rejected. Do not combine projectIds with detailUrls or office inputs. Project directory searches are not narrowed by the listing location filters.

Offices and portfolios

Set channel=office with an office's firmId or officeUrl. A returned office row counts toward maxResults, leaving the remaining allowance for listing rows. An office's property locations are not its own business address.

What to fill in

FieldWhat to enterDefault
locationCity slug or national for listing searchesForm sample: istanbul
channelsale, rent, seasonal, projects or officesale
detailUrlsArray of individual listing URLs; project URLs need channel=projectsEmpty
projectIdsArray of full project page URLs, despite the field nameEmpty
officeUrlOffice page URL, with channel=officeEmpty
firmIdNumeric office ID or slug ending in the ID; alternative to officeUrlEmpty
districtDistrict slug without a city prefixEmpty
neighborhoodNeighborhood slug; also provide its districtEmpty
propertyTypeAccepted category such as daire; not applied to standard listing searchesEmpty
localeen, tr or ru; does not guarantee translated contenten
maxResultsMaximum rows per input, from 1 to 50070; form sample 3
maxPagesMaximum search pages, from 1 to 501
enrichDetailsAdd available listing detailstrue in form; see below
includeRawInclude additional source data under rawfalse

For direct API input containing a target, explicitly set enrichDetails: the Actor uses false if that field is omitted. The form and empty-input example supply true.

Sale search:

{"location":"istanbul","channel":"sale","maxResults":5,"enrichDetails":true}

Rent search:

{"location":"ankara","channel":"rent","maxResults":5}

Seasonal search:

{"location":"antalya","channel":"seasonal","maxResults":5}

Project directory sample, capped at 3 rows because no target is supplied:

{"channel":"projects","maxResults":3}

Specific project; replace the illustrative URL with a real project link:

{"projectIds":["https://www.hepsiemlak.com/proje/example-12345"],"maxResults":1}

Office portfolio:

{"channel":"office","firmId":"140403","maxResults":5}

Specific listing; replace the illustrative URL with a real listing link:

{"detailUrls":["https://www.hepsiemlak.com/istanbul-satilik/daire/12345-6789"],"maxResults":1}
  • maxItems and limit are accepted aliases for maxResults; city is an alias for location and listingType for channel.
  • Close field-name misspellings can be corrected. Other unknown fields are ignored with a warning; inspect the result rather than assuming every spelling was understood.
  • Invalid input stops collection with an INVALID_INPUT: message naming the problem and correction. No rows are charged, although the start fee still applies.
  • INPUT_REPORT in the run's key-value store records filled, corrected and ignored fields. INPUT_ECHO shows the interpreted settings; RUN_SUMMARY gives the outcome and delivered row count.

Output example

Illustrative listing row; identifiers and contact details are placeholders:

{
"rowType": "listing",
"id": "12345-6789",
"listingId": "12345-6789",
"name": "Example apartment in Istanbul",
"type": "listing",
"status": null,
"country": "TR",
"authority": "hepsiemlak.com",
"channel": "sale",
"price": 2850000,
"priceCurrency": "TRY",
"priceDisplay": "2,850,000 TRY",
"roomsText": "2+1",
"floorSize": 75,
"floorSizeUnit": "m²",
"listingUrl": "https://www.hepsiemlak.com/istanbul-satilik/daire/12345-6789",
"phones": [{"value": "+1 555 0100", "type": "mobile"}],
"emails": [],
"person": {"name": "Jane Doe", "role": null},
"org": {"name": "Example Agency", "id": "12345"},
"geo": null
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. JSON preserves nested contact and address objects.

Why use this Hepsiemlak scraper?

  • Pay per delivered row. Result charges apply to rows written to the dataset, not unsuccessful page attempts.
  • Keep partial results. Returned partial results are delivered and marked in RUN_SUMMARY. Rows already written remain available after a stop; unfinished collection is not guaranteed to be delivered.
  • Inspect missing information. Contact omissions have reasons in leadAbsences; some other unknown values are recorded in quality.missingFields.
  • Use several URLs. detailUrls and projectIds accept arrays, while a location search takes one location.
  • No proxy setup. You do not need to set up proxies.

How much does it cost to scrape Hepsiemlak?

The Actor uses pay-per-event pricing: $0.005 per start event plus a price per delivered row. Platform usage is included in these prices.

Apify planPrice per rowPrice per 1,000 rows
Free$0.0030$3.00
Starter$0.0030$3.00
Scale$0.0026$2.60
Business$0.0022$2.20

Start billing is one event per GB of allocated memory, with a minimum of one event. At the default 512 MB, one start event costs $0.005.

  • maxResults applies to each location, detail URL, project URL or office input. Its default is 70; larger requests are collected in parts of 70, up to the input maximum of 500.
  • maxPages also limits search results. Raising the row limit alone does not remove the page limit.
  • Free Apify plan users have a 200-row cap per run and 10 total runs of this Actor. These are developer-set limits; paid plans do not have the 10-run cap.
  • Set Maximum cost per run in run options (maxTotalChargeUsd in the API) to cap the whole run's charges.

Example: 5 delivered rows on the Free plan at 512 MB cost 5 × $0.003 + $0.005 = $0.020. An office plus four listings is also five billable rows, not four.

What happens when the run timeout is too short

If a search needs longer than the selected run timeout and automatic resumption is accepted, the Actor pauses instead of treating that pause as a collection failure. Its status message says "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily appears as ABORTED.

When results are ready, the same run resumes, writes to the same dataset and finishes as SUCCEEDED if collection succeeds. Rows already delivered are skipped, avoiding duplicate row charges. A delivery status message may say "Resumed: delivering N rows." No manual restart is needed for this pause.

Keep the default timeout of 3600 seconds to reduce interruptions. Actual collection failures can still occur; an ABORTED status without the automatic-resume message is not evidence of a pending restart.

The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and may return an empty dataset while the run is paused. For longer jobs, start asynchronously and read the dataset after SUCCEEDED, or use a run-succeeded webhook.

Use with AI agents and the API

Apify MCP server (Claude, ChatGPT, Cursor, VS Code)

Add this Actor to a client that supports remote MCP servers:

https://mcp.apify.com?tools=lentic_clockss/hepsiemlak-scraper

Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read rows with get-dataset-items. Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/hepsiemlak-scraper with APIFY_TOKEN set.

Example prompt: "Find five property listings in Istanbul on Hepsiemlak and return their prices, rooms and listing links."

Apify API

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/hepsiemlak-scraper").call(
run_input={"location": "istanbul", "maxResults": 5, "enrichDetails": True}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/hepsiemlak-scraper').call({
location: 'istanbul', maxResults: 5, enrichDetails: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For asynchronous HTTP calls, send your input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~hepsiemlak-scraper/runs, authenticating with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, use GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json to read the rows.

Integrations

Connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your webhook through Apify integrations. Use Apify Schedules for recurring runs.

Türkçe kullanım rehberi

Hepsiemlak Scraper, Türkiye'deki satılık, kiralık ve sezonluk konut ilanlarını, yeni projeleri ve emlak ofislerini yapılandırılmış satırlar olarak toplar. İlk deneme için location alanına istanbul, maxResults alanına 5 yazın. Kiralık ilanlar için channel değerini rent seçin. Belirli ilanları detailUrls ile, projeleri ise tam sayfa bağlantılarını projectIds alanına ekleyerek isteyebilirsiniz. Ofis bilgileri için channel=office ile birlikte firmId veya officeUrl gerekir. Fiyat, oda düzeni, metrekare ve mevcut iletişim bilgileri sonuçlara eklenir. Bazı alanların boş kalması normaldir; telefon ve koordinat her ilanda bulunmaz. Sonuçları Excel, CSV veya JSON olarak indirebilirsiniz. Ücretlendirme teslim edilen her satır için yapılır; ayrıca küçük bir başlangıç ücreti vardır. Ofis satırı ve ona bağlı ilanlar ayrı ayrı ücretlendirilir.

FAQ

Public availability is not permission for every use. You are responsible for checking the site's terms and applicable data-protection requirements. Processing personal data needs a lawful basis; do not assume collected contact information permits unsolicited outreach.

Why did my run end as ABORTED?

An automatic-resume status message means the run is temporarily paused. Wait for that same run to resume. A manual abort or another interruption is different; inspect the status message before restarting.

How many results can I get?

maxResults accepts 1–500 rows per input, with a default of 70. Actual delivery also depends on maxPages, available matches and your maximum cost. Free-plan runs stop at 200 rows total.

Why are some fields empty?

The source may omit them, or detail collection may not provide them. Inspect leadAbsences and available quality information. Unknown listing status or contact role is not replaced with a guessed value.

Can I collect phone numbers?

Available numbers may appear on listing and office rows, but coverage is not guaranteed. Set enrichDetails=true for additional listing details. Email addresses and apartment numbers are not supplied by the current listing output.

Does locale translate all text?

No. en, tr and ru are accepted settings, but names, descriptions and other source text can remain Turkish. The market remains Turkey.

Is this an official Hepsiemlak API?

No. This is an independent Actor for collecting and exporting Hepsiemlak data through Apify.

Why did my free-plan run stop after 10 runs?

The developer limits free-plan accounts to 10 runs of this Actor. Check the run's status message and RUN_SUMMARY; paid Apify plans are not subject to that run cap.

Limitations

  • Coverage is Turkey, not a multi-country property search.
  • Standard listing searches cover residential categories. propertyType does not currently narrow those searches; do not rely on it for land or commercial-property coverage.
  • Project directory searches do not apply location, district or neighborhood filters.
  • Detail enrichment can be incomplete. Contacts, exact locations and prices are not guaranteed for every row.
  • An office portfolio may be partial. It shares the input's row allowance with the office row.
  • Rows saved before a manual stop remain available, but stopping mid-collection may leave no delivered rows.

More real estate and property data scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used, without credentials.