# Filters, dates and comparisons

> The filter bar on top of every ClickClacks report: date ranges and your project time zone, sources, segments, property filters and their operators, visit referrer and UTM, Compare, and the freshness control.

- Canonical URL: https://clickclacks.io/docs/guides/filters
- Section: Product guides
- Last updated: 2026-09-26

Almost every report in ClickClacks has the same row of controls on top: who, when, where, which events, and how fresh the answer is. Learn it once and you can read any report.

## The filter bar {#anatomy}

Reading left to right, the bar holds:

- **People**: **All people**, or one saved segment.
- **Dates**: a preset such as **Last 30 days**, or a custom range.
- **Source**: **All sources**, or one website, app or server.
- Your applied filters, shown as chips that read like sentences, for example _Page contains /blog_ or _Referrer is not set_.
- **Add filter**, to narrow by an event property.
- At the end, the freshness control and **Compare**.

The first three sit together as one joined control, because together they answer “whose data, from when, from where”. Filters apply to everything on the page. On a board they apply to every tile.

Your filters travel with you. Set **Last 7 days** on Overview and Funnels opens with the same range. They are also kept in the page address, so a link you paste to a teammate opens with the same scope. The default is **Last 30 days**, **All sources** and **All people**.

Not every report shows every control. Funnels filter each step instead of the whole report, so they skip **Add filter**. Traces only offer dates and freshness. When a control can’t work on a report, it stays visible and says why, rather than disappearing. For example, Flows show _Flows can’t compare to the previous period yet_.

## Dates and time zone {#dates}

Click the dates chip to open the date picker. On the left are the presets:

- Today
- Yesterday
- Last 7 days
- Last 30 days
- Last 90 days
- Last 12 months
- Month to date
- Year to date
- All time

On the right is a calendar for a custom range. Click a start day, then an end day, and press **Apply**. Nothing changes until you apply, so you can click around freely. The footer shows the range you have painted and the time zone it is read in, for example _Times in Europe/London_.

> **Days follow your project’s time zone**
>
> Reports read days, hours and “today” in your project’s time zone, not your laptop’s. An Owner sets it under **Settings › Organization Settings › Reporting time zone**. Everyone else can see it under **Settings › General**. That is why a teammate in another country sees the same daily numbers as you. If the zone is unset, reports use UTC.

**Today** and **Month to date** are still filling up. A dip at the right edge of a chart is often just the current hour or day being incomplete.

## People and segments {#people}

The people chip is titled **Who to count**. **All people** means everyone who sent an event in the range. Pick a saved segment to count only its members. Each segment shows its size, a one-line summary of its conditions, and a badge:

- **Live**: membership is re-evaluated as people match or stop matching.
- **Snapshot**: a fixed list of people, frozen when it was saved.

