{"id":1386,"date":"2026-06-09T09:00:00","date_gmt":"2026-06-09T14:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1386"},"modified":"2026-03-07T03:49:09","modified_gmt":"2026-03-07T08:49:09","slug":"analytics-data-migration","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/analytics-data-migration\/","title":{"rendered":"Analytics Data Migration for Deep Linking Platforms"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Switching deep linking platforms is not just about updating SDKs and redirect rules. Your analytics data, the click counts, attribution records, conversion funnels, and campaign performance history, lives on the old platform. If you do not plan for data migration, you lose historical context and start from zero on the new platform.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers how to handle analytics data during a deep linking platform migration: what to export, how to maintain reporting continuity, and how to set baselines on your new platform. For the overall migration timeline, see <a href=\"https:\/\/tolinku.com\/blog\/migration-timeline-planning\/\">migration timeline planning<\/a>. For risk mitigation, see <a href=\"https:\/\/tolinku.com\/blog\/migration-risk-mitigation\/\">migration risk mitigation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Analytics Data to Migrate<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Data You Can Export<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most deep linking platforms allow exporting:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Click data:<\/strong> Timestamps, URLs, referring sources, device information.<\/li>\n<li><strong>Attribution data:<\/strong> Install attributions, campaign IDs, source\/medium.<\/li>\n<li><strong>Conversion events:<\/strong> Post-install events that were tracked via the SDK.<\/li>\n<li><strong>Campaign summaries:<\/strong> Aggregated performance metrics per campaign.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Data You Cannot Migrate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Some data is platform-specific and cannot be transferred:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Real-time attribution state:<\/strong> The mapping between active sessions and pending attributions.<\/li>\n<li><strong>Deferred link match queues:<\/strong> Pending click-to-install matches that have not resolved yet.<\/li>\n<li><strong>Platform-internal IDs:<\/strong> User IDs and session IDs that are specific to the old platform&#39;s system.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What to Prioritize<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Focus on exporting:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Campaign performance history<\/strong> (at minimum, monthly aggregates by campaign, source, and medium). This is essential for year-over-year comparisons.<\/li>\n<li><strong>Attribution records<\/strong> for the last 30-90 days. These are the most recent and relevant.<\/li>\n<li><strong>Conversion funnel data<\/strong> for baseline comparison after migration.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Export Strategies<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">API Export<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most platforms provide REST APIs for data export:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Generic pattern for exporting analytics data via API\nasync function exportAnalyticsData(startDate, endDate) {\n  const campaigns = await oldPlatformApi.get(&#39;\/campaigns&#39;, {\n    params: { from: startDate, to: endDate },\n  });\n\n  const results = [];\n  for (const campaign of campaigns) {\n    const stats = await oldPlatformApi.get(`\/campaigns\/${campaign.id}\/stats`, {\n      params: { from: startDate, to: endDate, granularity: &#39;daily&#39; },\n    });\n\n    results.push({\n      campaignId: campaign.id,\n      campaignName: campaign.name,\n      source: campaign.source,\n      medium: campaign.medium,\n      stats: stats.data,\n    });\n  }\n\n  return results;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Export data in a portable format (CSV or JSON). Do not rely on the old platform&#39;s dashboard for historical access after canceling your subscription.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dashboard Export<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the platform offers CSV\/Excel export from the dashboard:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Export each report type (clicks, installs, events, campaigns).<\/li>\n<li>Use the maximum date range available.<\/li>\n<li>Export at the finest granularity available (daily rather than monthly).<\/li>\n<li>Save the files with descriptive names and date ranges.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Third-Party Analytics<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If your analytics are in a third-party system (Google Analytics, Amplitude, Mixpanel), the deep linking platform migration has less impact. Your event data in the analytics platform is independent of the deep linking platform. You only lose the deep linking platform&#39;s own analytics views.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ensure your new platform&#39;s SDK sends the same event names and properties as the old one, so your third-party analytics reporting remains consistent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Maintaining Reporting Continuity<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">The Gap Problem<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">During migration, there is a period where:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Some users are on the old SDK (old platform attribution).<\/li>\n<li>Some users are on the new SDK (new platform attribution).<\/li>\n<li>Some links use the old platform&#39;s redirect.<\/li>\n<li>Some links use the new platform&#39;s redirect.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a gap in unified reporting. Neither platform shows the complete picture.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Solution: Parallel Tracking<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">During the migration window, send analytics events to both platforms:<\/p>\n\n\n\n<pre><code class=\"language-kotlin\">\/\/ Dual-tracking during migration\nfun trackEvent(eventName: String, properties: Map&lt;String, Any&gt;) {\n    \/\/ Track on the old platform (until fully migrated)\n    oldPlatformSDK.track(eventName, properties)\n\n    \/\/ Track on the new platform\n    newPlatformSDK.track(eventName, properties)\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run parallel tracking for 2-4 weeks. This gives you:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Overlapping data for validation (both platforms should show similar numbers).<\/li>\n<li>Continuity for stakeholders who rely on the old platform&#39;s dashboard.<\/li>\n<li>Time to verify the new platform is capturing everything correctly.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Baseline Comparison<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before migrating, establish baselines from the old platform:<\/p>\n\n\n\n<pre><code>Baseline metrics (last 30 days, old platform):\n  Total clicks: 150,000\n  Total installs: 12,000\n  Click-to-install rate: 8.0%\n  Deferred link match rate: 76%\n  Top campaign: &quot;summer_sale&quot; (3,200 installs)\n  Top source: &quot;email&quot; (4,500 installs)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After migrating to the new platform, compare:<\/p>\n\n\n\n<pre><code>First 30 days on new platform:\n  Total clicks: 148,000 (expected: ~150,000)\n  Total installs: 12,500 (expected: ~12,000)\n  Click-to-install rate: 8.4%\n  Deferred link match rate: 82%\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the new platform shows significantly different numbers, investigate. Differences of 5-10% are normal (different attribution models, different match algorithms). Differences of 20%+ suggest a configuration issue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Handling Attribution Windows<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Attribution in Transition<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you switch platforms, there are installs in the pipeline:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>User clicked a link on the old platform 3 days ago.<\/li>\n<li>User installs the app today, after the migration.<\/li>\n<li>Which platform attributes the install?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If the old SDK is still in the app:<\/strong> The old platform attributes it. This is correct.\n<strong>If the new SDK replaced the old one:<\/strong> The new platform cannot attribute it because the click was recorded on the old platform.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Best Practice<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Keep the old SDK in the app (disabled for new event tracking, but still able to resolve pending attributions) for one attribution window cycle (typically 7-30 days) after migration. Then remove it.<\/p>\n\n\n\n<pre><code class=\"language-kotlin\">\/\/ During migration: old SDK resolves pending attributions only\nif (isMigrationPeriod) {\n    oldSDK.resolveAttributionOnly() \/\/ No new event tracking\n    newSDK.initialize() \/\/ Full tracking\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Data Format Mapping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When importing historical data to the new platform (if supported), map the fields:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Old Platform Field<\/th>\n<th>New Platform Field<\/th>\n<th>Notes<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>campaign_id<\/td>\n<td>campaign<\/td>\n<td>May need renaming<\/td>\n<\/tr>\n<tr>\n<td>media_source<\/td>\n<td>source<\/td>\n<td>Same concept, different name<\/td>\n<\/tr>\n<tr>\n<td>sub1, sub2, sub3<\/td>\n<td>custom_params<\/td>\n<td>Different parameter structure<\/td>\n<\/tr>\n<tr>\n<td>af_status<\/td>\n<td>attribution_type<\/td>\n<td>Platform-specific values<\/td>\n<\/tr>\n<tr>\n<td>install_time<\/td>\n<td>attributed_at<\/td>\n<td>Same data, different field name<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Create a mapping document before migration. This ensures historical imports map correctly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Migration Validation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After migration, validate the analytics pipeline:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Click tracking:<\/strong> Create test links on the new platform. Click them. Verify clicks appear in the dashboard within minutes.<\/li>\n<li><strong>Attribution:<\/strong> Install the app from a test link. Verify the install is attributed to the correct campaign.<\/li>\n<li><strong>Deferred deep linking:<\/strong> Click a test link, install, open the app. Verify the deferred link resolves and the attribution includes the deep link context.<\/li>\n<li><strong>Event tracking:<\/strong> Trigger post-install events (purchase, sign-up). Verify they appear in the dashboard with correct attribution.<\/li>\n<li><strong>Revenue tracking:<\/strong> If you track revenue, verify amounts match between your app and the platform&#39;s dashboard.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku Analytics Migration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/docs\/user-guide\/analytics\/\">Tolinku&#39;s analytics<\/a> provides real-time click, install, and conversion tracking from the moment you start using the platform. For historical data, you can import CSV data from your previous platform to maintain continuity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/tolinku.com\/features\/deep-linking\">Tolinku SDK<\/a> sends standard event properties that map cleanly to third-party analytics platforms (Google Analytics, Amplitude, Mixpanel), so your existing analytics pipelines continue to work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the overall migration plan, see <a href=\"https:\/\/tolinku.com\/blog\/migration-timeline-planning\/\">migration timeline planning<\/a>. For running both platforms in parallel, see <a href=\"https:\/\/tolinku.com\/blog\/parallel-running-migration\/\">parallel running during migration<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Migrate analytics data when switching deep linking platforms. Export historical data, maintain reporting continuity, set baseline metrics, and avoid gaps in attribution.<\/p>\n","protected":false},"author":2,"featured_media":1385,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Analytics Data Migration for Deep Linking Platforms","rank_math_description":"Migrate analytics data when switching deep linking platforms. Export historical data, maintain reporting continuity, and set baseline metrics.","rank_math_focus_keyword":"analytics data migration","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-analytics-data-migration.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-analytics-data-migration.png","footnotes":""},"categories":[17],"tags":[37,28,254,344,20,52,69,345],"class_list":["post-1386","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-comparisons","tag-analytics","tag-attribution","tag-best-practices","tag-data-migration","tag-deep-linking","tag-migration","tag-mobile-development","tag-reporting"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1386","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=1386"}],"version-history":[{"count":4,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1386\/revisions"}],"predecessor-version":[{"id":2589,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1386\/revisions\/2589"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1385"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}