Skip to content

Analytics

Analytics counts over every project you are in at once — or the ones you pick — for a period you choose. Open it with Analytics in the bar outside a project, beside Projects (Navigation), or at beta.plune.ai/analytics.

Analytics over the last 30 days and three projects: the Date, Projects and Filters 1 buttons on the right of the title; the chip Last 30 days with Clear all; six cards — Pass rate 52% in red, Test cases 122, Runs 12, Manual 20, Automated 102, Coverage 84%; the charts Tests per project, Latest run results and Results by priority; and the table of projects with Checkout web, Mobile app and Shop web. Analytics over the last 30 days and three projects: the Date, Projects and Filters 1 buttons on the right of the title; the chip Last 30 days with Clear all; six cards — Pass rate 52% in red, Test cases 122, Runs 12, Manual 20, Automated 102, Coverage 84%; the charts Tests per project, Latest run results and Results by priority; and the table of projects with Checkout web, Mobile app and Shop web.
The page as it opens: the last 30 days over every project you are in — here a sample team of three.

Every project you are a member of, in any role — owner, member or reader. The page only reads: it changes nothing in any project, and it shows no number you would not get by opening your projects one by one and adding them up. What it shows is numbers and a row per project; the runs, cases and results themselves stay in each project, and a row of the table leads there.

A project is left out when you are not a member of it, or when it is in the Bin. To see one, its owner adds you — see Members.

With an API token, only the token’s own project is read — see Through the API.

Filters narrow what the page counts. Between filters it is and; within one, any of its values — as on the cases list. Wider than 1024 px, the head holds Date, Projects and Filters; at 1024 px and narrower only Filters is left. Date and Projects are also the first two sections of its drawer, at any width.

Last 7 days, Last 30 days, Last 90 days or All time — a preset applies at once. The page opens on Last 30 days. For other days, set Start date and End date under Custom range and Apply; both days count, and Apply waits until the end is not before the start. Clear is all time; Cancel leaves the period as it was.

The Date list open under its button: Last 7 days, Last 30 days with a tick, Last 90 days, All time; under Custom range the Start date and End date fields; then Clear, Cancel, and Apply, greyed until both days are set. The Date list open under its button: Last 7 days, Last 30 days with a tick, Last 90 days, All time; under Custom range the Start date and End date fields; then Clear, Cancel, and Apply, greyed until both days are set.
Date: a preset applies at once, a custom range on Apply.

Days are your browser’s: Last 30 days is today and the 29 days before it, from the midnight that starts the first to the end of today, in your time zone.

Every project you are in, with your role in each. A tick applies at once and the list stays open for the next one; Clear goes back to all of them. Two projects of one name — your own default and the default of a team you were invited to — are told apart by your role here, and elsewhere by «(yours)» after your own.

The Projects list open under its button, Search projects on top: Shop web and Checkout web ticked, Mobile app not, each marked Owner; at the foot 2 selected and Clear. The buttons above read Projects 2 and Filters 2. The Projects list open under its button, Search projects on top: Shop web and Checkout web ticked, Mobile app not, each marked Owner; at the foot 2 selected and Clear. The buttons above read Projects 2 and Filters 2.
Projects: two of the three picked — each tick applies to the page at once.

Filters opens a drawer on the right with every filter, a section each. The number beside Filters is how many filters are set: each counts once, however many values it holds, and the period counts too unless it is All time — so the page as it opens reads Filters (1).

The drawer works on a draft: nothing on the page changes until Apply, which says how many filters the page will then have — Apply (2). Cancel, Esc, a click beside the drawer or its × drop the draft. Under each section’s name is what it holds, with a count beside it once something is picked; × clears the section, and Clear all at the top clears the whole draft.

