- My Data Dojo
- Posts
- How Zomato Engineers Personalized Food Discovery at Scale
How Zomato Engineers Personalized Food Discovery at Scale
Feeding Cravings with Code

Table of Contents
When you're hungry and scroll through Zomato's home screen, the restaurants you see aren't random. They’re the result of years of engineering design and data science optimization. Behind each swipe and click lies a battle-tested recommendation system optimized to solve a very real problem: helping millions of users quickly find what they want to eat.
This blog dives into how Zomato's tech stack and data science engine turn food discovery into a scalable, profitable, and delightful experience.
The Business Problem: Ordering Should Be Instant
Goal: Get users to convert — faster and more often.
When Zomato realized that users were browsing too long without ordering, they framed a core hypothesis: the quicker we can help a user discover what they love, the higher our conversions, repeat usage, and GMV.
This isn't just a UI issue — it's a data science challenge. Preferences vary by cuisine, mood, location, time of day, and peer influence. What's popular for breakfast in Bangalore is irrelevant for dinner in Delhi.
So how do you make each experience feel like a personal food concierge?
A Multi-Layered Solution
Zomato engineers architected a multi-objective recommendation system, optimizing for:
Relevance (will the user like it?)
Conversion (will the user order it?)
Revenue (is this a high-value order?)
Let’s explore how they pulled it off.
1. Graph-Based Collaborative Filtering
Early models relied on graph embeddings of a bipartite user-restaurant interaction graph. Techniques like GraphSAGE were trialed but scaled poorly. Eventually, Zomato adopted:
Cleora for fast graph sketching
EMDE to compress user-restaurant similarity into dense representations
These embeddings fuel the first layer of personalization: recommending restaurants similar to what similar users ordered.
Impact:
Boosted recall in top-K recommendation by double digits.
Enabled cold-start user onboarding.
Zomato didn't stop at collaborative filtering. They turned menus into structured data using:
AWS Textract + NLP models to extract dish names and categories
Custom classifiers (including finetuned-BERT & Sagemaker) to identify cuisine and special items
This allowed Zomato to surface restaurants not just based on behavior, but also dish-level intent (e.g. "Chicken Shumai near me").
Impact: Enabled dish-level search and improved CTR in search funnels.
3. Contextual + Real-Time Personalization
What works at 11AM won’t work at 11PM. Zomato injected real-time features using:
Kafka + Flink for session data streaming
Redis Feature Store for real-time access
Context vectors like time-of-day, location, and user mood
A contextual Multi-Armed Bandit model was deployed to optimize not just click likelihood but Order-Through-Rate (OTR) and Gross Merchandise Value (GMV).
Impact: Improved GMV/session by ₹3 and AOV by ₹6 within weeks.
4. Supervised Learning-to-Rank Models
The final reranking stage is handled by a LambdaMART model, trained with pairwise loss:
Inputs: Collaborative + content + context features
Labels: Real user click/order logs
Metric: Accuracy@K, MRR
Deployed behind a Go-based ML Gateway, this model determines the final sort order users see.
Impact: +14% gain in relevance metrics vs. baseline rankers
Infrastructure: Fast, Reliable, Scalable
Zomato’s ML platform includes:
MLflow for experiment tracking
Kubernetes + SageMaker for deployment
Airflow for orchestration
Redis + DynamoDB for hybrid feature storage
Latency budgets are tight: all recommendations must be computed within ~100ms, at a peak of 100K+ RPS.
Impact: Seamless experience on app, even during peak load (e.g. NYE)
Closing the Loop: Metrics-Driven Deployment
Each model is evaluated on:
Offline: MRR, Accuracy@K, NDCG
Online: CTR, OTR, GMV/order
Only if a model beats baselines on both fronts does it see production traffic — usually through phased rollouts and A/B testing.
Impact: Shift in user behavior — more orders now start from personalized feed than search.
Final Thoughts
Zomato’s recommendation system isn’t just about suggesting good food. It’s about solving a deep business problem — making food discovery effortless, fast, and relevant, at scale.
And it works. Every byte of data, every millisecond of latency, every ranking tweak — it all leads to one thing: users saying, “This is exactly what I wanted.”
As engineers, that’s the most delicious result we can ask for.
Curious to dive deeper? Let’s decode the models, metrics, and trade-offs behind other real-time personalization engines next.
Follow for more tech deep dives that taste like success.