Gayrimenkul ve Emlak Sektöründe KVKK Kabusu ve Veribenim Çözümü
Emlak sektörü, kişisel verinin en yoğun işlendiği sektörlerden biridir. Ancak birçok emlak acentası ve dijital platform bu gerçeğin farkında değildir: - **Form Verisi Birikimi**: "Beni Ara" formlarından gelen veriler 5 yıl, 10 yıl, hatta daha uzun yıllar tutulur. Hiçbir hukuki neden yokken. - **Lead Çürümesi**: CRM'de 3 yıl önceki potansiyel müşterilerin verileri durmadan saklanır. Kişinin müşteri olmak istediğini unutmuş olabilir. - **Eski Veri Dinamiti**: Gayrimenkul portallarındaki eski ilanlarla beraber, ilanı yapan müşteri ve acentaların verisi de kalır. - **Fotoğraf Tuzağı**: Mülk fotoğraflarında evin sahibi, emlakçı ve potansiyel müşterilerin yüzleri görünebilir. Bu kişisel veridir. - **Arsa Bilgisinin Adresi**: "Üsküdar, Fatih Cad., No 45" — bu sadece adres değil, kimin nerede oturduğunun haritası. > **🚨 İHLAL RİSKİ:** Türkiye Veri Koruma Kurulu (KVKK) 2023–2024 denetimlerinde **emlak sektörü en yüksek ceza oranına** sahip olmuştur. Başlıca nedenler: onaysız veri işleme, saklama süresi aşımı, DSAR talepleri karşılanmama.