The Filters drawer: Clear all and a close button on top; the sections Date — Last 30 days, 1; Projects — All 3 projects; Run labels — Any; Case tags — Any; Environment, open, with ci ticked (5 runs) and prod (4 runs), 1 selected and Clear; Executed by — Anyone; Suite or folder greyed — Pick one project first; Cancel and Apply (2) at the foot. The Filters drawer: Clear all and a close button on top; the sections Date — Last 30 days, 1; Projects — All 3 projects; Run labels — Any; Case tags — Any; Environment, open, with ci ticked (5 runs) and prod (4 runs), 1 selected and Clear; Executed by — Anyone; Suite or folder greyed — Pick one project first; Cancel and Apply (2) at the foot.
The drawer: Environment open and ci ticked in the draft — the page changes on Apply (2).

Beside Date and Projects, the drawer holds:

  • Run labels — the labels runs were reported with, such as nightly or release, each with how many runs carry it. A run counts when it has any of the labels picked.
  • Case tags — the tags of cases, shown with @, each with how many cases carry it. Tags pick cases: the page counts those cases and their results.
  • Environment — where a run ran, such as ci, staging or prod, each with its runs.
  • Executed by — the people of the projects. A result is a person’s when they marked it, or when nobody marked it and it belongs to a run they launched; a run counts when one of its results does.
  • Suite or folder — the tree of one project, so it wakes when exactly one project is picked (Pick one project first until then). A folder takes everything beneath it. Like tags, it picks cases.

The values on offer come from the projects on the page: neither the period nor another filter shortens a list, so a value you picked stays where you can untick it. Changed Projects in the drawer? Apply, and the other lists follow the new projects.

On a phone the drawer takes the whole screen.

The Filters drawer on a phone, across the whole screen: the same sections, Environment open with ci ticked, and Cancel and Apply (2) at the foot. The Filters drawer on a phone, across the whole screen: the same sections, Environment open with ci ticked, and Cancel and Apply (2) at the foot.
On a phone: the same drawer, the whole screen.

Every filter that is set stands under the head as a chip: the period, each project, label, tag, environment, person and folder. × on a chip takes that one value off. Clear all beside the chips takes everything off — all time, every project, no filter.

The page keeps its filters in its address. Each change is a step of the browser’s history, so Back returns the filters before it — and the address can be copied and sent: whoever opens it gets the same filters over their own projects.

KeyValue
period7d, 90d or all. The last 30 days is the address without it.
from, toDays, YYYY-MM-DD — a custom range, both days included. They win over period.
projectsA project’s id.
labelsA run label.
tagsA case tag, without @.
envAn environment.
byA person, by their user id.
suiteA suite or folder, by its id — with exactly one project.

A list repeats its key: projects=<id>&projects=<id>. A hand-edited address still opens a page: an unknown period reads as the last 30 days, a range needs both days and the end not before the start, and a suite without exactly one project is dropped.

https://beta.plune.ai/analytics?period=90d&projects=<id>&projects=<id>

This opens the last 90 days over those two projects, with the chips Last 90 days and the two names, and Filters (2). A project’s id is in its own address, /projects/<id>/runs — or pick the projects on the page and copy the address it writes. With one project, /analytics?projects=<id>, every number is that project’s:

Analytics narrowed to Checkout web: the chips Last 30 days and Checkout web; Pass rate 100%, Test cases 4, Runs 2, Manual 4, Automated 0, Coverage 0%; the donut with 4 manual cases of one project; the latest run 4 passed; 8 results at normal priority; one row in the table. Analytics narrowed to Checkout web: the chips Last 30 days and Checkout web; Pass rate 100%, Test cases 4, Runs 2, Manual 4, Automated 0, Coverage 0%; the donut with 4 manual cases of one project; the latest run 4 passed; 8 results at normal priority; one row in the table.
One project picked: every number on the page is that project's.

A link shows each person their own projects. If it names a project the one who opens it is not in, the page says «not found» in place of the numbers, as the API does; that project’s chip, which then shows its id, takes it off with ×.

When a run label, case tag, environment, person or folder finds nothing in the period, the page says what, in one sentence — «No run in the last 30 days has the label release-2026-10 and a case tagged @payments. Clear a filter or pick a longer period.» — with Clear all under it. A quiet period alone is not that: it is a page of zeros and dashes, below.

The six cards, in the words of the API that counts them:

