Propertypal Scraper avatar
Propertypal Scraper

Pricing

$25.00/month + usage

Go to Apify Store
Propertypal Scraper

Propertypal Scraper

Scrape propertypal.com to crawl millions of sale/rent real estate properties from Northern Ireland. Our real estate scraper also lets you monitor specific listing for new updates/listing. You can provide multiple search result listings to scrape/monitor.

Pricing

$25.00/month + usage

Rating

5.0

(1)

Developer

Dhrumil Bhankhar

Dhrumil Bhankhar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

🏡 What is Propertypal Real Estate Properties Scraper?

This Propertypal properties Scraper will enable you scrape any sale/rent listing from collection from propertypal.co.uk/.

You can simply take your listing url from browser and enter it into this actor. This actor will crawl through all pages of particular listing and generate dataset for you.

Listing url is something you get when you perform the search on propertypal site. Example listing urls :

🚪 What can this Propertypal Scraper do?

📈 Extract Propertypal market data listings on Propertypal

👀 This actor is not just scraper but also has monitoring capability. You can turn on monitoring mode and it will give you only newly added properties compared to your previous scrapes.

📩 This actor also helps yu to identify which properties are not listed anymore. Please refer to Identifying delisted properties

⬇️ Download Propertypal real estate data in Excel, CSV, JSON, and other formats

📚 How do I start scraping with this scraper?

  1. Register for your free Apify account here
  2. You don't need to provide your credit card details for free acount. Just click on "Get Started" button on above link and complete the registration only.
  3. Free account comes with reasonable credits to try out this actor. This actor also comes with free trial of 1 hour without any commitment/upfront charge.
  4. Run this actor and verify the scraped data. Apify has huge integration possibilities. You can download the data or push the data into any 3rd party platform directly.

🌳 What Propertypal data can I extract using this tool?

📝📝
FieldDescription
----------------------------------------------------------
idProperty ID
urlListing URL
titleListing Title
addressFull Address
streetStreet Name
townTown/City
nameOrNumberName or Number
addressLine1Address Line 1
addressLine2Address Line 2
bedroomsNumber of Bedrooms
bathroomsNumber of Bathrooms
receptionroomsNumber of Reception Rooms
pricePrefixPrice Prefix (e.g., Offers Over)
pricePrice
priceMinMinimum Price
priceMaxMaximum Price
statusListing Status
regionRegion/County
descriptionDescription (HTML)
coordinatesCoordinates (lat/lng, etc.)
epcRatingEPC Rating
incodeIncode (postcode part)
outcodeOutcode (postcode part)
heatingTypeHeating Type
historyPrice/Status History
categoryCategory (e.g., Added)
listingUpdatedTimeLast Updated Time
typeType (object: key/text)
postalCodePostal Code
propertyTypeProperty Type
listingsCategoryListings Category
accountAgent/Account Info (object)
publishedOnPublished On Date
imagesImage URLs
agentsAgents (array of objects)
berExemptBER Exempt (boolean)
broadbandSpeedBroadband Speed Info (object)
brochuresBrochures (array of objects)
brokersBrokers (array)
coOwnershipEligibleCo-Ownership Eligible (boolean)
coOwnershipOnlyCo-Ownership Only (boolean)
dateAvailableFromDate Available From
dateViewableFromDate Viewable From
featuresFeatures (array)
premiumListingPremium Listing (boolean)
priceTrackerAvailablePrice Tracker Available (boolean)

⬇️ Input

For simple use, provide the browser URL of a Propertypal search result page. Other fields have sensible defaults but can be customized as needed.

Input example

{
"listUrls": [
{
"url": "https://propertypal.com/search?sta=forSale&sta=saleAgreed&st=sale&pt=residential&max=40000&currency=GBP&term=3"
}
],
"monitoringMode": false,
"fullPropertyDetails": true,
"addEmptyTrackerRecord": false,
"enableDelistingTracker": false,
"email": "",
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "GB"
}
}

