{"id":1779,"date":"2026-07-18T09:00:00","date_gmt":"2026-07-18T14:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1779"},"modified":"2026-03-07T03:37:20","modified_gmt":"2026-03-07T08:37:20","slug":"campaign-performance-reports","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/campaign-performance-reports\/","title":{"rendered":"Campaign Performance Reports for Deep Links"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A campaign performance report should answer one question for each stakeholder: &quot;What should we do differently?&quot; Executives want ROI. Marketing managers want channel effectiveness. Product teams want user quality. If your report dumps raw data without interpretation, nobody reads it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers how to structure campaign performance reports for deep link campaigns. For deep link analytics, see <a href=\"https:\/\/tolinku.com\/blog\/deep-link-analytics-measuring-what-matters\/\">deep link analytics: measuring what matters<\/a>. For UTM parameter strategy, see <a href=\"https:\/\/tolinku.com\/blog\/utm-parameter-strategy\/\">UTM parameter strategy for mobile deep links<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/platform-analytics-filter-panel.png\" alt=\"Tolinku analytics filter panel with campaign, platform, device, and country filters\">\n<em>The collapsible analytics filter panel with 10 dropdown filters for slicing data.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Report Structure<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Executive Summary (1 page)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lead with the headline: &quot;Campaign X drove Y conversions at $Z CPA, exceeding\/missing target by N%.&quot;<\/p>\n\n\n\n<pre><code>CAMPAIGN SUMMARY: July 2026\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nTotal deep link clicks:    45,200 (+12% MoM)\nApp opens from links:      32,500 (72% open rate)\nConversions:               4,100 (12.6% conversion rate)\nRevenue attributed:        $82,000\nTotal campaign spend:      $35,000\nROAS:                      234%\nTarget ROAS:               200%\nStatus:                    EXCEEDING TARGET\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Channel Breakdown (1-2 pages)<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Channel<\/th>\n<th>Clicks<\/th>\n<th>App Opens<\/th>\n<th>Conversions<\/th>\n<th>CPA<\/th>\n<th>ROAS<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Email<\/td>\n<td>18,000<\/td>\n<td>14,400<\/td>\n<td>2,050<\/td>\n<td>$4.88<\/td>\n<td>310%<\/td>\n<\/tr>\n<tr>\n<td>Push notifications<\/td>\n<td>15,200<\/td>\n<td>12,160<\/td>\n<td>1,200<\/td>\n<td>$5.83<\/td>\n<td>220%<\/td>\n<\/tr>\n<tr>\n<td>Social (organic)<\/td>\n<td>5,000<\/td>\n<td>3,000<\/td>\n<td>450<\/td>\n<td>$0<\/td>\n<td>N\/A<\/td>\n<\/tr>\n<tr>\n<td>Paid social<\/td>\n<td>4,500<\/td>\n<td>2,250<\/td>\n<td>280<\/td>\n<td>$35.71<\/td>\n<td>145%<\/td>\n<\/tr>\n<tr>\n<td>QR codes<\/td>\n<td>2,500<\/td>\n<td>625<\/td>\n<td>120<\/td>\n<td>$8.33<\/td>\n<td>180%<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Insight: Email has the highest ROAS and lowest CPA. Paid social is the weakest performer. Consider shifting budget from paid social to email and QR code campaigns.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Funnel Analysis (1 page)<\/h3>\n\n\n\n<pre><code>Deep Link Funnel: Email Campaign &quot;summer-savings&quot;\n\nClick          \u2192 App Open       \u2192 Target Screen  \u2192 CTA Tap       \u2192 Conversion\n18,000         \u2192 14,400 (80%)   \u2192 13,200 (92%)   \u2192 6,600 (50%)  \u2192 2,050 (31%)\n               \u2193                 \u2193                 \u2193               \u2193\n               3,600 fallback    1,200 bounced     6,600 abandoned 4,550 not completed\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest drop-off is at &quot;CTA Tap&quot; (50% of users who see the target screen do not tap the CTA). This suggests the landing screen needs optimization, not the deep link itself.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deep Link Performance (1 page)<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Route<\/th>\n<th>Clicks<\/th>\n<th>Open Rate<\/th>\n<th>Conversion<\/th>\n<th>Top Source<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>\/offers\/summer-sale<\/code><\/td>\n<td>12,000<\/td>\n<td>78%<\/td>\n<td>15.2%<\/td>\n<td>Email<\/td>\n<\/tr>\n<tr>\n<td><code>\/products\/savings<\/code><\/td>\n<td>8,500<\/td>\n<td>70%<\/td>\n<td>10.5%<\/td>\n<td>Push<\/td>\n<\/tr>\n<tr>\n<td><code>\/referral<\/code><\/td>\n<td>5,200<\/td>\n<td>82%<\/td>\n<td>18.0%<\/td>\n<td>Social share<\/td>\n<\/tr>\n<tr>\n<td><code>\/dashboard<\/code><\/td>\n<td>4,500<\/td>\n<td>68%<\/td>\n<td>3.2%<\/td>\n<td>Push<\/td>\n<\/tr>\n<tr>\n<td><code>\/settings\/notifications<\/code><\/td>\n<td>2,000<\/td>\n<td>65%<\/td>\n<td>N\/A<\/td>\n<td>Push<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The referral route has the highest conversion rate (18%), confirming that referred users convert at higher rates. The dashboard route has low conversion because there is no specific conversion action associated with it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Report Templates<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Weekly Report<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Frequency: Every Monday morning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contents:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Week-over-week metrics<\/strong> (clicks, opens, conversions, revenue).<\/li>\n<li><strong>Top 5 performing deep links<\/strong> (by conversion rate).<\/li>\n<li><strong>Bottom 5 performing deep links<\/strong> (by open rate, investigating issues).<\/li>\n<li><strong>Campaign-specific highlights<\/strong> (any campaigns launched or ending this week).<\/li>\n<li><strong>Anomalies<\/strong> (unusual patterns, errors, unexpected spikes\/drops).<\/li>\n<li><strong>Action items<\/strong> (2-3 specific recommendations for the coming week).<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Monthly Report<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Frequency: First week of each month.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contents:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Executive summary<\/strong> with month-over-month trends.<\/li>\n<li><strong>Channel breakdown<\/strong> with ROAS and CPA by channel.<\/li>\n<li><strong>Cohort analysis<\/strong> (how this month&#39;s users compare to previous months).<\/li>\n<li><strong>Deep link performance<\/strong> by route, campaign, and source.<\/li>\n<li><strong>Funnel analysis<\/strong> for the top 3 campaigns.<\/li>\n<li><strong>A\/B test results<\/strong> (if any tests were run).<\/li>\n<li><strong>Platform breakdown<\/strong> (iOS vs Android vs web fallback).<\/li>\n<li><strong>Geographic performance<\/strong> (clicks and conversions by region).<\/li>\n<li><strong>Recommendations<\/strong> for next month.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Quarterly Report<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Frequency: End of each quarter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Contents:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Quarter summary<\/strong> with quarter-over-quarter trends.<\/li>\n<li><strong>Budget allocation analysis<\/strong> (did we spend on the right channels?).<\/li>\n<li><strong>LTV by acquisition source<\/strong> (which deep link sources produce the most valuable users?).<\/li>\n<li><strong>Retention cohorts<\/strong> (are users from deep links retaining better over time?).<\/li>\n<li><strong>Strategic recommendations<\/strong> for next quarter.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Metrics by Audience<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">For Executives<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Focus on business impact:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Revenue attributed to deep link campaigns.<\/strong> Total revenue driven by deep links.<\/li>\n<li><strong>ROAS by channel.<\/strong> Where each dollar is most effective.<\/li>\n<li><strong>Customer acquisition cost.<\/strong> How much it costs to acquire a converting user via deep links.<\/li>\n<li><strong>Quarter-over-quarter growth.<\/strong> Trend line of deep link-driven revenue.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">For Marketing Managers<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Focus on campaign optimization:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Click-through rates by campaign.<\/strong> Which campaigns get the most engagement.<\/li>\n<li><strong>Conversion rates by source.<\/strong> Which channels produce the best converters.<\/li>\n<li><strong>A\/B test results.<\/strong> What creative\/copy\/timing variations performed best.<\/li>\n<li><strong>Funnel drop-off points.<\/strong> Where users abandon after clicking a deep link.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">For Product Teams<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Focus on user quality:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Retention by deep link source.<\/strong> Do deep-linked users retain better than organic?<\/li>\n<li><strong>Feature adoption by entry point.<\/strong> Which routes lead to the most feature discovery?<\/li>\n<li><strong>Error rates by route.<\/strong> Which routes have technical issues?<\/li>\n<li><strong>Fallback rate by platform.<\/strong> How well are Universal Links \/ App Links working?<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Automation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Scheduled Report Generation<\/h3>\n\n\n\n<pre><code class=\"language-typescript\">interface ReportConfig {\n  name: string;\n  frequency: &#39;daily&#39; | &#39;weekly&#39; | &#39;monthly&#39;;\n  recipients: string[];\n  sections: ReportSection[];\n  format: &#39;pdf&#39; | &#39;html&#39; | &#39;csv&#39;;\n}\n\nasync function generateReport(config: ReportConfig): Promise&lt;Report&gt; {\n  const dateRange = getDateRange(config.frequency);\n  const data: Record&lt;string, any&gt; = {};\n\n  for (const section of config.sections) {\n    switch (section.type) {\n      case &#39;summary&#39;:\n        data.summary = await getSummaryMetrics(dateRange);\n        break;\n      case &#39;channels&#39;:\n        data.channels = await getChannelBreakdown(dateRange);\n        break;\n      case &#39;funnel&#39;:\n        data.funnel = await getFunnelData(dateRange, section.campaigns);\n        break;\n      case &#39;routes&#39;:\n        data.routes = await getRoutePerformance(dateRange);\n        break;\n      case &#39;cohorts&#39;:\n        data.cohorts = await getCohortData(dateRange);\n        break;\n    }\n  }\n\n  return renderReport(config, data);\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Data Export<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Export raw data for custom analysis:<\/p>\n\n\n\n<pre><code class=\"language-typescript\">async function exportCampaignData(\n  campaign: string,\n  dateRange: DateRange,\n  format: &#39;csv&#39; | &#39;json&#39;\n): Promise&lt;string&gt; {\n  const clicks = await analyticsDB.query(`\n    SELECT\n      click_id, timestamp, route, source, medium, campaign,\n      platform, country, city, outcome, latency_ms\n    FROM deep_link_clicks\n    WHERE campaign = ? AND timestamp BETWEEN ? AND ?\n    ORDER BY timestamp\n  `, [campaign, dateRange.start, dateRange.end]);\n\n  return format === &#39;csv&#39; ? toCSV(clicks) : JSON.stringify(clicks);\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Common Report Mistakes<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Data without insight.<\/strong> &quot;Clicks went up 15%&quot; is data. &quot;Clicks went up 15% because of the email campaign, which we should scale next month&quot; is insight.<\/li>\n<li><strong>Too many metrics.<\/strong> If the report has 50 metrics, nobody reads it. Focus on 5-7 key metrics per audience.<\/li>\n<li><strong>No comparison.<\/strong> Always compare to a baseline: last period, target, or benchmark.<\/li>\n<li><strong>Ignoring negative results.<\/strong> Report what did not work and why. This is more actionable than reporting successes.<\/li>\n<li><strong>No action items.<\/strong> Every report should end with 2-3 specific, actionable recommendations.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku for Campaign Reporting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/analytics\">Tolinku&#39;s analytics<\/a> provide campaign-level reporting with click, conversion, and attribution data. Export data from the <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/analytics\/exporting\/\">Tolinku dashboard<\/a> for custom reports, or use the built-in charts and funnels for standard reporting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For deep link analytics, see <a href=\"https:\/\/tolinku.com\/blog\/deep-link-analytics-measuring-what-matters\/\">deep link analytics: measuring what matters<\/a>. For UTM parameters, see <a href=\"https:\/\/tolinku.com\/blog\/utm-parameter-strategy\/\">UTM parameter strategy for mobile deep links<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Create campaign performance reports that stakeholders love. Structure reports around ROI, channel effectiveness, and actionable insights.<\/p>\n","protected":false},"author":2,"featured_media":1778,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Campaign Performance Reports for Deep Links","rank_math_description":"Create campaign performance reports that stakeholders love. Structure reports around ROI, channel effectiveness, and actionable insights.","rank_math_focus_keyword":"campaign performance reports","rank_math_canonical_url":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-campaign-performance-reports.png","rank_math_facebook_image_id":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-campaign-performance-reports.png","footnotes":""},"categories":[14],"tags":[37,38,529,20,110,69,345,176],"class_list":["post-1779","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-analytics","tag-campaign-tracking","tag-data-visualization","tag-deep-linking","tag-marketing","tag-mobile-development","tag-reporting","tag-roi"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/comments?post=1779"}],"version-history":[{"count":2,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1779\/revisions"}],"predecessor-version":[{"id":2412,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1779\/revisions\/2412"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1778"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}