# How to Share a Grafana Dashboard — Snapshots, PDFs and the Digest Pattern

Canonical: https://commareports.com/share-grafana-dashboard
Published: 2026-09-04

> A Grafana share link asks for a login, a snapshot strips the live data, and PDF export is an Enterprise feature. The realistic options compared, plus the scheduled HTML digest that gives you one stable URL people can comment on.

# How to share a Grafana dashboard

You have a dashboard that answers the question. Someone asks the question. You
paste the link — and they hit a login page.

That is the whole problem in one sentence. Grafana dashboards are
authenticated routes inside your observability stack, and the people who most
need to see a dashboard are usually the ones least likely to have a seat in
it: the account manager on the incident call, the exec who asked why latency
moved, the customer who wants proof the SLA held.

## The four options, honestly

**Share the URL.** Correct when everyone already has an account and view
permission on the folder. Free, live, no work. Useless for anyone outside.

**A snapshot.** Grafana's snapshot feature serializes the query results
currently rendered and strips the datasource. The result opens without
credentials — because there is nothing left to authenticate against. Two
things follow. It is frozen at creation time, so it answers "what did this
look like on Tuesday" and never "what does it look like now." And if you
publish to the hosted `snapshots.raintank.io` endpoint rather than keeping it
local, that data is readable by anyone with the link. For production metrics
that is often a non-starter.

**Scheduled PDF reports.** Real, good, and an Enterprise/Cloud feature.
If you already pay for it, use it — with the caveat that a PDF is a dead end
for discussion. Replies happen in email, detached from the chart.

**Render panels, publish a digest.** Pull the panels as images or rebuild the
numbers from the datasource, assemble one self-contained HTML page, and put
that page at a stable URL with an anchored comment layer on top. This is the
option that survives contact with an audience that has no Grafana account,
and the one this page is about.

## Rendering panels without Enterprise

`grafana-image-renderer` is the open-source plugin (or sidecar container)
behind every screenshot Grafana takes. Once it is running, each panel is a URL:

```bash
curl -fsS -H "Authorization: Bearer $GRAFANA_TOKEN" \
  "$GRAFANA_URL/render/d-solo/$DASH_UID/slug?panelId=12&from=now-7d&to=now&width=1000&height=400" \
  -o panel-12.png
```

`/render/d-solo` renders a single panel headlessly at whatever size and time
range you pass. Loop it over the panel ids that matter, base64 the PNGs into
`<img src="data:image/png;base64,…">` tags so the page has no external
references, and you have a self-contained HTML digest.

If you would rather have real text than pictures of text — and you should,
because text is searchable, quotable and readable by an answer engine — skip
the renderer and query the datasource directly. Grafana's `/api/ds/query`
endpoint runs the same query the panel runs and hands back JSON, which turns
into an HTML table in a few lines.

## Publish it on a schedule

```bash
python3 scripts/grafana_digest.py > digest.html   # your renderer or query script

curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html digest.html \
        --arg title "Platform health — week of $(date +%F)" '{title: $title, html: $html}')"
```

One report id, PATCHed weekly. The URL in the channel topic never changes,
and each run stacks a revision, so "was this spike there last week" is a diff
rather than an archaeology project. If you would rather not own the cron at
all, a [routine](/features/routines) runs the same job on Comma's schedule and
posts the result for you.

## What the comment layer changes

A dashboard screenshot in Slack gets replies like "which panel?" A published
digest gets a thread pinned to the p99 chart that says "this is the
cache-warm window, expected — see INC-2214." The thread stays attached across
revisions, so the next person who notices the same shape finds the previous
explanation instead of re-deriving it.

Reviewers need no Grafana seat, because visibility is set on the report:
[private, team, domain-gated or link](/docs/sharing). And an agent attached
through [Comma's MCP server](/mcp) can read those threads, so an on-call bot
can answer "is this normal?" from the accumulated history.

## When to just use Grafana

If the audience is engineers who all have accounts and the value is in
zooming, changing the time range and pivoting to a different datasource — send
the link. Live and interactive beats a digest every time when the reader can
actually log in. The digest wins when the reader cannot, or when what you need
is a durable record of what the numbers were on a date, with the discussion
kept next to them.

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Create your first report →](https://commareports.com/)**

### Related

- [Share a Kibana dashboard](/share-kibana-dashboard) — same login-wall problem, different stack
- [Weekly analytics digest](/features/routines/weekly-analytics-digest) — the scheduled version
- [Comment on an HTML report](/comment-on-html)