Input fields

  • listUrls (array): Propertypal sale or rent listing URLs to scrape.
  • monitoringMode (boolean): If true, only newly listed properties compared to previous runs will be scraped.
  • fullPropertyDetails (boolean): If true, scrapes each property for full details. Turn off for faster, basic scraping.
  • addEmptyTrackerRecord (boolean): If true, adds tracker ID record in incremental mode to help identify delisted properties with a custom loader.
  • enableDelistingTracker (boolean): If true, tracks every property with a date in KV Store to help find delisted properties. May impact billing.
  • email (string): Email address for notifications or error reports.
  • proxy (object): Proxy configuration. Defaults to Apify residential proxy for the UK.

⬆️ Output

Scraped data is stored in the dataset for each run. You can view or download results in JSON, CSV, Excel, XML, RSS, and HTML formats.

Output example

{
"id": "1051111",
"url": "https://www.propertypal.com/25-hopefield-avenue-portrush/1052311",
"title": "4 Bed Detached House",
"address": "25 Hopefield Avenue, Portrush, BT56 8HB",
"street": "Hopefield Avenue",
"town": "Portrush",
"nameOrNumber": "25",
"addressLine1": "25 Hopefield Avenue",
"bedrooms": 4,
"bathrooms": 2,
"receptionrooms": 1,
"pricePrefix": "Offers Over",
"status": "For sale",
"region": "Antrim",
"price": 395000,
"description": "<h2>Additional Information</h2><ul>\n <li>Detached House</li>\n <li>Four Bedroom</li>\n <li>Garage</li>\n <li>Large Garden</li>\n <li>Oil Central Heating</li>\n <li>Private Driveway</li>\n <li>uPVC Windows &amp; Doors</li>\n</ul>",
"coordinates": {
"latitude": 55.1979,
"longitude": -6.65297,
"accuracy": "unsure",
"mapZoomLevel": 10,
"showStreetView": true
},
"epcRating": "E46/E54",
"priceMin": 395000,
"priceMax": null,
"incode": "8HB",
"outcode": "BT56",
"heatingType": "Oil",
"history": [
{
"difference": null,
"priceOnApplication": false,
"publishedOnAwp": true,
"published": true,
"timeModified": "2025-12-30T15:22:35+0000",
"price": 395000,
"status": {
"key": "forSale",
"text": "For sale"
},
"previousStatus": null,
"previousPrice": null,
"previousPublished": false,
"statusChange": true,
"priceChange": false,
"publishedChange": true,
"publishedOnAwpChange": true,
"differencePercentage": null,
"pricePrefix": "Offers Over",
"priceSuffix": null
}
],
"category": "Added",
"listingUpdatedTime": "2025-12-30T16:33:10+0000",
"type": {
"key": "residential",
"text": "Residential"
},
"postalCode": "BT56 8HB",
"propertyType": "Detached Houses",
"listingsCategory": "Residential",
"account": {
"accountNumber": "ST1012202",
"organisation": "Causeway Coast Sales & Rentals",
"organisationBranch": "",
"displayAddress": "1 Harbour Place, Portstewart, BT55 7AX",
"officePhone": {
"countryCode": 44,
"displayNumber": "+44 28 7083 2220",
"international": "+44 28 7083 2220",
"national": "028 7083 2220",
"uk": "028 7083 2220"
},
"psrLicenceNumber": null,
"websiteUrl": "https://www.causewaycoastrentals.co.uk",
"landingPageUrl": "/estate-agents/causeway-coast-sales-rentals",
"groupLandingPageUrl": null,
"privateDeveloper": false,
"developerPrimaryContact": false,
"developer": false,
"agent": true,
"featuredAgent": false,
"detailsEnabled": true,
"emailEnabled": true,
"showAddress": true,
"hasMicrosite": true,
"includeFeeCharges": true,
"logo": {
"standard": "https://media.propertypal.com/logo/160816205354/400x400/ST1012202/sales.png"
},
"agentLogos": [
{
"logoType": "STANDARD",
"url": "https://media.propertypal.com/logo/160816205354/400x400/ST1012202/sales.png",
"width": 600,
"height": 256,
"backgroundColour": "#b5251c",
"accountNumber": "ST1012202",
"developer": false,
"agent": true
}
],
"accreditations": [
{
"id": 2,
"label": "TPOS",
"textKey": "propertyOmbudsman",
"url": "https://www.tpos.co.uk/",
"imageUrl": "https://www.propertypal.com/accreditations/propertyOmbudsman.png",
"type": "ESSENTIAL",
"tooltip": "Free, impartial and independent Ombudsman service, resolving disputes between Consumers and Property Agents since 1990."
}
],
"missingAccreditations": null,
"propertypalAwards": [],
"openingTimes": [
{
"openTime": "2019-12-30T09:00:00+0000",
"closeTime": "2019-12-30T17:30:00+0000",
"byAppointment": false,
"closed": false,
"lunchBreak": false
}
],
"tier": "CUSTOM",
"enhancedBranding": false,
"searchUrl": "/search?radius=5.0&runit=m&rlat=55.1979&rlng=-6.65297&sta=forSale&st=sale&pt=residential&min=300000&max=450000&currency=GBP&term=397432"
},
"publishedOn": "2025-12-30T15:22:35+0000",
"images": [
"https://media.propertypal.com/large/p/1051111/39832548.jpg",
"https://media.propertypal.com/large/p/1051111/39832545.jpg"
],
"addressLine2": "",
"agents": [
{
"accountNumber": "ST1012202",
"organisation": "Causeway Coast Sales & Rentals",
"organisationBranch": "",
"displayAddress": "1 Harbour Place, Portstewart, BT55 7AX",
"officePhone": {
"countryCode": 44,
"displayNumber": "+44 28 7083 2220",
"international": "+44 28 7083 2220",
"national": "028 7083 2220",
"uk": "028 7083 2220"
},
"psrLicenceNumber": null,
"websiteUrl": "https://www.causewaycoastrentals.co.uk",
"landingPageUrl": "/estate-agents/causeway-coast-sales-rentals",
"groupLandingPageUrl": null,
"privateDeveloper": false,
"developerPrimaryContact": false,
"developer": false,
"agent": true,
"featuredAgent": false,
"detailsEnabled": true,
"emailEnabled": true,
"showAddress": true,
"hasMicrosite": true,
"includeFeeCharges": true,
"logo": {
"standard": "https://media.propertypal.com/logo/160816205354/400x400/ST1012202/sales.png"
},
"agentLogos": [
{
"logoType": "STANDARD",
"url": "https://media.propertypal.com/logo/160816205354/400x400/ST1012202/sales.png",
"width": 600,
"height": 256,
"backgroundColour": "#b5251c",
"accountNumber": "ST1012202",
"developer": false,
"agent": true
}
],
"accreditations": [
{
"id": 2,
"label": "TPOS",
"textKey": "propertyOmbudsman",
"url": "https://www.tpos.co.uk/",
"imageUrl": "https://www.propertypal.com/accreditations/propertyOmbudsman.png",
"type": "ESSENTIAL",
"tooltip": "Free, impartial and independent Ombudsman service, resolving disputes between Consumers and Property Agents since 1990."
}
],
"missingAccreditations": null,
"propertypalAwards": [],
"openingTimes": [
{
"openTime": "2019-12-30T09:00:00+0000",
"closeTime": "2019-12-30T17:30:00+0000",
"byAppointment": false,
"closed": false,
"lunchBreak": false
}
],
"tier": "CUSTOM",
"enhancedBranding": false,
"searchUrl": "/search?radius=5.0&runit=m&rlat=55.1979&rlng=-6.65297&sta=forSale&st=sale&pt=residential&min=300000&max=450000&currency=GBP&term=397432",
}
],
"berExempt": false,
"broadbandSpeed": {
"estimated": false,
"timeLastCached": "2025-12-30T15:22:36+0000",
"maxPredictedDown": "900",
"maxPredictedUp": "110",
"maxBbPredictedDown": "17",
"maxBbPredictedUp": "1",
"maxSfbbPredictedDown": "76",
"maxSfbbPredictedUp": "17",
"maxUfbbPredictedDown": "900",
"maxUfbbPredictedUp": "110",
"maxFibrusDown": "982",
"maxFibrusUp": "310",
"fibrusAvailable": true
},
"brochures": [
{
"sizeDescription": "510.3KB",
"title": "Brochure",
"publicFilename": "Brochure.pdf-3310363.pdf",
"contentType": "application/pdf",
"fileType": "pdfBrochure",
"displayOrder": 36,
"url": "https://media.propertypal.com/f/p/1051111/3310363/Brochure.pdf"
}
],
"brokers": [],
"coOwnershipEligible": false,
"coOwnershipOnly": false,
"dateAvailableFrom": null,
"dateViewableFrom": null,
"features": [
"Status : For sale",
"Style : Detached House",
"Bedrooms : 4",
"Bathrooms : 2",
"Receptions : 1",
"Tenure : Freehold",
"EPC Rating : E46/E54",
"Heating : Oil",
"Broadband : Highest download speed: 900 Mbps Highest upload speed: 110 Mbps",
"Price : Offers Over £395,000",
"Stamp Duty : null",
"Rates : £1,841.40 pa",
"Views All Time : 2299"
],
"premiumListing": false,
"priceTrackerAvailable": true
}

