> ## Documentation Index
> Fetch the complete documentation index at: https://docs.attensira.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Boards

> Charts kept as the questions that drew them: our boards and yours, what a pin stores, the CSV export, and a link that opens a board without signing in.

A board is a page of charts you come back to. It lives under **Analytics → Boards**, and it holds two kinds: **ours**, which we keep for every workspace, and **yours**, which hold what you pinned.

## A pin is a saved question, not a picture

When you pin a chart, the board stores the question that drew it: the metric, how it is grouped, the window and any topic or prompt it is filtered to, plus whether to draw it as a chart, a table or a single number. It never stores the numbers or an image of them.

Every time the board opens, each pin's question is asked again. A share of voice pinned on Monday shows Friday's share of voice when you open the board on Friday, and it is the same figure the rest of the dashboard shows that day.

The window behaves the way it was asked:

* A pin asked over **the last N days** keeps reading the last N days, ending today.
* A pin asked over **fixed dates** keeps reading those dates.

## Ours and yours

**Ours** are defined by us, the same for every workspace, and never stored, so a better default reaches every workspace the day it ships. They are read-only: you can open and export them, and nothing else. To change one, pin the questions you care about to a board of your own.

| Board | What it shows |
| - | - |
| **Overview** | Share of voice, and share of voice week by week over 90 days. Citation rate. Average position when named. Prompts by state. |
| **Engines** | Share of voice, citation rate and average position, each split by engine, and share of voice by engine week by week over 90 days. |
| **Search** | Clicks from Google and impressions in Google, week by week over 90 days. Average Google position. Pages by clicks from Google (top 20). Tracked keywords' rank. AI Overview presence by keyword. |
| **Traffic** | [AI crawler](/traffic/ai-traffic) fetches, and visits referred by AI answers, in total and by page (top 20 each). |
| **Ads** | Every Google Ads campaign with where it stands with you, and spend only for campaigns you approved. |

Unless a row says otherwise, a pin on our boards reads the last 30 days.

A board whose source this workspace has not connected still opens. The pins that read that source say why they have nothing to show, rather than drawing an empty chart that looks like a zero.

**Yours** are what you pinned. A workspace keeps up to **50** boards of its own, and each board holds up to **24** pins. Everyone in the workspace sees the same boards.

### The Ads board

The Ads board lists every campaign with its approval state: drafted, waiting for your approval, approved, failed before anything was built, or found in your Google Ads account but not managed by us.

**Spend is shown only for campaigns you approved.** A draft, or a campaign waiting for your yes, never carries a spend figure, whatever the Google Ads account reports, so nothing on the board reads as running before you said it could. Spend is month to date, in your account's currency. Each campaign without a figure says why: not approved yet, waiting for your approval, failed before anything was built, not managed by us, or not yet reported by Google this month.

<Note>
  In the dashboard the Ads board does not draw its campaign list yet. **Export CSV** on the Ads board writes one line per campaign: its name in `group_1_value`, its approval state in `group_2_value`, and, for approved campaigns, its spend in `value`. That spend is in micros (millionths) of the currency in `unit`, as the `metric` column `ad_spend_micros` says, and a campaign without a figure carries its reason in `error`.
</Note>

## Pinning a chart

**Pin to board** sits under:

* the **Are we getting better?** chart on the Analytics **Overview**, and
* any chart, table or metric the agent draws in a [chat](/agent/what-the-agent-shows) from your measurements.

Press it, then pick one of your boards or name a new one; a new board is made and the pin goes on it. Only your own boards are offered, because ours take no pins. A board that already holds 24 pins cannot take another.

A view that was not drawn from a measurement, such as a draft or a card, has no question to keep, so it has no Pin control.

When a pin names a topic or a prompt, the question is checked as you pin it. A topic or prompt that is not in this workspace is refused then, rather than shown broken every time the board opens.

On your own boards you can also:

* **Rename** the board from its title.
* **Remove** one pin.
* **Delete** the board. Its pins go with it; they are only questions, and the data they read is untouched. Deleting a board also turns its link off.

Making a board, pinning, renaming and reordering are refused when the org's credits are used up. Removing a pin, deleting a board, exporting, sharing and turning a link off always work.

## Reading a pin

Every pin carries its **n**: how many observations its rows stand on, summed across the rows. Read it first, for the reasons in [Reading the numbers](/measure/reading-the-numbers).

* A cell nobody measured is drawn as an **em dash**, never as 0. A **0** means we read the answers and the count was zero.
* A pin with no rows in its window says "Nothing in this window yet."
* A pin that hit its row limit says how many rows it is showing.
* Coverage gaps are named under the pin.

**One pin failing never fails the board.** A pin whose question could not be answered says so in its own place, and every other pin still shows its answer. A topic or prompt deleted after it was pinned is one way this happens.

## Exporting a board

**Export CSV** downloads the board as one table, with one line per row of every pin. Both our boards and yours export.