CardWhat it counts
Pass ratePassed ÷ every result of the period × 100 — skipped included. Shows — when the period has no result.
Test casesLive cases now. The date does not act on them: it is what you have today, not what ran.
RunsThe runs of the period: started in it, finished or not, not in the Bin — and passing the run labels, environments and people picked.
Manual, AutomatedLive cases now, of that type.
CoverageAutomated ÷ (manual + automated) × 100. An eval does not count: it replaces no manual test. Shows — with neither kind.

The note on each card says which: the period on Pass rate and Runs, now on the cases, now, without eval on Coverage — and Test cases adds how many of them are eval.

Over several projects the cards are the rows of the table added up: counts are summed, rates never averaged, so a project with a thousand results weighs a thousand times as much as one with a single result. The pass rate is shown in whole percent, but with one decimal within a point of either end — 0.4% is not «0%», 99.6% is not «100%». It is green from 90%, amber from 70% and red below.

What each filter acts on:

  • Date, Run labels, Environment and Executed by choose runs, and with them results: Pass rate, Runs and the charts of results.
  • Case tags and Suite or folder choose cases: the case counts, Coverage and Flaky narrow with them, and the results are those of the chosen cases.
  • Projects choose everything.

In a period in which nothing ran, Pass rate is — and Runs 0, both charts of results say so, and every row of the table reads No runs in the period. The cases, Coverage and Flaky keep their numbers: the date does not act on them.

Analytics for 01.08.2026 – 31.08.2026, a month in which nothing ran: Pass rate —, Runs 0, while Test cases 122, Manual 20, Automated 102 and Coverage 84% are as today; Latest run results reads No finished runs in this period and Results by priority No results in this period; every row reads No runs in the period with a pass rate of —, and Shop web still shows 91 flaky. Analytics for 01.08.2026 – 31.08.2026, a month in which nothing ran: Pass rate —, Runs 0, while Test cases 122, Manual 20, Automated 102 and Coverage 84% are as today; Latest run results reads No finished runs in this period and Results by priority No results in this period; every row reads No runs in the period with a pass rate of —, and Shop web still shows 91 flaky.
An empty period: the run numbers are 0 or —; the cases and Flaky are counted all the same.

Three charts stand between the cards and the table: one of the cases you have now, two of the results of the period.

The test cases you have now. The inner ring is a slice per project; the outer ring is the same slices cut by type — automated, manual, eval — and the middle is the total. Under it, each type with its count and share, then each project with its count, share and types. With more than six projects the five biggest keep their slices and the rest share one, Other N projects. A project with no cases has no slice.

Tests per project: 122 test cases in the middle of two rings — the inner split between Shop web and Checkout web, the outer by type; under them automated 102 (84%), manual 20 (16%) and eval 0, then Shop web 118 (97%), automated 102 and manual 16, and Checkout web 4 (3%), manual 4. Tests per project: 122 test cases in the middle of two rings — the inner split between Shop web and Checkout web, the outer by type; under them automated 102 (84%), manual 20 (16%) and eval 0, then Shop web 118 (97%), automated 102 and manual 16, and Checkout web 4 (3%), manual 4.
The inner ring is the projects, the outer one the types of case.

The latest finished run of each project in the period — by when it finished; a run still going, or terminated, never counts — added up into one bar, split by status, and the five statuses with their counts and shares under it. A project with no finished run in the period adds nothing. For how things stand now, this is the chart to read; the Pass rate card is the whole period.

Latest run results: one bar, nearly all green with a red end; passed 23 (96%), failed 1 (4%), broken, blocked and skipped 0. Latest run results: one bar, nearly all green with a red end; passed 23 (96%), failed 1 (4%), broken, blocked and skipped 0.
The latest finished run of each project, added up.

Every result of the period, by the priority its case has now: a column per priority, from low to critical, split by status, on a scale at the left. A priority nobody ran is an empty place on the line. On a phone the columns turn into rows, each with its total at the end; a screen reader gets the numbers as a table.

