External Listings
The ExternalListing object represents a competitor or off-system property listing tracked in EstatePrime. These are properties found on external portals or from other agencies — not managed directly in the system. This object is returned in JSON format, containing all available values for an external listing.
Object
The ExternalListing object represents an individual external listing record. Below are the fields included in an ExternalListing object:
Example
{
"id": 55,
"store_id": 2,
"source_id": 3,
"status": 1,
"external_url": "https://portal.example.com/listing/12345",
"availability": "sale",
"category": "residential",
"subcategory": "apartment",
"price": 145000,
"price_per_sqm": 1611.11,
"size": 90,
"floor": 3,
"levels": 1,
"rooms": 3,
"wcs": 1,
"bathrooms": 1,
"kitchens": 1,
"living_rooms": 1,
"year_built": 2003,
"description": "Bright apartment near the seafront with parking.",
"location": {
"address": "Nikis 22, Thessaloniki",
"area_level1": 5,
"area_level2": 12,
"area_level3": null,
"latitude": 40.6342,
"longitude": 22.9394
},
"contact_full_name": "George Papadopoulos",
"contact_email": "[email protected]",
"contact_phones": "+306912345678",
"created_by": 3,
"date_created": "2025-03-01 10:15:00",
"date_updated": "2025-03-15 14:00:00",
"tags": [6, 11],
"users": [3, 8],
"photos": [
"https://files.example.com/external-listings/55/photo1.jpg",
"https://files.example.com/external-listings/55/photo2.jpg"
]
}- id (int): The system id of the external listing.
- store_id (int): The ID of the office/store that tracks this listing.
- source_id (int, nullable): The ID of the source (e.g., portal) where the listing was found.
- status (int, nullable): The ID of the listing status. See Get statuses.
- external_url (string, nullable): The URL of the listing on the external portal.
- availability (string, nullable): The listing availability type. Possible values:
sale,rent,auction,shortterm. - category (string, nullable): The property category. Possible values:
residential,commercial,land,other. - subcategory (string, nullable): The property subcategory. Possible values:
apartment,maisonette,detached,villa,loft,residential_building,apartment_complex,farmhouse,houseboat,other_residential,office,store,warehouse,hotel,commercial_building,hall,industrial_space,craft_space,other_commercial,plot,parcel,island,parking,business,air,other. - price (int, nullable): The listing price.
- price_per_sqm (decimal, nullable): The price per square meter. Auto-calculated from
price / sizeif not set directly. - size (int, nullable): The property size in square meters.
- floor (float, nullable): The floor number of the property.
- levels (int, nullable): The number of levels/floors the property spans.
- rooms (int, nullable): The number of rooms/bedrooms.
- wcs (int, nullable): Number of WCs.
- bathrooms (int, nullable): Number of bathrooms.
- kitchens (int, nullable): Number of kitchens.
- living_rooms (int, nullable): Number of living rooms.
- year_built (int, nullable): The year the property was built.
- description (string, nullable): A description of the property.
- location (object): Location data. Contains the following fields:
- address (string, nullable): The street address.
- area_level1 (int, nullable): Region ID.
- area_level2 (int, nullable): Municipality/district ID.
- area_level3 (int, nullable): Neighbourhood ID.
- latitude (float, nullable): GPS latitude coordinate.
- longitude (float, nullable): GPS longitude coordinate.
- contact_full_name (string, nullable): The full name of the property owner/contact.
- contact_email (string, nullable): The email address of the property owner/contact.
- contact_phones (string, nullable): The phone number(s) of the property owner/contact.
- created_by (int): The user ID of the user who created the record.
- date_created (string): The date and time the record was created in
YYYY-MM-DD HH:MM:SSformat. - date_updated (string): The date and time the record was last updated in
YYYY-MM-DD HH:MM:SSformat. - tags (array of integers): A list of tag IDs associated with the listing.
- users (array of integers): A list of user IDs (agents) following this listing.
- photos (array of strings): A list of photo URLs for this listing.
Get external listings
/api/external-listings (GET)
Fetch a paginated list of external listings.
Request
- Method:
GET - Headers: Include authentication headers as described in the Authentication section.
- Body: JSON object with the following optional parameters:
page(int): The page number to fetch. Defaults to1.availability(string): Filter by availability type. Possible values:sale,rent,auction,shortterm.category(string): Filter by property category. Possible values:residential,commercial,land,other.status(int): Filter by status ID.store_id(int): Filter by office/store ID.source_id(int): Filter by source ID.price(object): Filter by price range. Must include:min(int): The minimum price, ornullfor no lower limit.max(int): The maximum price, ornullfor no upper limit.
size(object): Filter by size range. Must include:min(int): The minimum size in square meters, ornullfor no lower limit.max(int): The maximum size in square meters, ornullfor no upper limit.
area_level1(int): Filter by region ID.area_level2(int): Filter by municipality/district ID.date_created(object): Filter by creation date range. Must include:min(string): The minimum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no lower limit.max(string): The maximum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no upper limit.
date_updated(object): Filter by last update date range. Must include:min(string): The minimum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no lower limit.max(string): The maximum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no upper limit.
Example Body
{
"page": 1,
"availability": "sale",
"category": "residential",
"price": {
"min": 100000,
"max": 300000
},
"size": {
"min": 70,
"max": null
},
"area_level1": 5,
"date_created": {
"min": "2025-01-01 00:00:00",
"max": null
}
}Response
- 200 OK: Returns a JSON array of external listing objects.
Example Response
{
"status": 200,
"page": 1,
"total_pages": 6,
"results_per_page": 50,
"total_results": 271,
"data": [
{
"id": 55,
"store_id": 2,
"source_id": 3,
"status": 1,
"system_id": null,
"external_url": "https://portal.example.com/listing/12345",
"availability": "sale",
"category": "residential",
"subcategory": "apartment",
"price": 145000,
"price_per_sqm": 1611.11,
"size": 90,
"rooms": 3,
"year_built": 2003,
"address": "Nikis 22, Thessaloniki",
"area_level1": 5,
"area_level2": 12,
"area_level3": null,
"latitude": 40.6342,
"longitude": 22.9394,
"contact_full_name": "George Papadopoulos",
"created_by": 3,
"date_created": "2025-03-01 10:15:00",
"date_updated": "2025-03-15 14:00:00",
"tags": [6, 11],
"users": [3, 8],
"photos": [
"https://files.example.com/external-listings/55/photo1.jpg"
]
}
//Rest of the data...
]
}Note: The list response returns a trimmed set of fields. Location fields (
address,area_level1,area_level2,area_level3,latitude,longitude) are returned as flat fields rather than nested inside alocationobject. Use the single endpoint for the full structured response.
Get single external listing
/api/external-listings/{id} (GET)
Get a single external listing by its id.
Request
- Method:
GET - Headers: Include authentication headers.
- Path Params: The external listing id to be fetched.
Example Response
{
"status": 200,
"data": {
"id": 55,
"store_id": 2,
"source_id": 3,
"status": 1,
"external_url": "https://portal.example.com/listing/12345",
"availability": "sale",
"category": "residential",
"subcategory": "apartment",
"price": 145000,
"price_per_sqm": 1611.11,
"size": 90,
"floor": 3,
"levels": 1,
"rooms": 3,
"wcs": 1,
"bathrooms": 1,
"kitchens": 1,
"living_rooms": 1,
"year_built": 2003,
"description": "Bright apartment near the seafront with parking.",
"location": {
"address": "Nikis 22, Thessaloniki",
"area_level1": 5,
"area_level2": 12,
"area_level3": null,
"latitude": 40.6342,
"longitude": 22.9394
},
"contact_full_name": "George Papadopoulos",
"contact_email": "[email protected]",
"contact_phones": "+306912345678",
"created_by": 3,
"date_created": "2025-03-01 10:15:00",
"date_updated": "2025-03-15 14:00:00",
"tags": [6, 11],
"users": [3, 8],
"photos": [
"https://files.example.com/external-listings/55/photo1.jpg",
"https://files.example.com/external-listings/55/photo2.jpg"
]
}
}Response
- 200 OK: Returns the full JSON object of the external listing.
Get external listing statuses
/api/external-listings/statuses (GET)
Fetch the available external listing statuses.
Request
- Method:
GET - Headers: Include authentication headers.
Response
- 200 OK: Returns a JSON array of available statuses.
Example Response
{
"status": 200,
"data": [
{
"id": 1,
"name": "New"
},
{
"id": 2,
"name": "Contacted"
},
{
"id": 3,
"name": "Viewing Scheduled"
}
]
}Get external listing sources
/api/external-listings/sources (GET)
Fetch the available external listing sources.
Request
- Method:
GET - Headers: Include authentication headers.
Response
- 200 OK: Returns a JSON array of available sources.
Example Response
{
"status": 200,
"data": [
{
"id": 1,
"name": "Spitogatos"
},
{
"id": 2,
"name": "XE.gr"
},
{
"id": 3,
"name": "Manual Entry"
}
]
}Get external listing tags
/api/external-listings/tags (GET)
Fetch the available external listing tags.
Request
- Method:
GET - Headers: Include authentication headers.
Response
- 200 OK: Returns a JSON array of available tags.
Example Response
{
"status": 200,
"data": [
{
"id": 6,
"name": "Price Drop"
},
{
"id": 11,
"name": "High Potential"
}
]
}Get external listing custom fields
/api/external-listings/custom-fields (GET)
Fetch the available custom fields for external listings.
Request
- Method:
GET - Headers: Include authentication headers.
Response
- 200 OK: Returns a JSON array of available custom fields for external listings.
Example Response
{
"status": 200,
"data": [
{
"id": 1,
"name": "Agent Notes",
"type": "textarea"
},
{
"id": 2,
"name": "Lead Quality",
"type": "select",
"options": [
{
"id": 1,
"name": "Hot"
},
{
"id": 2,
"name": "Warm"
},
{
"id": 3,
"name": "Cold"
}
]
}
]
}Available custom field types
- text: Text up to 255 characters.
- textarea: Text up to 2500 characters.
- wysiwyg: Text with HTML format.
- number: Integer or decimal.
- formatted_number: Integer or decimal that is formatted. E.g.
1,000,000.25. - select: Single select with options.
- select_multi: Multiple select with options.
- checkbox: Boolean.
- file: Single file. (As a URL)
- file_multi: Array of multiple files. (As URLs)
- image: Single image. (As a URL)
- image_multi: Array of multiple images. (As URLs)
- address: Address. (E.g.
Bellariastraße 6, 1010 Wien, Austria) - url: URL.
- date: Date in
YYYY-MM-DDformat. (E.g.2025-10-18) - datetime: Datetime in
YYYY-MM-DD HH:MM:SSformat. (E.g.2025-10-18 18:24:10) - currency: Integer or decimal formatted as a currency. E.g.
1,000,000.25€. - user: Application
user_id. - user_multi: An array of application
user_idvalues. - contact: Another contact's id.
- contact_multi: An array of multiple contact ids.

