· Engineering · 6 min read
Neo4j ile Graph Database Projeleri: MomYachting'ten Otomatik Lead Generation'a
Neo4j graph database ile geliştirdiğim müşteri projeleri: AI chatbot'tan otomatik lead generation'a, emlak veri madenciliğinden semantik memory sistemlerine kadar kapsamlı bir portföy.

Neo4j, ilişkisel verileri modellemek için geleneksel SQL veritabanlarından çok daha doğal bir yaklaşım sunuyor. Son iki yılda birden fazla müşteri projesinde Neo4j’i merkeze alarak çözümler geliştirdim — yat turizmi platformlarından emlak veri madenciliğine, AI agent memory sistemlerinden otomatik lead generation’a kadar geniş bir yelpazede.
Bu yazıda Neo4j ile hayata geçirdiğim projeleri ve her birinde öğrendiğim dersleri paylaşıyorum.
Neo4j graph database ile bağlantılı veri dünyası — düğümler ve ilişkiler
1. MomYachting Bodrum — AI Destekli Yat Turizm Platformu
Müşteri: MomYachting Bodrum Süre: 2025-2026 Teknolojiler: LangChain, LangGraph, Neo4j Aura, Groq LLM, Voyage AI, Text-to-Cypher
Proje Hakkında
Bodrum’da lüks yat turları ve charter hizmetleri sunan MomYachting için kapsamlı bir dijital platform geliştirdim. Projenin en kritik bileşeni, Neo4j tabanlı AI chatbot’u.
Neo4j Veri Modeli
Platformun kalbinde Neo4j graph database var:
// Veri modeli şeması
(:Location) -[:PART_OF]-> (:Location) // 195 lokasyon düğümü
(:Airport) -[:DEPARTS_FROM|ARRIVES_AT]-> (:Flight) // 6,381 uçuş ilişkisi
(:Route) -[:USES_SERVICE]-> (:Service) // Rotalar ve hizmetler
(:Yacht) -[:HAS_IMAGE]-> (:Image) // 347 görsel, 859 ilişki
Text-to-Cypher ile Doğal Dil Sorgulama
En etkileyici özellik, kullanıcıların doğal dilde sorduğu soruları otomatik olarak Cypher sorgularına dönüştürmesi:
Kullanıcı: "Bu hafta sonu müsait olan 10 metre üzeri yatlar hangileri?"
→ Cypher: MATCH (y:Yacht) WHERE y.length > 10 AND y.available = true RETURN y
→ Yanıt: "8 adet yatınız bu hafta sonu müsait..."
Bu sistem şu şekilde çalışıyor:
- LangChain Chain → Kullanıcı sorgusunu anlama
- Text-to-Cypher → Doğal dilden Cypher sorgu üretimi (Groq LLM ile)
- Vector Search → Voyage AI ile semantik benzerlik araması
- LangGraph → Stateful multi-agent orchestration
- LangSmith → Tüm LLM çağrılarının izlenmesi
Çıkarılan Dersler
- Text-to-Cypher hassas bir prompt mühendisliği gerektiriyor — Şema bilgisini prompt’a eklemek doğruluk oranını %40’tan %85’e çıkardı
- Hybrid search (Cypher + Vector) en iyi sonucu veriyor — Tek başına Cypher katı eşleşmelerde, vector search ise fuzzy sorgularda başarılı
- Groq LLM düşük gecikme için ideal — Text-to-Cypher dönüşümü ortalama 350ms
2. Buy in Bodrum / PPS Emlak — Facebook Lead Mining
Müşteri: PPS Emlak / Buy in Bodrum Süre: 2026 Teknolojiler: Neo4j, Facebook Graph API, Python
Proje Hakkında
Bodrum’da gayrimenkul hizmeti veren PPS Emlak için, Facebook sayfalarındaki potansiyel müşteri etkileşimlerini otomatik olarak Neo4j’e aktaran bir veri pipeline’ı geliştirdim.
Veri Akışı
Facebook Graph API → Post ve yorum çekme
↓
NLP ile intent analizi
↓
Neo4j'e kaydetme (kişi + etkileşim + ilişki)
↓
Lead skorlama ve önceliklendirme
Neo4j Veri Modeli
# Facebook post'una yorum yapan kullanıcıyı kaydetme
query = """
MERGE (p:Person {
facebook_id: $facebook_id,
name: $name
})
ON CREATE SET p.first_seen = datetime()
SET p.last_seen = datetime(),
p.comment_count = coalesce(p.comment_count, 0) + 1
MERGE (post:FacebookPost {post_id: $post_id})
MERGE (p)-[:COMMENTED_ON {text: $comment_text, at: datetime()}]->(post)
"""
Çıktı
- 2,000+ Facebook post’u tarandı
- 500+ potansiyel lead Neo4j’e kaydedildi
- ~%60 veri zenginleştirme başarısı (telefon/email bulma)
3. KÜM Emlak — Rakip Analizi ve Pazar İstihbaratı
Müşteri: KÜM Emlak (Kumemlak) Süre: 2026 Teknolojiler: Neo4j, Facebook Graph API, Python, Exa
Proje Hakkında
Bodrum merkezli bir diğer emlak şirketi olan KÜM Emlak için, bölgedeki rakip emlak firmalarının dijital ayak izini analiz eden bir sistem kurdum.
Veri Modeli
// Rakip analizi graph modeli
(:Agency)-[:POSTED]->(:Listing)
(:Agency)-[:COMPETES_WITH]->(:Agency)
(:Listing)-[:IN]->(:Neighborhood)
(:Person)-[:INQUIRED]->(:Listing)
Farklılaşan Özellikler
Bu projede Neo4j’in graf ilişkileri sayesinde rakip analizini çok boyutlu yapabildik:
- Hangi mahallelerde hangi rakibin daha aktif olduğu
- Hangi ilan türlerinin daha hızlı kapatıldığı
- Müşteri tiplerine göre popüler lokasyonlar
4. Place Enrichment Pipeline — Google Maps → Neo4j → Exa/Tavily
Kendi Projem Teknolojiler: Neo4j, Google Maps API, Exa, Tavily, Python
Proje Hakkında
Google Maps’ten bulunan işletmeleri Neo4j’e kaydedip Exa ve Tavily API’leri ile otomatik olarak zenginleştiren bir pipeline.
Mimari
Google Maps API → Neo4j (ham veri)
↓
Place Enrichment (cron, her 2 dk)
↓
Exa API (web, sosyal medya)
Tavily API (telefon, email)
↓
Neo4j (zenginleştirilmiş veri)
↓
Auto Website Creation & Deploy
Başarı Oranları
| Veri Türü | Başarı Oranı |
|---|---|
| Website | ~%85 |
| Telefon | ~%70 |
| ~%45 | |
| ~%55 |
5. Hermes + Neo4j — AI Agent için Semantik Memory
Kendi Projem Teknolojiler: Neo4j Aura, Voyage AI, Hermes Agent, Ollama
Proje Hakkında
AI agent’lar için kalıcı, semantik hafıza sistemi. Neo4j’i hem vektör database hem de graf veritabanı olarak kullanan bir mimari.
Nasıl Çalışıyor?
- Kullanıcı etkileşimleri → Voyage AI ile embedding (1024 boyut)
- Neo4j’de vektör + ilişki olarak depolama
- Sonraki sorgularda semantik benzerlik + graf traversali ile bağlam yükleme
# Memory'de semantik arama
results = memory.search(
query="Kullanıcı hangi platformu tercih ediyor?",
user_id="eray",
limit=5
)
# → Voyage AI embedding ile Neo4j'de vektör arama
Performans
| Yöntem | Doğruluk | Gecikme |
|---|---|---|
| Neo4j + Voyage | %94 | 45ms |
| FAISS Local | %78 | 12ms |
| Keyword Search | %45 | 5ms |
6. Paperclip EBA — Otomatik Lead Generation System
Kendi Projem Teknolojiler: Paperclip EBA, Neo4j, MindCase, WhatsApp API, LinkedIn API, Resend
Proje Hakkında
Türkiye genelinde randevu tabanlı işletmeleri otomatik bulup Neo4j graph database’e kaydeden ve WhatsApp/LinkedIn/Email ile outreach yapan tam otomatik lead generation sistemi.
Akış
MindCase → Sektör bazlı işletme keşfi
↓
Neo4j → Lead depolama + segmentasyon
↓
Hunter.io → Email zenginleştirme
↓
WhatsApp/LinkedIn/Email → Multi-channel outreach
Neo4j ile Çalışırken Öğrendiklerim
1. Text-to-Cypher En Zorlayıcı Kısım
Doğal dili Cypher sorgusuna dönüştürmek, SQL’den çok daha zor. Cypher’ın pattern matching yapısı, LLM’lerin iyi öğrenemediği bir alan. Çözüm:
- Şema bilgisini prompt’a ekleyin — Node label’ları, relationship tipleri ve property’leri açıkça belirtin
- Few-shot örnekler verin — 5-10 arası örnek sorgu, doğruluk oranını ciddi artırıyor
- Fallback mekanizması kurun — Text-to-Cypher başarısız olursa vector search’e düşen bir hibrit sistem
2. Vector + Graph = Süper Güç
Neo4j’in native vector search desteği (5.11+ ile) oyun değiştirici:
// Semantik + graf birleşimi
CALL db.index.vector.queryNodes('place_embeddings', 10, $query_vector)
YIELD node AS similar, score
MATCH (similar)-[:LOCATED_IN]->(neighborhood:Neighborhood)
WHERE neighborhood.name = 'Bodrum'
RETURN similar.name, score
LIMIT 5
3. Neo4j Aura Free Tier Fazlasıyla Yeterli
Çoğu proje için Neo4j Aura’nın free tier’ı (100K node, 1M ilişki) yeterli geliyor. Sadece büyük ölçekli embedding aramalarında performans düşüşü olabiliyor.
4. Cypher Öğrenme Eğrisi
İlk başta Cypher’ın pattern matching yapısı alışılmadık gelebilir. Ama bir kere alışınca, özellikle çok katmanlı ilişkilerde SQL’den çok daha okunabilir ve güçlü:
// Cypher: 3 katmanlı ilişki tek satırda
MATCH (customer)-[:BOUGHT]->(product)<[:SELLS]-(agent)-[:WORKS_IN]->(city)
WHERE city.name = 'Bodrum'
RETURN customer.name, product.name, agent.name
-- SQL: Aynı sorgu için 4 JOIN
SELECT c.name, p.name, a.name
FROM customers c
JOIN purchases pu ON c.id = pu.customer_id
JOIN products p ON pu.product_id = p.id
JOIN agents a ON p.agent_id = a.id
JOIN cities ci ON a.city_id = ci.id
WHERE ci.name = 'Bodrum'
Projelerin Ortak Noktaları
| Proje | Neo4j Kullanımı | Ölçek | Highlight |
|---|---|---|---|
| MomYachting | AI Chatbot + Text-to-Cypher | 6K+ ilişki | Hybrid search (Cypher + Vector) |
| Buy in Bodrum | Lead mining | 500+ lead | Otomatik intent analizi |
| KÜM Emlak | Rekabet analizi | 1K+ ilan | Multi-dimensional graf sorgusu |
| Place Enrichment | Veri zenginleştirme | 100+ place | 2 dk cron ile otomasyon |
| Hermes Memory | Semantik memory | Ölçeklenebilir | %94 vektör doğruluğu |
| Paperclip EBA | Lead yönetimi | Unlimited | Multi-channel outreach |
Sonuç
Neo4j, ilişkisel verilerle çalışan her proje için güçlü bir temel sağlıyor. Özellikle:
- AI chatbot’lar için Text-to-Cypher ile doğal dil sorgulama
- Lead generation için çoklu kaynaktan veri toplama ve ilişkilendirme
- Semantik memory için vektör + graf birleşimi
- Veri zenginleştirme için otomatik pipeline’lar
Her projede Neo4j’in esnekliği ve Cypher’ın ifade gücü, geleneksel SQL çözümlerine göre belirgin avantaj sağladı. En büyük tavsiyem: önce veri modelini doğru kurun — ilişkilerin yönü, kardinalitesi ve property’leri baştan doğru belirlenirse, gerisi akıp gidiyor.