Segments you used recently are listed first. To create or edit segments, see [Segments](https://clickclacks.io/docs/guides/segments.md).

### Compare segments (Funnels and Retention) {#compare-segments}

Funnels and Retention also have a **Compare segments** button. Tick up to five saved segments and press apply, and the report splits into one row or line per segment, plus **Other** for everyone in none of them. Someone in two segments counts in both.

## Sources {#sources}

A project can have several sources, such as a marketing site, a web app and a server. **All sources** is the default, and it is what makes a funnel that starts on your site and ends in your app possible. Pick one source to see only its events. The list shows each source with its event count, under _Sources in \[your project\]_.

## Property filters {#property-filters}

Every event carries properties: the page it happened on, the browser, the country, the UTM tags, and anything you sent yourself. **Add filter** builds a filter in up to three steps:

1. **Pick a property.** Properties are grouped as **Suggested**, **Page & source**, **Device & location**, **Person** and **Custom event properties**. Rarely used keys are under **Show advanced properties**. Search matches both the friendly name and the raw key, so `utm_source` finds _UTM source_.
2. **Pick an operator**, such as _is_, _contains_ or _greater than_. This step is skipped when only one operator fits.
3. **Pick or type values.** The list shows real values with how many events carry each. You can tick several (_is any of_) or type one that hasn’t been seen yet. Then press **Apply**.

Properties belong to _events_, not people. So when you filter a people-based report, the builder asks what the filter applies to:

- **People who ever matched**: keep everyone who sent at least one matching event, and count all their events.
- **Matching events only**: count only the events that match.

In a funnel, the builder asks **which step** has to match instead. Some reports also offer **Break down instead**, which splits the report by that property rather than filtering it.

Click a chip to edit it. The **×** on a chip removes it. After three chips, the rest fold into a “+n more” button. You can have one filter per property: a second filter on the same property replaces the first. Values show _Direct / none_ for a direct visit and _(not set)_ when an event has no value.

## Operators {#operators}

Which operators you see depends on the property’s type. If you set a type in [Lexicon](https://clickclacks.io/docs/guides/lexicon.md), that type wins.

| Type | Operators |
| --- | --- |
| Text | is, is not, contains, does not contain, is set, is not set |
| Number | is, is not, greater than, less than, between, is set, is not set |
| Date | after, before, between, is, is not, contains, is set, is not set |
| True / false | is, is not, is set, is not set |

- **contains** and **does not contain** ignore upper and lower case. Does not contain also keeps events that don’t have the property at all.
- **between** includes both ends. Dates are compared by day.
- **is set** means the event carries the property at all, and **is not set** means it doesn’t.

## Referrer and UTM: the visit, not the click {#referrer}

**Referrer** and the **UTM** properties describe the _visit_. Referrer is where the session landed from, and it is empty when the visit was direct. The UTM properties hold the first UTM value the session carried. Every event in the visit carries those same values.

That is what you want for attribution. Say someone lands from a newsletter with `utm_source=newsletter`, reads three pages and then signs up. Filtering sign-ups by _UTM source is newsletter_ finds them, even though the sign-up page’s own URL had no UTM tags.

If you need the value on one event itself, open **Show advanced properties** and use **Referrer (this event)** or **UTM source (this event)** and its siblings.

## Compare {#compare}

**Compare** draws the previous period of the same length next to the current one. With **Last 7 days** selected, that is the seven days before. You can switch it from the chip or from **Compare to previous period** in the date picker. Headline numbers then show how much they changed, such as _↑ 12.4% vs prev 7 days_. Each report’s guide says what else Compare changes there.

## Freshness {#freshness}

New events reach reports within seconds of arriving. The tracker sends them in small batches every few seconds. An open report doesn’t redraw itself while you read it, so numbers don’t shift under you. A result counts as fresh for about a minute, and the freshness control tells you where you stand:

- **Updated 2 minutes ago** (or similar): when the result was computed. Hover to see the exact time.
- **Newer data available**: a newer answer is ready. Click to load it.
- **Refreshing**: a new answer is on its way.
- **Couldn’t refresh**: the last attempt failed and you are still looking at the previous result. Click to try again.

For a live view of events as they happen, use [Realtime](https://clickclacks.io/docs/guides/realtime.md) or the [Events explorer](https://clickclacks.io/docs/guides/events.md)’s live tail.

## On a phone {#phone}

On narrow screens the bar collapses into a one-line scope summary and a **Filters** button with a count of active filters. Tapping either opens a sheet with the same pickers.

## Recipes {#recipes}

### How did last week compare with the week before?

1. Open **Overview** (or any report).
2. Click the dates chip and choose **Last 7 days**.
3. Turn on **Compare to previous period** and press **Apply**.

The headline numbers now show their change against the seven days before.

### Only count blog traffic from paid campaigns.

1. Click **Add filter**, pick **Page**, choose **contains**, type `/blog` and press **Apply**.
2. Click **Add filter** again, pick **UTM medium**, choose **is**, tick `cpc` and `paid`, and press **Apply**.

Two chips now read _Page contains /blog_ and _UTM medium is any of cpc, paid_. Because UTM is visit-level, this counts every blog page seen in a paid visit.

### Find events from visitors who arrived with no referrer.

1. Click **Add filter** and pick **Referrer**.
2. Choose **is not set** and press **Apply**.

You are now looking at direct visits: typed URLs, bookmarks, and links from apps that don’t pass a referrer.

## Related {#related}

- [Segments](https://clickclacks.io/docs/guides/segments.md): Save a group of people and use it in the People picker.
- [Lexicon](https://clickclacks.io/docs/guides/lexicon.md): Describe properties and set their types.
- [Boards](https://clickclacks.io/docs/guides/boards.md): Board filters apply to every tile.
- [Insights](https://clickclacks.io/docs/guides/insights.md): Break a chart down instead of filtering it.
