OpseerOpseer
Docs
Dashboard

Stats & Auto Collection

Set up stat columns, configure auto collection, and visualize your data with charts.

Last updated: 2026-05-18

Stats is the core feature of Opseer. Define what metrics to track from your connected database, and Opseer collects them automatically every day. View trends with charts and receive daily reports via your configured alert channels.

Widget groups

Stat widgets are divided into two groups based on their purpose:

  • Summary (Number, Gauge) — View today/yesterday metrics at a glance. No size selection, uniform sizing.
  • Trend (Line, Bar, Area) — Analyze changes over time. Three size tiers: Small (4 per row) / Medium (2 per row) / Full (1 per row).

On the Stats page, summary widgets appear at the top and trend widgets at the bottom. Reordering is available within each group. Switching a widget's chart type from the ⚙ menu also moves it between summary/trend groups automatically.

Adding a stat column

Each stat column represents one metric you want to track over time. The create/edit page has a single settings card on the left and a terminal on the right (fixed block + log stream) so you can see the widget preview and change history as you configure.

Left card order: Chart type → Display name → Platform (if multi-DB) → Table → Aggregation/aggregation column → Date column → Conditions (WHERE) → Target value → Default period → Widget size → Save.

When selecting a chart type, summary and trend groups are visually separated. Selecting a summary type hides the size option, while trend types offer Small/Medium/Full size selection.

Create a column in Visual mode

Default authoring style. Select a table, choose an aggregation, and optionally filter by a date column. On multi-DB projects, pick the target DB via the platform selector.

1

Click "Add Column"

On the Stats page, click the add column button.

2

Pick chart type

Number card, gauge, line, bar, or area.

3

Enter display name

Give it a descriptive label like "Daily Signups". The internal ID (column_key) is auto-generated.

4

Pick platform (multi-DB only)

Choose which DB (Supabase / Neon) to query against. Single-DB projects skip this step.

5

Pick a table

Loaded via PostgREST OpenAPI (Supabase) or information_schema (Neon).

6

Pick aggregation

COUNT, SUM, AVG, MIN, MAX. SUM/AVG require an aggregation column.

7

Date column (optional)

If set, aggregates yesterday only (daily). If unset, aggregates the whole table daily (cumulative).

8

Conditions (optional)

Build WHERE clauses via GUI. AND/OR groups supported.

9

Display settings

Target value / default period / widget size, adjusted per chart type.

10

Save

Query validation runs automatically on save. Queries over 5s are rejected with index suggestions.

SQL Mode is temporarily disabled (Coming Soon). Existing SQL columns remain editable, but new creation is Visual-only. Re-enabling pending security review.

Default period

Each stat widget can have a default display period. Summary widgets default to "Today" and trend widgets default to "7d". Select "Follow Global" to use the dashboard's global period filter.

The global period filter offers Today/Yesterday/7d/30d/90d options. When selecting a period beyond the loaded data range, data is automatically fetched from the server.

Auto collection

Once stat columns are configured, Opseer collects values automatically every day at your project's configured collection time. Auto collection is available on all plans including Free.

  1. At your scheduled time, the Opseer Edge Function runs each stat column's query against your database
  2. Results are stored in the project_stats_data table in the Opseer DB
  3. Auto stats (Auth-based) are also collected at the same time
  4. If alert channels are enabled, a daily report is sent to your configured channels

Collection time and alert delivery

Auto collection time and alert delivery time share the same setting. You can view and change this time from 3 places:

  • Stats page — collection time button at top left (click to modify)
  • Project settings — auto collection item (read-only, click to navigate to alert settings)
  • Alert settings — delivery time setting (alongside channel configuration)

Auto collection runs even without alert channels configured. Without channels, only collection runs — no report is sent.

Daily report delivery requires Starter plan or above. Free plan supports auto collection only.

Auto refresh

When accessing the Stats page or project dashboard, if the last collection time is more than 3 hours ago, an automatic refresh is triggered. The refresh runs server-side during page load so the latest values appear immediately; manual refresh shows a pulsing animation on the data area.

The collection timestamp is managed per project, so in team projects, when one member triggers a refresh, other members will see the updated data.

Auto stats (Supabase Auth)

When Supabase is connected, Auth-based auto stats become available:

  • Total Users — Total number of users
  • New Signups — Today's new registrations

Auto stats can be enabled/disabled from the Integrations page. Data is collected from the connected Supabase project's Auth users — no query configuration needed.

Auto stats can also be disabled from the Stats page. When disabled, collected data is preserved. To re-enable, go to the Integrations page.

Daily report

When alert channels (Slack, Discord, Telegram, Webhook) are configured, a daily report is sent after auto collection completes. Report order:

  1. Summary stats (Number, Gauge) — by sort_order
  2. Trend stats (Line, Bar, Area) — by sort_order
  3. Auto stats (Total Users, New Signups) — after separator

Each stat item shows yesterday's value, previous day's value, and change percentage (%).

Charts

Each stat column displays as a chart widget on your Stats dashboard. You can configure the chart type.

Chart types

  • Summary: Number — Single metric + change vs previous day. Gauge — Current value against a target.
  • Trend: Line — Track trends over time. Bar — Compare values across dates. Area — Line chart with filled area.

Widget menu

Each widget has a ⚙ button in the top-right that lets you adjust settings without opening the editor:

  • Chart type — Switch between Number / Gauge / Line / Bar / Area. Switching across summary↔trend automatically moves the widget between groups.
  • Widget size (trend only) — Small / Medium / Full.
  • Header value — Latest / Sum / Average / Max. Controls how the period's values are summarized.

While a setting change is being applied, the widget pulses briefly to indicate the update is in progress.

Header value mode

The number shown in a widget's header aggregates values across the displayed period. Opseer auto-selects the mode based on your query and you can override from the menu:

  • Latest — Most recent data point. Best for cumulative snapshots (total users, paid subscribers).
  • Sum — Sum of all values in the period. Best for daily events (new signups, daily revenue).
  • Average — Period average. Best for ratios (response time).
  • Max — Peak value in the period. Best for records.

If the query has a date column filter, Sum is chosen automatically; otherwise Latest. A small badge next to the header value shows the current mode.

Backfill

Backfill lets you populate historical data for a stat column. When you add a new column, you can backfill past dates to immediately see trends instead of waiting for daily collection to accumulate data.

The backfill period depends on your plan:

  • Free — Up to 7 days
  • Starter ($9/mo) — Up to 90 days
  • Plus ($24/mo) — Up to 90 days
  • Max ($49/mo) — Up to 90 days

Backfill runs the stat query for each past date individually. For date-filtered columns, the :date_start and :date_end variables are set to each day's range. Make sure your date column has data for the backfill period.

Plan limits

The number of stat columns you can create is limited by your plan. This limit is shared across all projects (not per-project):

  • Free — 5 stat columns total
  • Starter ($9/mo) — 10 stat columns total
  • Plus ($24/mo) — 30 stat columns total
  • Max ($49/mo) — 100 stat columns total