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

# How clicks and conversions are counted

> Understand what makes a click and a conversion count in contentgrove, why conversions need an offer, and how URL match types decide whether a page counts.

Every number in contentgrove comes down to two events: a **click** and a **conversion**. Knowing exactly what makes each one count explains the rest of your setup.

## What counts as a click

A click is recorded the moment someone clicks one of your tracking links. contentgrove counts it server-side at the short-link redirect, before your landing page even loads.

Because the click is tied to the link itself:

* **Every tracking link counts clicks** — whether it's an offer link or an affiliate link. You don't need an offer to count clicks.
* The click is recorded even if your tracking script isn't installed on the destination page. The script is what later links a click to a conversion, not what counts the click.

Obvious bot traffic is filtered out, and clicks are only recorded while your subscription is active.

## What counts as a conversion

A conversion needs an **offer**. An offer defines your landing page and, most importantly, your **thank-you page** — the page a visitor reaches after completing your action, such as a purchase, signup, or booking.

A conversion is counted when both of these are true:

* The visitor **previously clicked** a link tied to that offer, within the last 30 days.
* They reach a page that **matches the offer's thank-you page rule**.

<Warning>
  A tracking link on its own only counts clicks. To count conversions and revenue, the link must point to an **offer** that has your landing and thank-you page URLs set up. Without an offer, contentgrove never records a conversion. See [Set up offers](/links/offers).
</Warning>

The conversion is linked back to the original click and video, so you can see the full path from video to click to conversion. See [Conversion tracking](/concepts/conversion-tracking) for how attribution and the 30-day window work.

## How contentgrove matches your pages

When you set up an offer, you choose a **match type** for each URL. This is how contentgrove decides whether the page a visitor is on counts as your landing or thank-you page.

| Match type       | Behavior                                        | Example                                                                       |
| ---------------- | ----------------------------------------------- | ----------------------------------------------------------------------------- |
| **Exact match**  | The URL must match exactly.                     | `yoursite.com/landing` matches only that URL.                                 |
| **Includes**     | The URL contains your pattern anywhere.         | `/landing` matches `yoursite.com/landing` and `yoursite.com/my-landing-page`. |
| **Not Includes** | The URL does not contain your pattern anywhere. | `/offer` matches `yoursite.com/landing` but not `yoursite.com/landing-offer`. |
| **Starts with**  | The URL begins with your pattern.               | `yoursite.com/landing` matches `yoursite.com/landing?utm_source=youtube`.     |
| **Ends with**    | The URL ends with your pattern.                 | `/thank-you` matches `yoursite.com/product/thank-you`.                        |

### Which to choose

* **Thank-you page** — this is the match that determines conversions, so it matters most. Use **Includes** for flexibility, or **Starts with** to target a specific page. Avoid an overly strict **Exact match**, a common reason conversions don't record.
* **Landing page** — **Starts with** is usually best, because it still matches when tracking parameters are appended to the URL.

<Tip>
  After setting up an offer, test the whole flow: click a tracking link, complete your action, and confirm both the click and the conversion appear in your dashboard. If the conversion doesn't show, your thank-you page match type or pattern is probably too strict.
</Tip>
