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.

Bloglar
Gayrimenkul ve Emlak Sektöründe KVKK Kabusu ve Veribenim Çözümü

"Beni Ara" Formları, CRM Verisi ve Otomatik Veri Silme Stratejisi


İçindekiler

  1. Giriş: Emlak Sektörünün KVKK Kör Noktaları

  2. "Beni Ara" Formlarının Hukuki Çizgisi

  3. CRM'deki Eski Veri: Saklama Süresi Çok mu Uzun?

  4. Portföy Bilgilerinde Gizli Kişisel Veri Tuzakları

  5. WordPress SDK ile Entegrasyon: Adım Adım

  6. PHP SDK ile CRM Entegrasyonu

  7. Data Sovereignty: Mülk Sahibi Verisinin Coğrafyası

  8. Otomatik Veri Temizleme: Saklama Süresi Bittikten Sonra Ne?

  9. Gerçek Dünya Senaryosu: Büyük Emlak Portalının Denetim Raporlaması

  10. Sonuç: Veribenim ile Uyum Sağlama


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?

  1. İlk Saatler: Email ya da SMS bildirim acentaya gider.

  2. İlk Haftalar: Acentanın satış temsilcisi arar, mesaj atar.

  3. İlk Aylar: CRM'de "Cold Lead" etiketiyle kalır.

  4. İlk Yıllar: Unutulmuş veri döner — hiç silinmez.

  5. 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:

  1. "Beni Ara" formlarında kötü consent metni → Veribenim'in KVKK-dostu template'leri

  2. CRM'de eski veri yığını → Otomatik temizleme

  3. Portföy fotoğraflarında yüz verisi → Privacy by Design

  4. DSAR talepleri yok sayılması → Veribenim'in otomatik DSAR işleme

  5. 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

Benzer Makaleler

Bu sektörle ilgili daha fazla makale yakında yayımlanacak.

Tüm makaleleri görmek için bloğa dön →