> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inflection.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Attribution

> See each contact's complete touchpoint history, with its key touches saved as contact fields.

Attribution Touchpoints records where every contact came from. Inflection stamps three moments on each contact: the first touch that counted, the touch that created the contact, and the most recent touch. Each moment carries its date, source, and campaign parameters, so marketing and sales can answer which campaigns bring in contacts and which keep them engaged. You can see the result on each contact, write it back to Salesforce, and use it in audiences and journeys.

> [!NOTE]
>
> **Prerequisites**
>
> * Admin or Editor access to Settings. Viewers can see attribution settings but can't change them.
> * Website tracking installed on your domains, if website visits should count.
> * A connected Salesforce instance with write access to the target fields, if you want to send attribution to Salesforce. See [Salesforce](https://docs.inflection.io/connections/salesforce.md).
> * Attribution Touchpoints turned on for your workspace. If you don't see **Attribution Touchpoints** in Settings, contact your Inflection account team.

## How Attribution Works

Every contact records three touches:

| Touch | What it records | How it updates |
| - | - | - |
| **First Touch** | The earliest touch that counts | Set once. A later touch never replaces it. |
| **Lead Creation** | The touch that created the contact | Set when the contact is created |
| **Last Touch** | The most recent touch | Moves forward each time a newer touch arrives from a source that updates Last Touch |

A **touchpoint** is any event that counts toward attribution, such as a form submission or a website visit with UTM parameters. You choose which activity counts in the **Where touchpoints come from** section of the settings page.

![Attribution Touchpoints settings page with the Attribution stamping and Attribution parameters cards](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/01.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=60554e8d9c853f422b5deb33621d94f3)

## Set Up Attribution

Set up parameters and sources first, then turn on stamping. When stamping turns on, Inflection backfills existing contacts from past visits and submissions, and First Touch is set only once. Configuring first avoids stamping values you'll want to change later.

### Configure Parameters

Parameters are the values Inflection captures from each touch. Each parameter you turn on gets a First Touch, Lead Creation, and Last Touch field on the contact.

1. Navigate to **Settings** > **Attribution Touchpoints**.
2. In the **Attribution parameters** card, use the **Stamping** switch to turn each parameter on or off.
3. Under **Value when missing**, select one option for each parameter:
   * **Leave the field blank**: keeps the field empty when a touch carries no value.
   * **Stamp as**: enter a fallback value, for example `direct` for `utm_source`.

![Attribution parameters card with Stamping switches and Value when missing options](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/02.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=0463bbd7529f68b1e988335115908ea0)

> [!NOTE]
>
> **Value when missing** is used only when a form submission or website visit carries none of your stamped parameters. Fallback values can be up to 255 characters.

#### Standard Parameters

| Parameter | Captures |
| - | - |
| `utm_source` | UTM Source |
| `utm_medium` | UTM Medium |
| `utm_campaign` | UTM Campaign |
| `utm_term` | UTM Term |
| `utm_content` | UTM Content |
| referral URL | The page that referred the visitor |
| landing page URL | The first page of the visit |

#### Add a Custom Parameter

Capture your own URL parameters, such as `gclid` or `partner_id`.

1. Click **Add parameter**.
2. Enter the parameter name. Use 1 to 40 lowercase letters, numbers, or underscores.
3. Click **Add**.
4. Review the three contact fields that will be created, then click **Create parameter**.

![Add parameter confirmation listing the First Touch, Lead Creation, and Last Touch fields to be created](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/03.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=982e08d87df9995c7c256fc27e4fa206)

You can add up to 15 custom parameters.

#### Turn Off or Delete a Parameter

* **Turn off:** switch off **Stamping**. Its fields stop being stamped until you turn it back on. Stamped values are kept.
* **Delete (custom only):** click the delete icon on the row. This deletes the parameter's three contact fields and all their values, and it can't be undone. If an audience, journey, or other asset uses one of the fields, Inflection lists those assets and blocks the delete until you remove the references.

### Choose Where Touchpoints Come From

The **Where touchpoints come from** card lists every source that can carry attribution parameters, its status, and how it captures parameters. Status shows **Active** when the source counts and stamping is on, **Ready** when stamping is off, and **Off** when the source doesn't count.

![Where touchpoints come from card listing each source, its status, and scope](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/04.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=6c207148a10ea74c09f3a0d7739416ab)

1. Click the edit icon next to a source's scope to open its panel.
2. Turn on **Include as touchpoints** to count activity from this source.
3. Select the scope, if the source has one. For example, for Inflection Forms select **All forms**, **All forms, except the ones you leave out**, or **Only the forms you choose**, then click **Choose forms** to pick them.
4. Turn on **Updates last touch** if a newer touch from this source should move Last Touch.
5. Click **Save**.

![Inflection Forms panel with Include as touchpoints scope options and Updates last touch switch](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/05.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=0218fe6e2765782063112e2249ee4475)

| Source | What counts | Scope options |
| - | - | - |
| **Website tracking** | Sessions and page visits from your tracked domains. Parameters come from the page URL. | **First anonymous touch only** or **Sessions with attribution parameters** |
| **Inflection Forms** | Submissions to native forms. Parameters come from the submission URL and the linked web session. | All forms, all except the ones you leave out, or only the ones you choose |
| **Form connections** | Submissions from Webflow, Formstack, and other connected form providers. Parameters come from the submission URL, with the web session as a fallback. | Set per connection, with the same three options |
| **Inbound webhooks** | Form-like webhook events. Parameters are detected when payload keys match; map the rest per webhook. | All webhooks, all except the ones you leave out, or only the ones you choose |
| **List uploads** | Contacts added or updated from a CSV file. Each upload chooses whether it counts. | Chosen per upload. See [Count a List Upload as a Touchpoint](#count-a-list-upload-as-a-touchpoint). |
| **API** | Contacts created or updated through the API. A request counts only when it sends attribution fields. | All API writes |
| **Journeys** | Journey steps that set a contact's attribution fields. A step counts only when it sets attribution fields. | All journeys, all except the ones you leave out, or only the ones you choose |

> [!NOTE]
>
> When you count all items, or all except the ones you leave out, new forms, webhooks, and journeys count automatically. When you count only the ones you choose, new ones don't count until you choose them.

#### Website Tracking Levels

* **First anonymous touch only:** only the first visit counts. Later visits still pass their UTMs to forms. At this level, web sessions never move Last Touch.
* **Sessions with attribution parameters:** every visit with campaign parameters counts. Only visits that carry a stamped parameter move Last Touch.

![Website tracking panel with the First anonymous touch only and Sessions with attribution parameters options](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/06.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=f83ad7da65f2802a8f5425d671841440)

#### Include or Exclude a Single Form

You can also change inclusion from the asset itself. In the form builder, use the **Include in attribution** switch (**Count submissions from this form as touchpoints**). The switch stays in sync with the scope in Attribution settings.

### Turn On Stamping

1. In the **Attribution stamping** card, turn on the switch.
2. In **Turn on attribution stamping?**, click **Turn on**.

Attribution fields appear on contacts, and existing contacts are backfilled from past visits and submissions. Progress shows at the top of the page, for example **Filling in history: 1,200 of 48,000 contacts**. The card shows **On since** with the date stamping started.

![Attribution stamping card switched on, showing the On since date](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/07.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=ba30a8142d8efa90df68b204606d0a4b)

To stop, turn off the switch and click **Turn off**. Stamping stops, and the fields and stamped values are kept.

> [!NOTE]
>
> While stamping is off, you can still change parameters and sources. The page shows **Stamping is off. These settings apply once it's on.**, and source statuses show **Ready** instead of **Active**.

## Attribution Fields

Each touch gets its own set of contact fields, named `<touch>_<attribute>`. For example, `first_touch_utm_source`, `lead_creation_utm_source`, and `last_touch_utm_source`.

| Attribute | Shown as | Example field |
| - | - | - |
| `date` | Date of the touch | `first_touch_date` |
| `utm_source` | Source | `first_touch_utm_source` |
| `utm_medium` | Medium | `first_touch_utm_medium` |
| `utm_campaign` | Campaign | `first_touch_utm_campaign` |
| `source_type` | Source type, for example Form or Web Session | `first_touch_source_type` |
| `source_name` | Source name, for example the form name | `first_touch_source_name` |
| `utm_content` | Content | `first_touch_utm_content` |
| `utm_term` | Term | `first_touch_utm_term` |
| `referral_url` | Referral URL | `first_touch_referral_url` |
| `landing_page_url` | Landing page URL | `first_touch_landing_page_url` |

Custom parameters follow the same pattern, for example `last_touch_gclid`. Fields are created in Unified Mapping and marked **Derived field: computed by Attribution Touchpoints.** You can't delete them there or map a form or webhook key to a Last Touch field.

> [!NOTE]
>
> In form and webhook mappings, keys that attribution already reads show **Captured by attribution**. Last Touch fields are filled by attribution, so they can't be mapped there. Send standard UTM keys, or add your own key as a custom parameter in Attribution settings.

## Send Attribution to Salesforce

Write attribution fields back to Salesforce so sales and reporting teams see the same First Touch, Lead Creation, and Last Touch values. Each attribution field writes to a Salesforce Contact field and a Lead field.

1. Create the target fields on the Contact and Lead objects in Salesforce, if they don't exist. Use Long Text fields for `referral_url`, `landing_page_url`, and `source_name`.
2. In Inflection, navigate to **Unified Mapping** > **Contact Fields**. You can also click **Unified Mapping** in the **Attribution parameters** card.
3. Search for the attribution field, for example `first_touch_utm_source`, and click **Edit mapping**.
4. Click **Add destination** and select:
   * **Salesforce · write-back + seed** for First Touch and Lead Creation fields.
   * **Salesforce · write-back only** for Last Touch fields.
5. Select the Salesforce Contact and Lead fields to write to.
6. Save the mapping.

![Unified Mapping row for first\_touch\_utm\_source with a Salesforce Writeback + seed destination](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/08.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=cbe79a14b9ba3e2243dfc7a5ec2dbb08)

The **SFDC WRITEBACK** column shows **On** once a destination is set. Fields without one show **Off** and **needs destination**.

### Writeback + Seed vs. Writeback Only

| Mode | Used for | Behavior |
| - | - | - |
| **Writeback + seed** | First Touch and Lead Creation fields | Salesforce fills the Inflection field once, while it's empty. After that, Inflection's value wins and is written back to Salesforce. |
| **Writeback only** | Last Touch fields | Inflection's value is written back to Salesforce. Seeding isn't offered for Last Touch fields. |

Seeding keeps attribution history you already have in Salesforce, for example First Touch values captured by a previous tool. Inflection takes the Salesforce value only while its own field is empty, then owns the field from then on.

## Count a List Upload as a Touchpoint

Use list uploads to record offline touches, such as a tradeshow or webinar list, or to load attribution history from another system.

1. Upload a CSV file. See [Importing Contacts](https://docs.inflection.io/database/importing-contacts.md).
2. On the mapping step, select **Count this upload as a touchpoint**. This adds a touchpoint to each contact imported from this file.
3. Enter a **Touchpoint name**, for example the event name. Leave it blank to use the file name.
4. Select an **Event date**. Leave it blank to use the upload time. The date can't be in the future or before 1900.
5. Map your columns and complete the import.

![Import Contacts mapping step with Count this upload as a touchpoint selected, a touchpoint name, and an event date](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/09.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=e8508bdd66fad65d154df9c33436f23d)

Whether an upload moves Last Touch is set by **Updates last touch** in the **List uploads** source panel. The panel also lists **Recent CSV uploads** and whether each one was counted.

### Load Attribution History From a File

Map CSV columns directly to attribution fields to bring in First Touch, Lead Creation, or Last Touch values from another system.

* Map a date column for each touch you load. For example, map a column to **First Touch date** when you map First Touch fields.
* For Last Touch fields, map a Last Touch date column, or count the upload as a touchpoint.
* Select **Backfill attribution history** to also map **Source Type** and **Source Name** from your file. They need that touch's date column. Leave it unselected and they fill in automatically.

An upload counts as a touchpoint when **Count this upload as a touchpoint** is selected, or when its file has attribution columns mapped.

> [!NOTE]
>
> Rows that have attribution values but no date are still imported, without those values. The import report shows them as **Skipped attribution (no date)**.

## Send Attribution Through the API or Journeys

* **API:** include attribution fields in a contact create or update request. A request counts as a touchpoint only when it sends attribution fields.
* **Journeys:** use an **Update value** step to set an attribution field. The step counts as a touchpoint only when it sets attribution fields and the journey is in scope. If the journey doesn't count, the step shows **This journey doesn't count for attribution, so this field is skipped.**

## View Attribution on a Contact

### Attribution Section

Open a contact to see the **Attribution** section, marked **system managed**. It shows three columns, **First touch**, **Lead creation**, and **Last touch**, each with the touch date and its parameters, including any custom parameters.

![Attribution section on a contact showing First touch, Lead creation, and Last touch columns](https://mintcdn.com/inflection-4b2c0de4/Bx7ye8gfZIsIgb0Z/images/database/attribution/10.png?fit=max\&auto=format\&n=Bx7ye8gfZIsIgb0Z\&q=85\&s=d63f60e69b95d3f8e4b7e38a1886dc44)

You can edit attribution values by hand in edit mode. Last Touch can't be earlier than First Touch.

### Touchpoints Tab

Click **View all touchpoints**, or open the **Touchpoints** tab, to see the contact's web sessions, form submissions, and webhook events, newest first.

* Each event shows a **First touch**, **Lead creation**, or **Last touch** badge when it set that touch, or **Touchpoint** when it counted without setting one.
* Events that didn't count are muted and show why, for example **Excluded in your settings**, **Not selected in your settings**, **No attribution parameters**, or **Only the first anonymous touch counts**.
* Values set by a list upload, journey step, API call, or manual edit show where they came from, for example **Added by a list upload**.
* Filter by source with **All sources** and by date range. The default range is **Last 6 months**. The header shows the count, for example **1 event · 1 touchpoint**.

![Touchpoints tab on a contact listing web sessions, a form submission, and a list upload with touch badges](https://mintcdn.com/inflection-4b2c0de4/o6w3s9bd-Ns2Y_PU/images/database/attribution/11.png?fit=max\&auto=format\&n=o6w3s9bd-Ns2Y_PU\&q=85\&s=3c34da5bfe6fbd785fa7414d0553a6a5)

## Common Use Cases

* **Report on the campaigns that create pipeline:** write First Touch and Lead Creation to Salesforce and report on them next to opportunities.
* **Keep history from a previous tool:** use **Writeback + seed** so existing Salesforce First Touch values carry over, or load history from a CSV with **Backfill attribution history**.
* **Record offline events:** upload a tradeshow or webinar list with **Count this upload as a touchpoint** and the event date.
* **Segment by acquisition channel:** build audiences on fields such as `first_touch_utm_source` or `lead_creation_utm_campaign`.
* **Track paid click IDs:** add `gclid` or another key as a custom parameter.

## FAQ

> **Does turning off stamping delete attribution data?**
>
> No. Stamping stops, and the fields and stamped values are kept.

> **What happens to existing contacts when I turn on stamping?**
>
> Inflection backfills them from past visits and submissions. Progress shows at the top of the settings page.

> **Does changing a source or scope rewrite past touchpoints?**
>
> No. Changes apply to new activity. Turning a parameter off stops stamping its fields and keeps stamped values.

> **Why didn't a website visit change Last Touch?**
>
> At the **First anonymous touch only** level, web sessions never move Last Touch. At **Sessions with attribution parameters**, only visits that carry a stamped parameter move it, and only when **Updates last touch** is on.

> **Why can't I map a webhook key to a Last Touch field?**
>
> Last Touch fields are filled by attribution. Send standard UTM keys, or add your key as a custom parameter in Attribution settings.

> **Can Salesforce campaign membership count as a touchpoint?**
>
> Not in this release. Use a list upload with **Count this upload as a touchpoint** to record campaign or event attendance.

> **Does Inflection include attribution reports?**
>
> No. Use attribution fields in audiences, write them to Salesforce, or export them to your data warehouse for reporting.

## Additional Resources

* [Salesforce](https://docs.inflection.io/connections/salesforce.md)
* [Importing Contacts](https://docs.inflection.io/database/importing-contacts.md)
* [Inflection Forms](https://docs.inflection.io/connections/inflection-forms.md)
* [Inbound Webhooks](https://docs.inflection.io/connections/inbound-webhooks.md)
* [Global UTM Parameters](https://docs.inflection.io/settings/global-utm-parameters.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.