Results by priority on a scale to 240: the normal column is the tall one, about half passed and half failed; high and critical hold a few results each, low and important none. The key under it: passed, failed, broken, blocked, skipped. Results by priority on a scale to 240: the normal column is the tall one, about half passed and half failed; high and critical hold a few results each, low and important none. The key under it: passed, failed, broken, blocked, skipped.
Every result of the period, by its case's priority now.

A row per project; a click anywhere on it opens the project’s runs.

ColumnWhat it holds
ProjectThe name, and your role in it.
CasesLive cases now.
Manual / Auto / EvalThe same, by type. At 1024 px wide and narrower the column is left out.
Latest runThe statuses of the project’s latest finished run in the period, and when it finished — or No runs in the period.
Pass rateThe project’s pass rate over the period, with a bar in its colour. Shows — when the project has no result.
FlakyThe cases that flip between passing and failing — below.

The table is sorted by name at first; Project turns the names around. Cases, Pass rate and Flaky sort from the most at the first click and from the least at the second; a project with no pass rate stays last either way. Of two projects with one name, your own comes first. On a phone the numbers fold into one line under the name — «118 cases · 50% passed · 91 flaky».

Flaky counts the project’s live cases whose stability is flaky or very flaky — the badge the cases list shows. Stability reads the last 50 results of each case and counts how often a pass turned into a failure — not how often it failed. A case that failed its last ten runs is broken, not flaky: its stability is stable. One turn into failure per ten results makes a case flaky; three, very flaky. Skipped and blocked results are left out, a broken one is a failure, and failures before the first pass do not count.

Stability is the history of each case, so neither the period nor run labels, environment or executed by act on Flaky: a quiet month keeps the number, as in the empty period above. Case tags and suite or folder do narrow it — they choose the cases.

  1. Click Projects and tick the two, as in the picture above. Each tick applies at once.

  2. Press Esc. The cards and charts now add up the two, and the table has a row for each.

  3. Click Pass rate — or Flaky — to put them in order.

    The table with two projects, sorted by Pass rate from the most: Checkout web — 4 cases, 4 / 0 / 0, latest run passed 4, now, 100%, 0 flaky; Shop web — 118 cases, 16 / 102 / 0, latest run passed 19 and failed 1, now, 50% with a red bar, 91 flaky. The table with two projects, sorted by Pass rate from the most: Checkout web — 4 cases, 4 / 0 / 0, latest run passed 4, now, 100%, 0 flaky; Shop web — 118 cases, 16 / 102 / 0, latest run passed 19 and failed 1, now, 50% with a red bar, 91 flaky.
    Two projects side by side, sorted by Pass rate.
  4. To show someone the comparison, send the address — it holds both projects.

GET /v1/analytics answers the whole page in one request, with the same numbers counted the same way. With a token:

Terminal window
curl -H "Authorization: Bearer $PLUNE_TOKEN" \
"https://beta-api.plune.ai/v1/analytics?from=2026-09-01T00:00:00Z&to=2026-09-30T23:59:59Z"

A token reads only its own project — the one it was minted for in Account → API tokens — and naming any other in projects answers 404. Several projects at once are for your session, in the dashboard.

The answer, shortened — the sample project Shop web over September:

