Orta ölçekli B2B ve B2C satışları olan iki Shopify mağazasında ortak bir eksik vardı: müşteri hakkındaki önemli durum bilgisi, sistem içinde kalıcı olarak tutulmuyordu. Her sipariş geldiğinde ekipten biri “bu müşteri B2B mi” veya “bu müşteriye daha önce tester örneği gönderildi mi” sorularını ayrı bir tablo kaydından kontrol ediyordu, ardından müşteri tipine (bireysel veya kurumsal), satın alınan ürünlere ve sepet tutarına göre hediye ya da promosyon ürününü elle ekliyordu.
İki farklı mağaza, benzer amaçlar. Biri gıda B2B’si, diğeri kozmetik satışı. Farklı sektör, farklı ölçek; ama çözüm aynı soyut şablona oturuyor. Bu yazı o şablonu üç aşamalı bir Shopify Flow hattı olarak anlatıyor: Tanımlama, Ödüllendirme, Bilgilendirme.
Ortak problem
Müşteri A: Toplu ürünlü siparişleri manuel kontrol edip “hangi hesap B2B” kararını her seferinde elle veriyordu. “Bu müşteri kimdi, daha önce hangi ürünleri teslim almıştı” bilgisi farklı ekiplerce hem Shopify üzerinden hem de ayrı bir veri tablosundan takip ediliyordu.
Müşteri B: Yeni lansmanlarda belirli müşterilere (önceden tanımlı veya satın alınan ürün üzerinden) sample/tester gönderimi yapıyordu. Altı ay sonra aynı müşteri yine sipariş verdiğinde “daha önce bu ürünün örneği gönderilmiş mi” sorusu ayrı bir kontrol sürecini tetikliyordu.
İki senaryo farklı görünüyor ama temeli aynı: müşteri durumunu Shopify’ın kendi veri katmanında kalıcı işaretlememek. Durum işaretlendiğinde, her sipariş bu işarete göre otomatik atanan kararları çalıştırıyor ve uygun aksiyonları tetikliyor.
Şablon: Üç aşamalı hat
Akış görselleştirildiğinde üç katman ortaya çıkıyor:

