{"id":1008,"date":"2026-05-06T17:00:00","date_gmt":"2026-05-06T22:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1008"},"modified":"2026-03-07T04:46:06","modified_gmt":"2026-03-07T09:46:06","slug":"onboarding-deep-link-parameters","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/onboarding-deep-link-parameters\/","title":{"rendered":"Onboarding Deep Link Parameters: What Data to Pass"},"content":{"rendered":"\n<p>Deep links that drive app installs carry parameters through the install process via deferred deep linking. These parameters determine what the user sees during onboarding, which steps they skip, and what context personalizes their experience. Choosing the right parameters is the difference between a personalized onboarding and a generic one.<\/p>\n\n\n\n<p>For personalization strategies, see <a href=\"https:\/\/tolinku.com\/blog\/personalized-onboarding-flows\/\">Personalized Onboarding Flows with Deep Link Data<\/a>. For invite-specific flows, see <a href=\"https:\/\/tolinku.com\/blog\/invite-link-onboarding\/\">Invite Link Onboarding: From Invitation to Active User<\/a>. For a broader guide to deep link parameter design, see <a href=\"https:\/\/tolinku.com\/blog\/deep-link-parameters\/\">Deep Link Parameters: A Complete Guide<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Parameter Categories<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Attribution Parameters<\/h3>\n\n\n\n<p>These identify where the user came from:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Example Value<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>utm_source<\/code><\/td>\n<td><code>instagram<\/code>, <code>google<\/code>, <code>newsletter<\/code><\/td>\n<td>Traffic source<\/td>\n<\/tr>\n<tr>\n<td><code>utm_medium<\/code><\/td>\n<td><code>social<\/code>, <code>cpc<\/code>, <code>email<\/code><\/td>\n<td>Marketing channel<\/td>\n<\/tr>\n<tr>\n<td><code>utm_campaign<\/code><\/td>\n<td><code>summer_sale_2026<\/code><\/td>\n<td>Campaign name<\/td>\n<\/tr>\n<tr>\n<td><code>utm_content<\/code><\/td>\n<td><code>hero_banner_v2<\/code><\/td>\n<td>Creative variant<\/td>\n<\/tr>\n<tr>\n<td><code>utm_term<\/code><\/td>\n<td><code>running+shoes<\/code><\/td>\n<td>Search keyword<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<pre><code>https:\/\/go.yourapp.com\/signup?utm_source=instagram&amp;utm_medium=social&amp;utm_campaign=summer_sale\n<\/code><\/pre>\n\n\n\n<p>These parameters don&#39;t directly affect onboarding screens, but they&#39;re essential for measuring which acquisition channels produce the most engaged users.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Referral Parameters<\/h3>\n\n\n\n<p>These connect the new user to an existing user:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Example Value<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>ref<\/code><\/td>\n<td><code>user_abc123<\/code><\/td>\n<td>Referrer&#39;s user ID<\/td>\n<\/tr>\n<tr>\n<td><code>referrer_name<\/code><\/td>\n<td><code>Sarah<\/code><\/td>\n<td>Referrer&#39;s display name<\/td>\n<\/tr>\n<tr>\n<td><code>referral_code<\/code><\/td>\n<td><code>SARAH-2026<\/code><\/td>\n<td>Human-readable referral code<\/td>\n<\/tr>\n<tr>\n<td><code>reward<\/code><\/td>\n<td><code>10<\/code><\/td>\n<td>Reward amount<\/td>\n<\/tr>\n<tr>\n<td><code>reward_type<\/code><\/td>\n<td><code>credit<\/code><\/td>\n<td>Reward type (credit, discount, etc.)<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<pre><code>https:\/\/go.yourapp.com\/refer\/SARAH-2026?ref=user_abc123&amp;referrer_name=Sarah&amp;reward=10\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Content Parameters<\/h3>\n\n\n\n<p>These point to specific content the user was interested in:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Example Value<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>product_id<\/code><\/td>\n<td><code>prod_xyz789<\/code><\/td>\n<td>Specific product<\/td>\n<\/tr>\n<tr>\n<td><code>category<\/code><\/td>\n<td><code>running<\/code><\/td>\n<td>Product category<\/td>\n<\/tr>\n<tr>\n<td><code>content_id<\/code><\/td>\n<td><code>article_456<\/code><\/td>\n<td>Specific article or content piece<\/td>\n<\/tr>\n<tr>\n<td><code>content_type<\/code><\/td>\n<td><code>playlist<\/code><\/td>\n<td>Type of content<\/td>\n<\/tr>\n<tr>\n<td><code>collection_id<\/code><\/td>\n<td><code>coll_abc<\/code><\/td>\n<td>Collection or list<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<pre><code>https:\/\/go.yourapp.com\/product\/prod_xyz789?category=running\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Promotional Parameters<\/h3>\n\n\n\n<p>These carry offer and discount information:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Example Value<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>promo<\/code><\/td>\n<td><code>SUMMER50<\/code><\/td>\n<td>Promo code<\/td>\n<\/tr>\n<tr>\n<td><code>discount<\/code><\/td>\n<td><code>20<\/code><\/td>\n<td>Discount percentage<\/td>\n<\/tr>\n<tr>\n<td><code>offer_id<\/code><\/td>\n<td><code>offer_123<\/code><\/td>\n<td>Server-side offer reference<\/td>\n<\/tr>\n<tr>\n<td><code>trial_days<\/code><\/td>\n<td><code>14<\/code><\/td>\n<td>Extended trial period<\/td>\n<\/tr>\n<tr>\n<td><code>plan<\/code><\/td>\n<td><code>premium<\/code><\/td>\n<td>Pre-selected plan<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<pre><code>https:\/\/go.yourapp.com\/signup?promo=SUMMER50&amp;discount=20&amp;plan=premium\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Context Parameters<\/h3>\n\n\n\n<p>These provide situational context:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Example Value<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>role<\/code><\/td>\n<td><code>seller<\/code>, <code>buyer<\/code><\/td>\n<td>User type for marketplace apps<\/td>\n<\/tr>\n<tr>\n<td><code>team_id<\/code><\/td>\n<td><code>team_abc<\/code><\/td>\n<td>Team to join<\/td>\n<\/tr>\n<tr>\n<td><code>event_id<\/code><\/td>\n<td><code>evt_123<\/code><\/td>\n<td>Event context<\/td>\n<\/tr>\n<tr>\n<td><code>partner<\/code><\/td>\n<td><code>shopify<\/code><\/td>\n<td>Partner integration source<\/td>\n<\/tr>\n<tr>\n<td><code>locale<\/code><\/td>\n<td><code>es_MX<\/code><\/td>\n<td>Preferred language<\/td>\n<\/tr>\n<tr>\n<td><code>source_screen<\/code><\/td>\n<td><code>pricing_page<\/code><\/td>\n<td>Where on your website they clicked<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<pre><code>https:\/\/go.yourapp.com\/join?team_id=team_abc&amp;role=member&amp;partner=slack\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">What NOT to Put in Parameters<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Never Include<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Data<\/th>\n<th>Why Not<\/th>\n<th>Alternative<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Email addresses<\/td>\n<td>PII in URLs, logged everywhere<\/td>\n<td>Use a session token<\/td>\n<\/tr>\n<tr>\n<td>Passwords<\/td>\n<td>Security risk<\/td>\n<td>Never pass credentials in URLs<\/td>\n<\/tr>\n<tr>\n<td>SSNs, account numbers<\/td>\n<td>Regulatory violation<\/td>\n<td>Use encrypted server-side lookup<\/td>\n<\/tr>\n<tr>\n<td>Full names<\/td>\n<td>PII concerns<\/td>\n<td>Use first name only or referral code<\/td>\n<\/tr>\n<tr>\n<td>Phone numbers<\/td>\n<td>PII, regulatory<\/td>\n<td>Use a session token<\/td>\n<\/tr>\n<tr>\n<td>Payment info<\/td>\n<td>PCI compliance violation<\/td>\n<td>Never expose in URLs<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Use Tokens Instead<\/h3>\n\n\n\n<p>For sensitive data, use an opaque token that maps to server-side data:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Bad\nconst link = `https:\/\/go.yourapp.com\/signup?email=jane@example.com&amp;name=Jane+Smith`;\n\n\/\/ Good\nconst sessionToken = await createPreSignupSession({\n  email: &#39;jane@example.com&#39;,\n  name: &#39;Jane Smith&#39;,\n  preferences: { category: &#39;fitness&#39; },\n});\n\nconst link = `https:\/\/go.yourapp.com\/signup?session=${sessionToken}`;\n<\/code><\/pre>\n\n\n\n<p>The app fetches the pre-filled data from your server using the token, keeping PII out of the URL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Parameter Design Rules<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Keep Parameter Names Short and Consistent<\/h3>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Good: short, consistent naming\nconst params = {\n  ref: &#39;user_abc&#39;,      \/\/ referrer\n  src: &#39;instagram&#39;,      \/\/ source (alias for utm_source)\n  cat: &#39;running&#39;,        \/\/ category\n  pid: &#39;prod_xyz&#39;,       \/\/ product ID\n  promo: &#39;SUMMER50&#39;,     \/\/ promo code\n};\n\n\/\/ Bad: verbose, inconsistent\nconst params = {\n  referrer_user_id: &#39;user_abc&#39;,\n  trafficSource: &#39;instagram&#39;,\n  product_category: &#39;running&#39;,\n  productId: &#39;prod_xyz&#39;,\n  promotional_code: &#39;SUMMER50&#39;,\n};\n<\/code><\/pre>\n\n\n\n<p>Short parameter names reduce URL length (important for SMS and social sharing where character limits exist).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Use IDs, Not Names<\/h3>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Good: IDs are stable\nconst link = `https:\/\/go.yourapp.com\/refer?ref=user_abc123`;\n\n\/\/ Bad: names can change and have encoding issues\nconst link = `https:\/\/go.yourapp.com\/refer?referrer_name=Mar\u00eda%20Garc\u00eda`;\n<\/code><\/pre>\n\n\n\n<p>Look up names server-side using the ID.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Validate All Parameters on Receipt<\/h3>\n\n\n\n<pre><code class=\"language-javascript\">async function processDeepLinkParams(params) {\n  const validated = {};\n\n  \/\/ Validate referrer exists\n  if (params.ref) {\n    const referrer = await getUser(params.ref);\n    if (referrer) {\n      validated.referrer = referrer;\n    }\n  }\n\n  \/\/ Validate product exists\n  if (params.pid) {\n    const product = await getProduct(params.pid);\n    if (product &amp;&amp; product.isActive) {\n      validated.product = product;\n    }\n  }\n\n  \/\/ Validate promo code\n  if (params.promo) {\n    const promo = await validatePromoCode(params.promo);\n    if (promo &amp;&amp; promo.isActive) {\n      validated.promo = promo;\n    }\n  }\n\n  \/\/ Sanitize string params\n  if (params.referrer_name) {\n    validated.referrerName = sanitize(params.referrer_name);\n  }\n\n  return validated;\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Set Defaults for Missing Parameters<\/h3>\n\n\n\n<pre><code class=\"language-javascript\">function getOnboardingConfig(params) {\n  return {\n    source: params.utm_source || &#39;organic&#39;,\n    campaign: params.utm_campaign || null,\n    referrer: params.ref || null,\n    product: params.pid || null,\n    promoCode: params.promo || null,\n    role: params.role || &#39;buyer&#39;, \/\/ Default role\n    locale: params.locale || getDeviceLocale(),\n    flow: params.ref ? &#39;referral&#39; : params.pid ? &#39;product&#39; : &#39;default&#39;,\n  };\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Parameter Combinations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Common Link Templates<\/h3>\n\n\n\n<pre><code class=\"language-javascript\">const linkTemplates = {\n  referral: {\n    path: &#39;\/refer\/{code}&#39;,\n    requiredParams: [&#39;ref&#39;, &#39;referrer_name&#39;],\n    optionalParams: [&#39;reward&#39;, &#39;reward_type&#39;],\n    example: &#39;\/refer\/SARAH-2026?ref=user_abc&amp;referrer_name=Sarah&amp;reward=10&#39;,\n  },\n\n  productAd: {\n    path: &#39;\/product\/{id}&#39;,\n    requiredParams: [&#39;utm_source&#39;, &#39;utm_campaign&#39;],\n    optionalParams: [&#39;promo&#39;, &#39;category&#39;],\n    example: &#39;\/product\/prod_xyz?utm_source=facebook&amp;utm_campaign=summer_sale&amp;promo=SUMMER50&#39;,\n  },\n\n  teamInvite: {\n    path: &#39;\/join\/{team_id}&#39;,\n    requiredParams: [&#39;team_id&#39;, &#39;role&#39;],\n    optionalParams: [&#39;inviter_name&#39;, &#39;inviter_id&#39;],\n    example: &#39;\/join\/team_abc?role=member&amp;inviter_name=Alex&#39;,\n  },\n\n  contentShare: {\n    path: &#39;\/share\/{type}\/{id}&#39;,\n    requiredParams: [&#39;content_type&#39;, &#39;content_id&#39;],\n    optionalParams: [&#39;sharer_name&#39;, &#39;ref&#39;],\n    example: &#39;\/share\/playlist\/pl_123?sharer_name=Mike&amp;ref=user_def&#39;,\n  },\n};\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">How Parameters Map to Onboarding Steps<\/h3>\n\n\n\n<p>For a complete guide to using these parameters for contextual routing, see <a href=\"https:\/\/tolinku.com\/blog\/contextual-deep-linking-guide\/\">Contextual Deep Linking Guide<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Parameters Present<\/th>\n<th>Onboarding Effect<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td><code>ref<\/code> + <code>referrer_name<\/code><\/td>\n<td>Show referral welcome, acknowledge referrer<\/td>\n<\/tr>\n<tr>\n<td><code>pid<\/code> + <code>category<\/code><\/td>\n<td>Skip category selection, show product first<\/td>\n<\/tr>\n<tr>\n<td><code>promo<\/code> + <code>discount<\/code><\/td>\n<td>Show promo banner, pre-apply discount<\/td>\n<\/tr>\n<tr>\n<td><code>team_id<\/code> + <code>role<\/code><\/td>\n<td>Skip role selection, auto-join team<\/td>\n<\/tr>\n<tr>\n<td><code>utm_source=ad<\/code> + <code>utm_campaign<\/code><\/td>\n<td>Show campaign-specific landing<\/td>\n<\/tr>\n<tr>\n<td>None (organic)<\/td>\n<td>Full standard onboarding<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Debugging Parameters<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Logging<\/h3>\n\n\n\n<p>Log parameters on receipt for debugging (but sanitize sensitive data):<\/p>\n\n\n\n<pre><code class=\"language-javascript\">function logDeepLinkParams(params) {\n  const sanitized = { ...params };\n\n  \/\/ Mask any potential PII\n  if (sanitized.email) sanitized.email = &#39;***@***.***&#39;;\n  if (sanitized.session) sanitized.session = sanitized.session.slice(0, 8) + &#39;...&#39;;\n\n  console.log(&#39;Deep link params received:&#39;, sanitized);\n\n  analytics.track(&#39;deep_link_params_received&#39;, {\n    paramCount: Object.keys(params).length,\n    hasReferral: params.ref ? true : false,\n    hasProduct: params.pid ? true : false,\n    hasPromo: params.promo ? true : false,\n    source: params.utm_source || &#39;none&#39;,\n  });\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Testing Parameter Flows<\/h3>\n\n\n\n<p>Create test links with different parameter combinations and verify each onboarding path:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">const testLinks = [\n  { name: &#39;Referral&#39;, url: &#39;https:\/\/go.yourapp.com\/refer\/TEST?ref=test_user&amp;referrer_name=Test&#39; },\n  { name: &#39;Product&#39;, url: &#39;https:\/\/go.yourapp.com\/product\/test_prod?category=test&#39; },\n  { name: &#39;Campaign&#39;, url: &#39;https:\/\/go.yourapp.com\/signup?utm_source=test&amp;utm_campaign=test_campaign&#39; },\n  { name: &#39;Team invite&#39;, url: &#39;https:\/\/go.yourapp.com\/join\/test_team?role=member&#39; },\n  { name: &#39;Organic&#39;, url: &#39;https:\/\/go.yourapp.com\/&#39; },\n];\n<\/code><\/pre>\n\n\n\n<p>For dynamic routes, see the <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/routes\/dynamic-routes\/\">dynamic routes documentation<\/a>. For deep linking features, see <a href=\"https:\/\/tolinku.com\/features\/deep-linking\">Tolinku deep linking<\/a>. For onboarding use cases, see the <a href=\"https:\/\/tolinku.com\/docs\/use-cases\/onboarding\/\">onboarding documentation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn which parameters to include in onboarding deep links. Pass referral codes, campaign data, product IDs, and user preferences through the install process.<\/p>\n","protected":false},"author":2,"featured_media":1007,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Onboarding Deep Link Parameters: What Data to Pass","rank_math_description":"Learn which parameters to include in onboarding deep links. Pass referral codes, campaign data, product IDs, and user preferences through the install process.","rank_math_focus_keyword":"onboarding deep link parameters","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-onboarding-deep-link-parameters.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-onboarding-deep-link-parameters.png","footnotes":""},"categories":[18],"tags":[20,21,69,27,236,43,26,50],"class_list":["post-1008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-use-cases","tag-deep-linking","tag-deferred-deep-linking","tag-mobile-development","tag-onboarding","tag-parameters","tag-personalization","tag-user-acquisition","tag-utm-parameters"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1008","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=1008"}],"version-history":[{"count":4,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1008\/revisions"}],"predecessor-version":[{"id":2823,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1008\/revisions\/2823"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1007"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}