# What each platform means by "attributed" (checked 2026-10-17 to 2026-10-20)

Every statement here was read from the vendor's live docs between 2026-10-17 and 2026-10-20 unless it says "check live". Settings change and accounts differ, so this file tells you what to read, not what the account contains. Record what you read in `assets/platform-settings-inventory.yaml` with the date and the URL.

## Contents

- GA4
- Google Ads, including switching a model
- Meta
- LinkedIn
- HubSpot
- Salesforce
- Comparing platforms: the rules that hold everywhere

## GA4

What exists:

- Reporting attribution models: data driven (recommended by Google), paid and organic last click, Google paid channels last click. First click, linear, time decay and position based were removed in November 2023.
- Direct visits get no credit unless the whole path is direct.
- Engaged views (YouTube) can receive credit. Google defines an engaged view for data-driven attribution as watching 30 seconds or to the end if shorter, or clicking certain ad elements.

Three dimension scopes, the cause of most "GA4 says something different" disputes:

- First user dimensions (First user source, First user medium): where the user was first acquired. Use the paid and organic last-click model. Not affected by the reporting model setting.
- Session dimensions (Session source, Session medium): the source of each session. Also paid and organic last click. Not affected by the reporting model setting. Traffic acquisition uses these.
- Event-scoped dimensions with no prefix (Source, Medium, Default channel group in standard key event reports): use the reporting attribution model. Default is data driven. Changing the model changes these and only these.

Windows:

- Key event lookback: acquisition key events (`first_visit`, `first_open`) default 30 days, option 7. Other key events default 90 days, options 30 and 60. Engaged-view key events have their own 3-day default.
- Since 11 August 2026, GA4 conversions (the Advertising section objects shared with Google Ads) accept any whole number from 1 to 90 days for click-through and 1 to 30 days for engaged-view windows (engaged-view was previously fixed at 3 days).

Two different objects with two different attribution settings:

- Key events: one property-level reporting model and lookback, set under Admin > Data display > Events > Key events attribution (some Google pages still call it Attribution settings). Changing it needs at least the Marketer role.
- Conversions (Advertising section, shared with Google Ads): attribution set per conversion in Advertising, Conversion management (web conversion management launched in beta on 16 January 2026). These do not appear in standard reports or Explore.
- Shared conversion settings can be edited in either product. Google says some settings, such as conversion window and counting method, might not be editable in Google Ads, and that conversion edits made in GA4 appear in the Google Ads Change history page. The same Google page also describes GA4 change history for conversion changes. Read change dates for shared conversions in Google Ads Change history first, then in GA4 change history where the property shows them.
- Channels that can receive credit for web conversions shared with Google Ads: Google paid channels, or paid and organic channels. The setting applies going forward and to all linked Google Ads accounts. The help article says app conversions always use Google paid channels, but the release notes of 29 September 2026 say app conversions now have attribution settings adjustable separately from web for some properties. Check live which applies to the property.

Built-in path views worth using before building one:

- The conversion attribution analysis report (beta since 16 January 2026, Advertising section) has an assisted conversions view under last click and a refined funnel view under data-driven attribution that groups touchpoints into early, mid and late stages. It sits in the Advertising section with conversions, not key events; it is a beta, so check the property has it.
- The Key event attribution models report (Advertising > Attribution > Attribution models) compares the models you pick in its column drop-downs, and the Key events attribution paths report (Advertising, Key events menu, Key event attribution paths) defaults its chart to paid and organic last click with a model drop-down. Neither simply shows the property's reporting model; standard key event reports with event-scoped dimensions do. Read 2026-10-20. "Model comparison" is the Google Ads report name.

Retroactivity, which decides whether a trend line breaks:

- Reporting attribution model change: applies to historical and future data.
- Lookback window change: applies going forward only.
- Channels-that-can-receive-credit change: going forward only, and can take a few days to reach Google Ads.

Freshness: attributed channel data can update for up to 12 days after the conversion. Do not compare the last 12 days with a mature period.

