---
title: "Funnel statistics"
method: GET
path: "/v1/projects/{projectId}/funnels/{funnelId}/stats"
tags: ["Funnels"]
---

# Funnel statistics

`GET /v1/projects/{projectId}/funnels/{funnelId}/stats`

## Request

- Base URL: `https://hootlens-api-368877148687.us-east1.run.app`
- URL: `https://hootlens-api-368877148687.us-east1.run.app/v1/projects/{projectId}/funnels/{funnelId}/stats`
- Auth: HTTP bearer

Visits that reached each step in order, with drop-off examples. Cohort filters match the page view where the visit reached step 1. Ranges are limited to 92 days and default to the last 30.

Required token scopes are listed in x-hootlens-scopes. A signed-in person needs the matching permission on the site instead (the viewer and editor roles are presets of the permissions).

## Path parameters

- `projectId` string, required: An identifier: 1 to 80 letters, digits, underscores or hyphens.
- `funnelId` string, required: An identifier: 1 to 80 letters, digits, underscores or hyphens.

## Query parameters

- `from` integer
- `to` integer
- `pageGroup` string
- `deviceClass` 'desktop' | 'tablet' | 'mobile'
- `locale` string
- `variant` string
- `pageVersion` string

## Response `200`

The statistics.

- FunnelStats
  - `funnelId` string, required
  - `name` string, required
  - `from` integer, required: Epoch milliseconds.
  - `to` integer, required: Epoch milliseconds.
  - `effectiveFrom` integer: The window measured: from raised to the latest goal start.
  - `effectiveTo` integer: Epoch milliseconds.
  - `sessions` integer, required: Visits that reached step 1.
  - `truncated` boolean, required: True when only the newest visits were counted.
  - `filters` object, required
  - `steps` object[], required
    - `index` integer, required
    - `goalId` string, required
    - `name` string, required
    - `goalKind` 'click' | 'page'
    - `description` string
    - `since` integer: Epoch milliseconds.
    - `reached` integer, required
    - `fromPrevious` object, nullable
      - `rate` number, nullable
      - `interval` number[], nullable
    - `fromFirst` object
      - `rate` number, nullable
      - `interval` number[], nullable
    - `dropOff` object
      - `count` integer, required
      - `exampleSessionIds` string[]
      - `examples` object[]
        - `sessionId` string
        - `recordingId` string
        - `at` integer: Epoch milliseconds.
  - `notes` string[], required

## Other responses

- `400`: The request fields are invalid.
- `401`: The credential is missing, expired or revoked.
- `403`: The credential or the person's permissions on the site do not permit this action.
- `404`: The site, or the record inside it, does not exist or the caller is not a member (a non-member cannot tell the two apart).
- `409`: The request conflicts with the current state of the record.
- `429`: A rate limit or a per-site limit was reached.

---

[API](https://skmtc.dev/hootlens/apis/hoot-lens-api.md) · [All operations](https://skmtc.dev/hootlens/apis/hoot-lens-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hootlens/apis/hoot-lens-api/revisions/f64f8dc7b84e?raw)
