נניח שכבר אספת בסיס דוא"ל CRM של לקוחות שביצעו רכישה. תנועה קרה נותנת CPA מעל $14–20, ואתה צריך להתרחב בעלות נמוכה יותר. הפתרון הוא קהלים דומים (lookalike) שנבנים על פלח של הקונים הטובים ביותר. אבל רבים מעלים רשימות "גולמיות"—כל ההרשמות האקראיות. האלגוריתם בונה קהל דומה, אבל הוא מניב CPA לא נמוך מהמקורי. הסוד טמון בפלח זרע איכותי: רק אלה שהביאו הכנסה אמיתית. להלן תהליך מוכח עם מספרים אמיתיים וקוד מוכן.
פלחים לקהלי זרע: אילו עובדים הכי טוב
איכות הקהל המתקבל תלויה ישירות בנתוני הזרע. ככל שנתאר בצורה מדויקת יותר את "הפרופיל" של משתמש שהמיר, כך הדיוק יהיה גבוה יותר. הנה פלחים אופייניים:
| פלח | גודל מינימלי | איכות |
|---|---|---|
| קונים ב-90 הימים האחרונים | 500–1000 | גבוהה מאוד |
| משתמשים עם LTV > $45–65 | 500 | גבוהה |
| השלימו ניסיון → תוכנית בתשלום | 300 | גבוהה |
| צפו בדפים מרכזיים | 1000+ | בינונית |
| כל המשתמשים הרשומים | 5000+ | נמוכה |
פלח של 500 קונים נותן דיוק גבוה פי 3 מרשימה של 5000 הרשמות אקראיות. לכן, אנחנו תמיד מתחילים בניתוח CRM ובחירת הליבה—משתמשים עם ה-LTV הגבוה ביותר. בנוסף, אנחנו מעשירים נתונים דרך CRM ואנליטיקת אירועים כדי להחריג אנשי קשר לא פעילים.
בפרויקט מסחר אלקטרוני אחד עם מחזור של $450k–650k, בודדנו פלח של קונים עם LTV > $45–65 (800 רשומות בסך הכל). לאחר יצירת קהל דומה, ה-CPA ירד מ-$11–16 ל-$7–10, וההמרה עלתה ב-40%. המפתח היה פלח זרע איכותי.
כדי לבחור את הפלטפורמה, השווה את הפרמטרים העיקריים של Meta ו-VK:
| פרמטר | Meta (פייסבוק/אינסטגרם) | VK Ads |
|---|---|---|
| גודל זרע מינימלי | 200 רשומות | 500 רשומות |
| פורמט נתונים | SHA-256 בלבד | פתוח או SHA-256 עם קידומת |
| גודל קהל דומה | 1%–10% מהמדינה | עד 1,000,000 |
| עדכון אוטומטי | דרך API | דרך ייבוא |
למה חשוב לבצע hash לאנשי קשר לקהל דומה?
לפני שליחה למערכות פרסום, יש לנרמל דוא"ל וטלפונים ולבצע להם hash עם SHA-256. אחרת, המערכת תדחה את הנתונים או תפחית את איכות ההתאמה. ב-Laravel, זה נעשה עם מחלקה אחת—ראה דוגמה למטה.
למה דווקא SHA-256?
זוהי פונקציית hash בלתי הפיכה המומלצת על ידי פלטפורמות פרסום. היא הופכת נתונים למחרוזת באורך קבוע שלא ניתן להפוך. ניתן לקרוא עוד על SHA-256 ב-ויקיפדיה.class AudienceExporter {
public function exportHighValueCustomers(): array {
return User::query()
->join('orders', 'orders.user_id', '=', 'users.id')
->where('orders.status', 'completed')
->where('orders.created_at', '>=', now()->subDays(90))
->groupBy('users.id', 'users.email', 'users.phone')
->havingRaw('SUM(orders.total) >= ?', [5000])
->get(['users.email', 'users.phone'])
->map(fn($user) => [
'email' => hash('sha256', strtolower(trim($user->email))),
'phone' => $user->phone ? hash('sha256', $this->normalizePhone($user->phone)) : null,
])
->toArray();
}
private function normalizePhone(string $phone): string {
$digits = preg_replace('/\D/', '', $phone);
if (strlen($digits) === 10) $digits = '7' . $digits;
return '+' . $digits;
}
public function exportToCsv(array $data, string $filename): string {
$path = storage_path("app/audiences/{$filename}.csv");
$fp = fopen($path, 'w');
fputcsv($fp, ['email', 'phone']);
foreach ($data as $row) {
fputcsv($fp, [$row['email'], $row['phone'] ?? '']);
}
fclose($fp);
return $path;
}
} איך להעלות קהל ל-Meta (פייסבוק/אינסטגרם)?
Meta מספקת את Custom Audiences API. כדי להעלות, בצע את השלבים הבאים:
- צור קהל מותאם אישית דרך API.
- העבר דוא"לים עם hash בקבוצות של עד 10,000 רשומות.
- בנה קהל דומה על בסיס הקהל הזה.
רצף: צור קהל מותאם אישית -> העלה hashes -> בנה קהל דומה. חשוב לציין את הסכמה class AudienceExporter { public function exportHighValueCustomers(): array { return User::query() ->join('orders', 'orders.user_id', '=', 'users.id') ->where('orders.status', 'completed') ->where('orders.created_at', '>=', now()->subDays(90)) ->groupBy('users.id', 'users.email', 'users.phone') ->havingRaw('SUM(orders.total) >= ?', [5000]) ->get(['users.email', 'users.phone']) ->map(fn($user) => [ 'email' => hash('sha256', strtolower(trim($user->email))), 'phone' => $user->phone ? hash('sha256', $this->normalizePhone($user->phone)) : null, ]) ->toArray(); } private function normalizePhone(string $phone): string { $digits = preg_replace('/\D/', '', $phone); if (strlen($digits) === 10) $digits = '7' . $digits; return '+' . $digits; } public function exportToCsv(array $data, string $filename): string { $path = storage_path("app/audiences/{$filename}.csv"); $fp = fopen($path, 'w'); fputcsv($fp, ['email', 'phone']); foreach ($data as $row) { fputcsv($fp, [$row['email'], $row['phone'] ?? '']); } fclose($fp); return $path; } } . הקוד למטה עושה זאת אוטומטית.
class MetaAudienceService {
private const API_VERSION = 'v19.0';
private string $accessToken;
private string $adAccountId;
public function createCustomAudience(string $name, string $description): string {
$response = Http::post(
"https://graph.facebook.com/{$this->API_VERSION}/act_{$this->adAccountId}/customaudiences",
[
'name' => $name,
'subtype' => 'CUSTOM',
'description' => $description,
'customer_file_source' => 'USER_PROVIDED_ONLY',
'access_token' => $this->accessToken,
]
);
return $response->json('id');
}
public function uploadUsers(string $audienceId, array $hashedEmails): void {
foreach (array_chunk($hashedEmails, 10000) as $chunk) {
$payload = [
'schema' => ['EMAIL_SHA256'],
'data' => array_map(fn($email) => [$email], $chunk),
];
Http::post(
"https://graph.facebook.com/{$this->API_VERSION}/{$audienceId}/users",
[
'payload' => json_encode($payload),
'access_token' => $this->accessToken,
]
);
}
}
public function createLookalike(string $sourceAudienceId, string $country, float $ratio = 0.01): string {
$response = Http::post(
"https://graph.facebook.com/{$this->API_VERSION}/act_{$this->adAccountId}/customaudiences",
[
'name' => "Lookalike {$country} {$ratio}",
'subtype' => 'LOOKALIKE',
'origin_audience_id' => $sourceAudienceId,
'lookalike_spec' => json_encode([
'type' => 'similarity',
'country' => $country,
'ratio' => $ratio,
]),
'access_token' => $this->accessToken,
]
);
return $response->json('id');
}
} העלאת קהל ל-VK Ads
VK מקבל דוא"לים גם בצורה פתוחה וגם עם hash (עם קידומת). אלגוריתם: צור קבוצת retargeting -> ייבא אנשי קשר. שים לב: לחשבונות עסקיים יש מגבלות משלהם, אבל התהליך הבסיסי זהה.
class VkAudienceService {
public function uploadToRetargeting(string $name, array $hashedEmails): int
{
$content = implode("\n", $hashedEmails);
$response = Http::withToken($this->token)
->post('https://api.vk.com/method/ads.createTargetGroup', [
'account_id' => $this->accountId,
'name' => $name,
'v' => '5.199',
]);
$groupId = $response->json('response.id');
Http::withToken($this->token)
->post('https://api.vk.com/method/ads.importTargetContacts', [
'account_id' => $this->accountId,
'target_group_id' => $groupId,
'contacts' => $content,
'v' => '5.199',
]);
return $groupId;
}
} אוטומציה של עדכוני קהל דומה
קהלים דומים מתיישנים ככל שמופיעות המרות חדשות. ייצוא ידני כל שבוע אינו הכרחי. הגדרנו עדכונים אוטומטיים דרך EMAIL_SHA256—זה עובד כמו שעון.
class UpdateLookalikeAudiences implements ShouldQueue {
public function handle(): void {
$exporter = app(AudienceExporter::class);
$data = $exporter->exportHighValueCustomers();
$emails = array_column($data, 'email');
app(MetaAudienceService::class)->uploadUsers(
config('ads.meta.buyer_audience_id'),
$emails
);
Log::info("Lookalike audience updated", ['count' => count($emails)]);
}
} אלגוריתם הגדרה שלב אחר שלב
- נתח נתוני אתר קיימים (CRM, טפסים, אירועים)—בודד את פלח הזרע.
- פתח מודול ייצוא עם hash ואימות.
- שלב עם פלטפורמות פרסום נבחרות (Meta, VK).
- הגדר עדכונים אוטומטיים דרך cron או מתזמן.
- ניטור—תעד שגיאות וטריות הקהל.
מה כלול בעבודה
- ניתוח נתונים ובחירת פלח הזרע האופטימלי.
- פיתוח מייצא עם hash SHA-256 ותמיכה בפורמטים של Meta ו-VK.
- אינטגרציה עם APIs של פלטפורמות פרסום (אחת או כמה).
- הגדרת עדכונים אוטומטיים שבועיים.
- תיעוד וייעוץ לאחר השקה.
לוח זמנים ואיך להתחיל
מערכת ייצוא קהל עם hash ועדכונים אוטומטיים לפלטפורמה אחת אורכת 4–6 ימי עבודה. עבור מספר פלטפורמות, לוח הזמנים מתארך ל-8–10 ימים. אנחנו עובדים עם קהלים דומים למעלה מ-5 שנים והשלמנו 30+ פרויקטים מוצלחים—זה מבטיח אמינות ואיכות.
הזמן הגדרת מערכת ייצוא—נכין את פלח הזרע, נגדיר אינטגרציה ונגדיר עדכונים אוטומטיים. צור קשר לייעוץ.







