Search verified real estate listings in Batumi and Tbilisi (apartments, houses, commercial).
<hints>
- Returns compact objects with price_usd, price_sqm_usd, area_sqm, rooms, renovation_status, construction_stage, seller_type, heating_type, gas_status, is_heritage_zone, cadastral_code, year_built, developer_name, sea_view, distance_to_sea_m, has_gas, pets_allowed, no_summer_increase, address, latitude, longitude, photos, source_url, and canonical_url.
- Geo search: Use bbox='min_lng,min_lat,max_lng,max_lat' or [min_lng, min_lat, max_lng, max_lat] to search within a map rectangle.
- Batumi districts: 'Old Batumi', 'Rustaveli', 'Khimshiashvili' (New Boulevard), 'Bagrationi', 'Javakhishvili', 'Agmashenebeli', 'Airport', 'Tamar', 'Makhinjauri', 'Gonio', 'Kvariati', 'Chakvi', 'Kobuleti'.
- Tbilisi districts: 'Vake', 'Saburtalo', 'Vera', 'Mtatsminda', 'Chugureti' (Marjanishvili), 'Didube', 'Avlabari', 'Ortachala', 'Isani', 'Samgori', 'Gldani', 'Didi Dighomi', 'Old Tbilisi'.
- Use sort='cheapest' or 'cheapest_sqm' to find the best deals without fetching multiple pages.
- Use fields=['id','title','price_usd','price_sqm_usd','area_sqm','district','canonical_url'] to minimize token usage.
- Filter by source channel/portal/group using sources=['facebook marketplace'], ['ss.ge', 'myhome.ge'], ['@batumiarendachat'], or Facebook group URLs ['https://www.facebook.com/groups/278563704483455/']. Unmonitored sources return an error.
</hints>
Parametersbboxcitypagesortlimitqueryroomsfieldshas_gassourcescurrencydistrict+30 more
Aggregate real estate market statistics (count, average & median price USD, average & median price per sqm USD, min/max price, average area) grouped by district, renovation_status, construction_stage, rooms, seller_type, or complex.
<hints>
- Ideal for market analytics: comparing prices across city districts, or comparing 'black_frame' vs 'white_frame' vs 'renovated' vs 'off_plan' (katlavan).
- Supports all search_real_estate filters (city, deal_type, district, renovation_status, construction_stage, rooms, has_gas, etc.) to slice the market before grouping.
</hints>
Parameterscityroomshas_gasdistrictgroup_bydeal_typeseller_typeexclude_orbiproperty_typerenovation_statusconstruction_stage
Get complete specifications, full description, seller contact info (phone, contacts, source_url), photo URLs, rooftop coordinates, and complex affiliation for one or up to 15 properties in a single call.
Parametersproperty_idproperty_ids
Search residential developments and new building projects with developer details, delivery status, coordinates, distance to sea, and gas availability.
Parameterscitylimitqueryfieldshas_gasdistrictdelivery_yearmax_distance_to_sea
Get detailed profile of one or up to 15 residential complexes including developer name, delivery year, address, rooftop coordinates, and counts & sample active properties currently for sale and rent.
Parameterscomplex_idcomplex_ids
Search deduplicated secondhand marketplace goods (electronics, monitors, routers, keyboards, heaters, furniture, vehicles, household items) aggregated across Telegram channels in Batumi and Tbilisi.
<hints>
- Powered by multilingual synonym expansion + semantic vector search: English queries (e.g. '4K monitor', 'WiFi router', 'electric heater', 'mechanical keyboard') automatically match Russian, English, and Georgian ads.
- Avoid overly restrictive 'category' values unless needed; keyword query alone searches across all categories with hybrid semantic ranking.
- Use sort='cheapest' to find lowest-priced items.
</hints>
Parameterscitypagesortlimitqueryfieldsintentcategorycurrencymax_pricemin_price
Get details for one or up to 15 secondhand classified items including full description, photo gallery, seller username, and original Telegram message link.
Parametersitem_iditem_ids
Execute a JavaScript snippet inside an isolated QuickJS WASM sandbox with direct synchronous/async access to the Hotyata SDK (`sdk`).
Use this "MCP Code Mode" tool whenever you need to run multi-step queries, compare multiple categories/districts/stages, join complexes with properties, filter or aggregate results, and return only a compact final summary in a single round-trip.
Available global `sdk` methods inside your script (can be called with or without `await`):
- `sdk.searchProperties(params)` -> `{ total, page, limit, properties: [...] }`
- `sdk.getPropertyStats(params)` -> `{ city, deal_type, group_by, total_matching_listings, groups: [...] }`
- `sdk.getProperty(idOrArrayOfIds)` -> property details object or `{ properties: [...] }`
- `sdk.searchComplexes(params)` -> `{ total, page, limit, complexes: [...] }`
- `sdk.getComplex(idOrArrayOfIds)` -> complex details object or `{ complexes: [...] }`
- `sdk.searchItems(params)` -> `{ total, page, limit, items: [...] }`
- `sdk.getItem(idOrArrayOfIds)` -> item details object or `{ items: [...] }`
<examples>
// Example 1: Compare renovation status & off-plan (katlavan) sale dynamics in Batumi
const byRenovation = sdk.getPropertyStats({ city: "batumi", deal_type: "sale", group_by: "renovation_status" });
const byStage = sdk.getPropertyStats({ city: "batumi", deal_type: "sale", group_by: "construction_stage" });
return { byRenovation: byRenovation.groups, byStage: byStage.groups };
// Example 2: Multi-search classifieds and return top 3 cheapest per item type
const queries = ["4K monitor", "router", "electric heater", "mechanical keyboard"];
return queries.map(q => {
const res = sdk.searchItems({ query: q, sort: "cheapest", limit: 3 });
return { query: q, total: res.total, cheapest: res.items.map(i => ({ id: i.id, title: i.title, price_gel: i.price_gel, price_usd: i.price_usd, url: i.canonical_url })) };
});
</examples>
<hints>
- Write a function body ending with a `return ...;` statement.
- Maximum 15 SDK calls p
Parameterscoderequired
Report an issue with data accuracy, stale or off-market listings, incorrect coordinates, spam, or tool usability limitations. AI agents should call this when finding inaccuracies or when human users report off-market listings.
Parametersentity_identity_typerequiredexplanationrequiredagent_clientissue_categoryrequiredsource_context