Developers · API v1
The market data behind estate.sh.
The public API exposes Georgia's live property market as read only JSON. Requests work without authentication.
- Base URL
- https://api.estate.sh/v1
- Auth
- None
- Format
- JSON
- Scope
- Read only
01 · Endpoints
7 GET operations, one workhorse.
Search starts on /properties. Supporting resources provide the context needed to navigate and interpret the market.
- GET
/v1/propertiesList current properties - GET
/v1/properties/{id}Get one property by estate.sh ID - GET
/v1/optionsGet location filter options - GET
/v1/suggestionsGet location suggestions - GET
/v1/ratesGet GEL-based exchange rates - GET
/v1/marketsGet the versioned international market catalog - GET
/v1/prices/{city}Get district price intelligence for a city
02 · Filtering & sorting
Narrow the search, then order it.
Stack filters on /properties, then choose one sort value to settle the order.
- Paging
pagelimitcursor- Search
qcitydistrictneighborhood- Property
dealproperty_kindfurnishedsource- Price
min_pricemax_pricemin_ppmmax_ppm- Area
min_areamax_area- Map
mapbboxmap_latmap_lnghas_coordinates- Quality
indexableinclude_flagged- Sort
sort=updated_descsort=best_dealsort=price_ascsort=price_descsort=area_desc
03 · Example
A request and what comes back.
One search against /properties and the shape of its response.
$ curl https://api.estate.sh/v1/properties\
?city=Tbilisi&deal=buy&limit=1
{
"page": 1,
"limit": 1,
"total": null,
"has_more": true,
"next_cursor": "{\"sort\":\"updated_desc\",\"id\":42}",
"items": [
{
"id": 42,
"source": "example",
"source_id": "abc123",
"source_listing_url": "https://source.example/listing/abc123",
"city": "Tbilisi",
"price_gel": 260000,
"area": 86,
"updated_at": "2026-07-12T09:30:00Z"
}
]
}More requests to copy
- 01
GET /v1/properties?limit=20 - 02
GET /v1/properties?city=Tbilisi&deal=buy&property_kind=apartment - 03
GET /v1/properties?deal=rent&sort=updated_desc - 04
GET /v1/properties/{id} - 05
GET /v1/rates - 06
GET /v1/options?city=Tbilisi - 07
GET /v1/suggestions?q=Batumi - 08
GET /v1/markets?locale=en - 09
GET /v1/prices/Tbilisi
For property detail, replace {id} with items[0].id from a current property search.
04 · Working with the data
Aggregated data is uneven on purpose.
Each public source provides a different level of detail. The API returns the values observed in each source.
Three things to know before you parse.
The contract keeps source coverage, currency, internal data, errors, and versioning explicit.
- 01
Source fields vary
Each source publishes a different subset of fields. The response includes the values available from that source. Where a property can be placed, location_accuracy and location_radius_meters describe the precision.
- 02
Currency and the public boundary
Values are stored in GEL, with source USD figures alongside them where given. A strict response allowlist exposes fields that are safe to reuse while private source data stays inside estate.sh.
- 03
Errors and versioning
The API uses standard HTTP status codes and JSON response bodies. The contract stays stable within v1, while breaking changes move to a new versioned path. The machine readable schema lives at /openapi.json.
05 · Access & fair use
Open at launch, kept that way by a few rules.
The API is unauthenticated so it is easy to try. Keeping it open depends on attribution, reasonable use, and respect for rate limits.
- Attribution
- Credit estate.sh and preserve each source_listing_url when displaying a property.
- Use
- Personal and light commercial use is available. Contact us before bulk extraction or resale.
- Limits
- Responses may be cached and rate-limited. Back off on a 429 and retry.
Need more?
Higher limits and custom feeds start with a clear use case.
Send the expected volume and attribution plan. We reply within a few working days.