Since 15 June 2026, Consent Mode in Google Ads is the single control for collecting Google Ads cookies and IDs from the Analytics tag, replacing the earlier combination with Google signals. A comparison spanning that date needs the consent configuration checked, not just the date.

How to read it:

- The Admin API v1alpha `properties.getAttributionSettings` returns `reportingAttributionModel`, `acquisitionConversionEventLookbackWindow`, `otherConversionEventLookbackWindow` and `adsWebConversionDataExportScope` for the property. It is an alpha API; check live that it still exists.
- Google's GA4 MCP server (experimental, local, `analytics.readonly` scope) has `run_report` and `get_property_details` but no attribution settings tool as of 2026-10-17. Use `run_report` to show the scope effect: the same key event by Session source and by Source.
- Key event counting method (`countingMethod`: `ONCE_PER_EVENT`, recommended, or `ONCE_PER_SESSION`, legacy) is on each key event in the Admin API; the property time zone is `timeZone` on the property.
- Otherwise read Admin in the interface and record the values.

## Google Ads

What exists:

- Models: data driven and last click. Data driven is the default for most conversion actions. First click, linear, time decay and position based are no longer supported; actions that used them were upgraded to data driven.
- The model is set per conversion action (Goals, Summary, select the action, Edit settings, Attribution model). It affects only that action.
- It affects bidding: automated strategies that use the Conversions column (Target CPA, Target ROAS and others) bid on the attributed values. A "reporting test" of a different model on a biddable action is a bidding change.
- Data-driven attribution covers clicks and video engagements on Search (including Shopping), YouTube, Display and Demand Gen.

Eligibility, where Google's own pages disagree:

- One help page says all conversion actions are eligible regardless of volume and recommends at least 200 conversions and 2,000 ad interactions in supported networks within 30 days.
- Another says some conversion action types need 3,000 ad interactions and 300 conversions in 30 days to become eligible, and 2,000 and 200 every 30 days to stay eligible.
- Resolve it per action: read the "Data-driven attribution (DDA) eligibility" column, or `data_driven_model_status` in the API.