| Column | What it holds |
| - | - |
| `board`, `pin` | The board's name and the pin's title. |
| `metric` | The metric the pin asks for. |
| `window_from`, `window_to` | The days the answer covers, both inclusive. |
| `group_1`, `group_1_value`, `group_2`, `group_2_value` | What the row is grouped by, and its value: an engine, a week, a page. Empty for a single number. |
| `value`, `unit` | The answer and what it is measured in. |
| `n` | What that row stands on. |
| `error` | Why the pin has no answer, when it has none. |

Two rules carry over from the dashboard:

* **An unmeasured value is an empty cell, never 0**, and its `n` is still written beside it, so "measured, none" and "not measured" stay apart in a spreadsheet too.
* **A pin with no answer is still a line**, carrying its error, so the file never drops a pin the board showed as broken.

Text a spreadsheet would run as a formula, such as a prompt that starts with `=`, is written with a leading apostrophe so it opens as text.

## Sharing a board with someone who has no account

**Share** on one of your boards makes a link and copies it. Anyone with the link can open the board without signing in. Our boards cannot be shared; pin what you need to a board of your own and share that.

* The link lasts **180 days** from when it was made. The shared page says until when.
* **Pressing Share again gives back the same link**, so copying it twice never breaks the copy you already sent.
* **Turn off link** stops it at once. Whoever opens it after that is told the board's owner turned it off. Your other shared links keep working: other boards, [client reports](/agencies/client-reports) and [receipts](/account/receipt).
* After you turn a link off, **Share** makes a new link with a fresh 180 days. The old one stays off.

### What the reader sees

The board's name, and each pin's title, chart, numbers and n, drawn exactly as you see them, with no controls. Row labels show as they do for you, so a pin grouped by prompt or page shows those prompts and pages; pin only what you are happy for the link's holder to read.

The reader does not see your workspace, your org, who made the board, or anything about cost or credits. The page is not indexed, and a pasted link previews only as "Shared board" and "A page shared with you."

A shared board's reading is kept for **10 minutes**: everyone who opens the link inside that window sees the same reading. A reading in which a pin could not be read on our side is not kept, so the next open asks again. Any change to the board, such as a pin added or removed or a rename, shows on the next open.

If the link will not open, the page says which of these it is:

| The page says | What happened |
| - | - |
| This link was turned off by its owner | The board's link was turned off, or the board was deleted. Ask for a new link. |
| This link has expired | It is more than 180 days old. Ask for a new link. |
| This link isn't valid | It was copied only in part, or the workspace's shared links were rotated. |
| This board is being opened a lot right now | The link was opened very often in a short time. Try again in a minute. |
| We couldn't load this board just now | The board could not be read at that moment; the link itself may be fine. Reload in a moment. |

### Turning off every shared link at once

Board links are signed with the same workspace secret as receipts, shared rewrites and client reports. **Rotate** on the [receipt](/account/receipt#sharing-a-receipt-without-an-account) stops all of them together, board links included. To give a reader a working link again after a rotation, press **Share** on the board; the new link keeps the old one's expiry date.

## Over the API

Dashboard routes (signed-in session):

* `GET /v2/projects/{id}/boards`: ours and yours, with the limits.
* `POST /v2/projects/{id}/boards` with `{"name": "..."}` makes an empty board.
* `GET /v2/projects/{id}/boards/{boardId}`: the board with every pin asked now. Each pin carries its table (columns, rows, `n`, unit, window and gaps) or its error. `not_connected` lists each source the board reads that this workspace has not connected, and on the Ads board `campaigns` holds the campaign list.
* `PATCH /v2/projects/{id}/boards/{boardId}` renames a board, or reorders its pins with `pin_order` and the `pins_version` you read it at. A reorder against a board someone else changed in the meantime is refused, so reload and reorder again.
* `DELETE /v2/projects/{id}/boards/{boardId}` deletes a board and turns its link off.
* `POST /v2/projects/{id}/boards/{boardId}/pins` with `{title, query, view: {component: "chart" | "table" | "metric", props}}` pins a question. `query` names a `metric`, up to two `group_by` dimensions, the window as `days` or as `from` and `to`, and any filters (`topic_ids`, `prompt_ids`, `engines`, `country` and the like), all at its top level. An unknown field is refused rather than ignored.
* `DELETE /v2/projects/{id}/boards/{boardId}/pins/{pinId}` removes one pin.
* `GET /v2/projects/{id}/boards/{boardId}/export.csv`: the CSV above.
* `POST /v2/projects/{id}/boards/{boardId}/share` returns `{token, url, issued_at, expires_at, expires_in_days}`, the same link while one is live. `DELETE` on the same path turns it off.

Our boards are addressed by name (`overview`, `engines`, `search`, `traffic`, `ads`), and any edit to one answers `405`.

Public route, where the token is the credential:

* `GET /v1/boards/{token}`: the shared board. A turned-off link answers `404`; an expired or invalid one answers `401`; a link opened too often answers `429`.

Boards are not MCP tools.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.