---
title: Pulse
description: A compact outlier chart strip above the Observations table. See count, cost, and latency spikes over time, then click or drag a spike to narrow the table to that window.
sidebarTitle: Pulse
---

# Pulse

Pulse is a compact chart strip above the Observations table. Each bar covers a slice of time and shows the number of observations by default. You can also use it to see the total cost spent or p95 latency. The spike you are hunting for is a tall bar, not a row you have to sort your way down to. Click or drag a spike and the table narrows to that window.

  Pulse runs on the [Langfuse v4](/docs/v4) observations-first data model. It
  appears above the main Observations table; it is not shown when the table is
  scoped to a single user or session. On self-hosted deployments, it is
  available after [upgrading to Langfuse
  v4](/self-hosting/upgrade/upgrade-guides/upgrade-v3-to-v4).

Pulse is always on above the Observations table.

## What each bar shows [#bars]

Each bar is one time bucket. Its height is a single aggregate of the events in that bucket, so a tall bar is a bucket that stands out: a high-volume, expensive, or slow window.

The bars span the full selected time range. A bucket with no events is a gap on the baseline rather than absent space, so a quiet stretch reads as a flat baseline and a spike stands out against it. Bars use a square-root height scale: real count, cost, and latency outliers can run many times the base load, and a linear scale would flatten everything but the peak, so the scale keeps the base load readable while the outlier still dominates.

Bucket width adapts to the range and the available width. Langfuse picks the finest bucket that fits the range into the strip, from one minute up to one week, so a one-hour range and a one-month range both fill the strip with bars.

Hover a bar to read its time bucket, the metric value, and how many events fell in it. When events exist in a bucket but carry no value for the current metric, the bar shows a faint activity tick instead of a height, so a missing metric never reads as "nothing happened". When the range holds no events at all, the strip reads **No events in range**; when it holds events but none carry the current metric, it reads **No [metric] data in range**.

## Metric modes [#metrics]

A dropdown at the left of the strip switches what the bars plot:

- **Count** — the number of observations in each bucket. This is the default.
- **Cost** — the total spent in each bucket.
- **Latency** — how slow the bucket ran: `p95` by default, with the median (`p50`) available from a second dropdown next to the metric name.

Your metric and aggregate choices are remembered across visits.

## Navigate to an outlier [#navigate]

Pulse turns spotting a spike into navigating to it.

- **Click a bar** and the table's time range narrows to that bucket, showing exactly the events in the spike.
- **Drag across a range of bars** to select a wider span. The selection applies when you release.
- **Browser Back** returns you to the range you started from, so exploring costs you nothing.

An empty bucket does not navigate, since there would be nothing to show.

On touch devices, a tap or drag previews the span with a pinned tooltip and an **Explore this window** action instead of changing the range immediately, so an accidental touch never moves you.

## Filters it applies [#filters]

Pulse plots the same filtered query as the Observations table below it. The time range, the sidebar facets, and the [search bar](/docs/observability/features/filter-search-bar) all carry over.

A few filters cannot be expressed as an aggregate over time, so the strip cannot apply them:

- **Numeric measures** used as filters (filtering by latency, cost, or token value). Cost and latency remain available as strip metrics; only filtering the rows by their value is unavailable.
- **Scores**, **metadata**, and **comments** filters.
- **Full-text search** and field-scoped text search (`input:`, `output:`).
- **Presence checks** (`has:` and `-has:`).

When any of these filters or searches are active, Pulse disables the strip instead of showing aggregate data that does not represent the filtered table. The table remains available and continues to honor the active filters.

## Pulse and charting the table [#vs-chart]

Pulse and [Chart any table](/docs/observability/features/events-table-charts) both draw the Observations table's data, but they answer different questions. Pulse is an always-on strip above the table for finding and jumping to outliers, one bar per time bucket. Charting the table replaces the table with a full, configurable chart (type, metric, aggregation, breakdown) of the same filtered query, and can be saved to a dashboard. Use Pulse to spot and drill into a spike; switch to a chart when you want to shape a view and keep it.

## Learn more

- [Chart any table](/docs/observability/features/events-table-charts)
- [Filter Search Bar](/docs/observability/features/filter-search-bar)

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/docs/observability/features/pulse.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx langfuse-cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