Windows (defaults are Google's documented defaults; read the action):

- Click-through: default 30 days, from 1 day up to 90 days depending on the conversion source.
- Engaged-view: default 3 days, 1 to 30 days.
- View-through: default 1 day, 1 to 30 days.
- Changes apply going forward only. Lengthening a window does not bring back conversions that fell outside the shorter one.

Date basis: standard Conversions columns are attributed to the date of the ad interaction. "Conversions (by conv. time)" and "All conv. (by conv. time)" use the conversion date and are the ones to compare with GA4 or a ledger. Store visit and store sales conversions are not in the by-conversion-time columns.

Biddable or not: `primary_for_goal = false` makes an action non-biddable for standard goals, but custom conversion goals ignore that flag, so a secondary action inside a custom goal is still biddable.

How to read it, with Google's read-only Google Ads MCP server (`search` tool, GAQL) or any read-only GAQL client:

```sql
SELECT
  conversion_action.name,
  conversion_action.status,
  conversion_action.type,
  conversion_action.category,
  conversion_action.primary_for_goal,
  conversion_action.include_in_conversions_metric,
  conversion_action.counting_type,
  conversion_action.attribution_model_settings.attribution_model,
  conversion_action.attribution_model_settings.data_driven_model_status,
  conversion_action.click_through_lookback_window_days,
  conversion_action.view_through_lookback_window_days,
  conversion_action.value_settings.default_value,
  conversion_action.value_settings.always_use_default_value
FROM conversion_action
WHERE conversion_action.status = 'ENABLED'
```

The account time zone and currency, which every date and value comparison needs:

```sql
SELECT customer.time_zone, customer.currency_code FROM customer
```

Field names checked against API v26 on 2026-10-17 and 2026-10-18. The engaged-view window was not exposed as a `conversion_action` field in v26; read it in the interface. Custom goal membership is a separate resource; check it before calling an action non-biddable.

Value basis: `always_use_default_value = true` means every conversion carries the configured default value, not revenue. Even with transaction values, value rules can change them. Target ROAS bids on reported conversion values, so attributed "value" is money only when the action sends real transaction values. Record which.

### Switching a model

Rules for "should we move this action, or GA4, to data driven or last click":

- Read `data_driven_model_status` per action. If it is not `AVAILABLE`, keep the action off data driven and record the status and date.
- Preview the effect without changing anything: the Model comparison report puts two models side by side per action. In practice credit often moves away from the last brand search click toward earlier generic search, YouTube and Demand Gen interactions; state what the report shows for this account, not that expectation.
- After an approved switch, add the "(current model)" columns from the Attribution section of the Columns menu. Google describes them as showing historic conversions under the model you just selected; the standard columns change only from the switch date, so the series breaks there.
- An action that is primary for its goal, or sits in a custom goal, feeds automated bidding (Target CPA, Target ROAS and others). Switching its model changes what Smart Bidding optimises. Draft the change list with: the action, every campaign bidding on it, the credit shift from Model comparison, the series break, and a switch date outside peak trading and away from other bidding changes.
- Never switch a model to make GA4 and Google Ads match. Dates, windows, counting, channels and time zones still differ.
- GA4 "channels that can receive credit" changes how much credit GA4 conversions pass to Google Ads. Under paid and organic channels, only the credit assigned to Google Ads channels appears in linked Ads accounts (Admin API `adsWebConversionDataExportScope` description). If those conversions are used in bidding, the change is a bidding change; same change list.

## Meta

What changed and when:

- 3 March 2026, rolling out from later that month: for campaigns optimising for website or in-store conversions, click-through attribution counts only link clicks. Conversions after other clicks (likes, shares, saves and similar) move to engage-through attribution, the new name for engaged-view attribution. The video engaged-view threshold dropped from 10 seconds to 5. Billing did not change. The rollout was staggered per advertiser, so the switch date differs between accounts.
- 12 January 2026: the Ads Insights API stopped returning the 7-day view (`7d_view`) and 28-day view (`28d_view`) windows. Still available: 1-day click, 7-day click, 28-day click, 1-day engaged view and 1-day view. Unique-count and hourly breakdowns are limited to 13 months of history, frequency breakdowns to 6 months.
- The ad set's attribution spec uses event types `CLICK_THROUGH`, `VIEW_THROUGH` and `ENGAGED_VIDEO_VIEW` with a window in days. Supported windows depend on the optimisation goal.
- Meta offers an incremental attribution setting. It is Meta's own model, not an experiment on your decision. Record whether it is on for the ad sets in scope.

API and connector pulls (Insights API best-practices page and reference, read 2026-10-20):

- Since 10 June 2025 the Insights API ignores `use_unified_attribution_setting` and `action_report_time`. Responses copy Ads Manager: attributed values use each ad set's attribution setting, inline (on-ad) actions are folded into `1d_click` or `1d_view`, and standalone inline window data is no longer returned.
- Report time is always mixed: on-Meta actions (for example link clicks) are dated at impression time, off-Meta actions (for example web purchases) at conversion time. Record Meta's date basis as mixed, never as whatever report time a connector sends.
- The Insights API reference page still tells you to set `use_unified_attribution_setting` to `true` to match Ads Manager. The best-practices page contradicts it; follow the best-practices page, and do not record either parameter as a live setting.
- `action_attribution_windows`: explicit windows such as `1d_click`, `7d_click`, `28d_click`, `1d_view`, `1d_ev`, `dda` or `default`. The best-practices notice does not mention this parameter. One section of the reference expands `default` to `7d_click` and `1d_view`, another gives a different expansion, so record exactly which windows each connector requests, or that it requests none and reads the ad set's own setting.
- The same reference page still lists `7d_view` and `28d_view` as allowed values. Meta's developer blog notice of 16 October 2025 says they are no longer returned from 12 January 2026, with no limit to newer dates, so a backfill of older dates run today loses them too. Treat a missing value, or a failed request, in a live call as the proof.
- What still separates a pull from Ads Manager: explicitly requested windows that differ from the ad set setting, the date range, the time zone, the pre- or post-March 2026 click definition, and connector-side transforms (currency conversion, deduplication, renamed or summed columns).
- Test: pull one ad set for one week with no `action_attribution_windows`, so values follow the ad set's setting, and compare with Ads Manager for the same ad set, dates and columns. If they match, repeat with each window the dashboard requests. If they do not, check time zone, dates and the connector's transforms. Toggling the unified setting or report time proves nothing.
- Time zone: the best-practices page says insights data is reported in the ad account's time zone. Record it, and check that the connector does not shift days to another zone before comparing days with GA4 or the ledger.

Check live (Meta's help centre returned page titles but no content to automated reads on 2026-10-17 and 2026-10-18):

- The default attribution setting for new ad sets and whether engage-through is included by default. Older help text describes 7-day click and 1-day view; read the ad set, do not assume.
- Whether the account's reports in the period use the pre-March or post-March click definition.

How to read it:

- Meta's hosted Ads MCP server (`https://mcp.facebook.com/ads`) has reporting tools (for example `ads_get_ad_entities` and `ads_insights_performance_trend`) and also tools that create and edit campaigns, ad sets and ads. Use reporting tools only. Lift study tools (`ads_experiment_lift_create_test`, `ads_experiment_lift_get_test`) and A/B test tools exist; creating one is a change that needs approval.
- In Ads Manager, read the ad set's attribution setting and the report's attribution comparison columns.
- For MMM inputs, the Insights API offers `breakdowns=mmm` as an asynchronous CSV export at ad set level with impressions and (estimated) spend only.

## LinkedIn

What exists:

- Last-touch attribution for most conversion types. Views count as well as clicks: the conversion goes to the member's most recent click or view.
- Two counting settings. Last touch, each ad set: every ad set with an interaction in the window gets credited, so one conversion appears in several ad sets. Last touch, last ad set: only the most recent ad set. The Conversions API calls these `LAST_TOUCH_BY_CAMPAIGN` and `LAST_TOUCH_BY_CONVERSION`, and rules created through the API default to `LAST_TOUCH_BY_CAMPAIGN`. The help centre (read 2026-10-18) names no Campaign Manager default, so read the setting on each rule.
- Repeat conversions by one member inside the window count once (help centre). Some conversions may be measured with predictive models or on-device tracking.
- Window options 1, 7, 30 or 90 days, plus 180 or 365 days for some conversion types sent by Conversions API or CSV (in the API: submit application, purchase, add to cart, qualified lead, lead, marketing qualified lead, sales qualified lead). Marketing and sales qualified lead types need API version 202608 or later.
- Window changes affect only conversions counted after the change.
- Conversions API events are rejected when `conversionHappenedAt` is more than 90 days in the past (schema page, input data validation, read 2026-10-20). A 180 or 365-day window does not allow older backfills.

Defaults, where LinkedIn's own docs disagree:

- The help centre (read 2026-10-17) describes 90-day click and 90-day view as the Campaign Manager default.
- The Conversions API schema (version 2026-09) gives 30-day post-click and 7-day view-through as API defaults.
- Read the conversion rule itself. Record click and view windows separately, because a 90-day view window on a B2B audience credits LinkedIn for many conversions where the member only scrolled past an ad.
- Date basis and report time zone were not verified for LinkedIn; check them in LinkedIn's reporting docs at run time and record them.

How to read it: LinkedIn has no official MCP server or agent skills (research dated 2026-08 to 2026-10). Read conversion rules in Campaign Manager, or via the Conversions API through an approved app. The Microsoft Learn MCP server (`learn.microsoft.com/api/mcp`) searches and fetches the LinkedIn API docs.

## HubSpot

Source properties (knowledge base updated 4 August 2026):

- Original Traffic Source: the first known web source. When a new contact is matched to earlier anonymous visits, it is set to the source of the earliest visit.
- Latest Traffic Source: the most recent known web source. It updates only when a new session is created (page view, form view or submission, meetings form). Imports do not update it.
- Values include Organic search, Paid search, Email marketing, Organic social, Referrals, AI Referrals, Other campaigns, Direct traffic, Paid social and Offline sources.
- Two drill-down properties per source are set automatically and cannot be edited. Manually changing a traffic source clears the drill-downs and First Referring Site.
- Companies and deals associated with contacts mirror these properties. HubSpot does not say which contact wins when several are associated; check live in the portal before using a deal's source as "how the deal started".
- Use the Record Source property for how a record was created (import, integration, app), not traffic source.
- Property internal names were not verified on 2026-10-17; read them in the portal's property settings before writing a query.

Attribution reports (knowledge base updated 21 June 2026):

- Contact create, deal create and revenue attribution reports. Attribution reports need Marketing Hub or Content Hub Professional or Enterprise; deal create and revenue attribution need Marketing Hub Enterprise.
- HubSpot describes its list of interaction types as partial: Ad click, Attended marketing event, Call connected, CTA click, Form submissions, Marketing email click, Page view, Registered for marketing event, Social post click. Each interaction by the same contact is counted separately.
- Revenue attribution uses closed-won deals with Amount, Create date and Close date set. The deal needs at least one associated contact, and the report is based on the contact's tracked interactions. HubSpot does not say whether every associated contact's interactions are used or when the association must exist; check one known multi-contact deal before relying on it.
- Sales activities (calls, meetings, conversations and one-to-one emails) count only when associated with both a contact and the deal.
- Using sampling, attribution processes up to 100,000 associations or activities per deal.

How to read it: HubSpot's remote MCP server reads and writes CRM records as the signed-in user, with no documented read-only mode. Use it only to read properties and associations; read attribution reports in the HubSpot interface.

## Salesforce

Customizable Campaign Influence (Salesforce help, read 2026-10-20):

- Available in Professional, Enterprise, Performance, Unlimited and Developer editions.
- The Primary Campaign Source model comes with the feature: 100% influence to the campaign in the opportunity's Primary Campaign Source field. It is auto-associated; users cannot add its influence records by hand.
- First touch, last touch and even distribution models are for Account Engagement users only, turned on with the Additional Campaign Influence Models setting.
- Auto-association scans active campaigns for members who also hold a contact role on an open opportunity, within a time frame set in Setup. After an opportunity closes (won or lost), no new influence records are created.
- Consequence for B2B grain: an opportunity with no contact roles gets no auto-associated influence, the Salesforce version of a HubSpot deal with no associated contact. Count them first (see `b2b-attribution.md`).
- Lead Source is a standard picklist whose values an admin defines; forms, integrations and reps fill it. It records what someone chose, not a tracked web source.
- Ask an admin to read the enabled models, which model is default for reports, the time frame and any field filters in Setup, and record them in the inventory.
- If the org has Salesforce's hosted MCP servers enabled, use read tools only. Their tool set was not verified here; list the tools at run time before calling any.

## Comparing platforms: the rules that hold everywhere

- Platforms overlap. Google Ads, Meta and LinkedIn can each claim the same order. Never add platform-attributed conversions to get a business total; use a deduplicated outcome ledger as the denominator.
- Align the date basis before comparing: interaction date (Google Ads standard columns) is not conversion date (GA4 events, ledgers).
- Align the outcome: the same named action, not "conversions".
- Align click versus view: a view-through conversion is not comparable to a GA4 click-based session.
- Align time zones: GA4 reports in the property time zone and Google Ads in the account time zone, and Google warns that different zones cause discrepancies. Record Meta's and LinkedIn's zones too, and compare by day only when all match the ledger.
- Align counting: GA4 key events count once per event (recommended) or once per session (legacy); Google Ads actions count every conversion or one per ad click. A lead form submitted twice after one click is two GA4 events and one "One" conversion.
- Align value basis: Google Ads conversion value can be a configured default value or rule-adjusted value, not revenue, and Target ROAS bids on whatever is reported. Check `value_settings` and value rules before calling attributed value "revenue".
- Any change to a model or window on one side is a break in that side's series. Record it in `decisions.md` with the date.
