froren / realtorca Goto Github PK
View Code? Open in Web Editor NEWAPI wrapper for realtor.ca MLS website
API wrapper for realtor.ca MLS website
Are there any alternatives? Did they ever follow up from that past thread?
Do we know where there is documentation for the API itself? How did you find all the options? Was it by trial and error? I can't find anything for their API anywhere, but would love to build on this project.
Pretty straightforward. In February Realtor updated their app and the old version is obsolete.
Now the PropertyDetails endpoint doesn't work.
Does anyone have a solution for extracting data?
hey I am trying to get all listings from toronto and vancover. I am very new at python can you help?
i am looking for api to get all realtor info from realtor.ca . is that possible with this api
Does this api have a limit on the number of requests?
Hi there,
Thanks for putting this together. It's easy enough to get the listings but I was having a more difficult time getting a listing's detail information
Charles Proxy is a decent tool to use for inspecting API calls for mobile apps (rather than HTML-based calls like web) https://www.charlesproxy.com/documentation/ios/ since it acts as a "man-in-the-middle" SSL root certificate so it can read all API requests, headers, etc. This makes it much easier to work backwards from what the iOS app is doing to better understand how to create an API wrapper for your own personal needs.
Note: this was for an anonymous session (no account signed up / logged in)
cURL equivalent (using Postman) with the minimal set of parameters needed to get a result:
curl --location --request GET 'https://api37.realtor.ca:443//Listing.svc/PropertyDetails?PropertyId=22054689&ApplicationId=37&CultureId=1&HashCode=0&ReferenceNumber=15418919'
That gives a response like:
{
"ErrorCode": {
"Id": 200,
"Description": "Success - OK",
"ProductName": "! Push to PR-Stage - Realtor API (Maintenance)^28858 [Monday, August 10, 2020 8:50:12 AM]",
"Version": "1.0.7527.15915"
},
"HashCode": "1471583764",
"Id": "22054689",
"MlsNumber": "15418919",
"PublicRemarks": "Bardagi.com/1209 Very nice 6plex located in the charming Laurier East district. Close to all the shops and restaurants of the dynamic Mont-Royal avenue. Less than 10 minutes walk from the Laurier metro station of the Laurier Park. Very nice neighborhood life! Beautiful income property very well maintained! (37473608)",
"LastUpdated": "2020-07-17 1:02:37 PM",
"Building": {
"BathroomTotal": "1",
"Bedrooms": "3",
"SizeInterior": "5730 sqft",
"StoriesTotal": "3",
"Type": "Multi-Family",
"UnitTotal": "6",
"BasementDevelopment": "Finished",
"BasementFeatures": "Six feet and over",
"BasementType": "Full (Finished)",
"ConstructedDate": "1915",
"ConstructionStyleAttachment": "Semi-detached",
"HalfBathTotal": "0",
"HeatingFuel": "Electric",
"Room": [
{
"Type": "Living room",
"Width": "10 ft ,10 in",
"Length": "13 ft ,4 in",
"Level": "Second level",
"Dimension": "13 ft ,4 in x 10 ft ,10 in"
},
{
"Type": "Bedroom",
"Width": "12 ft ,2 in",
"Length": "9 ft ,5 in",
"Level": "Second level",
"Dimension": "9 ft ,5 in x 12 ft ,2 in"
},
{
"Type": "Bedroom",
"Width": "9 ft ,6 in",
"Length": "9 ft ,4 in",
"Level": "Second level",
"Dimension": "9 ft ,4 in x 9 ft ,6 in"
},
{
"Type": "Bedroom",
"Width": "8 ft ,7 in",
"Length": "16 ft ,9 in",
"Level": "Second level",
"Dimension": "16 ft ,9 in x 8 ft ,7 in"
},
{
"Type": "Kitchen",
"Width": "8 ft ,9 in",
"Length": "7 ft ,5 in",
"Level": "Second level",
"Dimension": "7 ft ,5 in x 8 ft ,9 in"
},
{
"Type": "Dinette",
"Width": "9 ft ,3 in",
"Length": "9 ft ,5 in",
"Level": "Second level",
"Dimension": "9 ft ,5 in x 9 ft ,3 in"
},
{
"Type": "Bathroom",
"Width": "4 ft",
"Length": "9 ft ,9 in",
"Level": "Second level",
"Dimension": "9 ft ,9 in x 4 ft"
},
{
"Type": "Living room",
"Width": "11 ft ,1 in",
"Length": "13 ft ,10 in",
"Level": "Second level",
"Dimension": "13 ft ,10 in x 11 ft ,1 in"
},
{
"Type": "Bedroom",
"Width": "10 ft ,2 in",
"Length": "10 ft ,1 in",
"Level": "Second level",
"Dimension": "10 ft ,1 in x 10 ft ,2 in"
},
{
"Type": "Bedroom",
"Width": "8 ft ,10 in",
"Length": "11 ft ,6 in",
"Level": "Second level",
"Dimension": "11 ft ,6 in x 8 ft ,10 in"
},
{
"Type": "Kitchen",
"Width": "8 ft ,10 in",
"Length": "15 ft ,8 in",
"Level": "Second level",
"Dimension": "15 ft ,8 in x 8 ft ,10 in"
},
{
"Type": "Dinette",
"Width": "8 ft ,6 in",
"Length": "10 ft ,1 in",
"Level": "Second level",
"Dimension": "10 ft ,1 in x 8 ft ,6 in"
},
{
"Type": "Bathroom",
"Width": "8 ft ,10 in",
"Length": "11 ft ,6 in",
"Level": "Second level",
"Dimension": "11 ft ,6 in x 8 ft ,10 in"
},
{
"Type": "Living room",
"Width": "10 ft ,10 in",
"Length": "13 ft ,7 in",
"Level": "Third level",
"Dimension": "13 ft ,7 in x 10 ft ,10 in"
},
{
"Type": "Bedroom",
"Width": "10 ft ,8 in",
"Length": "9 ft ,4 in",
"Level": "Third level",
"Dimension": "9 ft ,4 in x 10 ft ,8 in"
},
{
"Type": "Bedroom",
"Width": "13 ft ,5 in",
"Length": "9 ft ,6 in",
"Level": "Third level",
"Dimension": "9 ft ,6 in x 13 ft ,5 in"
},
{
"Type": "Bedroom",
"Width": "11 ft",
"Length": "8 ft ,4 in",
"Level": "Third level",
"Dimension": "8 ft ,4 in x 11 ft"
},
{
"Type": "Office",
"Width": "10 ft ,1 in",
"Length": "6 ft ,9 in",
"Level": "Third level",
"Dimension": "6 ft ,9 in x 10 ft ,1 in"
},
{
"Type": "Kitchen",
"Width": "12 ft",
"Length": "11 ft ,5 in",
"Level": "Third level",
"Dimension": "11 ft ,5 in x 12 ft"
},
{
"Type": "Bathroom",
"Width": "5 ft ,4 in",
"Length": "9 ft ,3 in",
"Level": "Third level",
"Dimension": "9 ft ,3 in x 5 ft ,4 in"
},
{
"Type": "Living room",
"Width": "10 ft ,10 in",
"Length": "61 ft ,11 in",
"Level": "Third level",
"Dimension": "61 ft ,11 in x 10 ft ,10 in"
},
{
"Type": "Bedroom",
"Width": "10 ft ,2 in",
"Length": "11 ft ,2 in",
"Level": "Third level",
"Dimension": "11 ft ,2 in x 10 ft ,2 in"
},
{
"Type": "Bedroom",
"Width": "10 ft ,11 in",
"Length": "10 ft",
"Level": "Third level",
"Dimension": "10 ft x 10 ft ,11 in"
},
{
"Type": "Bedroom",
"Width": "11 ft",
"Length": "8 ft ,4 in",
"Level": "Third level",
"Dimension": "8 ft ,4 in x 11 ft"
},
{
"Type": "Office",
"Width": "11 ft ,9 in",
"Length": "6 ft ,10 in",
"Level": "Third level",
"Dimension": "6 ft ,10 in x 11 ft ,9 in"
},
{
"Type": "Kitchen",
"Width": "8 ft ,6 in",
"Length": "11 ft ,7 in",
"Level": "Third level",
"Dimension": "11 ft ,7 in x 8 ft ,6 in"
},
{
"Type": "Dinette",
"Width": "8 ft ,8 in",
"Length": "10 ft ,5 in",
"Level": "Third level",
"Dimension": "10 ft ,5 in x 8 ft ,8 in"
},
{
"Type": "Bathroom",
"Width": "4 ft ,11 in",
"Length": "8 ft ,2 in",
"Level": "Third level",
"Dimension": "8 ft ,2 in x 4 ft ,11 in"
},
{
"Type": "Bedroom",
"Width": "10 ft ,9 in",
"Length": "11 ft ,11 in",
"Level": "Basement",
"Dimension": "11 ft ,11 in x 10 ft ,9 in"
},
{
"Type": "Family room",
"Width": "13 ft ,5 in",
"Length": "10 ft ,5 in",
"Level": "Basement",
"Dimension": "10 ft ,5 in x 13 ft ,5 in"
},
{
"Type": "Family room",
"Width": "11 ft ,2 in",
"Length": "7 ft ,7 in",
"Level": "Basement",
"Dimension": "7 ft ,7 in x 11 ft ,2 in"
},
{
"Type": "Bathroom",
"Width": "7 ft",
"Length": "5 ft ,5 in",
"Level": "Basement",
"Dimension": "5 ft ,5 in x 7 ft"
},
{
"Type": "Laundry room",
"Width": "7 ft",
"Length": "5 ft ,4 in",
"Level": "Basement",
"Dimension": "5 ft ,4 in x 7 ft"
},
{
"Type": "Family room",
"Width": "14 ft ,4 in",
"Length": "11 ft ,5 in",
"Level": "Basement",
"Dimension": "11 ft ,5 in x 14 ft ,4 in"
},
{
"Type": "Bedroom",
"Width": "11 ft ,8 in",
"Length": "10 ft ,8 in",
"Level": "Basement",
"Dimension": "10 ft ,8 in x 11 ft ,8 in"
},
{
"Type": "Office",
"Width": "11 ft ,9 in",
"Length": "14 ft ,8 in",
"Level": "Basement",
"Dimension": "14 ft ,8 in x 11 ft ,9 in"
},
{
"Type": "Laundry room",
"Width": "4 ft ,8 in",
"Length": "5 ft ,5 in",
"Level": "Basement",
"Dimension": "5 ft ,5 in x 4 ft ,8 in"
},
{
"Type": "Living room",
"Width": "11 ft",
"Length": "13 ft ,5 in",
"Level": "Main level",
"Dimension": "13 ft ,5 in x 11 ft"
},
{
"Type": "Bedroom",
"Width": "11 ft ,1 in",
"Length": "12 ft ,10 in",
"Level": "Main level",
"Dimension": "12 ft ,10 in x 11 ft ,1 in"
},
{
"Type": "Bedroom",
"Width": "11 ft ,8 in",
"Length": "13 ft",
"Level": "Main level",
"Dimension": "13 ft x 11 ft ,8 in"
},
{
"Type": "Kitchen",
"Width": "8 ft ,6 in",
"Length": "7 ft ,2 in",
"Level": "Main level",
"Dimension": "7 ft ,2 in x 8 ft ,6 in"
},
{
"Type": "Dinette",
"Width": "8 ft ,7 in",
"Length": "11 ft ,2 in",
"Level": "Main level",
"Dimension": "11 ft ,2 in x 8 ft ,7 in"
},
{
"Type": "Bathroom",
"Width": "9 ft ,11 in",
"Length": "4 ft ,11 in",
"Level": "Main level",
"Dimension": "4 ft ,11 in x 9 ft ,11 in"
},
{
"Type": "Living room",
"Width": "11 ft ,2 in",
"Length": "13 ft ,9 in",
"Level": "Main level",
"Dimension": "13 ft ,9 in x 11 ft ,2 in"
},
{
"Type": "Bedroom",
"Width": "14 ft ,11 in",
"Length": "13 ft ,7 in",
"Level": "Main level",
"Dimension": "13 ft ,7 in x 14 ft ,11 in"
},
{
"Type": "Bedroom",
"Width": "8 ft ,11 in",
"Length": "11 ft ,11 in",
"Level": "Main level",
"Dimension": "11 ft ,11 in x 8 ft ,11 in"
},
{
"Type": "Kitchen",
"Width": "8 ft ,1 in",
"Length": "15 ft ,9 in",
"Level": "Main level",
"Dimension": "15 ft ,9 in x 8 ft ,1 in"
},
{
"Type": "Dinette",
"Width": "9 ft ,7 in",
"Length": "10 ft ,4 in",
"Level": "Main level",
"Dimension": "10 ft ,4 in x 9 ft ,7 in"
},
{
"Type": "Bathroom",
"Width": "5 ft ,1 in",
"Length": "8 ft ,1 in",
"Level": "Main level",
"Dimension": "8 ft ,1 in x 5 ft ,1 in"
}
],
"Water": "Municipal water",
"DisplayAsYears": "0",
"FireplacePresent": "",
"BuiltIn": "1915"
},
"Land": {
"SizeTotal": "2735 sqft",
"Sewer": "Municipal sewage system"
},
"Individual": [
{
"IndividualID": 1440073,
"Name": "Georges Bardagi",
"Organization": {
"OrganizationID": 69938,
"Name": "RE/MAX DU CARTIER G.B.",
"Logo": "https://cdn.realtor.ca/organization/en-CA/TS637305877570000000/lowres/1132738.jpg",
"Address": {
"AddressText": "100 - 1290 Bernard Ouest |Outremont, Quebec H2V1V9"
},
"Phones": [
{
"PhoneType": "Telephone",
"PhoneNumber": "271-9895",
"AreaCode": "514",
"PhoneTypeId": "1"
},
{
"PhoneType": "Fax",
"PhoneNumber": "271-8800",
"AreaCode": "514",
"PhoneTypeId": "4"
}
],
"Emails": [
{
"ContactId": "424697395"
}
],
"Websites": [
{
"Website": "http://www.bardagi.com",
"WebsiteTypeId": "1"
}
],
"OrganizationType": "Firm",
"Designation": "Real Estate Agency",
"HasEmail": true,
"PermitFreetextEmail": true,
"PermitShowListingLink": true,
"RelativeDetailsURL": "/office/firm/69938/remax-du-cartier-gb-100-1290-bernard-ouest-outremont-quebec-h2v1v9",
"PhotoLastupdate": "2020-07-17 1:02:37 PM"
},
"Phones": [
{
"PhoneType": "Telephone",
"PhoneNumber": "271-9895",
"AreaCode": "514",
"PhoneTypeId": "1"
}
],
"Websites": [
{
"Website": "http://www.bardagi.com",
"WebsiteTypeId": "1"
}
],
"Emails": [
{
"ContactId": "421658289"
}
],
"Photo": "https://cdn.realtor.ca/individual/TS636840535200000000/lowres/1077368.jpg",
"Position": "Certified Real Estate Broker",
"PermitFreetextEmail": true,
"FirstName": "Georges",
"LastName": "Bardagi",
"CorporationDisplayTypeId": "0",
"PermitShowListingLink": true,
"RelativeDetailsURL": "/agent/1440073/georges-bardagi-100---1290-bernard-ouest--outremont-quebec-h2v1v9",
"AgentPhotoLastUpdated": "2019-01-25 22:52:00"
}
],
"Property": {
"Price": "$2,795,000",
"Type": "Multi-family",
"Address": {
"AddressText": "5106-5116 Rue Fabre|Montréal (Le Plateau-Mont-Royal), Quebec H2J3W5",
"Longitude": "-73.583143",
"Latitude": "45.534695",
"Neighbourhood": "Le Plateau-Mont-Royal",
"PermitShowAddress": true
},
"Photo": [
{
"SequenceId": "1",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500570000/reb5/highres/9/15418919_1.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500570000/reb5/medres/9/15418919_1.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500570000/reb5/lowres/9/15418919_1.jpg",
"Description": "Frontage",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "2",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501200000/reb5/highres/9/15418919_2.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501200000/reb5/medres/9/15418919_2.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501200000/reb5/lowres/9/15418919_2.jpg",
"Description": "Frontage",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "3",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501600000/reb5/highres/9/15418919_3.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501600000/reb5/medres/9/15418919_3.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501600000/reb5/lowres/9/15418919_3.jpg",
"Description": "Living room",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "4",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501670000/reb5/highres/9/15418919_4.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501670000/reb5/medres/9/15418919_4.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501670000/reb5/lowres/9/15418919_4.jpg",
"Description": "Dinette",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "5",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501770000/reb5/highres/9/15418919_5.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501770000/reb5/medres/9/15418919_5.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501770000/reb5/lowres/9/15418919_5.jpg",
"Description": "Kitchen",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "6",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501870000/reb5/highres/9/15418919_6.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501870000/reb5/medres/9/15418919_6.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501870000/reb5/lowres/9/15418919_6.jpg",
"Description": "Bedroom",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "7",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501900000/reb5/highres/9/15418919_7.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501900000/reb5/medres/9/15418919_7.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501900000/reb5/lowres/9/15418919_7.jpg",
"Description": "Bedroom",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "8",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501970000/reb5/highres/9/15418919_8.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501970000/reb5/medres/9/15418919_8.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501970000/reb5/lowres/9/15418919_8.jpg",
"Description": "Bedroom",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "9",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202502070000/reb5/highres/9/15418919_9.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202502070000/reb5/medres/9/15418919_9.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202502070000/reb5/lowres/9/15418919_9.jpg",
"Description": "Living room",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "10",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500600000/reb5/highres/9/15418919_10.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500600000/reb5/medres/9/15418919_10.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500600000/reb5/lowres/9/15418919_10.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "11",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/highres/9/15418919_11.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/medres/9/15418919_11.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/lowres/9/15418919_11.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "12",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/highres/9/15418919_12.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/medres/9/15418919_12.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500700000/reb5/lowres/9/15418919_12.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "13",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500770000/reb5/highres/9/15418919_13.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500770000/reb5/medres/9/15418919_13.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500770000/reb5/lowres/9/15418919_13.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "14",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500870000/reb5/highres/9/15418919_14.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500870000/reb5/medres/9/15418919_14.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500870000/reb5/lowres/9/15418919_14.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "15",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500900000/reb5/highres/9/15418919_15.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500900000/reb5/medres/9/15418919_15.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500900000/reb5/lowres/9/15418919_15.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "16",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202500970000/reb5/highres/9/15418919_16.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202500970000/reb5/medres/9/15418919_16.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202500970000/reb5/lowres/9/15418919_16.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "17",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501000000/reb5/highres/9/15418919_17.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501000000/reb5/medres/9/15418919_17.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501000000/reb5/lowres/9/15418919_17.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "18",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501070000/reb5/highres/9/15418919_18.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501070000/reb5/medres/9/15418919_18.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501070000/reb5/lowres/9/15418919_18.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "19",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501100000/reb5/highres/9/15418919_19.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501100000/reb5/medres/9/15418919_19.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501100000/reb5/lowres/9/15418919_19.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "20",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501300000/reb5/highres/9/15418919_20.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501300000/reb5/medres/9/15418919_20.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501300000/reb5/lowres/9/15418919_20.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "21",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501370000/reb5/highres/9/15418919_21.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501370000/reb5/medres/9/15418919_21.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501370000/reb5/lowres/9/15418919_21.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "22",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501400000/reb5/highres/9/15418919_22.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501400000/reb5/medres/9/15418919_22.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501400000/reb5/lowres/9/15418919_22.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "23",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501470000/reb5/highres/9/15418919_23.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501470000/reb5/medres/9/15418919_23.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501470000/reb5/lowres/9/15418919_23.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
},
{
"SequenceId": "24",
"HighResPath": "https://cdn.realtor.ca/listing/TS637293202501570000/reb5/highres/9/15418919_24.jpg",
"MedResPath": "https://cdn.realtor.ca/listing/TS637293202501570000/reb5/medres/9/15418919_24.jpg",
"LowResPath": "https://cdn.realtor.ca/listing/TS637293202501570000/reb5/lowres/9/15418919_24.jpg",
"LastUpdated": "2020-07-02 8:57:30 PM"
}
],
"TypeId": "310",
"FarmType": "Other",
"ZoningType": "Residential",
"AmmenitiesNearBy": "CEGEP, Park, Schools, Public Transit, University",
"Features": "Sliding windows",
"TransactionType": "For sale"
},
"AlternateURL": {
"DetailsLink": "http://passerelle.centris.ca/redirect.aspx?CodeDest=DUCARTIERGB&NoMLS=15418919&Lang=E",
"VideoLink": "https://youtu.be/bLkwfQ9uomY"
},
"UploadedBy": "Quebec Professional Association of Real Estate Brokers",
"Business": {
"BathroomTotal": "1",
"Bedrooms": "3",
"SizeInterior": "5730 sqft",
"StoriesTotal": "3",
"Type": "Multi-Family",
"UnitTotal": "6"
}
}
Full dump of Charles response:
[
{
"status":"COMPLETE",
"method":"GET",
"protocolVersion":"HTTP/1.1",
"scheme":"https",
"host":"api37.realtor.ca",
"actualPort":443,
"path":"/Listing.svc/PropertyDetails",
"query":"ApplicationId=37&CultureId=1&HashCode=0&PreferedMeasurementUnit=1&PropertyId=22054689&ReferenceNumber=15418919",
"tunnel":false,
"keptAlive":true,
"webSocket":false,
"remoteAddress":"api37.realtor.ca/23.100.82.11",
"clientAddress":"198.18.72.253/198.18.72.253",
"times":{
"start":"2020-08-15T13:33:22.259-04:00",
"requestBegin":"2020-08-15T13:33:22.282-04:00",
"requestComplete":"2020-08-15T13:33:22.289-04:00",
"responseBegin":"2020-08-15T13:33:22.466-04:00",
"end":"2020-08-15T13:33:22.529-04:00"
},
"durations":{
},
"totalSize":"5571",
"ssl":{
"protocol":"TLSv1.2",
"cipherSuite":"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
},
"request":{
"sizes":{
"body":"0",
"headers":664
},
"mimeType":null,
"charset":null,
"contentEncoding":null,
"header":{
"firstLine":"GET /Listing.svc/PropertyDetails?ApplicationId=37&CultureId=1&HashCode=0&PreferedMeasurementUnit=1&PropertyId=22054689&ReferenceNumber=15418919 HTTP/1.1",
"headers":[
{
"name":"Host",
"value":"api37.realtor.ca"
},
{
"name":"Accept",
"value":"application/json"
},
{
"name":"X-CREA-App-ID",
"value":"37"
},
{
"name":"X-CREA-App-Token",
"value":"937ghfd342few2rnbvhgfhjug"
},
{
"name":"X-CREA-Max-Record",
"value":"500"
},
{
"name":"X-CREA-Device-Platform",
"value":"iPhone"
},
{
"name":"Accept-Language",
"value":"en;q=1"
},
{
"name":"X-CREA-Device-ID",
"value":"077406F7-811A-4F07-A4EB-BA58A17950D4"
},
{
"name":"User-Agent",
"value":"REALTOR/3.2.12 (iPhone; iOS 13.4.1; Scale/2.00)"
},
{
"name":"Accept-Encoding",
"value":"gzip, deflate, br"
},
{
"name":"Connection",
"value":"keep-alive"
},
{
"name":"X-CREA-Max-RecordPerPage",
"value":"200"
},
{
"name":"X-CREA-API-Version",
"value":"1.0"
},
{
"name":"X-CREA-App-Version",
"value":"3.2.12"
},
{
"name":"Cookie",
"value":"ASP.NET_SessionId=jxjtvae3ts5zoxiacwemchb1"
}
]
}
},
"response":{
"sizes":{
"body":"4479",
"headers":428
},
"mimeType":"application/json",
"charset":"utf-8",
"contentEncoding":"gzip",
"header":{
"firstLine":"HTTP/1.1 200 OK",
"headers":[
{
"name":"Cache-Control",
"value":"private"
},
{
"name":"Content-Length",
"value":"4479"
},
{
"name":"Content-Type",
"value":"application/json; charset=utf-8"
},
{
"name":"Content-Encoding",
"value":"gzip"
},
{
"name":"Vary",
"value":"Accept-Encoding"
},
{
"name":"Server",
"value":"Microsoft-IIS/10.0"
},
{
"name":"X-AspNet-Version",
"value":"4.0.30319"
},
{
"name":"Request-Context",
"value":"appId=cid-v1:bfc3c1b2-9e1b-437e-9616-7d1636843cb5"
},
{
"name":"Access-Control-Expose-Headers",
"value":"Request-Context"
},
{
"name":"X-Powered-By",
"value":"ASP.NET"
},
{
"name":"Arr-Disable-Session-Affinity",
"value":"true"
},
{
"name":"Date",
"value":"Sat, 15 Aug 2020 17:33:22 GMT"
}
]
},
"body":{
"encoding":"base64",
"encoded":"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"
}
}
}
]
When I try your demo locally:
const realtor = require('./realtorca');
let opts = {
ReferenceNumber: "W5254257",
};
opts = {
LongitudeMin: -79.6758985519409,
LongitudeMax: -79.6079635620117,
LatitudeMin: 43.57601549736786,
LatitudeMax: 43.602250137362276,
PriceMin: 100000,
PriceMax: 410000
};
console.log( realtor.buildUrl(opts) );
realtor.post(opts)
.then(data => {
console.log(data);
})
.catch(console.error);
… I get an HTTP 403.
Does this tool still work? It seems to depend on behaviour that I suspect the powers-that-be in Toronto RE want not to work.
Hello! Thanks for making this awesome tool.
It would be great to clarify the deploy target in the readme.
I'm attempting to write a fork using Axios for web browsers and am running into issues accessing the API.
Does anyone know if the realtor.ca endpoint only be accessed from localhost? Would I be able to use a cloud lambda function? (Calling server side in a web app)
It would be great to clarify this (can use only on localhost, server side, or web browser) in the readme.
Thanks again!
Hey all,
I saw that this repo wasn't being maintained, so I created an updated version in Python. Check here https://github.com/harry-s-grewal/realtorca. Much respect to Froren for the idea!
D:\nodecompile>node nodetest.js
https://www.realtor.ca/Residential/Map.aspx#CultureId=1&ApplicationId=1&Property
SearchTypeId=1&ReferenceNumber=N4615865
RequestError: Error: Parse Error: Invalid header value char
at new RequestError (D:\nodecompile\node_modules\request-promise-core\lib\er
rors.js:14:15)
at Request.plumbing.callback (D:\nodecompile\node_modules\request-promise-co
re\lib\plumbing.js:87:29)
at Request.RP$callback [as _callback] (D:\nodecompile\node_modules\request-p
romise-core\lib\plumbing.js:46:31)
at self.callback (D:\nodecompile\node_modules\request\request.js:185:22)
at Request.emit (events.js:311:20)
at Request.onRequestError (D:\nodecompile\node_modules\request\request.js:87
7:8)
at ClientRequest.emit (events.js:311:20)
at TLSSocket.socketOnData (_http_client.js:483:9)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
name: 'RequestError',
message: 'Error: Parse Error: Invalid header value char',
cause: Error: Parse Error: Invalid header value char
at TLSSocket.socketOnData (_http_client.js:476:22)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
bytesParsed: 979,
code: 'HPE_INVALID_HEADER_TOKEN',
reason: 'Invalid header value char',
rawPacket: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 43 61
63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 70 72 69 76 61 74 65 0d 0a 43 6f 6e 74 65
6e 74 2d 4c ... 1402 more bytes>
},
error: Error: Parse Error: Invalid header value char
at TLSSocket.socketOnData (_http_client.js:476:22)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
bytesParsed: 979,
code: 'HPE_INVALID_HEADER_TOKEN',
reason: 'Invalid header value char',
rawPacket: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 43 61
63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 70 72 69 76 61 74 65 0d 0a 43 6f 6e 74 65
6e 74 2d 4c ... 1402 more bytes>
},
options: {
method: 'POST',
uri: 'https://api2.realtor.ca/Listing.svc/PropertySearch_Post',
form: {
CultureId: 1,
ApplicationId: 1,
PropertySearchTypeId: 1,
ReferenceNumber: 'N4615865'
},
json: true,
callback: [Function: RP$callback],
transform: undefined,
simple: true,
resolveWithFullResponse: false,
transform2xxOnly: false
},
response: undefined
}
D:\nodecompile>node nodetest.js
https://www.realtor.ca/Residential/Map.aspx#LongitudeMin=-79.6758985519409&Longi
tudeMax=-79.6079635620117&LatitudeMin=43.57601549736786&LatitudeMax=43.602250137
362276&PriceMin=100000&PriceMax=425000
D:\nodecompile>node nodetest.js
https://www.realtor.ca/Residential/Map.aspx#LongitudeMin=-79.6758985519409&Longi
tudeMax=-79.6079635620117&LatitudeMin=43.57601549736786&LatitudeMax=43.602250137
362276
D:\nodecompile>node nodetest.js
https://www.realtor.ca/Residential/Map.aspx#CultureId=1&ApplicationId=1&Property
SearchTypeId=1&ReferenceNumber=N4615865
RequestError: Error: Parse Error: Invalid header value char
at new RequestError (D:\nodecompile\node_modules\request-promise-core\lib\er
rors.js:14:15)
at Request.plumbing.callback (D:\nodecompile\node_modules\request-promise-co
re\lib\plumbing.js:87:29)
at Request.RP$callback [as _callback] (D:\nodecompile\node_modules\request-p
romise-core\lib\plumbing.js:46:31)
at self.callback (D:\nodecompile\node_modules\request\request.js:185:22)
at Request.emit (events.js:311:20)
at Request.onRequestError (D:\nodecompile\node_modules\request\request.js:87
7:8)
at ClientRequest.emit (events.js:311:20)
at TLSSocket.socketOnData (_http_client.js:483:9)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
name: 'RequestError',
message: 'Error: Parse Error: Invalid header value char',
cause: Error: Parse Error: Invalid header value char
at TLSSocket.socketOnData (_http_client.js:476:22)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
bytesParsed: 979,
code: 'HPE_INVALID_HEADER_TOKEN',
reason: 'Invalid header value char',
rawPacket: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 43 61
63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 70 72 69 76 61 74 65 0d 0a 43 6f 6e 74 65
6e 74 2d 4c ... 1402 more bytes>
},
error: Error: Parse Error: Invalid header value char
at TLSSocket.socketOnData (_http_client.js:476:22)
at TLSSocket.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
bytesParsed: 979,
code: 'HPE_INVALID_HEADER_TOKEN',
reason: 'Invalid header value char',
rawPacket: <Buffer 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a 43 61
63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 70 72 69 76 61 74 65 0d 0a 43 6f 6e 74 65
6e 74 2d 4c ... 1402 more bytes>
},
options: {
method: 'POST',
uri: 'https://api2.realtor.ca/Listing.svc/PropertySearch_Post',
form: {
CultureId: 1,
ApplicationId: 1,
PropertySearchTypeId: 1,
ReferenceNumber: 'N4615865'
},
json: true,
callback: [Function: RP$callback],
transform: undefined,
simple: true,
resolveWithFullResponse: false,
transform2xxOnly: false
},
response: undefined
}
I was wondering if the node app could search for listings on realtor.ca by REALTOR name/MLS identifier? (sorry I had to open this as an issue, there was no way to contact you on github) :/
Trying the following POST using postman application to get the error below.
Response:
'''
{
"ErrorCode": {
"Id": 400,
"Description": "The request was invalid. - Invalid CultureID",
"LogId": "",
"ProductName": "! Push to PR-Stage - Realtor API (Maintenance)^30886 + UTMCode fix [Tuesday, April 27, 2021 12:36:06 PM]",
"Version": "1.0.7787.22690"
},
"Paging": {
"RecordsPerPage": 0,
"CurrentPage": 0,
"TotalRecords": 0,
"MaxRecords": 0,
"TotalPages": 0,
"RecordsShowing": 0,
"Pins": 0
},
"Results": [],
"Pins": []
}
'''
I have also tried "CultureID" instead of CultureId.
The following GET propertydetails works:
I tried to mimic what the JS code does here, but using POSTMAN/CURL.
curl --location --request POST 'https://api2.realtor.ca/Listing.svc/PropertySearch_Post' \
--header 'Content-Type: application/json' \
--form 'CultureID=3' \
--form 'ApplicationId=1' \
--form 'PropertySearchTypeId=1'
This is the response I get:
{
"ErrorCode": {
"Id": 400,
"Description": "The request was invalid. - Invalid CultureID",
"LogId": "",
"ProductName": "! Push to PR-Stage - Realtor API (Maintenance)^28212 [Monday, June 15, 2020 8:22:30 AM]",
"Version": "1.0.7471.15085"
},
"Paging": {
"RecordsPerPage": 0,
"CurrentPage": 0,
"TotalRecords": 0,
"MaxRecords": 0,
"TotalPages": 0,
"RecordsShowing": 0,
"Pins": 0
},
"Results": [],
"Pins": []
}
Is there an official doc for this stuff? Kind of looked everywhere and all I see are VB.NET and C# examples...
Sorry I had to open this issue as I'm not sure if this is still working properly.
I've followed your Usage guide but not sure what to expect in the response to the POST. I'm getting the below. Is this still working?
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_cancellationParent:
Promise {
_bitField: 1,
_fulfillmentHandler0: undefined,
_rejectionHandler0: { [Function: runBound] domain: [Domain] },
_promise0: [Circular],
_receiver0: undefined,
_cancellationParent:
Promise {
_bitField: 1,
_fulfillmentHandler0: [Function],
_rejectionHandler0: undefined,
_promise0: [Circular],
_receiver0: undefined,
_onCancelField: [Function],
_branchesRemainingToCancel: 1 },
_branchesRemainingToCancel: 1 } }
Hello,
I'm looking to get all the results for a specific province. For instance, if I try to get all the results for all of BC and set the latitude and longitude parameters, I'm going to end up getting some results from Alberta because some of Alberta falls within the boundary.
What is the best method for pulling results for a specific province such as British Columbia?
Any assistance would be appreciated.
If I try and use this from an application it wont work because the api has only realtor.ca set as its origin policy... Only works on command line
Any way we can get property details without having to reference both ReferenceNumber and PropertyId?
Perhaps just using the realtor.ca property url or MLS number?
I am getting the following error code:
[ErrorCode] => Array
(
[Id] => 400
[Description] => The request was invalid.
[LogId] =>
[ProductName] => ! Push to A1-PR - Realtor API^16118
[Version] => 1.0.6695.26582
)
import pkg from 'realtorca/realtorca.js';
const { buildUrl, optionsFromUrl } = pkg;
//This is appropriate instead of the following...
const realtor = require('realtorca');
//Also...
pkg.post(opts)
//instead of realtor.post(opts)
Hi, I used the same CURL request what I did this on 2019/2020 as it was worked those times, however, today I got this response.
{
"ErrorCode":
{
"Id":400,
"Description":"The request was invalid. - Request is not authorized",
"LogId":"",
"ProductName":"Realtor API 7 (Git) | 20220128.2 | 4054540f0e50864b57025e27f6781cffdc59242c | Friday, January 28, 2022 12:08:03 PM",
"Version":"1.0.8063.30858"},
}
Is there any authorization required for this?
Thanks in advance.
Good afternoon.
Problem.
The request worked stopped working from 18-07-2022 (the request has been running since 2017)
PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message 'Client error response [url] https://api37.realtor.ca/Listing.svc/PropertySearch [status code] 403 [reason phrase] Forbidden'
Request from POSTMAN
gives :
Access Denied
error 15
api37.realtor.ca
2022-07-22 10:12:42 UTC
(
https://api37.realtor.ca/_Incapsula_Resource?CWUDNSAI=23&xinfo=12-41705013-0%20NNNN%20RT%281658483914883%2018%29%20q%280%20-1%20-1%208%29%20r% 280%20-1%29%20B15%2814%2c0%2c0%29%20U5&incident_id=729000760091225407-206337989953524492&edet=15&cinfo=0e0000008a09&rpinfo=0&mth=POST
)
Getting the details doesn't seem to be available. Even making a call directly to the API returns this:
{ "ErrorCode": { "Id": 500, "Description": "Internal server error. Please contact [email protected] - ApplicationId of '' was fetched via '' and was not found within Application enumeration", "LogId": "dcb5f097-d9fb-4604-9c58-3ced29d56853", "ProductName": "! Push to PR-Stage - Realtor API (Maintenance)^29183 [Monday, September 14, 2020 1:17:36 PM]", "Version": "1.0.7562.23983" } }
Any idea?
Good work by the way!
Here's what returns when I try to access the API:
<html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta name="viewport" content="initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><script src="/eu-Leaftle-He-cut-taking-Wealt-now-and-To-ping-w" async></script></head><body style="margin:0px;height:100%"><iframe id="main-iframe" src="/_Incapsula_Resource?CWUDNSAI=22&xinfo=8-327499274-0%20NNNN%20RT%281607381083306%2051%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B15%2814%2c0%2c0%29%20U5&incident_id=305000300633682760-1104887500921440136&edet=15&cinfo=0e000000c609&rpinfo=0" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 305000300633682760-1104887500921440136</iframe></body></html>' } }
Here's my code:
const realtor = require("realtorca");
let opts = {
LongitudeMin: -79.44438,
LongitudeMax: -79.404,
LatitudeMin: 43.75135,
LatitudeMax: 43.78448,
PriceMax: 1500000,
ZoomLevel: 15,
BuildingTypeId: 1,
};
realtor
.post(opts)
.then((data) => {
console.log(data);
})
.catch((err) => {
console.log(err)
});
using this api https://api.realtor.ca/Listing.svc/PropertySearch_Post return not found
I am using localhost with chrome and with CORS enabled (same thing with firefox)
The API works for a while then it starts returning 403. Switch to Firefox, and it works for a while then it fails.
All in a sudden, it works again for a while and then it returns the error.
I have tried to clear the browser cache, and it does not help.
I have tried restarting the localhost and it does not help.
Nothing was changed in the logic, and it just simply stops working.
Please help.
static getListings(options, callback) {
realtor.post(options)
.then(data => {
debugger
callback(data)
})
.catch(err => {
debugger
console.log(err)
});
}
403 - "<html style="height:100%"><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta name="viewport" content="initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><script src="/1d1b2b9ff80a163b7c7e711b7da13c06" async></script><body style="margin:0px;height:100%"><iframe id="main-iframe" src="/_Incapsula_Resource?CWUDNSAI=22&xinfo=4-81430764-0%20PNNN%20RT%281593375407092%200%29%20q%280%20-1%20-1%20-1%29%20r%281%20-1%29%20B15%2814%2c0%2c0%29%20U6&incident_id=305000120123612946-279287541296857860&edet=15&cinfo=0e000000c60b&rpinfo=0" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 305000120123612946-279287541296857860</iframe>""
name: "StatusCodeError
Hi there,
I am just wondering how you got your api access to the CREA realtors api? I've sent them a few emails, but nothing has come back.
Thanks
I am wondering if there's a way to determine if a listing is still active from accessing the PropertyDetails endpoint?
I am able to view information from previously sold houses but there's nothing in the API response telling me that it's been sold. If I go to realtor.ca and try to view the listing I can see that the listing has been removed/sold.
Any advice?
Thanks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.