PropertyFinder Scraper | Contacts & History
Pricing
$12.00/month + usage
PropertyFinder Scraper | Contacts & History
Extract Property Finder UAE listings and transaction history with rich property detail, agent and broker contacts, media, pricing, amenities, and market filters. Built for enterprise-grade UAE real estate intelligence, lead enrichment, and automated analytics pipelines.
Pricing
$12.00/month + usage
Rating
0.0
(0)
Developer
Fatih Tahta
Maintained by CommunityActor stats
1
Bookmarked
28
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Slug: fatihtahta/propertyfinder-scraper-all-in-one
Overview
PropertyFinder Scraper | Contacts & History collects structured Property Finder UAE data for two related workflows: current property listings and Dubai transaction-history records. Active listing records can include property details, asking prices, locations, amenities, agent and broker contacts, media information, publication signals, quality flags, and source context; transaction-history records can include recorded rent or sale amounts, property size, transaction dates, contract dates, location context, and comparable property attributes. Property Finder UAE is one of the region's key real estate marketplaces, making its public listing and transaction data valuable for market intelligence, lead workflows, pricing analysis, competitive tracking, and operational reporting. The actor turns repeatable inputs into structured JSON records that can be reviewed directly in Apify or loaded into CRMs, spreadsheets, BI dashboards, warehouses, enrichment systems, and downstream APIs. It is designed for dependable recurring data acquisition with clear input boundaries, predictable output shapes, and transparent handling of optional fields, without making unsupported claims about completeness, uptime, or target-side availability.
Why Use This Actor
- Market research and analytics teams: build normalized datasets for UAE supply analysis, asking-price movement, active inventory, transaction benchmarks, bedroom mix, location depth, and market intelligence reporting.
- Product and content teams: enrich internal property pages, comparison tools, editorial datasets, regional catalogs, or neighborhood guides with structured listing, location, media, amenity, and broker attributes.
- Developers and data engineering teams: feed downstream systems with automation-ready JSON records, stable identifiers, nested entities, source context, and a repeatable input contract that is suitable for scheduled ingestion.
- Lead generation and enrichment teams: collect public agent, broker, phone, email, WhatsApp, and listing context for compliant enrichment pipelines, territory planning, account research, and CRM updates.
- Monitoring and competitive tracking teams: schedule recurring runs to observe new listings, pricing movement, premium inventory, broker activity, location coverage, transaction records, and changes in available public data.
- Operations and reporting teams: create repeatable datasets for weekly market notes, executive summaries, branch performance reviews, inventory snapshots, and data quality checks.
Common Use Cases
- Market intelligence: monitor active supply, asking prices, recorded transactions, availability, property types, bedroom mix, size bands, amenities, media availability, and location movement.
- Lead generation: build targeted prospect lists from public listings, agents, brokers, phone numbers, email addresses, WhatsApp contact options, and property references.
- Competitive monitoring: track new inventory, featured or premium listings, broker activity, pricing bands, media-rich listings, and comparable property segments across locations.
- Catalog and directory building: populate internal property, broker, location, contact, media, and transaction databases with structured public records.
- Data enrichment: add current public listing attributes, transaction attributes, contacts, and location metadata to existing CRM, BI, analytics, underwriting, or valuation datasets.
- Recurring reporting: schedule periodic runs for dashboards, alerts, market snapshots, pricing reviews, acquisition reports, and internal trend analysis.
- Transaction-history analysis: compare recorded rental and sale transactions by Dubai location, building, property type, bedroom count, size range, timeframe, and price band.
Quick Start
- Choose
search_typefirst. Useactive_listingswhen you need live sale or rent ads, and usetransaction_historywhen you need recorded Dubai rent or sold transaction data. - Define the search scope. For active listings, set
deal_type,property_type, and optionallocation; for transaction history, sethistoric_deal_typeand any relevanthistoric_*filters. - Start with a small
limit, such as10or25, so you can validate the first records quickly before running a larger collection. - Run the actor in Apify Console and wait for the dataset to be created.
- Open the dataset and inspect several records, especially identifiers, pricing, location fields, contacts, dates, and source context.
- Increase the limit, refine filters, keep
maximize_coverageenabled for broad listing or transaction-history discovery when appropriate, or schedule the actor after the output shape is verified.
Input Parameters
Configure either active listings or transaction-history collection; each filter belongs to one of those two modes.
| Parameter | Type | Description | Default |
|---|---|---|---|
search_type | string | Chooses the dataset family to collect. Use active_listings for current sale/rent listings and contacts. Use transaction_history for Dubai rent or sold transaction records. Allowed values: active_listings, transaction_history. | active_listings |
deal_type | string | Active listings only. Chooses whether active listing records should represent current rental ads or current sale ads. Allowed values: rent, buy. | buy |
property_type | string | Active listings only. Defines the active listing category. Use residential_all or commercial_all for broad discovery, or choose a specific subtype when you need a focused dataset. Allowed values: residential_all, commercial_all, residential_apartment, residential_villa, residential_townhouse, residential_penthouse, residential_compound, residential_duplex, residential_full_floor, residential_half_floor, residential_whole_building, residential_land, residential_bulk_unit, residential_bungalow, residential_hotel_and_hotel_apartment, commercial_office_space, commercial_retail, commercial_warehouse, commercial_shop, commercial_villa, commercial_show_room, commercial_full_floor, commercial_half_floor, commercial_whole_building, commercial_land, commercial_bulk_unit, commercial_factory, commercial_labor_camp, commercial_staff_accommodation, commercial_business_centre, commercial_co_working_space, commercial_farm. | residential_all |
location | string | Active listings only. Narrows active listing collection to a UAE city, community, neighborhood, subcommunity, or building name, such as Dubai, Business Bay, or Dubai Marina. Leave empty for active listings without a location filter. | - |
completion | string | Active buy listings only. Narrows sale listings by completion status. This is useful when separating off-plan project inventory from ready/completed resale inventory. Allowed values: off_plan, ready. | - |
furnishing | string | Active listings only. Narrows active records by furnishing status when that distinction matters for pricing, lead routing, or customer segmentation. Allowed values: furnished, unfurnished, partially_furnished. | - |
bedroom_count | array of strings | Active listings only. Multi-select bedroom filter for matching one or more bedroom counts. Use studio for studios and 7_plus for 7+ bedrooms. Allowed values: studio, 1, 2, 3, 4, 5, 6, 7, 7_plus. | - |
bathroom | array of strings | Active listings only. Multi-select bathroom filter for matching one or more bathroom counts. Use 7_plus for 7+ bathrooms. Allowed values: 1, 2, 3, 4, 5, 6, 7, 7_plus. | - |
amenities | array of strings | Active residential listings only. Narrows results to listings that match selected amenity signals. Useful for lifestyle filters, premium inventory, family-friendly inventory, parking analysis, and amenity-based segmentation. Allowed values: central_a_c, maids_room, balcony, shared_pool, shared_spa, shared_gym, concierge_service, covered_parking, view_of_water, view_of_landmark, pets_allowed, study, private_garden, private_pool, private_gym, private_jacuzzi, built_in_wardrobes, walk_in_closet, built_in_kitchen_appliances, maid_service, childrens_play_area, childrens_pool, barbecue_area. | - |
keyword | string | Active listings only. Adds a free-text phrase to the active listing search, such as beach, sea view, brand new, or chiller free. Use specific phrases for cleaner results. | - |
multimedia | string | Active listings only. Restricts active listings to records with a selected media signal. Useful when your workflow requires richer listing media. Allowed values: 360_tours, video. | - |
sort_by | string | Active listings only. Controls which active listings are collected first. featured follows the default ordering, newest supports monitoring workflows, and price sorting supports price-band sampling. Allowed values: featured, newest, lowest_price, highest_price. | featured |
min_price | integer | Active listings only. Minimum asking price in AED. Use with max_price for a bounded price band, or alone for open-ended high-value searches. | - |
max_price | integer | Active listings only. Maximum asking price in AED. Use with min_price for a bounded price band, or alone when collecting under a budget ceiling. | - |
min_property_area | integer | Active listings only. Minimum property size in square feet. Useful for filtering out smaller units or focusing on larger inventory. | - |
max_property_area | integer | Active listings only. Maximum property size in square feet. Useful for excluding very large records from a focused comparable set. | - |
maximize_coverage | boolean | Enabled by default for broad active listing or transaction-history searches, especially no-location, city-wide, Dubai-wide, or high-limit runs. The actor keeps the same criteria while collecting through smaller price ranges when target pagination caps would otherwise hide matching records. Turn it off for small, focused searches. | true |
historic_deal_type | string | Transaction history only. Chooses the historic transaction family. Use rent for rental contracts and buy for sold transaction records. Allowed values: rent, buy. | - |
historic_location | string | Transaction history only. Narrows transaction history to a Dubai community, neighborhood, or building, such as Business Bay or Dubai Creek Harbour. Leave empty for Dubai-wide transaction records. | - |
historic_timeframe | string | Transaction history only. Selects the historical window. Short windows support recent movement checks; longer windows support broader comparisons. Allowed values: ytd, 1w, 1m, 3m, 6m, 1y, 3y. | 1y |
historic_property_type | string | Transaction history only. Narrows transaction records by property type. Use all for a complete market view or a specific type for like-for-like comparison. Allowed values: all, apartment, villa, hotel_and_hotel_apartment. | all |
historic_bedroom_count | string | Transaction history only. Single bedroom-count filter for historic records. Use it when comparing transactions for a specific unit size. Allowed values: studio, 1, 2, 3, 4, 5, 6, 7, 7_plus. | - |
historic_min_price | integer | Transaction history only. Minimum recorded transaction price in AED. Use it to remove lower-value transactions from a historic dataset. | - |
historic_max_price | integer | Transaction history only. Maximum recorded transaction price in AED. Use it to focus on a valuation band or budget segment. | - |
historic_min_property_area | integer | Transaction history only. Minimum recorded property size in square feet. Use it for larger-unit or villa comparisons. | - |
historic_max_property_area | integer | Transaction history only. Maximum recorded property size in square feet. Use it to remove unusually large units from a comparable set. | - |
historic_completion | string | Sold transaction history only. Narrows sold transaction records by completion status. This filter is not relevant to rental contract history. Allowed values: off_plan, ready. | - |
limit | integer | Maximum number of records to save. Minimum value: 1. Use a small value for validation, then increase it once the dataset shape and scope are confirmed. | - |
The schema intentionally separates active listing controls from transaction-history controls. Active listing fields such as deal_type, property_type, furnishing, amenities, keyword, and active price or area bounds apply to live listings. Historic fields such as historic_deal_type, historic_timeframe, historic_property_type, and historic price or area bounds apply to transaction-history records.
If a field is optional, leaving it empty usually broadens the result set. This is useful for discovery, market scans, and initial research. Add optional filters when you need cleaner segmentation, smaller comparable groups, or repeatable monitoring for a narrow business question.
Choosing Inputs
Use active_listings when you need current sale or rent ads with listing attributes, contacts, media, availability-style flags, and publication details. This mode is usually the right choice for lead generation, live inventory monitoring, broker intelligence, catalog building, and recurring active-market reports.
Use transaction_history when you need Dubai rent or sold transaction records with transaction dates, recorded prices, property size, bedroom count, location context, and contract dates when available. This mode is usually the right choice for pricing research, valuation support, market comparison, rent movement analysis, and historical reporting.
For active listings, begin with deal_type, property_type, and location. Add min_price, max_price, min_property_area, max_property_area, bedroom_count, bathroom, furnishing, amenities, keyword, and multimedia only when they represent real business requirements. Use sort_by: "newest" for monitoring new supply, lowest_price or highest_price for price-band sampling, and featured when you want the default marketplace ordering.
For transaction history, begin with historic_deal_type, historic_location, and historic_timeframe. Add historic_property_type, historic_bedroom_count, historic price bounds, historic area bounds, and historic_completion when you need a tighter comparable set. Historic location is Dubai-focused; leave it empty for Dubai-wide transaction records, or enter a Dubai community, neighborhood, or building for a narrower market.
Use limit as a validation and cost-control tool. A small limit helps confirm that the dataset contains the right record type and fields; a larger limit is appropriate after the input strategy is proven. maximize_coverage is enabled by default for broader active listing or transaction-history runs where you want more complete collection within the same criteria.
Example Inputs
The examples below are intentionally small and practical. Use them as starting points, then adjust location, property type, price, timeframe, and limit values for your own workflow.
Example: Targeted active sale listings in Dubai Marina
Use this when you want a focused sale-listing sample for a specific residential segment. It collects one- and two-bedroom apartment listings in Dubai Marina under an asking-price ceiling, which is useful for validating pricing, location, and contact fields before increasing coverage.
{"search_type": "active_listings","deal_type": "buy","property_type": "residential_apartment","location": "Dubai Marina","bedroom_count": ["1", "2"],"max_price": 2500000,"limit": 25}
Example: Newest furnished rentals in Business Bay
Use this for active rental monitoring. The newest sort is useful when the operational question is "what appeared recently?" rather than "what is the broadest available sample?"
{"search_type": "active_listings","deal_type": "rent","property_type": "residential_all","location": "Business Bay","sort_by": "newest","furnishing": "furnished","limit": 50}
Example: Recent Dubai Creek Harbour rental transactions
Use this when the goal is historical rent analysis rather than live listing collection. The example narrows records to recent two-bedroom apartment rental transactions in Dubai Creek Harbour.
{"search_type": "transaction_history","historic_deal_type": "rent","historic_location": "Dubai Creek Harbour","historic_timeframe": "1m","historic_property_type": "apartment","historic_bedroom_count": "2","limit": 100}
Output
Output destination
The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.
When multiple entity types or record shapes exist, the README documents each shape separately based on the provided Example Output. This actor can return active listing records and transaction-history records, depending on search_type. In most workflows, users run one mode at a time so each dataset has a consistent business meaning: current listing inventory or historic transaction evidence.
Active listing records are optimized for current-market workflows. They include the listing identity, public URL, asking price, property characteristics, location hierarchy, contact details, media fields, flags, ranking or quality metrics when available, publication data, and source context. Transaction-history records are optimized for historical analysis. They include the transaction identity, transaction type, location, property characteristics, recorded amount, date fields, and source context.
Record envelope and stable identifiers
Active listing records include top-level identity fields such as id, listing_id, url, listing_type, source_context, and fingerprint. Transaction-history records include record_type, transaction_type, id, location, property, pricing, dates, source_context, and fingerprint.
Recommended idempotency key: use id as the primary key for both active listing and transaction records. For mixed datasets or defensive sync workflows, use listing_type or record_type together with id, and keep fingerprint as a secondary comparison key. This gives downstream systems a clear way to decide whether a record is new, already known, or potentially changed.
Use these keys for deduplication and upserts when loading records into warehouses, CRMs, search indexes, or operational databases. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs. source_context.source_url identifies the public source context used for collection, while fingerprint provides a stable record-level signature for change tracking and duplicate handling.
For recurring workflows, store the full record rather than only the top-level fields. Nested groups such as pricing, location, property, contacts, media, publication, and source_context make the data easier to query by business purpose without flattening everything upfront.
Examples
Example: Active listing (listing_type = "property")
{"id": "92245796","listing_type": "property","listing_id": "D3HP32PEQVR0THR08S6AKPQ18R","url": "https://www.propertyfinder.ae/en/plp/buy/villa-for-sale-dubai-damac-hills-cavalli-estates-92245796.html","title": "Ultra-Luxury 6-Bedrooms Villa in Cavalli Estates","property_type": "Villa","offering_type": "Residential for Sale","price": 19487000,"currency": "AED","bedrooms": "6","bathrooms": "7+","size": 7880,"size_unit": "sqft","area_name": "CAVALLI ESTATES","city": "Dubai","agent_name": "Omar Haddad","broker_name": "Harbor Gate Real Estate L.L.C.","primary_contact_phone": "+971501234567","primary_contact_email": "omar.haddad@example-realestate.ae","pricing": {"amount": 19487000,"currency": "AED","period": "sell","is_hidden": false,"price_per_area": {"price": 2472,"unit": "sqft","built_up_area": 1679.1133192538384,"plot": 2472.9695431472082}},"location": {"id": "11776","full_name": "CAVALLI ESTATES, Damac Hills, Dubai","coordinates": {"lat": 25.024019241333008,"lon": 55.24744415283203},"slug": "damac-hills-cavalli-estates","path": "1.129.11776","type": "SUBCOMMUNITY","name": "CAVALLI ESTATES","path_name": "Dubai, Damac Hills","hierarchy": [{"id": "1","name": "Dubai","type": "CITY","slug": "dubai","slug_en": "dubai","level": "0"},{"id": "129","name": "Damac Hills","type": "COMMUNITY","slug": "damac-hills","slug_en": "damac-hills","level": "1"},{"id": "11776","name": "CAVALLI ESTATES","type": "SUBCOMMUNITY","slug": "damac-hills-cavalli-estates","slug_en": "damac-hills-cavalli-estates","level": "2"}]},"property": {"category_id": 1,"property_type_id": 35,"bedrooms": "6","bedrooms_value": 6,"bathrooms": "7+","bathrooms_value": 9,"size": {"value": 7880,"unit": "sqft"},"plot_size": 7880,"built_up_area": 11605.53,"completion_status": "off_plan","furnished": "NO","utilities_price_type": "notSelected","rera": "69792572927","amenity_codes": ["BR","BA","BW","AC","CP","PJ","BK","MR","PA","PP","ST","SE","SY","WC","BL","PR","CO"],"amenities": ["Barbecue Area","Balcony","Built in Wardrobes","Central A/C","Covered Parking","Private Jacuzzi","Kitchen Appliances","Maids Room","Pets Allowed","Private Pool","Study","Security","Shared Gym","Walk-in Closet","View of Landmark","Children's Play Area","Children's Pool"]},"contacts": {"agent": {"id": "900001","user_id": 120045,"name": "Omar Haddad","email": "omar.haddad@example-realestate.ae","image": "https://www.propertyfinder.ae/images/pf_agent/picture/example-agent-photo/desktop","languages": ["English","Hindi","Malayalam"],"slug": "omar-haddad","is_super_agent": true},"broker": {"id": "7001","name": "Harbor Gate Real Estate L.L.C.","address": "Office 1204, Bay Square Building 7, Business Bay, Dubai,","email": "office@example-realestate.ae","phone": "+971501112233","logo": "https://static.shared.propertyfinder.ae/media/images/client_logos/7001/example-broker-logo/178x98.jpg","slug": "harbor-gate-real-estate-5955"},"options": [{"type": "email","value": "omar.haddad@example-realestate.ae","link": "mailto:omar.haddad@example-realestate.ae","is_did": false},{"type": "phone","value": "+971501234567","link": "tel:+971501234567","is_did": false},{"type": "whatsapp","value": "+971509998877","link": "https://api.whatsapp.com/send?phone=+971509998877&text=Hello%2C%0AI+would+like+to+get+more+information+about+this+property%3A+%0A+%0AReference%3A+HGRE-2976%0AType%3A+Villa%0APrice%3A+19%2C487%2C000+AED+%0ALocation%3A+CAVALLI+ESTATES+%0ALink%3A+https%3A%2F%2Fwww.propertyfinder.ae%2Fto%2F92245796%2Fen+%0A+%0AAny+changes+made+to+this+message+will+result+in+the+enquiry+not+being+sent+to+the+agent.","is_did": false}]},"media": {"images": [{"small": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/3d6b6d67-1ac7-45e3-86cd-bf4ff56c21ac/416x272.jpg","medium": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/3d6b6d67-1ac7-45e3-86cd-bf4ff56c21ac/668x452.jpg"},{"small": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/2aac9e96-d2e3-4856-836a-e280738a6d79/416x272.jpg","medium": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/2aac9e96-d2e3-4856-836a-e280738a6d79/668x452.jpg"},{"small": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/90fbb841-aa23-48de-8235-4e8d41e000f0/416x272.jpg","medium": "https://static.shared.propertyfinder.ae/media/images/listing/D3HP32PEQVR0THR08S6AKPQ18R/90fbb841-aa23-48de-8235-4e8d41e000f0/668x452.jpg"}],"image_count": 29,"video_url": "https://youtu.be/rCwcZgMS5fw","has_360_view": false},"flags": {"is_verified": true,"is_available": true,"is_featured": false,"is_premium": true,"is_new_insert": true,"is_super_agent": true,"is_direct_from_developer": false,"is_new_construction": false,"is_community_expert": false,"is_cts": false,"is_exclusive": false,"is_pf_exclusive": false,"is_broker_project_property": false,"is_smart_ad": false,"is_spotlight_listing": false,"is_claimed_by_agent": false,"is_under_offer_by_competitor": false,"is_fhm": false,"is_great_value": false,"is_high_demand": false,"is_luxe": false},"metrics": {"lead_value": 100,"rank_score": 99.4216079711914,"rsp": 99.42161,"rss": 99.42161,"quality_score": 100,"mortgage_cashback": 0},"metadata": {"attributes": {"rental_payment_management": {"enabled": false}}},"reference": "HGRE-2976","description": "HGRE-2976 Explore a spacious six-bedroom villa in one of Dubai's premium residential communities. The home includes en-suite bedrooms, private balconies, generous indoor living areas, landscaped outdoor space, and a flexible payment plan. Community amenities include parks, sports facilities, retail options, and family-focused leisure spaces. This sample description uses realistic placeholder copy for documentation while preserving the full output field shape.","publication": {"listed_date": "2026-05-21T07:02:51Z","listing_level": "premium","listing_level_label": "premium"},"source_context": {"seed_type": "search","page_index": 1,"position": 4,"aggregated_position": 4,"details_path": "/en/plp/buy/villa-for-sale-dubai-damac-hills-cavalli-estates-92245796.html","seed_id": "650aa263fecdc9ded325","search_location": "Dubai","deal_type": "buy","source_url": "https://www.propertyfinder.ae/search/_next/data/kAaMkOhxqfERxJA9YkQiC/en/search.json?c=1&fu=0&l=1&ob=mr"},"fingerprint": "ff4501c98872029f456b"}
Example: Transaction history (record_type = "transaction")
{"record_type": "transaction","transaction_type": "rented","id": "0055170aa3d68ad297310b9f9e27e43b","location": {"area": "Dubai Creek Harbour (The Lagoons)","name": "Creek Rise Tower 1","location_id": "11931","url": "https://www.propertyfinder.ae/en/transactions/buy/dubai/dubai-creek-harbour-the-lagoons-creek-rise-creek-rise-tower-1","show_link": true},"property": {"property_type": "Apartment","bedrooms": "2","bedrooms_value": 2,"size": {"value": 1255.931852,"unit": "sqft"},"property_number": "101"},"pricing": {"amount": 130000,"currency": "AED","price_per_area": {"price": 8.625733407494895,"unit": "sqft"}},"dates": {"transaction_date": "2026-05-21","contract_start_date": "2026-05-22","contract_end_date": "2027-05-21","status": "New"},"source_context": {"seed_type": "search","page_index": 1,"position": 1,"source_url": "https://www.propertyfinder.ae/dataguru/_next/data/wa7iFfqKZQNusL2zs8GIQ/en/transactions/rent/dubai/dubai-creek-harbour-the-lagoons.json?category=rent&fu=0&ob=mr&period=1m&rp=y&slug=dubai&slug=dubai-creek-harbour-the-lagoons&sort=td&t=1","seed_id": "904d5da676f1131f8ead","search_location": "Dubai Creek Harbour","deal_type": "rented_properties","historic_deal_type": "rent","historic_timeframe": "1m","historic_property_type": "apartment"},"fingerprint": "0eb52f65e72533971e50"}
Field Reference
The field reference describes the record shapes shown above. Fields marked optional may be absent, empty, or null depending on the listing, transaction, location, public availability, or selected input mode. For production pipelines, treat the top-level identifiers as stable anchors and treat most descriptive fields as attributes that may change over time.
Active Listing Record
Active listing records represent current public listing inventory. They are the richest record shape in this actor because they can combine property attributes, price information, location hierarchy, contact details, media, listing flags, and publication data in one object.
- id (string, required): Primary Property Finder listing identifier. Use this as the main key for active-listing deduplication.
- listing_type (string, required): Listing record category, such as
property. Useful when storing mixed record families together. - listing_id (string, optional): Secondary listing identifier that may be useful for marketplace reconciliation.
- url (string, required): Public listing URL for reviewing the source record.
- title (string, optional): Listing headline as publicly displayed.
- property_type (string, optional): Human-readable property type, such as apartment, villa, or office space.
- offering_type (string, optional): Sale or rent offering label.
- price / currency (number/string, optional): Convenience copy of the main asking price and currency for spreadsheet and BI workflows. The full price object remains in
pricing. - price_from (number, optional): Project-listing convenience copy of the starting price when a project record is returned.
- bedrooms / bathrooms (string/number/array, optional): Convenience copy of the listing or project room counts. Full active-listing values remain under
property; project bedroom ranges remain underproject. - size / size_unit (number/string, optional): Convenience copy of the main active-listing size and unit.
- min_size / max_size (number, optional): Project-listing convenience copy of the available size range.
- area_name / city (string, optional): Convenience location labels derived from the nested location object.
- agent_name / broker_name / developer_name (string, optional): Convenience contact or developer names for flat exports. Full profiles remain nested.
- primary_contact_phone / primary_contact_email (string, optional): Primary contact values derived from public contact options or profile data when available.
- pricing.amount (number, optional): Asking price in AED.
- pricing.currency (string, optional): Price currency.
- pricing.period (string, optional): Price period or sale/rent marker. For sale listings this may indicate a sale-style price.
- pricing.is_hidden (boolean, optional): Whether the public listing hides the displayed price.
- pricing.price_per_area.price (number, optional): Price-per-area value when available.
- pricing.price_per_area.unit (string, optional): Area unit, usually
sqft. - pricing.price_per_area.built_up_area (number, optional): Built-up-area pricing context when available.
- pricing.price_per_area.plot (number, optional): Plot pricing context when available.
- location.id (string, optional): Location identifier.
- location.full_name (string, optional): Full location label, often including building, community, and city.
- location.coordinates.lat / location.coordinates.lon (number, optional): Latitude and longitude for mapping and geographic analysis.
- location.slug (string, optional): Public location slug.
- location.path (string, optional): Location hierarchy path.
- location.type (string, optional): Location level type, such as city, community, or subcommunity.
- location.name (string, optional): Most specific location name on the record.
- location.path_name (string, optional): Parent location path label.
- location.hierarchy (array, optional): Ordered location hierarchy from broad to specific.
- location.hierarchy[].id / name / type / slug / slug_en / level (string, optional): Individual hierarchy node details for city, community, subcommunity, or similar location levels.
- property.category_id (number, optional): Property category identifier.
- property.property_type_id (number, optional): Property type identifier.
- property.bedrooms / property.bedrooms_value (string/number, optional): Bedroom label and numeric value. The label preserves values such as
7+, while the numeric value supports analysis. - property.bathrooms / property.bathrooms_value (string/number, optional): Bathroom label and numeric value.
- property.size.value / property.size.unit (number/string, optional): Listed property size and unit.
- property.plot_size (number, optional): Plot size in square feet when available.
- property.built_up_area (number, optional): Built-up area in square feet when available.
- property.completion_status (string, optional): Completion status such as off-plan or ready.
- property.furnished (string, optional): Furnishing status as provided by the public record.
- property.utilities_price_type (string, optional): Utilities pricing label when provided.
- property.rera (string, optional): RERA reference when available.
- property.amenity_codes (array, optional): Amenity code list for compact downstream matching.
- property.amenities (array, optional): Human-readable amenity names.
- contacts.agent.id / user_id / name / email / image / slug / is_super_agent (string/number/boolean, optional): Public agent profile and contact attributes when available.
- contacts.agent.languages (array, optional): Publicly listed agent languages.
- contacts.broker.id / name / address / email / phone / logo / slug (string, optional): Public broker profile and contact attributes.
- contacts.options (array, optional): Available contact methods for the listing.
- contacts.options[].type / value / link / is_did (string/boolean, optional): Contact channel type, displayed value, action link, and DID flag.
- media.images (array, optional): Listing image objects.
- media.images[].small / media.images[].medium (string, optional): Image URLs by size.
- media.image_count (number, optional): Total public image count.
- media.video_url (string, optional): Public video URL when available.
- media.has_360_view (boolean, optional): Whether a 360 view is available.
- flags.is_verified / is_available / is_featured / is_premium / is_new_insert / is_super_agent / is_direct_from_developer / is_new_construction / is_community_expert / is_cts / is_exclusive / is_pf_exclusive / is_broker_project_property / is_smart_ad / is_spotlight_listing / is_claimed_by_agent / is_under_offer_by_competitor / is_fhm / is_great_value / is_high_demand / is_luxe (boolean, optional): Listing status, quality, promotion, source, and marketplace display signals.
- metrics.lead_value / rank_score / rsp / rss / quality_score / mortgage_cashback (number, optional): Listing ranking, quality, or commercial metrics when available.
- metadata.attributes.rental_payment_management.enabled (boolean, optional): Low-priority auxiliary attribute flag preserved from the public record.
- reference (string, optional): Public listing reference code.
- description (string, optional): Listing description text.
- publication.listed_date (string, optional): Listing publication timestamp.
- publication.listing_level / publication.listing_level_label (string, optional): Listing level and display label, such as standard or premium-style tiers.
- source_context.seed_type (string, optional): Source scope type used for the run.
- source_context.page_index (number, optional): Page index within the source context.
- source_context.position (number, optional): Position within the page.
- source_context.aggregated_position (number, optional): Position across the collected result set.
- source_context.details_path (string, optional): Public listing path.
- source_context.seed_id (string, optional): Source context identifier for tracing records from the same run scope.
- source_context.search_location (string, optional): Search location used for the run.
- source_context.deal_type (string, optional): Active listing deal type used for the run.
- source_context.source_url (string, optional): Public source context URL.
- fingerprint (string, required): Stable record signature for deduplication and change tracking.
Transaction-History Record
Transaction-history records represent recorded rent or sold transactions rather than current advertisements. They are usually used for comparable analysis, market movement checks, valuation support, and historical reporting.
- record_type (string, required): Record category, such as
transaction. - transaction_type (string, required): Transaction category, such as
rented. - id (string, required): Primary transaction record identifier. Use this as the main key for transaction deduplication.
- location.area (string, optional): Area or community name.
- location.name (string, optional): Building, project, or location name when available.
- location.location_id (string, optional): Location identifier.
- location.url (string, optional): Public transaction-location URL.
- location.show_link (boolean, optional): Whether a public location link is available.
- property.property_type (string, optional): Property type, such as apartment or villa.
- property.bedrooms / property.bedrooms_value (string/number, optional): Bedroom label and numeric value for comparable grouping.
- property.size.value / property.size.unit (number/string, optional): Recorded property size and unit.
- property.property_number (string, optional): Unit or property number when available.
- pricing.amount (number, optional): Recorded transaction amount in AED.
- pricing.currency (string, optional): Transaction currency.
- pricing.price_per_area.price (number, optional): Recorded price-per-area value.
- pricing.price_per_area.unit (string, optional): Area unit, usually
sqft. - dates.transaction_date (string, optional): Transaction date.
- dates.contract_start_date (string, optional): Rental contract start date when available.
- dates.contract_end_date (string, optional): Rental contract end date when available.
- dates.status (string, optional): Transaction status label.
- source_context.seed_type (string, optional): Source scope type used for the run.
- source_context.page_index (number, optional): Page index within the source context.
- source_context.position (number, optional): Position within the page.
- source_context.source_url (string, optional): Public source context URL.
- source_context.seed_id (string, optional): Source context identifier for tracing records from the same run scope.
- source_context.search_location (string, optional): Historic location used for the run.
- source_context.deal_type (string, optional): Historic deal category label.
- source_context.historic_deal_type (string, optional): Requested historic deal type.
- source_context.historic_timeframe (string, optional): Requested historic timeframe.
- source_context.historic_property_type (string, optional): Requested historic property type.
- fingerprint (string, required): Stable record signature for deduplication and change tracking.
Data Quality, Guarantees, And Handling
- Structured records: results are normalized into predictable JSON objects for downstream use. Active listings and transaction-history records are documented separately so pipelines can map each shape intentionally.
- Best-effort extraction: fields may vary by region, session, availability, public page format, or target-side experiments. The actor preserves available public values, but sparse listings or historic records may naturally contain fewer fields.
- Optional fields: null-check optional values in downstream code, especially contacts, media, metrics, flags, publication data, and transaction-specific dates. Do not assume every listing has all contact methods, all media types, or every quality signal.
- Deduplication: use
idas the primary stable key, withlisting_typeorrecord_typeplusfingerprintfor mixed datasets and change tracking. This is especially important for scheduled runs and warehouse upserts. - Freshness: results reflect the publicly available data at run time. Re-run the actor when you need a fresh view of active inventory, newly visible contacts, or recent transaction-history records.
- Repeated runs: use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, enrichment systems, or internal reporting tables.
- Schema evolution: target-side public data can change over time. Keep downstream ingestion tolerant of new optional fields, missing optional fields, and minor changes in display labels.
Tips For Best Results
- Start with a small
limitto validate the output shape before scaling up. This helps confirm that you selected the correct mode and that records contain the fields your workflow needs. - Use one geography, property type, or market segment per run when you need cleaner segmentation. Separate runs are easier to compare than one broad mixed dataset.
- Leave optional filters empty when the goal is broad discovery. Add filters only when you want to reduce noise or isolate a specific comparable group.
- Add filters gradually to understand how each field changes coverage and result quality. For example, validate location first, then property type, then price or bedroom filters.
- Use
sort_by: "newest"for active-listing monitoring workflows where recent listings matter more than default marketplace order. - Use
historic_timeframedeliberately. Short windows such as1wor1mare better for recent movement, while1yor3ysupports broader historical analysis. - Keep
maximize_coverageenabled for broad active-listing or transaction-history collection when you want more complete coverage within the same criteria, especially for city-wide, Dubai-wide, or no-location runs. - Use stable identifiers for deduplication when storing results over time. A reliable upsert strategy makes scheduled runs much easier to operate.
How to Run on Apify
- Open the Actor in Apify Console.
- Configure the available input fields for the target scope. Choose active listings or transaction history first, then fill only the fields that apply to that mode.
- Set the maximum number of outputs to collect with
limit. For first runs, use a small number so review is fast. - Click Start and wait for the run to finish.
- Open the dataset and review the first records. Confirm that the record type, location, pricing, dates, contacts, and identifiers match your use case.
- Download results in JSON, CSV, Excel, or other supported formats, or connect the dataset to your downstream workflow.
Scheduling & Automation
Scheduling
Automated Data Collection
Schedule runs to keep active listing, contact, and transaction-history datasets current for recurring reporting or monitoring workflows. Use consistent inputs across scheduled runs to make comparisons easier over time, and store records with stable identifiers so downstream systems can upsert rather than duplicate data.
- Navigate to Schedules in Apify Console.
- Create a new schedule, such as daily, weekly, or custom cron.
- Configure input parameters.
- Enable notifications for run completion.
- Add webhooks for automated processing.
Integration Options
- CRM enrichment: sync public listing, agent, broker, and contact attributes into account or lead records.
- BI dashboards: monitor pricing, active inventory, transaction movement, location coverage, and broker activity over time.
- Google Sheets or Airtable: review smaller market samples, lead lists, and QA datasets with non-technical stakeholders.
- Webhooks: trigger validation, notification, or ingestion workflows after each completed run.
- Data enrichment pipelines: append current public property and transaction attributes to existing CRM, BI, or valuation datasets.
- Warehouse and ETL workflows: load JSON records into analytical stores for historical reporting and repeatable market analysis.
Export Formats And Downstream Use
Apify datasets can be exported or consumed by downstream systems for reporting, enrichment, monitoring, and operational analysis. Choose the format based on who will use the data and how automated the workflow needs to be.
- JSON: for APIs, applications, and data pipelines that need nested records, stable identifiers, and full source context.
- CSV or Excel: for spreadsheet workflows, manual review, quick analysis, lead review, and stakeholder sharing.
- API access: for automated ingestion into internal systems, enrichment processes, QA workflows, and scheduled sync jobs.
- BI and warehouses: for reporting, dashboards, historical analysis, market snapshots, and recurring operational metrics.
Performance
Estimated run times:
- Small runs (< 1,000 outputs): ~3-5 minutes.
- Medium runs (1,000-5,000 outputs): ~5-15 minutes.
- Large runs (5,000+ outputs): ~15-30 minutes.
Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.
For recurring workflows, measure a representative small run first, then scale gradually. Broad active-listing discovery, media-rich listings, and large transaction-history scopes can produce more data and therefore require more time to complete.
Limitations
- Availability depends on what Property Finder UAE publicly exposes at run time. If a listing, contact method, media item, or transaction is not publicly visible, it may not appear in the dataset.
- Some optional fields may be missing on sparse records, older transaction records, commercial records, or listings with limited public details.
- Very broad active-listing searches may take longer or require higher limits, especially when collecting across large cities, broad property categories, or no-location searches.
- Target-side changes can affect field availability, labels, naming, or which optional attributes are present.
- Regional, account, or availability differences may change visible results.
- Transaction-history inputs are designed for Dubai transaction records; non-Dubai historic locations are not part of this mode.
limitcontrols the maximum number of saved records. It does not guarantee that the target scope contains that many matching public records.
Troubleshooting
- No results returned: check
search_type, filter combinations, location spelling, property type, and whether Property Finder has matching public records for that exact scope. For transaction history, confirm that you are usinghistoric_*fields rather than active listing fields. - Fewer results than expected: broaden filters, raise
limit, remove highly restrictive fields, or verify that the selected location and category contain enough matching public records. - Some fields are empty: optional fields depend on what each listing or transaction publicly provides. Contacts, media, flags, metrics, publication data, and contract dates can vary by record.
- Run takes longer than expected: reduce scope, lower
limitfor validation, split broad collection into smaller location or price segments, or use more targeted filters. - Unexpected active listing results: confirm
deal_type,property_type,location, price bounds, area bounds,sort_by, and whether optional filters such asamenities,keyword, ormultimediaare narrowing the dataset too aggressively. - Unexpected transaction-history results: confirm
historic_deal_type,historic_location,historic_timeframe,historic_property_type, bedroom count, price bounds, area bounds, and completion status. - Output changed: compare the current output with the field reference and report a small sample if support is needed.
FAQ
What data does this actor collect?
It collects active Property Finder UAE listing records and Dubai transaction-history records. Active listings can include property details, asking prices, locations, agent and broker contacts, contact options, media, flags, metrics, publication data, and source context. Transaction records can include transaction type, location, property details, recorded amount, price per area, transaction dates, contract dates, source context, and a stable fingerprint.
Can I filter by location, category, date, price, or other criteria?
Yes. Active listings support location, deal type, property type, completion, furnishing, bedrooms, bathrooms, amenities, keyword, multimedia, sort, price, area, and coverage controls. Transaction history supports historic location, historic deal type, timeframe, property type, bedroom count, price, area, and completion filters.
Why did I receive fewer results than my limit?
The limit is a maximum, not a guarantee. The actor can only save records that match the selected filters and are publicly available during the run. If a scope is narrow, the available public result count may be lower than your requested limit.
Can I schedule recurring runs?
Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule with the same input configuration. Recurring runs are useful for monitoring new active listings, refreshing contact datasets, and maintaining transaction-history snapshots.
How do I avoid duplicates across runs?
Use id as the primary idempotency key. For mixed datasets, combine listing_type or record_type with id, and keep fingerprint for change tracking or duplicate checks. When loading into a database, upsert records rather than appending every scheduled run blindly.
Can I export the data to CSV, Excel, or JSON?
Yes. Apify datasets support JSON, CSV, Excel, and other export formats from the run dataset. JSON is best when you need the full nested structure; CSV and Excel are useful for review and spreadsheet-based workflows.
Does this actor collect private data?
No. The actor is intended to collect publicly available information from Property Finder UAE. Some public listings may include agent or broker contact information, and users are responsible for using that information lawfully, responsibly, and in line with applicable rules.
What should I include when reporting an issue?
Include the input used, with any sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample if it helps explain the issue. For field-related issues, include one active listing or transaction record that demonstrates the problem.
Compliance & Ethics
Responsible Data Collection
This actor collects publicly available property listing, contact, and transaction-history information from https://www.propertyfinder.ae for legitimate business purposes, including:
- Real estate research and market analysis.
- Lead enrichment and broker intelligence.
- Competitive monitoring and recurring operational reporting.
Users are responsible for ensuring that their use of the data complies with applicable laws, regulations, and the target site's terms. This includes responsible handling of public contact information, reasonable collection practices, and appropriate downstream use. This section is informational and not legal advice.
Best Practices
- Use collected data in accordance with applicable laws, regulations, and the target site's terms.
- Respect individual privacy and personal information.
- Use data responsibly and avoid disruptive or excessive collection.
- Do not use this actor for spamming, harassment, or other harmful purposes.
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA.
Support
For help, use the Issues tab or the actor page on Apify. Include the input used with sensitive values redacted, the run ID, the expected versus actual behavior, and a small output sample when it helps clarify the problem. For best results, also mention whether the run used active_listings or transaction_history, and include the specific location, property type, timeframe, or filters involved.