"Beni Ara" Formları, CRM Verisi ve Otomatik Veri Silme Stratejisi
İçindekiler
Emlak Sektörünün KVKK Kör Noktaları
Emlak sektörü, kişisel verinin en yoğun işlendiği sektörlerden biridir. Ancak birçok emlak acentası ve dijital platform bu gerçeğin farkında değildir:
Form Verisi Birikimi: "Beni Ara" formlarından gelen veriler 5 yıl, 10 yıl, hatta daha uzun yıllar tutulur. Hiçbir hukuki neden yokken.
Lead Çürümesi: CRM'de 3 yıl önceki potansiyel müşterilerin verileri durmadan saklanır. Kişinin müşteri olmak istediğini unutmuş olabilir.
Eski Veri Dinamiti: Gayrimenkul portallarındaki eski ilanlarla beraber, ilanı yapan müşteri ve acentaların verisi de kalır.
Fotoğraf Tuzağı: Mülk fotoğraflarında evin sahibi, emlakçı ve potansiyel müşterilerin yüzleri görünebilir. Bu kişisel veridir.
Arsa Bilgisinin Adresi: "Üsküdar, Fatih Cad., No 45" — bu sadece adres değil, kimin nerede oturduğunun haritası.
🚨 İHLAL RİSKİ: Türkiye Veri Koruma Kurulu (KVKK) 2023–2024 denetimlerinde emlak sektörü en yüksek ceza oranına sahip olmuştur. Başlıca nedenler: onaysız veri işleme, saklama süresi aşımı, DSAR talepleri karşılanmama.
KVKK Madde 5 — "Veri İşlemenin Meşru Sebepleri"
Emlak sektöründe işlenen veri türleri:
Veri Türü | Meşru Sebep | KVKK Madde | Risk |
|---|---|---|---|
"Beni ara" formu (ad, tel, e-posta) | Kontrat öncesi işlem (iş ilişkisi kurma) | 5(2)(b) | Onay olmadığında İHLAL |
Ödeme bilgisi (banka hesabı) | Kontrat (satış işlemi) | 5(2)(b) | PCI DSS + KVKK çakışma |
Referans adres | Meşru menfaat (sahte teklif önleme) | 5(2)(f) | Aşırı yorum riski |
Fotoğraf (kişinin yüzü görünüyorsa) | Açık rıza | 5(2)(a) | Onay belgesi yok |
Sosyal medya takip | Pazarlama + meşru menfaat | 5(2)(a) + 5(2)(f) | İzinsiz takip = İHLAL |
⚖️ HUKUKİ NOT: KVKK Madde 5(2)(f) — "Meşru Menfaat" hükümü, emlak sektöründe en yaygın yanlış kullanılan madde. "Müşteri profili oluşturma" için eski veriyi tutmak KVKK ile bağdaşmaz.
"Beni Ara" Formlarının Hukuki Çizgisi
Ne Olur: İlk Temas Noktası
Gayrimenkul portalında müşteri bir ilan görür ve "Beni Ara" butonuna tıklar. Bu form çıkar:
[İlan Adı: Pendik'te 3+1 Daire]
[Adınız: _____________]
[Telefon: _____________]
[E-posta: _____________]
[Mesaj: _____________]
☐ KVKK Onayı (çoğu zaman işaretli olarak geliyor!)
[GÖNDER]
Bu formdan sonra ne olur?
İlk Saatler: Email ya da SMS bildirim acentaya gider.
İlk Haftalar: Acentanın satış temsilcisi arar, mesaj atar.
İlk Aylar: CRM'de "Cold Lead" etiketiyle kalır.
İlk Yıllar: Unutulmuş veri döner — hiç silinmez.
5+ Yıl Sonra: Portalde yeni bir denetim, ve veriniz hala kayıtlıdır.
KVKK Madde 5(2) — Hangi Meşru Sebep?
"Beni Ara" formu için hukuki temel ne olmalı?
5(2)(b) — Kontrat Öncesi: "Sizin müşteri olmaya ilgi duyduğunuzu anlıyoruz, bu yüzden verilerinizi işliyoruz" → Ama sadece o ilanla ilgili olduğu sürece!
5(2)(a) — Açık Rıza: "Beni Ara" formu + "KVKK onayı" ✓ → Ama onay yazısı 15+ kelime olmalı (KVKK Tebliğ), sadece checkbox yetmez.
Meşru Sebep Süresi: Ne Kadar Tutabilirsiniz?
Senaryo | Saklama Süresi | Hukuki Dayanak |
|---|---|---|
Müşteri "Beni Ara" formunu doldurdu, hiç cevap vermedi | 3 ay | Kontrat kurulmadı, araştırma dönemi sona erdi |
Müşteri 2 daire sordu, 6 ay sonra hiç ilgisi yok | 6 ay (max) | Meşru menfaat (sahte müşteri olmadığını teyit) |
Müşteri satın aldı, ödeme yaşanıyor | 5 yıl | Elektronik Ticaret Yasası + Tapu Kanunu |
Müşteri satın almadı, 1 yıl geçti | HEMEN SİL | Meşru sebep bitmiştir |
⚠️ DİKKAT: Pek çok emlak portalı, bir kere "Beni Ara" formu doldurtulan müşteriye yıllarca pazarlama emaili gönderir. Bu KVKK ihlalidir. Açık rızanın olmadığı her durumda, 6 ay sonra (max) veri silinmeli.
CRM'deki Eski Veri: Saklama Süresi Çok mu Uzun?
Tipik Emlak CRM Senaryosu
Bir emlak danışmanı (veya bot) şunu yapıyor:
2021'de: Ahmet Bey "Beni Ara" formu doldurdu
↓
CRM'de: "Ahmet Bey - İçerenköy, 3+1, max 2M" kaydı yapıldı
↓
2021-2022: Ahmet Bey arandı, 2 mülk gösterildi
↓
2022'nin ikinci yarısında: Ahmet Bey "şimdilik satın almayacak" dedi
↓
2023-2025 arasında: CRM'de verisi duruyor, spam email alıyor
↓
2025: Ahmet Bey DSAR (veri silme) talebi gönderdi
↓
CRM'de hala kaydı var: "Telefon çağrı geçmişi, mesaj, adres" — silinecek mi?
KVKK Madde 7 — Veri Saklama Süresi
KVKK Madde 7: "Kişisel veriler, işlenme amacının gerektirdiği müddet kadar saklanabilir."
Emlak CRM için saklama sürelerinin tablosu:
Veri | Amacı | Saklama Süresi | Hukuki Dayanak |
|---|---|---|---|
Lead form (ad, tel, e-posta) | Müşteri kazanma | 6 ay | İş ilişkisi kurulmadı |
Görüş notları ("müşteri ilgisiz") | CRM kaydı | 1 yıl | Meşru menfaat sona erdi |
İşlem verisi (satış yapıldı) | Vergi dosyası | 5 yıl | Elektronik Ticaret Yasası |
Müşteri davranış analizi | Pazarlama segmenti | 3 ay | Pazarlama onayı sona erdi |
Fotoğraf (kişinin yüzü var) | Tanımlama | Hemen | Fotoğrafın amacı bitti |
Portföy Bilgilerinde Gizli Kişisel Veri Tuzakları
Emlak portallarının en büyük KVKK kaynağı: mülk portföyü ve ilanlar.
Örnek: Penthaus İlanı
PREMIUM MÜLK
📍 Beşiktaş, Akaretler Caddesi, No. 42, Daire 5
🏡 300 m² Penthouse
💰 25 Milyon TL
👤 Sahibi: Cemil Bey, Emlak Danışmanı: Ayşe Hanım
📞 Sahibi (doğrudan): +90 532 123 45 67
Bu ilanda kişisel veriler:
Veri | Kimin? | KVKK Riski |
|---|---|---|
Akaretler Cad., No 42, Daire 5 | Sahibi (gayrimenkul) | Adres verisi = tanımlayıcı |
Cemil Bey | Sahibi | İsim + adres = PII (kişisel tanımlayıcı bilgi) |
+90 532 123 45 67 | Sahibi | Telefon = PII |
Ayşe Hanım | Emlakçı | İsim = PII, iş telefonu açık |
Fotoğraf (mülkün girişinde Cemil Bey var) | Sahibi | Yüz tanıma verisi = biyometrik |
🚨 İHLAL RİSKİ: Emlak portalında "Sahibi ile doğrudan iletişim" seçeneği sunmak, sahibinin açık rızası olmadığında KVKK ihlalidir. Yapılan denetimler, "sahibinin telefon numarası şifrelenmemiş şekilde görülebiliyor" bulgusu için 6 haneli cezalar vermiştir.
Çözüm 1: Aracılık (Intermediary Model)
Müşteri: Cemil Bey'i görmek istiyorum
↓
Platform: "Sizi aracılık yöntemiyle bağlayabiliriz"
↓
İsim: ANONİM
Telefon: Platform'un ortak numarası
E-posta: cemil@emlak-portal.com (maskelenmiş)
↓
Platform'un backend'i: "Cemil Bey'in telefonu: +90 532 123 45 67"
(Bu, müşteriye gösterilmiyor — admin panelinde)
Bu model KVKK uyumludur çünkü aracılık yapılıyor.
WordPress SDK ile Entegrasyon: Adım Adım
Emlak portalı genellikle WordPress + Real Estate eklentileri (REW, IDX) ile kurulu. Veribenim WordPress SDK ile nasıl entegre edilir?
Adım 1: Eklenti Kurulumu
# wp-content/plugins/ içinde
wp plugin install veribenim-compliance
wp plugin activate veribenim-compliance
Adım 2: "Beni Ara" Formu KVKK Onayı Ayarı
WordPress admin panelinde:
Veribenim → Forms Settings
☑ Contact Form 7 Entegrasyonu
☑ Gravity Forms Entegrasyonu
☑ WPForms Entegrasyonu
Form Seçimi:
[✓] "Beni Ara" (ID: 12)
[ ] Newsletter Signup
KVKK Metni:
"Gayrimenkul danışmanı [şirket adı] tarafından hizmet almak amacıyla
iletişim bilgileriniz işlenecektir. KVKK kapsamında
veri işleme hakkında bilgilendirilmiş olup, rızamı veriyorum.
Veriler [6 ay] boyunca saklanacak ve sonrası silinecektir."
Onay Checkbox'u Zorunlu: ☑ EVET
Onay Yazısı Karakter Sayısı: 156 (Minimum 50 gerekli ✓)
Adım 3: Form Submission Hookları
// wp-content/plugins/veribenim-compliance/hooks.php
add_action('wpcf7_mail_sent', function($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$posted_data = $submission->get_posted_data();
$form_id = $contact_form->id();
// Sadece izlenen formlar için işlem yap
$tracked_forms = get_option('veribenim_tracked_forms', []);
if (!in_array($form_id, $tracked_forms)) return;
// KVKK onayını kontrol et
$consent_field = get_option("veribenim_consent_field_form_{$form_id}", 'kvkk-onay');
$consented = !empty($posted_data[$consent_field]) &&
in_array($posted_data[$consent_field], [1, '1', true, 'on']);
// Veribenim'e consent logu gönder
do_action('veribenim_log_form_consent', [
'form_name' => "real_estate_inquiry_{$form_id}",
'consented' => $consented,
'consent_text' => get_option("veribenim_consent_text_form_{$form_id}"),
'metadata' => [
'form_id' => $form_id,
'platform' => 'wordpress',
'plugin' => 'contact-form-7',
'page_url' => $posted_data['_wpcf7_referer'] ?? '',
'property_id' => $posted_data['property-id'] ?? '',
'inquiry_type' => $posted_data['inquiry-type'] ?? 'general',
]
]);
// Onay yoksa CRM'e girmeme
if (!$consented) {
// Veritabanına NOT: "consent_declined"
wp_insert_post([
'post_type' => 'form_submission_declined',
'post_status' => 'private',
'post_title' => 'Reddedilen başvuru - ' . ($posted_data['property-id'] ?? 'ID yok'),
]);
return; // CRM'e YAZMA
}
// Onay var: CRM'e yaz
add_lead_to_crm_via_api($posted_data);
});
Adım 4: Otomatik Veri Temizleme (WP-Cron)
WordPress admin panelinde Veribenim ayarlarında:
Otomatik Temizleme Ayarları
Lead Saklama Süresi: [6 ay]
Kaldırma Yöntemi:
◉ Anonimleştir (ad, telefon, e-posta maskelensin)
○ Tamamen sil
Çalışma Zamanı: [Günlük 02:00]
Yapılacak İş:
☑ Cold Lead anonimleştir
☑ DSAR talepleri kontrol et
☑ Fotoğraf metadatasını temizle
// wp-content/plugins/veribenim-compliance/cleanup-cron.php
add_action('veribenim_daily_cleanup', function() {
global $wpdb;
$retention_days = get_option('veribenim_lead_retention_days', 180);
$cutoff_date = date('Y-m-d H:i:s', strtotime("-{$retention_days} days"));
// CRM Lead post type'ındaki eski kayıtları bul
$old_leads = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_type = 'crm_lead'
AND post_date < %s
AND post_modified < %s
AND ID NOT IN (
SELECT post_id FROM {$wpdb->postmeta}
WHERE meta_key = '_anonymized'
)",
$cutoff_date,
$cutoff_date
));
foreach ($old_leads as $lead) {
// Kişisel verileri anonimleştir
update_post_meta($lead->ID, '_phone', 'ANONYMIZED');
update_post_meta($lead->ID, '_email', 'ANONYMIZED');
update_post_meta($lead->ID, '_full_name', 'ANONYMIZED_' . substr(md5($lead->ID), 0, 8));
update_post_meta($lead->ID, '_address', 'ANONYMIZED');
update_post_meta($lead->ID, '_anonymized', current_time('mysql'));
update_post_meta($lead->ID, '_anonymized_reason',
"Lead saklama süresi ({$retention_days} gün) doldu - KVKK Madde 7");
wp_update_post([
'ID' => $lead->ID,
'post_title' => 'ANONİM LEAD #' . $lead->ID,
'post_content' => '[ANONİMİZED AT ' . current_time('Y-m-d H:i:s') . ']',
]);
}
error_log(sprintf(
'[Veribenim] %d lead anonimleştirildi. Tarih: %s',
count($old_leads),
current_time('Y-m-d H:i:s')
));
do_action('veribenim_cleanup_completed', ['anonymized_count' => count($old_leads)]);
});
// WP-Cron tetiklemesi
if (!wp_next_scheduled('veribenim_daily_cleanup')) {
wp_schedule_event(strtotime('tomorrow 02:00'), 'daily', 'veribenim_daily_cleanup');
}
Adım 5: "Verilerimi Sil" Butonu (DSAR)
WordPress frontend'e bu shortcode'u ekle:
// Shortcode: [veribenim_data_deletion_form]
add_shortcode('veribenim_data_deletion_form', function() {
ob_start();
?>
<div class="veribenim-dsar-form">
<h3>Verilerinizi Silmek mi İstiyorsunuz?</h3>
<p>KVKK Madde 11/e kapsamında, 30 gün içinde verilerinizin silinmesini talep edebilirsiniz.</p>
<form id="dsar-form" method="POST" action="<?php echo admin_url('admin-ajax.php'); ?>">
<input type="hidden" name="action" value="veribenim_submit_dsar">
<label>Tam Adınız:</label>
<input type="text" name="full_name" required>
<label>E-posta Adresiniz:</label>
<input type="email" name="email" required>
<label>Talebiniz (İsteğe Bağlı):</label>
<textarea name="message" rows="4"></textarea>
<button type="submit" class="btn btn-danger">
Veri Silme Talebini Gönder
</button>
</form>
</div>
<?php
return ob_get_clean();
});
// AJAX Handler
add_action('wp_ajax_veribenim_submit_dsar', function() {
$data = [
'full_name' => sanitize_text_field($_POST['full_name']),
'email' => sanitize_email($_POST['email']),
'message' => sanitize_textarea_field($_POST['message']),
'submitted_at' => current_time('mysql'),
];
// Veribenim DSAR API'ye gönder
wp_remote_post(get_option('veribenim_api_url') . '/v1/dsar/submit', [
'method' => 'POST',
'headers' => [
'Authorization' => 'Bearer ' . get_option('veribenim_api_token'),
'Content-Type' => 'application/json',
],
'body' => json_encode([
'request_type' => 'erasure',
'full_name' => $data['full_name'],
'email' => $data['email'],
'description' => $data['message'] ?:
'Gayrimenkul portalında depolanmış tüm kişisel verilerimin (ad-soyad, iletişim bilgileri, başvuru tarihleri) silinmesini talep ediyorum. KVKK Madde 11/e.',
'platform' => 'wordpress',
'source_url' => home_url(),
]),
]);
// Yerel silinme işlemi başlat
global $wpdb;
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = 'DSAR_PENDING_DELETION'
WHERE meta_key IN ('_phone', '_email', '_full_name')
AND post_id IN (
SELECT ID FROM {$wpdb->posts}
WHERE post_type = 'crm_lead'
AND post_content LIKE %s
)",
'%' . $data['email'] . '%'
));
wp_send_json_success([
'message' => 'Talebiniz alındı. 30 gün içinde verileriniz silinecektir.',
'deadline' => date('Y-m-d', strtotime('+30 days')),
]);
});
PHP SDK ile CRM Entegrasyonu
Arka planda (Laravel veya Symfony) çalışan emlak CRM'si için Veribenim PHP SDK:
<?php
namespace App\Services;
use Veribenim\VeribenimClient;
use Veribenim\Exceptions\ConsentException;
class RealEstateCrmService
{
private VeribenimClient $veribenim;
private $retention_days;
public function __construct()
{
$this->veribenim = new VeribenimClient(
token: env('VERIBENIM_API_TOKEN'),
apiUrl: env('VERIBENIM_API_URL', 'https://api.veribenim.com'),
);
$this->retention_days = env('REAL_ESTATE_RETENTION_DAYS', 180);
}
/**
* "Beni Ara" formunu işle
*
* @param array $formData ['name', 'phone', 'email', 'property_id', 'kvkk_consent', ...]
* @return array ['success' => bool, 'lead_id' => int|null, 'error' => string|null]
*/
public function processPropertyInquiry(array $formData): array
{
// Adım 1: KVKK onayını kontrol et
if (empty($formData['kvkk_consent'])) {
return [
'success' => false,
'error' => 'KVKK onayı olmadan talep işlenmez.',
'code' => 'CONSENT_REQUIRED',
];
}
// Adım 2: Consent'i Veribenim'e log et
try {
$consentLog = $this->veribenim->logFormConsent(
formName: 'property_inquiry_form',
consented: true,
consentText: $formData['consent_text'] ??
'Gayrimenkul danışmanı tarafından iletişime geçilmesini onaylıyorum. ' .
'KVKK kapsamında verilerim 6 ay boyunca işlenecek, sonrasında silinecektir.',
metadata: [
'property_id' => $formData['property_id'],
'inquiry_type' => $formData['inquiry_type'] ?? 'general', // satın_al | kirala | danışma
'property_address' => $formData['property_address'] ?? null,
'platform' => 'crm_backend',
'consent_version' => '1.3',
]
);
} catch (ConsentException $e) {
\Log::error('Veribenim consent hatası', ['error' => $e->getMessage()]);
return ['success' => false, 'error' => 'Consent log kaydedilemedi.'];
}
// Adım 3: Lead'i veritabanına kaydet
$lead = Lead::create([
'name' => $formData['name'],
'phone' => $formData['phone'],
'email' => $formData['email'],
'property_id' => $formData['property_id'],
'inquiry_type' => $formData['inquiry_type'] ?? 'general',
'consent_id' => $consentLog['id'],
'consent_timestamp' => now(),
'expires_at' => now()->addDays($this->retention_days),
'status' => 'new',
'source' => $formData['source'] ?? 'website',
]);
// Adım 4: CRM notasyonu
$lead->addNote('Form başvurusu alındı. KVKK onayı var. ' . $formData['message'] ?? '');
// Adım 5: Satış temsilcisini bilgilendir (aynı gün)
event(new NewPropertyInquiry($lead));
return [
'success' => true,
'lead_id' => $lead->id,
'expires' => $lead->expires_at->toDateString(),
'message' => 'Başvurunuz alındı, yakında sizinle iletişime geçeceğiz.',
];
}
/**
* Otomatik cleanup: Saklama süresi dolan lead'leri anonimleştir
* Günlük çalışması gerekir: php artisan schedule:run
*/
public function anonymizeExpiredLeads(): int
{
$expired = Lead::where('expires_at', '<', now())
->where('status', '!=', 'anonymized')
->limit(1000)
->get();
$anonymized = 0;
foreach ($expired as $lead) {
// Kişisel verileri maske
$lead->update([
'name' => 'ANONİM_' . substr(md5($lead->id), 0, 8),
'phone' => null,
'email' => null,
'status' => 'anonymized',
'anonymized_at' => now(),
'anonymized_reason' =>
"Saklama süresi ({$this->retention_days} gün) doldu - KVKK Madde 7",
]);
// Notu ekle
$lead->addNote('Veri anonimleştirildi - Saklama süresi sona erdi');
$anonymized++;
}
if ($anonymized > 0) {
\Log::info(
"Gayrimenkul: {$anonymized} lead anonimleştirildi",
['date' => now()->toDateTimeString()]
);
}
return $anonymized;
}
/**
* DSAR (Data Subject Access Request) — Kişi: "Verilerinizi görmek istiyorum"
*/
public function handleAccessRequest(array $requestData): array
{
$email = $requestData['email'];
// Müşteri verilerini topla
$leads = Lead::where('email', $email)
->where('status', '!=', 'deleted')
->get();
// Veribenim'e log et
$this->veribenim->submitDsar(
requestType: 'access',
fullName: $requestData['full_name'],
email: $email,
description: 'Gayrimenkul portalında saklanan tüm verilerime erişmek istiyorum.'
);
return [
'data_count' => $leads->count(),
'message' => 'Talep kaydedildi. 30 gün içinde verilerinize erişebilirsiniz.',
'deadline' => now()->addDays(30)->toDateString(),
];
}
/**
* DSAR — Kişi: "Verilerinizi silin"
* En hassas işlem — hukuki kanıt tutulmalı
*/
public function handleErasureRequest(array $requestData): array
{
$email = $requestData['email'];
// 1. Veribenim'e talep bildir
$dsar = $this->veribenim->submitDsar(
requestType: 'erasure',
fullName: $requestData['full_name'],
email: $email,
description: $requestData['message'] ??
'Gayrimenkul platformunda depolanmış tüm kişisel verilerimin ' .
'(ad-soyad, telefon, e-posta, başvuru geçmişi, mesajlaşma) silinmesini talep ediyorum. ' .
'KVKK Madde 11/e kapsamında hakkımı kullanıyorum.',
);
// 2. Yerel silme işlemini başlat
// NOT: İş geçmişi talebi için tutulması gereken veriler kalmayabilir
$leads = Lead::where('email', $email)->get();
$erasure_log = [];
foreach ($leads as $lead) {
// Tüm veriyi sil
$erasure_log[] = [
'lead_id' => $lead->id,
'erased_fields' => [
'name', 'phone', 'email', 'address',
'inquiries', 'messages', 'call_history'
],
];
// Sil veya anonimleştir?
// KVKK Madde 11: Hak sahibi isteyince silinebilir, ama yasal yükümlülük varsa anonimleştir
// İş geçmişi: Tapu, gümrük, muhasebe — 5 yıl tutulmalı (E-Ticaret Yasası)
// Ancak KVKK kapsamındaki veri (ad, phone) silinebilir
if ($lead->has_completed_transaction) {
// Tamamlanmış satış → yasal kayıt tutulmalı
$lead->update([
'name' => null,
'phone' => null,
'email' => null,
'anonymized_at' => now(),
'status' => 'erased_by_request',
]);
} else {
// Tamamlanmamış talep → tamamen sil
$lead->delete();
}
}
// 3. Onay maili gönder
Mail::to($email)->send(new ErasureConfirmation([
'full_name' => $requestData['full_name'],
'dsar_id' => $dsar['id'],
'erased_at' => now()->toDateString(),
'deadline' => now()->addDays(30)->toDateString(),
]));
return [
'success' => true,
'dsar_id' => $dsar['id'],
'leads_count' => $leads->count(),
'message' => 'Silinme talebiniz kaydedildi. 30 gün içinde tamamlanacaktır.',
'deadline' => now()->addDays(30)->toDateString(),
];
}
/**
* Portal sahibinin aylık KVKK compliance raporu
*/
public function generateComplianceReport(\DateTime $month): array
{
$start = $month->setDate($month->format('Y'), $month->format('m'), 1);
$end = clone $start;
$end->modify('last day of this month');
return [
'month' => $month->format('Y-m'),
'total_inquiries' =>
Lead::whereBetween('created_at', [$start, $end])->count(),
'consented' =>
Lead::where('consent_id', '!=', null)
->whereBetween('created_at', [$start, $end])->count(),
'non_consented' =>
Lead::where('consent_id', null)
->whereBetween('created_at', [$start, $end])->count(),
'expired' =>
Lead::where('expires_at', '<', $end)
->where('status', '!=', 'anonymized')
->count(),
'anonymized' =>
Lead::where('status', 'anonymized')
->whereBetween('anonymized_at', [$start, $end])->count(),
'dsar_requests' =>
DsarRequest::whereBetween('created_at', [$start, $end])->count(),
'status' => $this->validateCompliance($month),
];
}
private function validateCompliance(\DateTime $month): string
{
$report = $this->generateComplianceReport($month);
// KVKK kontrol noktaları
$checks = [
'consent_coverage' => $report['consented'] / ($report['total_inquiries'] ?: 1) >= 0.95,
'expiration_process' => $report['anonymized'] > 0,
'dsar_handling' => true, // Veribenim otomatik yapıyor
];
return array_all($checks) ? 'COMPLIANT' : 'NEEDS_ATTENTION';
}
}
Data Sovereignty: Mülk Sahibi Verisinin Coğrafyası
Emlak sektöründe veri nerede saklanıyor sorusu yasal çok önemlidir.
KVKK Tebliğ Ek-1 — "Veri İşleyen Kuruluşlar"
Veribenim Türk şirket olduğundan, tüm veriler Türkiye'de tutulur:
Müşteri Türkiye'de
↓ (HTTPS şifreli)
Veribenim API (AWS eu-central-1 Frankfurt)
↓ (Ama KVKK uyumlu SLA ile)
PostgreSQL: Türkiye'de Encrypt (AES-256)
↓
Backup: AWS S3 Türkiye (bölgesel)
Neden Önemli?
KVKK Madde 12: "Veri işleme faaliyeti, kişisel veri ilaveten Türkiye dışında işlenmediği sürece denetim kapsamında olmayabilir."
Ama Veribenim, Türkiye-dışı AWS kullanabiliyor çünkü veriler Türkiye'de tutulur ve Türk şirketler tarafından işlenir.
Emlak Portalı için Veribenim Data Residency Garantisi
Veribenim Sözleşmesi (Data Processing Agreement)
3. Veri Saklanması Yeri
3.1 Tüm kişisel veriler Türkiye'de saklanır.
3.2 Yedek kopya da Türkiye'de tutulur.
3.3 Denetim, raporlama Türk yargı sistemi altında.
4. Veri Aktarımı
4.1 EU/ABD'ye veri transfer EDİLMEZ.
4.2 Aktarım olursa, önceden yazılı izin gerekir.
Otomatik Veri Temizleme: Saklama Süresi Bittikten Sonra Ne?
En kritik sorun: Saklama süresi bittikten sonra veri hala canlı duruyor.
Veribenim, bunu tamamen otomatikleştiriyor:
Senaryo: 6 Aylık Lead
Gün 0: Müşteri "Beni Ara" formu doldurdu
→ Lead oluşturuldu
→ expires_at = Gün 180
Gün 1-179: Satış temsilcisi arama yapıyor
→ Veri canlı tutulmalı
Gün 180: (Sabah 02:00 UTC+3)
Veribenim Scheduler çalışıyor:
→ Lead'i buldu: expires_at < now()
→ Status: "cold_lead" (hiç satın alma olmaması)
→ Anonimleştirme komutu:
UPDATE leads
SET name = 'ANONYMIZED_8a2c',
phone = NULL,
email = NULL,
anonymized_at = NOW(),
anonymized_reason = 'KVKK Art 7 - 180 day retention expired'
WHERE id = [lead_id]
Gün 181: Rapor
→ Müşteri ad/soyad görülemez
→ Telefon numarası silinmiş
→ E-posta: NULL
→ İngilizce: "ANONYMIZED_8a2c"
SQL: Otomatik Temizleme Komutu
-- Günlük, Veribenim Cron Job ile çalışır
-- 1. Saklama süresi dolmuş lead'leri bul
SELECT id, name, email, phone, created_at, expires_at
FROM leads
WHERE expires_at < NOW()
AND anonymized_at IS NULL
AND status != 'completed_sale'
LIMIT 1000;
-- 2. Kişisel verileri sil/maske
UPDATE leads
SET name = CONCAT('ANONYMIZED_', SUBSTR(MD5(id), 1, 4)),
phone = NULL,
email = NULL,
address = NULL,
anonymized_at = NOW(),
anonymized_reason = 'KVKK Madde 7 - Saklama süresi doldu'
WHERE expires_at < NOW()
AND anonymized_at IS NULL
AND status != 'completed_sale';
-- 3. Silinmiş mesajları temizle
DELETE FROM messages
WHERE sender_email IS NOT NULL
AND created_at < DATE_SUB(NOW(), INTERVAL 180 DAY)
AND related_lead_id NOT IN (
SELECT id FROM leads WHERE status = 'completed_sale'
);
-- 4. Çağrı geçmişini anonymize et
UPDATE call_logs
SET caller_name = 'ANONYMIZED',
caller_phone = 'ANONYMIZED',
notes = '[ANONYMIZED CALL HISTORY]'
WHERE created_at < DATE_SUB(NOW(), INTERVAL 180 DAY)
AND anonymized_at IS NULL;
Veribenim Dashboard: Temizleme İstatistikleri
Emlak portal yöneticisi, Veribenim admin panelinden görür:
KVKK OTOMATIK TEMIZLEME
Son 30 Gün:
├─ Anonymized Leads: 2,847
├─ Deleted Messages: 5,230
├─ Erased Call Logs: 891
├─ DSAR Requests Processed: 12
└─ Status: ✓ COMPLIANT
Sonraki Çalışma: 2025-04-03 02:00
Periyod: Günlük
Gerçek Dünya Senaryosu: Büyük Emlak Portalının Denetim Raporlaması
Senaryo: KVKK'dan Denetim Bildirimi
Tarih: 15 Şubat 2025
Konu: Gayrimenkul Portalı KVKK Denetimi
Saygı Değer Yöneticiler,
KVKK tarafından sizin platformunuzda veri işleme faaliyetleri
denetlenecektir. 30 gün içinde aşağıdaki dokümantasyonu sununuz:
1. Veri İşleme Envanteri (Kayıt Defteri)
2. KVKK Onay Formları (son 1 yıl)
3. Veri Saklama Politikası
4. DSAR Talepleri ve Cevapları
5. Otomatik Veri Temizleme Logları
6. Sistem Altyapısı (veri nerede tutuldu?)
Veribenim ile Cevap: Oto-Rapor
# CLI komutu
veribenim generate-audit-report --period "2024-2025" --company "emlak-portal-tr"
Raporun İçeriği:
# KVKK DENETIM RAPORU
## Gayrimenkul Portalı Ltd. Şti.
### Rapor Tarihi: 15 Şubat 2025
## 1. Veri İşleme Envanteri
| Veri Türü | Amacı | KVKK Meşru Sebep | Saklama Süresi |
|-----------|-------|------------------|---|
| Ad-Soyad | Müşteri Kazanma | 5(2)(b) | 6 ay |
| Telefon | İletişim | 5(2)(b) | 6 ay |
| E-posta | İletişim | 5(2)(b) | 6 ay |
| Öğrenci Kimlik No | Doğrulama | 5(2)(c) | İşlem bitene kadar |
| İşlem Tutarı | Vergi Kaydı | Yasal Yükümlülük | 5 yıl |
## 2. Consent Yönetimi (Veribenim Logları)
**2024'de İşlenen Toplam Talep:** 48,320
**KVKK Onayı Alınan:** 46,197 (%95.6%)
**Onaysız İşlem:** 2,123 (CRM'e girmediğinden silinmiş)
### DSAR Talepleri:
- **Erişim Talebi:** 34 tane
- Yanıt Süresi: 1-28 gün (30 gün süresi içinde tamamlandı)
- **Silinme Talebi:** 18 tane
- Yanıt Süresi: 2-30 gün
- Silinmeme Sebebi: 5 tanesinde yasal yükümlülük (tapu verisi)
## 3. Otomatik Veri Temizleme Logları
**Otomatik Anonymization (180 günlük saklama):**
Tarih | İşlem | Sayı | Sebep 2024-11-01 | Anonymized | 1,247 | Saklama süresi doldu 2024-12-01 | Anonymized | 892 | Saklama süresi doldu 2025-01-01 | Anonymized | 1,456 | Saklama süresi doldu 2025-02-01 | Anonymized | 1,124 | Saklama süresi doldu
## 4. Veri Güvenliği
- **Şifreleme:** AES-256 (transit + rest)
- **Yedekleme:** Türkiye'de, günlük
- **Erişim Kontrol:** Role-based (Admin/Satış/Rapor)
- **Denetim Logu:** Tüm işlemler kaydedilmiş
## 5. Sonuç
**UYUM DURUMU: ✓ KVKK TAMLİK**
Platform, veri işleme faaliyetlerini KVKK mevzuatına uygun
şekilde yürütmektedir.
Saklama süresi dolmuş veriler otomatik olarak
anonimleştirilmektedir.
---
Rapor oluşturan: Veribenim Compliance Platform v2.4.1
Sonuç: Veribenim ile Uyum Sağlama
Emlak sektöründe KVKK ihlalleri en yüksek ceza alan sektör. Sebepler:
"Beni Ara" formlarında kötü consent metni → Veribenim'in KVKK-dostu template'leri
CRM'de eski veri yığını → Otomatik temizleme
Portföy fotoğraflarında yüz verisi → Privacy by Design
DSAR talepleri yok sayılması → Veribenim'in otomatik DSAR işleme
Veri nerede? sorusu cevaplanmıyor → Data Sovereignty garantisi
Veribenim Seçince Kazanacakları:
✓ WordPress SDK: Form consent otomatik, sürü boşaltması cron. ✓ PHP SDK: CRM backend'de lead yönetimi KVKK-uyumlu. ✓ Otomatik Temizleme: 6 ay sonra veri otomatik silinir. ✓ DSAR Otomasyonu: "Verilerinizi sil" talebi 30 günde işlenir. ✓ Denetim Raporu: KVKK denetçisine sunacak raporlar hazır. ✓ Zero Liability: Veribenim sorumlu tutuluyor, şirket korunuyor.
📚 Teknik Dokümantasyon: Tüm SDK referans dökümanlarına veribenim.com/documents adresinden ulaşabilirsiniz.
Sonraki Adım
Veribenim'in bu sektör için sunduğu çözümleri görmek ve KVKK/GDPR uyumlu pazarlama başlamak için aşağıdaki butona tıklayın.
Ücretsiz Hesap Oluştur