❓Limitations

Since Propertypal allows only 3000 properties per listing/search result, you might want to break down your listing urls into smaller area if it has more than 1K results. Good News is that even if multiple list urls contains overlapping results, they will get deduplicated within same run data.

This actor has ability to bypass captcha. However, please run this actor with residential proxy with country United Kingdom to get results smoothly.

🔎 Identifying delisted properties

This actor provides you monitoring mode configuration using which you can get only incremental updates about newly added properties. In case, you also want to identify which properties are delisted from platform, you can use any of the following techniques with the help of this actor.

  1. Running Always in full scraper mode : Run this actor always in full scrape mode and cross check the new incoming batch of data with your existing database. If any property that exists in yoru database but not in newly scraped data batch, that means it's not listed anymore

  2. Use Key Value Store generated by scraper : If your are monitoring very large batch of data and you don't want to scrape everything all the time, this method involves bit of technicality but achieves the goal efectively. Apify has storage feature called Key-value store. When you run this scrape, this scraper stores every single property in key value store along with timestamp in propertypal-properties store. Inside this store, key is property id itself and value is timestamp like this

    { lastSeen : '2023-11-02T05:59:25.763Z'}

    Whenever you run this scraper, it will update the timestamp against particular id if it finds property on the platform. e.g. if we have 2 proprties with id prop1 and prop2 and we scraped them both on November 1, key value storage would look like this :

    prop1 -> { lastSeen : '2023-11-01T05:59:25.763Z'}
    prop2 -> { lastSeen : '2023-11-01T05:59:25.763Z'}

    Now if you run this scraper again on December 1 and prop1 is not on the platform anymore but prop2 is still there, key value storage would change like this :

    prop1 -> { lastSeen : '2023-11-01T05:59:25.763Z'}
    prop2 -> { lastSeen : '2023-12-01T05:59:25.763Z'}

    That means if any property has lastSeen less than latest batch you loaded, that property is delisted now. You can directly iterate through whole Key value storage using Apify key value storage API to identify this. Please refer to this API documentation to do the same. Please remember store name generated by this scrape will be propertypal-properties.

    Alternatively, you can iterate through your existing database active properties and use this API to identify listing status.

    For this approach to work, it's important that you enable this feature via enableDelistingTracker (Enable Delisting tracker) input.

🙋‍♀️ For custom solutions

In case you need some custom solution, you can contact me : dhrumil@techvasu.com

Or learn more about me on github : https://github.com/dhrumil4u360