{
"range": { "from": "2026-09-01T00:00:00.000Z", "to": "2026-09-30T23:59:59.000Z" },
"kpis": {
"passRate": 49.8, "cases": 118, "runs": 10,
"manual": 16, "automated": 102, "eval": 0, "coverage": 86.4
},
"latest": { "passed": 19, "failed": 1, "broken": 0, "blocked": 0, "skipped": 0 },
"byPriority": [
{ "priority": "low", "passed": 0, "failed": 0, "broken": 0, "blocked": 0, "skipped": 0 },
{ "priority": "normal", "passed": 108, "failed": 111, "broken": 0, "blocked": 0, "skipped": 0 },
{ "priority": "important", "passed": 0, "failed": 0, "broken": 0, "blocked": 0, "skipped": 0 },
{ "priority": "high", "passed": 2, "failed": 1, "broken": 0, "blocked": 0, "skipped": 0 },
{ "priority": "critical", "passed": 1, "failed": 0, "broken": 0, "blocked": 0, "skipped": 0 }
],
"projects": [
{
"id": "…",
"name": "Shop web",
"role": "owner",
"cases": { "manual": 16, "automated": 102, "eval": 0 },
"latestRun": {
"id": "…",
"finishedAt": "2026-09-29T09:29:20.519Z",
"counts": { "passed": 19, "failed": 1, "broken": 0, "blocked": 0, "skipped": 0 }
},
"passRate": 49.8,
"flaky": 91
}
],
"facets": {
"labels": [{ "value": "smoke", "runs": 1 }],
"tags": [{ "value": "api", "cases": 3 }, { "value": "smoke", "cases": 3 }, …],
"environments": [{ "value": "prod", "runs": 4 }, { "value": "ci", "runs": 3 }],
"people": [{ "userId": "…", "name": null, "email": "…" }, …]
}
}
FieldWhat it holds
rangeThe period the numbers are for — from and to as UTC instants; null is no bound.
kpisThe six cards: passRate (one decimal; null — no result), cases, runs, manual, automated, eval and coverage (null — neither manual nor automated). They are the rows of projects added up.
latestThe counts of every projects[].latestRun, added up — the bar of Latest run results.
byPriorityFive rows, low to critical: the results of the period by their case’s priority now. A priority nobody ran is a row of zeros.
projectsA row per project: id, name, your role, cases by type, latestRun — the last finished run of the period, with finishedAt and its counts, or null — then passRate and flaky.
facetsThe values the filters offer, from the projects alone: labels and environments with how many runs of all time carry each, tags with how many live cases, and people — the projects’ members, whose userId is what executedBy takes.

The parameters, beside the page’s own keys:

ParameterOn the page
from, tofrom, to, periodDate-times with their zone, both ends included. Without one, the period has no start or no end.
projectsprojectsIds, comma-separated or repeated; at most 100. Without it, every project you are in.
labelslabelsRepeated for any of.
tagstagsWithout @; repeated for any of.
environmentsenvRepeated for any of.
executedBybyUser ids, comma-separated or repeated.
suitesuiteOne suite or folder, with exactly one project.

Write the zone as Z — or the + of an offset as %2B: in an address a bare + reads as a space, and the answer is 400. The other 400s: from later than to, suite without exactly one project, more than 100 projects. A project you are not in, or one in the Bin, is 404 — the same answer as an id nobody has. The endpoint, with its schema and an example, is in the API reference.

A step that reads the week’s pass rate and fails the job below 90%:

- name: The week's pass rate is 90% or more
env:
PLUNE_TOKEN: ${{ secrets.PLUNE_TOKEN }}
PLUNE_API_URL: https://beta-api.plune.ai
run: |
from=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -fsS -H "Authorization: Bearer $PLUNE_TOKEN" \
"$PLUNE_API_URL/v1/analytics?from=$from" > analytics.json
jq .kpis analytics.json
jq -e '.kpis.passRate >= 90' analytics.json

The numbers are the token’s project’s. jq -e ends with an error when the comparison is false — a pass rate under 90%, or no result in the week at all, null — and the step fails with it. Put the step after the one that reports the run, so that run is in the week.

Why does Analytics say something different from Trends? Trends is one project’s runs, one by one, and its Pass rate · latest is the last run alone. Analytics adds up every result of the period — over a month, the last run is one of many. The closest thing here to Trends’ last run is Latest run results.

Why does Coverage leave eval out? Coverage is how much of what people would otherwise test by hand is automated: automated ÷ (manual + automated). An eval checks a model’s output and replaces no manual test, so counting it would raise Coverage without taking any testing off anyone’s hands. Test cases and the donut count eval cases all the same.

Why doesn’t Flaky change with the period? It is each case’s own history — its last 50 results — not what happened in the period. See Flaky.

Why are there no defects? Plune does not keep defects yet. When it does, Analytics will count them too.

Why can’t I pick a company? Companies are in the API, not yet in the dashboard. When they reach it, a company will narrow Analytics to those of its projects you are a member of — a company role alone opens none.

Why is a project missing? You are not a member of it, or it is in the Bin — see What the page shows.