Aşama 1: Tanımlama
Müşteri hakkında iki boolean sinyal tutuluyor, her ikisi de customer metafield olarak:
custom.b2b_status: müşteri B2B mi?custom.is_tester: bu müşteriye daha önce tester/sample gönderildi mi?
Her iki metafield birer “signal setter” Flow workflow’u tarafından dolduruluyor. Trigger order_paid; guard ilgili sinyal ürününün siparişte olmasını kontrol ediyor; action ise customer metafield’ını true olarak set ediyor. Bir kere işaretlenen müşteri sonraki siparişlerde bu sinyali taşıyor, setter guard’ı redundant update yapmıyor.
Bu tek başına bile operasyonel bir kazanım: “bu müşteri kim” sorusu bir insan sorusu olmaktan çıkıp bir veri sorusuna dönüşüyor.
Not (Shopify B2B native özellikleri): Shopify B2B, Basic, Grow, Advanced ve Plus planlarının tamamında ek ücretsiz geliyor; eskiden Plus’a özel olan bu özellikler 2024 sonrası tüm planlara açıldı. Plan farkı aktif katalog sayısında: Basic/Grow/Advanced üç aktif katalog limiti ile çalışırken Plus sınırsız katalog + company/location’a doğrudan atama sağlıyor. Müşteri bir Company’e bağlıysa otomatik olarak B2B sayılıyor; Flow’da
order.purchasingEntity.__typename == 'PurchasingCompany'condition’ı resmi pattern (aynı zamanda Shopify’ın hazır “Tag B2B orders” Flow template’inin tam olarak kullandığı koşul). Company’ye bağlı müşteriler içincustom.b2b_statusmetafield’ına gerek kalmıyor; native alanlar guard olarak kullanılabiliyor. Metafield tabanlı yaklaşım ise Company altyapısını kurmak istemeyen ya da bireysel B2B alıcıları (küçük bayi, tek kişi satın alma) ayrı bir alanda takip etmek isteyen operasyonlar için hala geçerli.
Plus dışı mağazalarda B2B sinyalini toplama yolları
Metafield’a yazılacak true değerinin hangi kaynaktan besleneceği operasyona göre değişiyor. Üç pratik seçenek var:
- Checkout extensibility (geliştirici gerektirir): Shopify’ın yeni checkout UI extension’ları ile checkout sayfasına özel bir alan eklenebiliyor; örneğin “Kurumsal mı?” checkbox’ı veya vergi numarası alanı. Seçim doğrudan
custom.b2b_statusmetafield’ına yazılabiliyor. Temiz çözüm ama teknik kaynak gerekli. - Üçüncü parti app’ler: “B2B login”, “wholesale registration” veya “checkout custom fields” kategorisindeki app’ler bu işi hazır olarak yapıyor. Wholesale Club, B2B Wholesale Solution, Checkout Fields gibi app’ler pazarda mevcut; aylık sabit maliyet karşılığı onay sürecini ve metafield yazmayı kendi içinde çözüyor.
- Kayıt formu yaklaşımı: Checkout dışında, müşteri hesabı oluştururken ayrı bir form (Typeform, native Shopify page vb.) ile kurumsal bilgi toplanıyor. Admin tarafında onaylandıktan sonra
custom.b2b_status = trueelle set ediliyor. Geliştirici gerektirmiyor, ama onay sürecinin insan emeğiyle yönetilmesi gerekiyor.
Hangi yol seçilirse seçilsin, Flow tarafındaki ödüllendirme ve bilgilendirme katmanları aynı kalıyor; sadece sinyalin kaynağı değişiyor.
Aşama 2: Ödüllendirme
Tanımlama sinyalleri hazır olduğunda, karar ağacı net bir hesaba dönüşüyor. Hediye workflow’u order_paid trigger’ıyla başlıyor ve iki eksende dal kuruyor:
is_tester == truemu (tester / core ayrımı)- Sepet tutarı
>= 500 TLmi (premium / entry tier ayrımı)
Dört kombinasyon, dört farklı hediye variant’ı:
| Müşteri tipi | Sepet tutarı | Eklenen hediye |
|---|---|---|
| Tester | 500+ TL | Tester Premium Pack |
| Tester | < 500 TL | Tester Sample Pack |
| Core B2B | 500+ TL | Core Premium Kit |
| Core B2B | < 500 TL | Core Entry Kit |
Her dal add_order_line_item action’ını add_for_free: true parametresi ile çağırıyor. Ücretsiz eklendiği için sipariş toplamı değişmiyor, müşteri ek bir ödeme yapmıyor, muhasebe tarafında da ek işlem doğmuyor.
Ödüllendirme kategorisi hediye ile sınırlı değil; indirim kodu gönderme, müşteri segmentini yükseltme, free shipping açma; hepsi aynı dal yapısına oturuyor. Hediye en kolay anlatılabilen ve en sık talep edilen örnek.
Aşama 3: Bilgilendirme
Otomasyon bir şey yaptığında üç farklı paydaş bunu bilmek istiyor:
- Operasyon ekibi: hangi siparişe hediye eklendi, depoda pick-pack sırasında doğru ürün mü çekiliyor. Bunun için
add_order_tags(örn.b2b-gift-attached,b2b-gift-tester-premium) veadd_order_noteaction’ları çalışıyor. Sipariş detayı ekranında ilk bakışta görünür oluyor. - Müşteri iletişimi katmanı: Klaviyo gibi bir email/SMS platformu kullanılıyorsa, her hediye zincirinde Klaviyo
Track an eventaction’ı tetikleniyor. Klaviyo tarafında “ilk tester örneği” veya “Core Premium tier” gibi segmentler bu event’i trigger olarak kullanıyor; teşekkür email’i, cross-sell önerisi, tier promotion mesajı buradan çıkıyor. - Analytics / ölçüm katmanı: Plus, Advanced ve Grow planlarında Flow’un
send_http_requestaction’ı ile GA4 Measurement Protocol’üne server-side event gönderilebiliyor. Bu katman B2B müşteri davranışını GA4 raporlarına ayrı bir segment olarak işliyor; web analytics pixel’den bağımsız olarak ölçüm bütünlüğü sağlıyor.
Bilgilendirme katmanını es geçmek yaygın bir hata: otomasyonun çalıştığından emin olmak, işe yaradığını ölçmek, yanlış tetiklemeyi yakalamak buradan geçiyor.
Önce ve sonra
Aynı mağaza, iki zaman dilimi.
| Önce | Sonra |
|---|---|
| ”Bu müşteri B2B mi?” sorusu her siparişte tekrar | custom.b2b_status metafield’ından okunuyor |
| Tester/sample geçmişi insan belleğinde veya Excel’de | custom.is_tester metafield’ı kalıcı sinyal |
| Hediye kararı operasyon ekibinin inisiyatifi | Sepet tutarı + müşteri tipi kombinasyonu otomatik karar |
| Hata yapıldığında iz yok, şikayet sonradan çıkıyor | order.tags ve staff_note’ta her hediyenin yazılı kaydı |
| Yeni ekip üyesi kuralı tekrar öğrenmek zorunda | Kural Flow’da; yeni ekip sadece export’u import ediyor |
Uygulamadan sonra:
- Müşteri A için sipariş başına ortalama 5-10 dakikalık elle kontrol süresi sıfırlandı.
- Müşteri B için “tester daha önce gönderildi mi” sorgusu tamamen kapandı.
Her iki müşteri için de e-posta bildirimleri tutarlı bir zemine oturdu; hediye ürünlerle müşteri memnuniyeti görünür şekilde arttı.
Native B2B mi, metafield sinyali mi
Metafield tabanlı yaklaşım bu yazının temel şablonu ama bazı operasyonlarda Shopify’ın native B2B altyapısı daha az bakım ile aynı sonucu veriyor. İkisi de artık tüm planlarda (Basic, Grow, Advanced, Plus) çalışıyor, karar noktası operasyonun yapısında.
Native B2B’ye geçmenin kazançları:
- Company + Company Location veri modeli: tek bir zincirin birden fazla şubesini tek profilde tutabiliyor; her lokasyon kendi vergi numarası, kendi teslimat-fatura adresi, kendi ödeme vadesi, kendi iletişim kişileri ile yönetiliyor.
- Custom catalog: pricing + ürün erişimi company ya da location bazında; Basic/Grow/Advanced’de 3 aktif katalog, Plus’ta sınırsız.
- Quantity rules + volume pricing: koli-bazlı minimum miktar, miktar basamağına göre kademeli fiyat; Flow yazmadan ürün tarafında tanımlanıyor.
- Payment terms + vaulted credit card + bank account: net vade (net 30/60/90), depozito, ön onaylı kart veya ACH; B2B checkout’u bireysel müşterilere sunmadan yalnız company’lere gösteriyor.
- Store credit: müşteri bazında alacak hesabı; ödeme yöntemi olarak checkout’a otomatik düşüyor.
- Customer accounts (6 haneli PIN ile passwordless login): B2B için zorunlu; legacy customer accounts desteklenmiyor.
- Company account requests: yeni B2B müşteri adayları Shopify Forms üzerinden başvuru yapıyor, admin onaylıyor, Flow template’i ile otomatik company kurulumu tetikleniyor.
- Sales staff permissions: satış temsilcileri yalnız atandıkları company location’ları görecek şekilde kısıtlanabiliyor.
- Trade theme (B2B için optimize) veya Horizon (blended store için) ile B2B-aware tema desteği; quick order list, quantity rules, volume pricing tema tarafında natif görünüyor.
Metafield sinyalinin hala tercih edildiği durumlar:
- Müşteri tek kişi (küçük bayi, freelance satın alıcı) ve company profili açmak fazla geliyor.
- Blended (B2B + D2C) mağazada bireysel müşteriye de “kurumsal gibi davran” işareti gerekiyor (örn. tester programı, sadakat tier’ı).
- Tester/is_tester gibi B2B-dışı ama müşteri-ömürlü bayrak tutulacak. Bu yazının
is_testerşablonu buna tipik örnek. - Plus dışı planlarda 3 katalog limiti yeterli değil, katalog yerine Flow branch’leri ile hediye/indirim tier’ı yönetmek daha esnek.
Karar alırken pratik kural: müşteri “bir şirket ve onun satın alıcıları” modeline oturuyorsa native company + catalog; müşteri “bir kişi ve onun durumu” modelindeyse metafield sinyali.
Native B2B siparişini e-posta şablonunda ayırmak
Native tarafa geçince Liquid notification şablonları tek satırla B2B/D2C branch’i kurabiliyor. Order ve draft order email template’lerinde şu değişkenler mevcut:
{% if b2b? %}
<p>Firma: {{ company.name }}</p>
<p>Lokasyon: {{ company_location.name }}</p>
<p>Fatura: {{ company_location.billing_address | format_address }}</p>
{% if payment_terms %}
<p>Vade: {{ payment_terms.payment_schedules.first.due_at | date: "%d.%m.%Y" }}</p>
{% endif %}
{% endif %}
b2b? boolean’ı siparişi Company’ye bağlıysa true dönüyor, metafield okumaya gerek kalmıyor. Bu yaklaşım Flow’un Tag B2B orders template’inden daha erken çalışıyor: Flow tag’leri notification email gönderildikten sonra ekleniyor (Shopify Collective ile aynı zamanlama sorunu), dolayısıyla email template’inde {% if tags contains 'B2B' %} güvenilir değil; b2b? koşulu ise render anında hazır.
Tema tarafında customer.b2b?
Aynı mantık storefront temasına da geçiyor. Theme.liquid veya section’lar içinde giriş yapmış müşteri B2B ise tek satırla ayırt edilebiliyor:
{% if customer.b2b? %}
{% render 'b2b-wholesale-banner' %}
<a href="/account/orders" class="wholesale-cta">Toplu sipariş formu</a>
{% else %}
{% render 'd2c-promo-bar' %}
{% endif %}
Blended mağazada (B2B + D2C aynı temada) bu bir navigation, banner, CTA ve hatta fiyat formatı değişimi için temiz bir branch noktası. Dedicated B2B mağazasında ise {% unless customer.b2b? %} guard’ı D2C ziyaretçiye özel bir “erişim için başvur” CTA’sına yönlendiriyor; tam login-wall için Online Store > Preferences > Store access > Restrict access to B2B customers only ayarı veya Locksmith gibi app’ler gerekiyor.
Bu iki değişken (order.b2b? / draft_order.b2b? email tarafında, customer.b2b? tema tarafında) birlikte kullanıldığında hem operasyonel hem de müşteri deneyimi katmanında metafield tabanlı guard’lara ihtiyaç kalmıyor; sinyal Shopify’ın kendi veri modelinden doğrudan geliyor.
Kurulum için
Şablon iki .flow dosyası olarak hazır: B2B Tester Signal Setter.flow (tanımlama katmanı) ve B2B Free Gift Auto-Attach.flow (ödüllendirme + bilgilendirme katmanı). Import et, variant ID’lerini kendi mağazandaki hediye ürünleriyle eşle, Klaviyo public API key’ini yerine koy.
Teknik derinlik
Bu yazılardaki Flow yapısı, signal setter pattern’i, cart attribute bridge, GA4 Measurement Protocol detayları ve consent condition köprüsü iki teknik yazıda daha detaylı:
- Shopify Metafield ile Custom Pixel Arası Köprü: Cart Attribute Pattern’i, pixel sandbox ve Flow’a customer context taşıma mekaniği
- Shopify Flow ile B2B Etiketleme ve Otomatik Hediye: Koşullu Workflow Tasarımı, 4 dallı hediye workflow’u, signal setter pattern’i, GA4 MP ve Klaviyo köprüsü, consent condition gate
Sonraki adım
Kendi mağazanda benzer bir ihtiyaç varsa ya gist’i indirip doğrudan kurulumu dene, ya da bu şablonu sektörüne ve operasyonuna göre özelleştirmek için destek al. Tanımlama sinyalleri B2B ve tester ile sınırlı değil: sadakat, bölge, yenilenen abonelik, risk skoru; hepsi aynı metafield + Flow pattern’ine oturuyor. Ödüllendirme ve bilgilendirme katmanları da aynı esneklikte genişliyor.
Orta ölçekli B2B operasyonlarında gördüğüm en büyük kazanım, bu şablonun müşteri durumunu insan belleğinden sisteme geçirmesi. O anda değil, sonraki 100 siparişte hissediliyor.
- 01 B2B ve sample/tester operasyonlarında ortak eksik, müşteri durumunu Shopify içinde kalıcı sinyallere dönüştürememek. Çözüm iki customer metafield:
b2b_statusveis_tester. - 02 Signal setter Flow workflow'ları ilk satın alımda müşteriyi otomatik işaretliyor; sonraki siparişler guard üzerinden bu sinyalleri okuyor.
- 03 Ödüllendirme katmanı 4 dal: (tester, >=500), (tester, <500), (core, >=500), (core, <500). Her dal farklı variant ekliyor,
add_for_freeile sipariş toplamı değişmiyor. - 04 Bilgilendirme katmanı her dal sonunda: order tag + staff note (operasyon görünürlüğü), Klaviyo Track Event (müşteri iletişimi), GA4 Measurement Protocol (analytics; Plus/Advanced/Grow planlarında).
- 05 Solo operasyondan 3-5 kişilik ekiplere geçişte en kritik kazanım: kuralın insan belleğinden sisteme taşınması, yazılı izin her sipariş için var olması.
+ Shopify Plus gerekli mi?
Hayır. Tanımlama ve ödüllendirme katmanları (metafield setter + hediye attach) tüm Shopify planlarında çalışıyor. Sadece GA4 Measurement Protocol için kullanılan send_http_request action'ı Plus, Advanced ve Grow planlarına özel. Basic ve Standard mağazalar Klaviyo Track Event connector'ı üzerinden downstream analytics'e köprü kurabiliyor.
+ Bu sadece hediye için mi kullanılır?
Hayır. 'Ödüllendirme' geniş bir kategori: indirim kodu gönderme, müşteri segmentine yükseltme (customer tag), VIP oluşturma, free shipping threshold değiştirme, sample attach, tester promosyonu; hepsi aynı 3 aşamalı pattern'e sığıyor. Makalede hediye örneği var çünkü en kolay anlatılabilen ve en çok talep edilen senaryo.
+ Müşteri yanlışlıkla tester olarak işaretlenirse ne olur?
Signal setter workflow'u tek yönlü (sadece false değerini true'ya çeviriyor). Yanlışlık durumunda admin, Customer detail, Metafields ekranından is_tester değeri elle false yapılabiliyor veya metafield komple silinebiliyor. Bir sonraki siparişte setter guard'ı tekrar çalışıp durumu yeniden değerlendiriyor.
+ İki `.flow` dosyası import edildikten sonra ne yapmam gerekiyor?
Üç şey: (1) customer metafield'ları custom.b2b_status ve custom.is_tester tanımlı değilse Settings > Custom data üzerinden oluştur; (2) Free Gift Auto-Attach workflow'unda 4 variant ID'sini gerçek hediye variant'larınla değiştir; (3) Klaviyo action'larındaki public_api_key placeholder'ını Klaviyo hesabından aldığın Public API Key ile değiştir. Ardından Flow Activity log üzerinden ilk test siparişinde tetiklemeyi doğrula.
+ Bu otomasyon müşterilere görünür mü?
Hayır. Hediye ürünü add_for_free: true ile siparişe ekleniyor; toplam değişmiyor. staff_note sadece admin tarafında görünüyor, checkout'ta yok. Tag'ler order detay ekranında operasyon ekibi için. Müşteri yalnızca siparişine eklenen ücretsiz ürünü görüyor; ek sürpriz bir mesaj gerekiyorsa Klaviyo event'i üzerinden email/SMS tetiklenebilir.