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

# UTM tags and pixels

> How the platform remembers UTM tags, where to see the source of a registration and a payment, and which events go to ad system pixels.

The platform reads UTM tags from the links visitors arrive by and saves them at registration and payment. This way you see which channel a student came from and which ad brought the payment. Ad system counters — Meta Pixel, Google Analytics, Yandex Metrica and VK Ads — are connected through custom code and receive goal events automatically.

## How the platform saves tags

**1. A visitor follows a link with tags**

For example: `https://myschool.ru/?utm_source=instagram&utm_medium=cpc&utm_campaign=autumn`. You can add tags to a link to any school page.

**2. The platform remembers the tags in the browser**

The tags are saved in the visitor's browser. If the visitor closes the tab and comes back later without tags, the platform still knows the source until the storage period ends.

**3. The tags are attached to actions**

At registration, the tags are written to the user card. At course enrollment, they go to the access data. When an invoice is created, they go to the payment.

> [!NOTE]
>
> Tags are stored in a specific browser. If a student came from an ad on a phone but registered on a computer, the tags are not carried over.

## Which parameters are recognized

| Parameter | Purpose |
| - | - |
| `utm_source` | Traffic source: instagram, google, telegram |
| `utm_medium` | Channel type: cpc, email, social. It sets the tag's priority and storage period |
| `utm_campaign` | Ad campaign name |
| `utm_term` | Keyword or audience |
| `utm_content` | Ad or creative |
| `gclid`, `yclid`, `fbclid` | Click IDs from Google Ads, Yandex Direct and Facebook |
| `aff_id`, `sub_id` | Partner ID and an additional partner tag |
| `track_id` | Any ID for end-to-end analytics |
| `referrer` | The domain of the website the visitor came from. Filled in automatically |

Rules:

* Parameter names are written in lowercase, as in the table. The platform does not recognize `UTM_SOURCE` or `Utm_Source`.
* The value of each parameter is cut to 300 characters.
* If the link has no tags but the visitor came from another website, the platform saves only that website's domain. Such a visit does not replace an ad tag that is already saved.

## Which tag is saved if a student came several times

The platform keeps the last meaningful source. A new tag replaces the saved one only if its channel is at least as important as the saved one. Importance is set by the `utm_medium` value.

| `utm_medium` value | Priority | Storage period |
| - | - | - |
| `cpc`, `paid`, `affiliate`, `paid_social` | Highest | 90 days |
| `influencer_paid` | Highest | 30 days |
| `sms`, `push`, `email` | High | 14 days |
| `messenger`, `remarketing` | High | 30 days |
| `seo`, `blog`, `social`, `youtube`, `organic`, `referral` | Medium | 30 days |
| Any other value | Below medium | 30 days |
| `direct` | Low | 30 days |
| Parameter not set | Lowest | 30 days |

Example: a student came from an ad with `utm_medium=cpc`, and a week later from a newsletter with `utm_medium=email`. The ad is saved because it has a higher priority. After 90 days the ad tag expires, and the next visit from the newsletter replaces it.

## Where to see tags

### Registration source

In **People → All users**, the **Registration** column shows where the user came from:

| What the column shows | What it means |
| - | - |
| The values `utm_source / utm_medium / utm_campaign / utm_content` | The user registered via a link with tags |
| **Direct** | The user registered on their own, without tags |
| A staff member's name | A school staff member added the user |

