· 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 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 Görselleştirme 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:

  1. LangChain Chain → Kullanıcı sorgusunu anlama
  2. Text-to-Cypher → Doğal dilden Cypher sorgu üretimi (Groq LLM ile)
  3. Vector Search → Voyage AI ile semantik benzerlik araması
  4. LangGraph → Stateful multi-agent orchestration
  5. 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
Email~%45
Instagram~%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?

  1. Kullanıcı etkileşimleri → Voyage AI ile embedding (1024 boyut)
  2. Neo4j’de vektör + ilişki olarak depolama
  3. 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öntemDoğrulukGecikme
Neo4j + Voyage%9445ms
FAISS Local%7812ms
Keyword Search%455ms

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ı

ProjeNeo4j KullanımıÖlçekHighlight
MomYachtingAI Chatbot + Text-to-Cypher6K+ ilişkiHybrid search (Cypher + Vector)
Buy in BodrumLead mining500+ leadOtomatik intent analizi
KÜM EmlakRekabet analizi1K+ ilanMulti-dimensional graf sorgusu
Place EnrichmentVeri zenginleştirme100+ place2 dk cron ile otomasyon
Hermes MemorySemantik memoryÖlçeklenebilir%94 vektör doğruluğu
Paperclip EBALead yönetimiUnlimitedMulti-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.


Kaynaklar

Back to Blog

Related Posts

View All Posts »
WhatsApp ile yazin