---
title: List session filter values
description: Discover the available country, device, browser, page, and referrer values before filtering Clics sessions with the TypeScript SDK.
sidebar:
  label: List filter values
seo:
  title: List available Clics session filter values with the TypeScript SDK
---

Use `clics.sessions.listSessionFilterValues` to populate a Sessions filter picker, or to discover values before calling [listSessions](/sdk/sessions/listsessions). It returns values that exist in the current analytics scope, together with their session and pageview counts.

## What you need

| Field | Required | Description |
| --- | --- | --- |
| `projectId` | **Yes** | Project to inspect |
| `field` | **Yes** | One of `country`, `device`, `browser`, `os`, `page_entry`, `page_exit`, or `referrer` |
| `dateRange` | No | One of the nine presets; defaults to `last7days` |
| `start` and `end` | No | Custom `yyyy-MM-dd` or ISO8601 range; always pass both together |
| `domain` | No | One hostname, or `localhost` for development traffic |
| `timezone` | No | IANA timezone; defaults to `UTC` |
| `limit` | No | Maximum values to return; defaults to `200` |

You can also constrain the scope with the same session filters as `listSessions`: `country`, `device`, `browser`, `os`, `pageEntry`, `pageExit`, or `referrer`, each with an optional `...Op` of `is` or `is_not`.

The field being requested is deliberately excluded from its own filter. For example, request `field: "browser"` with `country: "US"` to build a browser picker for US sessions. The **requested field** uses API-style values such as `page_entry`; the optional filtering properties remain SDK-style camelCase, such as `pageEntry` and `pageEntryOp`.

## Example

```typescript
const browsers = await clics.sessions.listSessionFilterValues({
  projectId: "proj_xxx",
  field: "browser",
  dateRange: "last30days",
  timezone: "Europe/Paris",
  country: "US,FR",
  countryOp: "is",
  limit: 20,
});

for (const browser of browsers.values) {
  console.log(browser.label, browser.sessions, browser.pageviews);
}
```

`timezone` makes period presets and date-only ranges follow that local calendar. Use the same timezone in `listSessions` so the picker and the results use the same scope.

## What it returns

```typescript
{
  values: Array<{
    value: string;    // value to send back to listSessions
    label: string;    // display label for a UI
    sessions: number; // matching sessions
    pageviews: number;
  }>;
  meta: { timezone: string };
}
```

| Field | Type | Description |
| --- | --- | --- |
| `values[].value` | `string` | Exact SDK filter value to send back to `listSessions` |
| `values[].label` | `string` | Human-readable value for a picker or report |
| `values[].sessions` | `number` | Matching session count in the current scope |
| `values[].pageviews` | `number` | Matching pageview count in the current scope |
| `meta.timezone` | `string` | IANA timezone applied to the period |

Use `"direct"` as the `referrer` value for direct traffic. For a custom range, pass both `start` and `end`; they take precedence over `dateRange`.

## Next step

Pass the selected value to [listSessions](/sdk/sessions/listsessions), for example `{ browser: "Chrome", browserOp: "is" }`.
