AI assistant for real estate recommendation in mobile app

NOVASOLUTIONS.TECHNOLOGY is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
AI assistant for real estate recommendation in mobile app
Complex
~1-2 weeks
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    761
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    649
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1071
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    884
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    466

AI Real Estate Assistant in Mobile Applications

Property search is a task with rich structured datasets (listings) but poorly formalized user requirements. "Quiet neighborhood, near metro, bright apartment"—these aren't filters, they're intentions. The AI assistant translates intentions into search parameters and explains why a property fits or doesn't.

Requirement Parsing via Function Calling

Users describe desired properties in free text. Function calling extracts structured criteria:

let extractFiltersFunction: [String: Any] = [
    "name": "extract_search_filters",
    "description": "Extract real estate search criteria from user message",
    "parameters": [
        "type": "object",
        "properties": [
            "property_type": ["type": "string", "enum": ["apartment", "house", "studio", "commercial"]],
            "min_rooms": ["type": "integer"],
            "max_rooms": ["type": "integer"],
            "min_area_sqm": ["type": "number"],
            "max_price": ["type": "number"],
            "metro_walk_minutes": ["type": "integer", "description": "Max walking time to metro"],
            "districts": ["type": "array", "items": ["type": "string"]],
            "floor_preference": ["type": "string", "enum": ["not_ground", "not_top", "high", "any"]],
            "must_haves": ["type": "array", "items": ["type": "string"],
                "description": "Required features: parking, balcony, new_building, quiet_street, etc."],
            "deal_type": ["type": "string", "enum": ["buy", "rent"]]
        ]
    ]
]

The dialog can be refined—"what counts as near metro?", "what price range?" This is multi-turn conversation, accumulating context.

Listing API Integration

After filter extraction, query the listings database (CIAN, Avito, Yandex.Real Estate, or proprietary).

class RealEstateSearchService {
    func search(filters: SearchFilters) async throws -> [Property] {
        var params = [URLQueryItem]()
        params.append(URLQueryItem(name: "type", value: filters.propertyType))
        if let maxPrice = filters.maxPrice {
            params.append(URLQueryItem(name: "price_max", value: String(maxPrice)))
        }
        if let rooms = filters.minRooms {
            params.append(URLQueryItem(name: "rooms_min", value: String(rooms)))
        }
        // ... remaining filters

        var url = URLComponents(string: baseURL + "/search")!
        url.queryItems = params

        let (data, _) = try await URLSession.shared.data(from: url.url!)
        return try JSONDecoder().decode([Property].self, from: data)
    }
}

Geo-filter "near metro" is implemented via station coordinates + MapKit.MKCoordinateRegion or CLLocation.distance(from:). Not by neighborhood name—more reliable.

AI Match Explanation

A list of listings without "why does this fit?" explanations is weak UX. Generate short AI explanations for each property (or top 3) explaining relevance.

func generateMatchExplanation(property: Property, userRequirements: String) async throws -> String {
    let prompt = """
    The user is looking for: \(userRequirements)

    Property details:
    - \(property.rooms) rooms, \(property.area) sqm
    - Floor: \(property.floor)/\(property.totalFloors)
    - Metro: \(property.metroStation), \(property.metroWalkMinutes) min walk
    - Price: \(property.price) \(property.currency)/month
    - Features: \(property.features.joined(separator: ", "))
    - District: \(property.district)

    In 2-3 sentences, explain why this property matches (or doesn't fully match) the requirements.
    Be specific about matches and mismatches. No marketing language.
    """

    return try await openAI.complete(prompt: prompt, maxTokens: 100)
}

100 tokens—hard limit. Explanations should be short and to the point.

Map with Clustering

Always show listings on a map. On iOS use MapKit with custom MKAnnotationView. For many points, use clustering via MKClusterAnnotation.

// Clustering setup
let annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "property")
annotationView.clusteringIdentifier = "properties"  // enables auto-clustering

// Custom cluster view with count
class PropertyClusterAnnotationView: MKAnnotationView {
    override func prepareForDisplay() {
        super.prepareForDisplay()
        if let cluster = annotation as? MKClusterAnnotation {
            let count = cluster.memberAnnotations.count
            image = drawClusterBadge(count: count)
        }
    }
}

On Android, use Google Maps SDK with ClusterManager from android-maps-utils library.

Saved Searches and Notifications

When users save search criteria, the system notifies them of new listings. On the server, a periodic job runs saved filters against new properties and sends push notifications.

// Android - handle push with new listing
class NewPropertyNotificationHandler : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        val propertyId = remoteMessage.data["property_id"] ?: return
        val notification = NotificationCompat.Builder(this, CHANNEL_NEW_PROPERTIES)
            .setContentTitle("New listing matching your search")
            .setContentText(remoteMessage.data["summary"])
            .setSmallIcon(R.drawable.ic_home)
            .setContentIntent(buildDeepLinkIntent(propertyId))
            .setAutoCancel(true)
            .build()

        NotificationManagerCompat.from(this).notify(propertyId.hashCode(), notification)
    }
}

Timeline Estimates

Basic search with AI filter parsing + results list—5–7 days. Full assistant with dialog, map, AI match explanations, saved searches, and push notifications—4–6 weeks.