{"id":1728,"date":"2026-07-12T13:00:00","date_gmt":"2026-07-12T18:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1728"},"modified":"2026-03-07T03:50:04","modified_gmt":"2026-03-07T08:50:04","slug":"self-attributing-networks","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/self-attributing-networks\/","title":{"rendered":"Self-Attributing Networks: Facebook, Google, and More"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Self-attributing networks (SANs) are ad platforms that perform their own attribution instead of relying on a third-party attribution provider. Meta (Facebook\/Instagram), Google (Search\/YouTube\/UAC), TikTok, Snapchat, X (Twitter), and Apple Search Ads all self-attribute. This means they decide whether their ads drove an install, and they report that decision to you directly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates challenges. When two SANs both claim credit for the same install, someone is wrong. This guide explains how SANs work, why they self-attribute, and how to reconcile their data. For attribution models, see <a href=\"https:\/\/tolinku.com\/blog\/last-click-vs-multi-touch-attribution\/\">last-click vs multi-touch attribution<\/a>. For build-vs-buy decisions, see <a href=\"https:\/\/tolinku.com\/blog\/mmp-vs-in-house-attribution\/\">MMP vs in-house attribution<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Self-Attributing Networks Work<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Standard Attribution Flow<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With a regular ad network:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>User clicks an ad. The click is redirected through the attribution provider&#39;s tracking URL.<\/li>\n<li>User installs the app.<\/li>\n<li>Attribution provider receives the install event from its SDK.<\/li>\n<li>Attribution provider matches the install to the click.<\/li>\n<li>Attribution provider assigns credit to the ad network.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The attribution provider controls the data and the decision.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SAN Attribution Flow<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With a self-attributing network:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>User clicks an ad within the SAN&#39;s platform (e.g., a Facebook ad).<\/li>\n<li>The click is NOT redirected through a tracking URL. Facebook tracks it internally.<\/li>\n<li>User installs the app.<\/li>\n<li>Attribution provider&#39;s SDK sends the install event to the attribution provider AND to Facebook&#39;s SDK.<\/li>\n<li>Facebook checks its own click\/impression data and claims the install if it finds a match.<\/li>\n<li>The attribution provider receives Facebook&#39;s claim and must decide whether to accept it.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The SAN controls its own click\/impression data and makes its own attribution decision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Major Self-Attributing Networks<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Network<\/th>\n<th>Platforms<\/th>\n<th>Claim Method<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Meta (Facebook, Instagram)<\/td>\n<td>Facebook, Instagram, Audience Network, Messenger<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<tr>\n<td>Google Ads<\/td>\n<td>Search, YouTube, Display, UAC<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<tr>\n<td>TikTok<\/td>\n<td>TikTok, Pangle<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<tr>\n<td>Snapchat<\/td>\n<td>Snapchat<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<tr>\n<td>Apple Search Ads<\/td>\n<td>App Store search<\/td>\n<td><a href=\"https:\/\/developer.apple.com\/documentation\/adservices\" rel=\"nofollow noopener\" target=\"_blank\">AdServices framework<\/a> (iOS 14.3+)<\/td>\n<\/tr>\n<tr>\n<td>X (Twitter)<\/td>\n<td>X\/Twitter<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<tr>\n<td>Pinterest<\/td>\n<td>Pinterest<\/td>\n<td>Server-side claim via API<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Each SAN has its own API, its own attribution logic, and its own reporting format.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Double-Counting Problem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When a user sees a Meta ad, clicks a Google ad, and installs the app:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Meta claims the install (view-through attribution).<\/li>\n<li>Google claims the install (click-through attribution).<\/li>\n<li>Your attribution provider has two claims for one install.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The attribution provider must deduplicate by applying a priority model:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Click beats view.<\/strong> Google&#39;s click-through claim takes priority over Meta&#39;s view-through claim.<\/li>\n<li><strong>Last click wins.<\/strong> If both are click claims, the most recent click wins.<\/li>\n<li><strong>SAN priority.<\/strong> Some attribution providers assign priority tiers to SANs.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Without deduplication, your total attributed installs will exceed your actual installs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integration Patterns<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">SDK-to-SDK Communication<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most attribution providers integrate with SANs via SDK:<\/p>\n\n\n\n<pre><code class=\"language-swift\">\/\/ Example: Sending install event to attribution provider\n\/\/ The attribution provider SDK then communicates with SAN SDKs\n\nfunc applicationDidFinishLaunching() {\n    \/\/ Initialize attribution SDK\n    AttributionSDK.configure(apiKey: &quot;YOUR_KEY&quot;)\n\n    \/\/ The attribution SDK queries each SAN&#39;s SDK for claims\n    \/\/ Meta SDK: Was there a Facebook ad interaction?\n    \/\/ Google SDK: Was there a Google ad interaction?\n    \/\/ TikTok SDK: Was there a TikTok ad interaction?\n\n    AttributionSDK.trackInstall()\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Server-to-Server (S2S)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Some SANs support server-to-server integration where your backend communicates directly with the SAN&#39;s API:<\/p>\n\n\n\n<pre><code class=\"language-json\">\/\/ POST to SAN&#39;s attribution API\n{\n  &quot;event&quot;: &quot;install&quot;,\n  &quot;app_id&quot;: &quot;com.yourapp&quot;,\n  &quot;device_id&quot;: &quot;hashed_device_id&quot;,\n  &quot;timestamp&quot;: &quot;2026-07-12T10:30:00Z&quot;,\n  &quot;attribution_window&quot;: &quot;7d&quot;\n}\n\n\/\/ SAN&#39;s response\n{\n  &quot;attributed&quot;: true,\n  &quot;campaign_id&quot;: &quot;CAMP-123&quot;,\n  &quot;ad_group_id&quot;: &quot;AG-456&quot;,\n  &quot;creative_id&quot;: &quot;CR-789&quot;,\n  &quot;click_timestamp&quot;: &quot;2026-07-11T14:20:00Z&quot;,\n  &quot;attribution_type&quot;: &quot;click&quot;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">SAN-Specific Considerations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Meta (Facebook\/Instagram)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses <a href=\"https:\/\/developers.facebook.com\/docs\/marketing-apis\/aggregated-event-measurement\/\" rel=\"nofollow noopener\" target=\"_blank\">Aggregated Event Measurement (AEM)<\/a> for iOS 14+ users.<\/li>\n<li>Limited to 8 conversion events per domain.<\/li>\n<li>Data delays of 24-72 hours for privacy-preserving aggregation.<\/li>\n<li>Requires the Meta SDK or <a href=\"https:\/\/developers.facebook.com\/docs\/marketing-api\/conversions-api\/\" rel=\"nofollow noopener\" target=\"_blank\">Conversions API<\/a> for server-side tracking.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Google Ads<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses <a href=\"https:\/\/firebase.google.com\/docs\/analytics\" rel=\"nofollow noopener\" target=\"_blank\">Google Analytics for Firebase<\/a> for app attribution.<\/li>\n<li>Supports <a href=\"https:\/\/developers.google.com\/google-ads\/api\/docs\/conversions\/upload-identifiers\" rel=\"nofollow noopener\" target=\"_blank\">GBRAID and WBRAID<\/a> parameters for privacy-safe attribution on iOS.<\/li>\n<li>YouTube view-through attribution uses a 24-hour window by default.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Apple Search Ads<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses the <a href=\"https:\/\/developer.apple.com\/documentation\/adservices\" rel=\"nofollow noopener\" target=\"_blank\">AdServices framework<\/a> on iOS 14.3+.<\/li>\n<li>Attribution data is available via a token that your server exchanges with Apple&#39;s API.<\/li>\n<li>Does not require IDFA or ATT consent.<\/li>\n<li>Only attributes installs from App Store search ads, not from other Apple properties.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">TikTok<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses <a href=\"https:\/\/business-api.tiktok.com\/portal\/docs?id=1741601162187777\" rel=\"nofollow noopener\" target=\"_blank\">Events API<\/a> for server-side attribution.<\/li>\n<li>Supports both click-through (default 7 days) and view-through (default 1 day) attribution.<\/li>\n<li>Requires TikTok SDK for in-app event tracking.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reconciliation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Building a Reconciliation Report<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Compare SAN-reported data with your attribution provider&#39;s data:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Metric<\/th>\n<th>SAN Report<\/th>\n<th>Attribution Provider<\/th>\n<th>Difference<\/th>\n<\/tr>\n<\/thead>\n<tbody><tr>\n<td>Meta installs<\/td>\n<td>1,200<\/td>\n<td>980<\/td>\n<td>+22%<\/td>\n<\/tr>\n<tr>\n<td>Google installs<\/td>\n<td>800<\/td>\n<td>750<\/td>\n<td>+7%<\/td>\n<\/tr>\n<tr>\n<td>TikTok installs<\/td>\n<td>400<\/td>\n<td>320<\/td>\n<td>+25%<\/td>\n<\/tr>\n<tr>\n<td>Total claimed<\/td>\n<td>2,400<\/td>\n<td>2,050<\/td>\n<td>+17%<\/td>\n<\/tr>\n<tr>\n<td>Actual installs<\/td>\n<td>&#8211;<\/td>\n<td>2,050<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The difference comes from double-counting (multiple SANs claiming the same install) and from SANs counting view-through conversions that the attribution provider deduplicates.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Acceptable Discrepancy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A 10-20% discrepancy between SAN-reported and attribution provider-reported data is normal. Investigate if the discrepancy exceeds 25% for any single SAN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common causes of large discrepancies:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mismatched attribution windows (SAN uses 7 days, your provider uses 1 day).<\/li>\n<li>Mismatched event definitions (SAN counts re-installs, your provider does not).<\/li>\n<li>SDK version mismatches.<\/li>\n<li>Privacy restrictions removing identifiers.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Privacy Impact on SANs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">iOS ATT<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">After ATT, SANs have limited access to IDFA:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SANs rely on <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/skadnetwork\/\" rel=\"nofollow noopener\" target=\"_blank\">SKAdNetwork<\/a> for deterministic attribution on iOS.<\/li>\n<li>SKAdNetwork provides campaign-level attribution (not user-level) with delayed reporting.<\/li>\n<li>SANs supplement with modeled conversions (statistical estimates).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Android Privacy Sandbox<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Google&#39;s Privacy Sandbox introduces the <a href=\"https:\/\/developer.android.com\/design-for-safety\/privacy-sandbox\/attribution\" rel=\"nofollow noopener\" target=\"_blank\">Attribution Reporting API<\/a>, which provides aggregate-level attribution without individual user tracking.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku for Attribution<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/analytics\">Tolinku&#39;s analytics<\/a> provide deep link click and conversion attribution. Tolinku&#39;s attribution data can complement SAN-reported data by providing a click-level source of truth for deep link campaigns. Configure attribution tracking in the <a href=\"https:\/\/tolinku.com\/docs\/concepts\/attribution\/\">Tolinku dashboard<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For mobile attribution, see <a href=\"https:\/\/tolinku.com\/blog\/mobile-attribution-developers-guide\/\">mobile attribution: a developer&#39;s guide<\/a>. For attribution models, see <a href=\"https:\/\/tolinku.com\/blog\/last-click-vs-multi-touch-attribution\/\">last-click vs multi-touch attribution<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Understand self-attributing networks (SANs) like Meta, Google, and TikTok. Learn how they report attribution data and integration patterns.<\/p>\n","protected":false},"author":2,"featured_media":1727,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Self-Attributing Networks: Facebook, Google, and More","rank_math_description":"Understand self-attributing networks (SANs) like Meta, Google, and TikTok. Learn how they report attribution data and integration.","rank_math_focus_keyword":"self-attributing networks","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-self-attributing-networks.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-self-attributing-networks.png","footnotes":""},"categories":[14],"tags":[37,28,520,20,522,124,518,521],"class_list":["post-1728","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-analytics","tag-attribution","tag-campaign-measurement","tag-deep-linking","tag-facebook","tag-google","tag-mobile-advertising","tag-self-attributing-networks"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1728","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=1728"}],"version-history":[{"count":3,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1728\/revisions"}],"predecessor-version":[{"id":2689,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1728\/revisions\/2689"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1727"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}