API رشد
دریافت عملکرد کمپینهای UTM از Public API آلفانا.
API رشد برای دریافت دادههای UTM از Public API آلفانا استفاده میشود و کمک میکند عملکرد ترکیبهای مختلف Campaign، Source و Medium را خارج از داشبورد نیز تحلیل کنید.
در نسخه فعلی، endpoint زیر دادههای UTM را برای یک App و بازه زمانی مشخص برمیگرداند:
GET /api/v1/growth/utmاین endpoint حداکثر ۱۰۰ ترکیب دقیق UTM را همراه تعداد Sessionها و Visitorهای یکتا برمیگرداند.
هر ردیف نماینده یک ترکیب مشخص از پارامترهای UTM است؛ بنابراین اگر فقط یکی از مقادیر Source، Medium، Campaign، Term یا Content متفاوت باشد، آن ترکیب میتواند بهعنوان یک ردیف جدا در نتیجه دیده شود.
نمونه درخواست#
برای دریافت عملکرد UTM یک App در یک بازه زمانی مشخص:
curl --get https://api.alphana.ir/api/v1/growth/utm \
-H "Authorization: Bearer $ALPHANA_API_KEY" \
--data-urlencode "appId=11111111-1111-4111-8111-111111111111" \
--data-urlencode "from=2026-07-01T00:00:00.000Z" \
--data-urlencode "to=2026-07-31T23:59:59.999Z"در این درخواست:
appIdمشخص میکند دادههای کدام App باید بررسی شوند.fromابتدای بازه زمانی گزارش را تعیین میکند.toانتهای بازه زمانی گزارش را مشخص میکند.- Account API Key از طریق Header
Authorizationارسال میشود.
برای درخواستهای Public API باید از Account API Key معتبر با پیشوند alphana_api_ استفاده کنید.
پارامتر appId#
مقدار appId باید شناسه Appی باشد که حساب فعلی به آن دسترسی دارد.
اگر شناسه App را در اختیار ندارید، ابتدا فهرست Appهای قابلدسترسی را دریافت کنید:
GET /api/v1/appsسپس مقدار id App موردنظر را بهعنوان appId در درخواست Growth استفاده کنید.
برای مثال:
appId=11111111-1111-4111-8111-111111111111Account API Key باید به App موردنظر دسترسی داشته باشد؛ در غیر این صورت درخواست تحلیلی نباید به دادههای آن App دسترسی پیدا کند.
بازه زمانی#
مقادیر from و to بازه زمانی گزارش را مشخص میکنند.
برای مثال:
from=2026-07-01T00:00:00.000Z
to=2026-07-31T23:59:59.999Zبهتر است بازه زمانی را صریح و با timestamp کامل ارسال کنید تا مرز گزارش قابلپیشبینی باشد.
انتخاب بازه به نوع تحلیلی که انجام میدهید بستگی دارد. برای مثال میتوانید عملکرد یک Campaign را در طول یک ماه بررسی کنید یا دو بازه مشابه را در سیستم خودتان با یکدیگر مقایسه کنید.
ساختار ترکیب UTM#
هر ردیف نتیجه بر اساس ترکیب دقیق فیلدهای UTM ساخته میشود.
فیلدهای اصلی عبارتاند از:
| فیلد | معنی |
|---|---|
source | منبع ورودی، معادل utm_source |
medium | کانال یا Medium، معادل utm_medium |
campaign | نام Campaign، معادل utm_campaign |
term | Keyword یا Audience، معادل utm_term |
content | Creative، Placement یا CTA، معادل utm_content |
برای مثال، این دو URL:
/pricing?utm_source=google&utm_medium=cpc&utm_campaign=springو:
/pricing?utm_source=google&utm_medium=cpc&utm_campaign=summerبه دلیل تفاوت در Campaign، دو ترکیب UTM جدا در گزارش ایجاد میکنند.
Sessionها و Visitorها#
در کنار هر ترکیب UTM، API تعداد Sessionها و Visitorهای یکتا را برمیگرداند.
Sessions نشان میدهد چند Session با همان ترکیب UTM ثبت شدهاند.
Visitors تعداد Visitorهای یکتایی را نشان میدهد که در همان ترکیب دیده شدهاند.
این دو Metric الزاماً برابر نیستند؛ چون یک Visitor میتواند بیش از یک Session داشته باشد.
برای مثال، ممکن است یک ترکیب این وضعیت را داشته باشد:
sessions: 180
visitors: 125این یعنی ۱۲۵ Visitor یکتا در مجموع ۱۸۰ Session برای همان ترکیب UTM ثبت کردهاند.
حذف ردیفهای بدون Source#
ردیفهایی که مقدار utm_source ندارند از نتیجه این endpoint حذف میشوند.
یعنی اگر یک Session هیچ Source UTM ثبتشدهای نداشته باشد، در خروجی GET /api/v1/growth/utm قرار نمیگیرد.
این رفتار کمک میکند خروجی این endpoint روی Trafficی متمرکز بماند که واقعاً با UTM Source قابل دستهبندی است.
اگر هدف شما تحلیل کل Traffic، Referrer یا ورودیهای بدون UTM است، باید از گزارش یا endpoint متناسب با همان نوع داده استفاده کنید.
ترتیب نتایج#
نتیجه ابتدا بر اساس تعداد Sessionها بهصورت نزولی مرتب میشود.
اگر دو ردیف تعداد Session برابر داشته باشند، تعداد Visitorها معیار بعدی مرتبسازی خواهد بود و آن نیز بهصورت نزولی اعمال میشود.
بهصورت مفهومی:
sessions DESC
visitors DESCدر نتیجه، ترکیبهایی که بیشترین حجم Session را داشتهاند در ابتدای پاسخ قرار میگیرند.
این ترتیب برای نمایش سریع Campaignها و Sourceهای پرترافیک مناسب است.
محدودیت ۱۰۰ ترکیب#
این endpoint حداکثر ۱۰۰ ترکیب UTM را در پاسخ برمیگرداند.
اگر در بازه زمانی انتخابشده بیش از ۱۰۰ ترکیب مختلف وجود داشته باشد، فقط ۱۰۰ مورد اول بر اساس ترتیب فعلی گزارش در پاسخ دیده میشوند.
از آنجا که مرتبسازی ابتدا بر اساس sessions و سپس visitors انجام میشود، ترکیبهای پرترافیکتر در اولویت قرار میگیرند.
اگر سیستم شما تعداد زیادی ترکیب UTM تولید میکند، بهتر است Naming کمپینها را کنترل کنید تا داده به دلیل تفاوتهای کوچک و ناخواسته بیش از حد پراکنده نشود.
مقدارهای Nullable#
همه Campaignها الزاماً تمام پارامترهای UTM را ندارند.
برای مثال ممکن است URL فقط شامل این موارد باشد:
utm_source=google
utm_medium=cpc
utm_campaign=spring_saleو utm_term یا utm_content در آن وجود نداشته باشند.
در چنین شرایطی، فیلدهای term یا content میتوانند در داده واقعی مقدار nullable داشته باشند.
بنابراین در integration خود فرض نکنید تمام پنج فیلد UTM همیشه string غیرخالی هستند.
برای مثال، در TypeScript بهتر است ساختار داده شما امکان null را برای فیلدهای اختیاری در نظر بگیرد.
نمونه مدل داده#
یک مدل ساده برای مصرف نتیجه میتواند مفهومی شبیه این داشته باشد:
type UtmPerformanceRow = {
source: string;
medium: string | null;
campaign: string | null;
term: string | null;
content: string | null;
sessions: number;
visitors: number;
};این مثال فقط برای نشان دادن نحوه برخورد با فیلدهای nullable است؛ هنگام پیادهسازی نهایی، قرارداد واقعی پاسخ endpoint را مبنا قرار دهید.
اهمیت Naming Convention#
چون گزارش بر اساس ترکیب دقیق UTMها ساخته میشود، تفاوتهای کوچک در Naming میتوانند داده را بین چند ردیف جدا کنند.
برای مثال، این مقادیر ممکن است بهعنوان Sourceهای جدا دیده شوند:
google
Google
google_adsحتی اگر از نگاه تیم بازاریابی همه آنها به یک منبع اشاره کنند، Naming نامنظم میتواند تحلیل را سختتر کند.
بهتر است قبل از اجرای Campaignها یک Convention ثابت برای موارد زیر داشته باشید:
utm_source
utm_medium
utm_campaign
utm_term
utm_contentاین موضوع بهخصوص زمانی مهم است که داده Public API وارد Dashboard داخلی، BI Tool یا گزارشهای سفارشی شما میشود.
نمونه استفاده در Backend#
میتوانید این endpoint را از Backend خود فراخوانی کنید و داده را برای گزارش داخلی پردازش کنید.
برای مثال:
const url = new URL("https://api.alphana.ir/api/v1/growth/utm");
url.searchParams.set("appId", "11111111-1111-4111-8111-111111111111");
url.searchParams.set("from", "2026-07-01T00:00:00.000Z");
url.searchParams.set("to", "2026-07-31T23:59:59.999Z");
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${process.env.ALPHANA_API_KEY}`,
Accept: "application/json",
},
});
const data = await response.json();Account API Key در این مثال فقط از Environment سمت Server خوانده میشود و نباید به Client منتقل شود.
تحلیل Source و Campaign#
یکی از استفادههای معمول این endpoint مقایسه عملکرد Campaignهاست.
برای مثال میتوانید بررسی کنید:
- کدام
utm_sourceبیشترین Session را ایجاد کرده است - کدام Campaign Visitorهای بیشتری آورده است
- آیا یک Source تعداد Session بالا اما Visitor یکتای کمتری دارد
- کدام ترکیب Source و Medium در یک بازه زمانی فعالتر بوده است
- کدام Campaignها به دلیل Naming نامنظم در چند ردیف شکسته شدهاند
این endpoint حجم ورود را نشان میدهد؛ برای تفسیر کاملتر نتیجه Campaign بهتر است این داده را در کنار Revenue، Goal یا رفتار بعد از ورود کاربران بررسی کنید.
UTM در SDK#
دادهای که در این endpoint دیده میشود از UTMهایی میآید که SDK هنگام ورود Visitor ثبت میکند.
SDK پارامترهای Campaign را از URL میخواند و آنها را در context مربوط به Traffic و Attribution نگه میدارد.
برای جزئیات بیشتر درباره capture شدن UTMها، first-touch، last-touch و Click IDها، صفحه UTM و Attribution را ببینید.
احراز هویت#
این endpoint بخشی از Public API است و باید با Account API Key فراخوانی شود.
برای مثال:
Authorization: Bearer alphana_api_...App secretKey مورد استفاده SDK برای این درخواست مناسب نیست.
اگر درباره تفاوت Credentialها مطمئن نیستید، صفحه احراز هویت Public API را ببینید.
مسیر پیشنهادی برای استفاده#
یک جریان معمول برای دریافت داده UTM میتواند به این شکل باشد:
- Account API Key را در Backend نگهداری کنید.
- با
GET /api/v1/appsشناسه App موردنظر را پیدا کنید. - بازه زمانی گزارش را مشخص کنید.
GET /api/v1/growth/utmرا باappId،fromوtoفراخوانی کنید.- مقدارهای nullable مثل
termوcontentرا در مدل داده در نظر بگیرید. - نتیجه را بر اساس Source، Medium یا Campaign در ابزار داخلی خود نمایش یا تحلیل کنید.
- برای تحلیل عمیقتر، UTM را در کنار رفتار و نتیجه واقعی کاربر بررسی کنید.