All saved parameters are visible in the user card, in the **UTM at registration** block. Learn more about the card in [User card](https://faq.exode.biz/en/general/users/user-card.md).

### Payment source

In **Sales → Payments**, open a payment: the **UTM when purchasing** block shows the tags the student had when they went to payment. For subscription renewals, the tags from when the student first got access are used.

### Filter by tags

The user and payment lists have a **UTM filter** button.

**1. Open the filter**

Click **UTM filter** above the list.

**2. Set conditions**

Choose a **Parameter** and enter a **Value**. To add another condition, click **Add parameter**.

**3. Apply the filter**

Click **Apply**. The **Clear** button resets all conditions.

The filter looks for an exact, case-sensitive match: `Instagram` and `instagram` are different values. If you set several conditions, only records that match all of them stay in the list.

### Tags in external systems

* **Webhooks** pass the registration tags, and course enrollment events also pass the enrollment tags. Learn more in [Webhooks](https://faq.exode.biz/en/general/developers/webhooks.md).
* **Redirect after payment.** If the tariff has a **Redirect after payment** link, the payment system returns the buyer to this link, and the platform adds the payment tags to it. This way the thank-you page on your website gets the source of the sale.

## Ad system pixels

The platform sends goal events to the counters installed on the school website on its own. You add the counter code in **My school → For developers → Custom code**, in the **Custom HTML** field. This code is inserted into the `head` of every school page. Learn more in [Custom code](https://faq.exode.biz/en/general/developers/custom-code.md).

| System | What is needed to send events |
| - | - |
| Meta Pixel | The standard pixel code |
| Google Analytics | The standard `gtag` code |
| Yandex Metrica | The counter code and the `window.YM_ID` variable with the counter number |
| VK Ads | The pixel code and the `window.VK_PIXEL_ID` variable with the pixel number |

```html theme={null}
<script>
  window.YM_ID = 12345678;
  window.VK_PIXEL_ID = 1234567;
</script>
```

### Which events are sent

| Visitor action | Meta Pixel | Google Analytics | Goal in Metrica and VK Ads |
| - | - | - | - |
| Registering a new account by email or phone | `CompleteRegistration` | `sign_up` | `signup` |
| Filling in personal details after registration | `Lead` | `generate_lead` | `lead` |
| Viewing a course page | `ViewContent` | `view_item` | `view_course` |
| Opening a demo lesson from the course page | `ViewDemoLesson` | `view_demo_lesson` | `view_demo_lesson` |
| Enrolling in a free course | `StartTrial` | `free_course_enroll` | `free_course_enroll` |
| Going to payment | `InitiateCheckout` | `begin_checkout` | `begin_checkout` |
| Successful payment | `Purchase` | `purchase` | `purchase` |
| Completing a course | `CompleteCourse` | `complete_course` | `complete_course` |

How the payment event works:

* The event is sent once per payment and only if the successful payment page is opened within 5 minutes after the payment.
* The amount and currency are passed only for real currencies: in Meta Pixel and Google Analytics as event parameters, in Metrica as goal parameters, in VK Ads as the goal value.
* If the tariff has **Redirect after payment** set, the buyer may return from the payment system straight to your page, skipping the school's successful payment page. Then the payment event is not sent — record the payment on your own page using the tags in the link.
* Meta Pixel receives the payment ID together with the payment, so the event is not counted twice.

> [!TIP]
>
> For the goals to appear in Metrica reports, create goals of the “JavaScript event” type in the counter with the IDs from the last column of the table.

## Frequently asked questions

> **Why does the “Registration” column say “Direct” for a student who came from an ad?**
>
> Tags are saved in the browser. If the student followed the ad on one device but registered on another device or in another browser, the tags did not reach the registration. Also check that the parameters in the link are written in lowercase: `utm_source`, not `UTM_SOURCE`.

> **How long are tags stored?**
>
> From 14 to 90 days depending on `utm_medium`: 90 days for paid channels (`cpc`, `paid`, `affiliate`, `paid_social`), 14 days for `sms`, `push`, `email` and 30 days for the rest. After that, the tag is deleted from the browser.

> **A student came first from an ad and then from a newsletter. Which source is saved?**
>
> The ad. A newsletter tag with `utm_medium=email` does not replace an ad tag with `utm_medium=cpc` until the ad tag expires: paid channels have a higher priority.

> **Why does the UTM filter find nothing?**
>
> The filter looks for an exact, case-sensitive match. If the link had `utm_source=Instagram`, a filter for `instagram` will not find this record. With several conditions, a record must match all of them at once.

> **Where can I see the UTM tags a course was paid with?**
>
> In **Sales → Payments**, open the payment you need — the **UTM when purchasing** block. You can filter the payment list with the **UTM filter** button.

> **Is there a traffic source report with charts?**
>
> There is no separate UTM report in the school interface. Tags are available in the user and payment lists with filtering, in webhooks and in connected counters.

> **Why don't goals reach Metrica?**
>
> The platform sends goals only if the page has a counter and the `window.YM_ID` variable with the counter number is set. Add it to **Custom HTML** together with the counter code and reload the page.

> **Why wasn't the registration event sent for a student who signed in with Telegram?**
>
> The registration event is sent only when a new account is created by email or phone number. Signing in with Telegram does not send it.

> **Why wasn't the payment event sent?**
>
> The event is sent from the successful payment page if it is opened no later than 5 minutes after the payment. If the student closed the tab before reaching this page or opened it later, the event is not sent.

***

*Updated: 2026-10-15 18:32 UTC*


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