Hepsiemlak Scraper - Turkey Properties, Projects & Offices
Pricing
from $2.20 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
2 days ago
Last modified
Categories
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
locationand choosesale,rentorseasonalinchannel. - Listing details: provide listing links in
detailUrlsinstead of a search. - Projects: select
channel=projectsfor the project directory, or provide project page URLs inprojectIds. - Offices: select
channel=officeand providefirmIdorofficeUrl. 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
| Field | Description | Example |
|---|---|---|
rowType | Entity represented by this row | listing |
id | String identifier | 12345-6789 |
name | Listing title | Example apartment in Istanbul |
listingUrl | Direct Hepsiemlak page link | https://www.hepsiemlak.com/istanbul-satilik/daire/12345-6789 |
price | Numeric asking price, when supplied | 2850000 |
priceCurrency | Source currency; commonly Turkish lira | TRY |
roomsText | Room layout | 2+1 |
floorSize | Area; net size when available, otherwise gross size | 75 |
floorSizeUnit | Area unit | m² |
propertyType | Property category | daire |
address | Available city, district and neighborhood information | {"region":"İstanbul","country":"TR"} |
geo | Available coordinates; inspect isHidden when present | null |
phones | Available phone values and types | [{"value":"+1 555 0100","type":"mobile"}] |
person | Named contact; role may be unknown | {"name":"Jane Doe","role":null} |
org | Agency name and identifier | {"name":"Example Agency","id":"12345"} |
leadAbsences | Reasons for missing contact fields | {} |
quality | Additional missing-field information, when present | {"missingFields":{"status":"not_collected"}} |
Project rows
| Field | Description | Example |
|---|---|---|
rowType | Project entity | project |
projectId | Project identifier | 12345 |
name | Project name | Example Residences |
listingUrl | Project page link | https://www.hepsiemlak.com/proje/example-12345 |
constructorName | Developer name, when supplied | Example Developer |
priceDisplay | Display price or price-on-request text | Price on request |
roomsAndLivingRooms | Available room layouts | ["2+1","3+1"] |
Office rows
| Field | Description | Example |
|---|---|---|
rowType | Office entity | office |
firmId | Office identifier, also used to associate listings | 12345 |
name | Office name, when confirmed | Example Agency |
listingUrl | Office page link | https://www.hepsiemlak.com/emlak-ofisi/example-12345 |
org | Agency information | {"name":"Example Agency","id":"12345"} |
phones | Available office contact numbers | [] |
How to scrape Hepsiemlak
- Open Hepsiemlak Scraper in Apify Console. A free Apify account is enough to try it.
- Enter
istanbulinlocation, or supply another target described below. - Set
maxResultsto5for a small first run. - Click Start and wait for completion.
- 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
| Field | What to enter | Default |
|---|---|---|
location | City slug or national for listing searches | Form sample: istanbul |
channel | sale, rent, seasonal, projects or office | sale |
detailUrls | Array of individual listing URLs; project URLs need channel=projects | Empty |
projectIds | Array of full project page URLs, despite the field name | Empty |
officeUrl | Office page URL, with channel=office | Empty |
firmId | Numeric office ID or slug ending in the ID; alternative to officeUrl | Empty |
district | District slug without a city prefix | Empty |
neighborhood | Neighborhood slug; also provide its district | Empty |
propertyType | Accepted category such as daire; not applied to standard listing searches | Empty |
locale | en, tr or ru; does not guarantee translated content | en |
maxResults | Maximum rows per input, from 1 to 500 | 70; form sample 3 |
maxPages | Maximum search pages, from 1 to 50 | 1 |
enrichDetails | Add available listing details | true in form; see below |
includeRaw | Include additional source data under raw | false |
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}
maxItemsandlimitare accepted aliases formaxResults;cityis an alias forlocationandlistingTypeforchannel.- 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_REPORTin the run's key-value store records filled, corrected and ignored fields.INPUT_ECHOshows the interpreted settings;RUN_SUMMARYgives 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 inquality.missingFields. - Use several URLs.
detailUrlsandprojectIdsaccept 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 plan | Price per row | Price 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.
maxResultsapplies 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.maxPagesalso 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 (
maxTotalChargeUsdin 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 ApifyClientclient = 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
Is it legal to scrape Hepsiemlak?
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.
propertyTypedoes not currently narrow those searches; do not rely on it for land or commercial-property coverage. - Project directory searches do not apply
location,districtorneighborhoodfilters. - 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.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
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.