This document outlines the specifications for supplying listings to Housing Anywhere, so they can be published on the housinganywhere.com website. This format follows the JSON specification, so only valid JSON data can be accepted.
- A HousingAnywhere partner has several listings they want to publish on the HousingAnywhere website.
- They create a feed in the specified format with all the listings they want to share. The partner must supply a public url where the feed is exposed in JSON format.
- The given URL will be added to the HousingAnywhere importer service.
- HousingAnywhere's importer service will pull the feed every day. It will then process it accordingly:
- Create: For each new unique listing for this partner (based on the “ListingReference”), a new listing will be published.
- Update: If a listing with the same “ListingReference” is found, the existing listing will be updated.
- Delete: If an existing listing is no longer found it will be de-listed from the HousingAnywhere website.
We support two methods to indicate when a listing is available.
If the listing has a date when becomes available or just an interval the best option is to use startDate and optionally endDate.
If the listing has multiple periods when it is unavailable, it is best to use blockedPeriods
field. The BlockedPeriod structure has a startDate and an endDate. The date format must be YYYY-MM-DD
.
The preferred way is to use the blockedPeriods
field.
E.g.
{
"listingReference": "123456789",
...
"blockedPeriods": [
{
"startDate": "2019-01-01",
"endDate": "2019-01-31"
},
{
"startDate": "2019-05-01",
"endDate": "2019-07-28"
}
],
...
}
Note: If blockedPeriods
field is present, startDate and endDate are ignored.
We support two price variations, flat and monthly. The flat price remains unchanged throughout the listing lifecycle. Monthly prices are variable per month, and can be set as follows,
List [MonthPrice Structure]
MonthPrice is composed of “price”, in cents (int) and “month”, denoting the number of the month (string).
E.g.
[
{
`"month": "1",
`"Price": 80000
},
{
`"month": "2",
`"price": 80000
},
{
`"month": "3",
`"price": 90000
},
{
`"month": "4",
`"price": 90000
},
{
`"month": "5",
`"price": 90000
},
{
`"month": "6",
`"price": 80000
},
{
`"month": "7",
`"price": 70000
},
{
`"month": "8",
`"price": 60000
},
{
`"month": "9",
`"price": 60000
},
{
`"month": "10",
`"price": 60000
},
{
`"month": "11",
`"price": 50000
},
{
`"month": "12",
`"price": 50000
}
]
Note - If the monthly price structure is chosen, make sure to provide values for all 12 months.
All other costs, except monthly rent, are presented as a mapping of cost objects.
The cost structure is to be built like
{
// required cost types
"costType": {
`"value": Integer,
`"paybleBy": String,
`"payableAt": String,
`"refundable": Boolean,
`"isEstimated": Boolean,
`"required": Boolean
},
"costType": {
`"value": Integer,
`"paybleBy": String,
`"payableAt": String,
`"refundable": Boolean,
`"isEstimated": Boolean,
`"required": Boolean
}
...
...
// optional costs if any
}
Please note, some cost types are required i.e. either the tenant is enforced to pay these or they are included in the rent. Even if the cost is included in the rent, the cost object must be declared stating payableBy
= included_in_rent
. The default value for required cost types is not-applicable
. This means that for the cases when it is not set in the structure, the cost is omitted.
Costs which can be made optional for the tenant depending on the service they use.
Example Use Case: There could be a towel deposit that the advertiser can choose to collect or not. This is marked by the Required
field in the Cost Object.
See the feed example below for the Costs element.
*The required fields are enforced only when the cost structure is instantiated. If the partner chooses not to present the cost, the entire cost structure can be omitted.
These are all the facilities and the possible values for each facility currently supported.
- If a facility is not listed in the feed it will be set to the default.
- The default for each facility is null which means “Unknown” (will not be shown on the User Interface).
- Even though most of these fields are not required, it is critical to set them since it significantly improves the listing completeness score, and leads to higher conversions and more bookings.
The payout methods information is optional. If no listing has any payout information, the payout information on HousingAnywhere will not be changed. If at least one listing has payout information, the import process will synchronize HousingAnywhre payout information with the information from the feed.
Any payout method present in the feed will be updated on HousingAnywher to reflect the feed information.
If only some listings have payout information, those will be set up with respective payout methods. For the listings without payout information, the import will remove any explicit association on HousingAnywhere, so those listings will be associated with the default payout method.
This is an example feed result with 1 room in Copenhagen.
[{
"type": "house",
"kind": "entire_place",
"address": "Klerkegade 25H, 1308 Copenhagen Municipality, København K, DK",
"pricingType": "monthly",
"monthlyPricing":{
{
"month": "1",
"price": 80000
},
{
"month": "2",
"price": 80000
},
{
"month": "3",
"price": 90000
},
{
"month": "4",
"price": 90000
},
{
"month": "5",
"price": 90000
},
{
"month": "6",
"price": 80000
},
{
"month": "7",
"price": 70000
},
{
"month": "8",
"price": 60000
},
{
"month": "9",
"price": 60000
},
{
"month": "10",
"price": 60000
},
{
"month": "11",
"price": 50000
},
{
"month": "12",
"price": 50000
}
},
"blockedPeriods": [
{
"startDate": "2019-01-01",
"endDate": "2019-01-31"
},
{
"startDate": "2019-05-01",
"endDate": "2019-07-28"
}
],
"minimumStayMonths": 3,
"maximumStayMonths": 12,
"moveInWindow": 20,
"currencyCode": "DKK",
"alias": "the-corner-room",
"description": "This is an example room description, should be 50 characters atleast.",
"facilities": {
"ac": false,
"registrationPossible": true,
"tenantStatus": "student",
"bedroomCount": 3,
"tv": false,
"bed": false,
"desk": true,
"bedroomLock": true,
"wifi": true,
"dryer": false,
"closet": false,
"garden": "shared",
"toilet": "shared",
"balconyTerrace": "private",
"heating": "central",
"kitchen": "shared",
"parking": "shared",
"basement": "shared_w_both",
"bathroom": "shared_w_both",
"flooring": "wood",
"internet": true,
"dishwasher": true,
"playMusic": "yes",
"kitchenware": "shared",
"livingRoom": "shared",
"animalAllowed": "discussable",
"cleaningCommon": true,
"livingRoomFurnished": true,
"bedroomFurnished": true,
"smokingAllowed": "outsideOnly",
"washingMachine": true,
"allergyFriendly": false,
"cleaningPrivate": false,
"wheelchairAccessible": true,
"bedroomSize": 25,
"totalSize": 70
},
"images": [
"https://cdn.example.com/photos/1.jpg",
"https://cdn.example.com/photos/2.jpg",
"https://cdn.example.com/photos/3.jpg"
],
"lastUpdated": "2015-02-03 18:08:23",
"listingReference": "ABCD1234XYZ",
"listingUrl": "https://example.com/rooms/roomid",
"costs": {
"security-deposit": {
"value": 80000,
"payableBy": "tenant",
"payableAt": "move-in",
"refundable": true,
"isEstimated": false
},
"administration-fee": {
"value": 65000,
"payableBy": "tenant",
"payableAt": "move-in",
"refundable": false,
"isEstimated": false
},
"electricity-bill": {
"value": 80000,
"payableBy": "tenant",
"payableAt": "monthly",
"refundable": false,
"isEstimated": false
},
"gas-bill": {
"value": 50000,
"payableBy": "tenant",
"payableAt": "bi-weekly",
"refundable": false,
"isEstimated": false
},
"internet-bill": {
"value": 100000,
"payableBy": "tenant",
"payableAt": "monthly",
"refundable": false,
"isEstimated": false
},
"water-bill": {
"value": 80000,
"payableBy": "tenant",
"payableAt": "monthly",
"refundable": false,
"isEstimated": false
},
"other-additional-costs": {
"payableBy": "not-applicable"
},
"towel-deposit": {
"value": 8000,
"payableBy": "tenant",
"payableAt": "move-in",
"refundable": true,
"required": false,
"isEstimated": false
}
},
"minAge": 23,
"maxAge": 45,
"payoutMethodName": "My Company Payout",
}]
Contact If you somehow found this documentation before contacting us, but are interested in building an integration, please contact us through the form at: https://housinganywhere.com/integrations