احسب معدل نمو قائمتكم البريدية
قد يبدو نمو القائمة البريدية جيداً، مع أن إلغاء الاشتراكات يعوّض بصمت جزءاً كبيراً من جهود الاستقطاب.
شغّل الأداة مجانًا
تفصل هذه الحاسبة بين هذين المنظورين. أدخلوا عدد المشتركين في بداية الفترة ونهايتها، إلى جانب عدد حالات إلغاء الاشتراك المسجلة خلالها. ستحصلون على صافي التغير، وعدد التسجيلات الإجمالي المستنتج، ومعدل النمو الصافي ومعدل التسجيل الإجمالي قياساً إلى القائمة الأولية، مما يتيح مقارنة الأسابيع أو الأشهر أو الحملات على أساس متسق.
ميّزوا بين النمو الصافي والاستقطاب الإجمالي
يوضح النمو الصافي مقدار زيادة القائمة أو نقصانها بعد جمع أثر التسجيلات الجديدة وحالات إلغاء الاشتراك. ويُحسب بطرح عدد المشتركين في البداية من عددهم في النهاية، ثم قسمة التغير على عدد البداية وضرب الناتج في 100. أما معدل التسجيل الإجمالي فيجيب عن سؤال مختلف: كم شخصاً انضم قبل خصم الخسائر قياساً إلى حجم القائمة الأصلي؟ ولأن المدخلات تتضمن إلغاء الاشتراكات بدلاً من التسجيلات، تعيد الحاسبة بناء عدد التسجيلات الإجمالي بإضافة حالات الإلغاء إلى صافي التغير. فعلى سبيل المثال، إذا بدأت القائمة بـ10,000 مشترك وانتهت بـ10,800 وسجلت 200 حالة إلغاء، يكون صافي التغير 800، ويبلغ عدد التسجيلات الإجمالي المستنتج 1,000. وبذلك يكون النمو الصافي 8%، بينما يبلغ معدل التسجيل الإجمالي 10%. تمنع قراءة الرقمين معاً خسارة المشتركين من حجب أداء الاستقطاب، كما تمنع اعتبار شهر قوي في التسجيلات نمواً محتفظاً به بالقوة نفسها. استخدموا المعدلين معاً، لأن أياً منهما لا يقدّم الصورة الكاملة بمفرده.
أعدّوا فترة قياس متسقة
اختاروا فترة واضحة الحدود قبل إدخال الأعداد، مثل شهر تقويمي أو مدة حملة أو دورة تقارير من أربعة أسابيع. يجب أن يمثل عدد البداية إجمالي المشتركين النشطين عند افتتاح الفترة، وأن يستخدم عدد النهاية التعريف نفسه عند إغلاقها. وينبغي أن تغطي حالات إلغاء الاشتراك الفترة ذاتها وأن تتبع التعريف المعتمد في منصتكم البريدية. لا تجمعوا إجمالي نهاية شهر مع حالات الإلغاء الخاصة بحملة واحدة فقط، لأن عدد التسجيلات المستنتج سيخلط نطاقات غير متوافقة. تحققوا أيضاً مما إذا كانت المنصة تستبعد من العدد النشط العناوين المرتدة أو المحظورة أو جهات الاتصال المحذوفة يدوياً. فإذا خفّضت هذه الحالات عدد النهاية ولم تدخل ضمن رقم إلغاء الاشتراك، فقد يختلف عدد التسجيلات المعاد بناؤه عن تقرير المنصة. تستخدم الحاسبة الأعداد الثلاثة المقدمة فقط ولا تفترض تعديلات غير موثقة. سجّلوا مصدر كل قيمة ووقت استخراجها كي يمكن إعادة إنتاج التقارير لاحقاً، وطبّقوا قواعد الإدراج نفسها في جميع الفترات التي تقارنون بينها.
فسّروا المعدلات ضمن سياقها
قارنوا فترات متقاربة في الطول، واستخدموا القائمة الأولية مقاماً مشتركاً. فمعدل تسجيل إجمالي شهري قدره 5% لا يُقارن مباشرة بمعدل أسبوعي قدره 5%، كما أن جمع النسب الأسبوعية لا ينتج قيمة شهرية موثوقة لأن قاعدة المشتركين تتغير بمرور الوقت. قد يكون النمو الصافي سالباً رغم وجود تسجيلات، وهذا يعني أن الخسائر تجاوزت الاستقطاب. وقد يكون معدل التسجيل الإجمالي موجباً بينما يظل النمو الصافي ثابتاً، مما يكشف أن الفريق استبدل فقط من غادروا. حلّلوا هذا النمط إلى جانب أسباب إلغاء الاشتراك ومصادر الاستقطاب والتفاعل وقابلية التسليم، بدلاً من تقييم برنامج التسجيل وحده. تقرّب الحاسبة المعدلات المعروضة إلى ست منازل عشرية لضمان ناتج ثابت قابل للتكرار، بينما تستخدم الصيغ أعداد المشتركين الصحيحة المدخلة. إذا أدت القيم إلى عدد تسجيلات إجمالي سالب، فهي غير متسقة وتُرفض. ويُرفض أيضاً عدد بداية يساوي صفراً لعدم وجود مقام معرّف؛ استخدموا أعداد التسجيل المطلقة إلى أن تتوافر قاعدة أولية موجبة.
حالات الاستخدام
تقرير النشرة الشهري
افصلوا نشاط الاستقطاب عن نمو القائمة المحتفظ به في لوحة تسويق دورية.
مراجعة أداء الحملة
قارنوا التسجيلات الإجمالية الناتجة عن الحملة بصافي التغير بعد إلغاء الاشتراكات.
تشخيص فقد المشتركين
حدّدوا الفترات التي أنتج فيها حجم تسجيل جيد نمواً صافياً ضعيفاً أو سالباً.
الأسئلة الشائعة
كيف يُحسب معدل النمو الصافي للقائمة البريدية؟
اطرحوا عدد المشتركين في البداية من عددهم في النهاية، واقسموا التغير على عدد البداية، ثم اضربوا في 100.
كيف تُحسب التسجيلات الإجمالية من دون إدخالها؟
تُستنتج بطرح عدد البداية من عدد النهاية ثم إضافة حالات إلغاء الاشتراك.
لماذا يجب أن يكون عدد المشتركين في البداية أكبر من صفر؟
لأن كلا المعدلين يُقسم على عدد البداية، ولذلك تكون النسب غير معرّفة عندما يساوي صفراً.
هل يمكن أن يكون معدل النمو الصافي سالباً؟
نعم. يعني المعدل السالب أن القائمة في النهاية أصغر منها في البداية.
ماذا يعني خطأ الأعداد غير المتسقة؟
تعني الرسالة أن الأعداد تؤدي إلى تسجيلات إجمالية أقل من صفر، ولذلك يوجد خطأ في إحدى القيم أو حدود الفترة.
ما تكلفة طلب API؟
تبلغ تكلفة كل طلب API مقدار $0.002. ويمكن تشغيل الحاسبة في المتصفح أيضاً.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/biz/email-list-growth-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_subscribers":10000,"ending_subscribers":10800,"unsubscribes":200}'const res = await fetch("https://api.kit.forhosting.com/biz/email-list-growth-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_subscribers": 10000,
"ending_subscribers": 10800,
"unsubscribes": 200
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/email-list-growth-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_subscribers": 10000,
"ending_subscribers": 10800,
"unsubscribes": 200
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/email-list-growth-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_subscribers":10000,"ending_subscribers":10800,"unsubscribes":200}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_subscribers":10000,"ending_subscribers":10800,"unsubscribes":200}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/email-list-growth-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"starting_subscribers": 10000,
"ending_subscribers": 10800,
"unsubscribes": 200
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.email_list_growth_rate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |