Meeting audit dashboard that shows what recurring meetings cost

See every standing meeting ranked by what it really costs, who does all the talking, and which ones finish with nothing decided.

App
Fireflies.aiGoogle SheetsSlack BotOperationsFinanceMeeting WorkflowsAI Reports
PromptCreate

Build me a meeting audit dashboard that our ops lead and chief of staff open ahead of each quarterly review, to answer one question: which of our recurring meetings still deserve to exist. It runs on Fireflies.ai for the meeting data, Google Sheets for the decision record that survives between reviews, and Slack Bot for sharing the outcome. This is a surface a person opens and works in, not something that runs on a schedule.

At the top I pick a period, with presets for last quarter, the last ninety days, and the last six months, plus a custom range. Load every meeting in that window with Fireflies.ai List Transcripts using the fromDate and toDate filters. The limit maxes out at 50 and pagination is offset based through skip, so advance skip by the limit until a page comes back short, and follow every page or long periods will quietly under-report. Pull this list once per period and cache it app-side, because the whole design has to respect Fireflies rate limits: 50 requests per day on Free and Pro, 60 per minute on Business and Enterprise. Show real progress while a period loads.

Group the transcripts into recurring series by meeting title. Normalize before matching: trim whitespace, lowercase, and strip the noise that makes one standing meeting look like twenty different ones, such as trailing dates, week or sprint numbers, and bracketed suffixes like Weekly or Recurring. Show each series label next to its occurrence count so it is obvious when grouping went wrong, and let me merge two series into one, split one apart, or rename a series label by hand. Store those manual corrections app-side keyed to the series identity so they stick for future periods and I only ever fix a series once.

The main view is one row per series. Every row carries the series name, how many times it met in the period, total recorded hours, total person-hours, estimated cost, the talk time split across speakers, the share of occurrences that finished with no action items at all, the attendee count, and whatever I decided about this series in a previous review. Person-hours is the number that makes the argument, so make it prominent: for each occurrence multiply the recorded duration by the number of distinct human attendees, then sum across the period. Check what unit Fireflies returns duration in before converting to hours rather than assuming seconds. De-duplicate attendees by email, and exclude the Fireflies notetaker itself from attendee counts, since it is not a person whose time is being spent.

I set an hourly rate once in settings and the dashboard puts an estimated cost on every series: person-hours multiplied by the rate. Let me override the rate for an individual series when the room is unusually senior or junior. Show the cost for the selected period and also a projected annual cost based on the observed cadence, because the annual figure is usually what actually ends a meeting.

Talk time and action items only exist on the full transcript, which means Fireflies.ai Get Transcript once per meeting, and that is expensive under the rate limits. Do not fetch them for the whole period up front. Enrich one series at a time, on demand, when I expand a row or hit Analyze on it, then cache the result app-side keyed to the transcript id so no transcript is ever fetched twice. Tell me how many requests an enrichment will cost before it runs, and keep a visible counter of what has been spent today. From each transcript, use the per speaker analytics to compute each speaker's share of talk time, and read the action items off the summary. Fireflies returns action items as a text block rather than a structured list, so treat empty, whitespace, and a literal none as zero action items, and only flag an occurrence as having produced nothing when it genuinely came back with nothing.

Sort worst first by default. Compute an audit score per series combining the three signals that make a meeting a candidate for the axe: how much it costs in person-hours, how lopsided the talk time is with the top speaker's share measured against a threshold I can set and defaulting to seventy percent, and what share of its occurrences ended with no action items. The standing meeting burning twelve person-hours a month with one person talking eighty percent of the time and producing nothing should sit at the top of the list without me sorting anything. Let me switch the sort to plain cost, total hours, or talk time dominance, and show the individual signals as badges on the row so the ranking is never a black box.

Two filters matter, and both need defaults that match how this is really used. Exclude one-to-one meetings by default, since talk time balance means nothing when there are two people in the room, with a toggle to bring them back in. Identify one-to-ones as two distinct human attendees once the notetaker is excluded. Second, apply a minimum occurrence filter so a series only appears once it has met three or more times, with the threshold adjustable, so genuinely new or ad hoc meetings are not put on trial.

Every series gets an Audit this meeting button that kicks off a background agent. The agent reads that series' transcripts across its history with Get Transcript, not only the occurrences inside the selected period, and writes a recommendation back into the app so the row can display it. The recommendation is one of five verdicts: keep as is, shorten, drop to fortnightly, cut the attendee list to these named people, or cancel. Underneath the verdict it lays out the evidence as direct quotes from the meetings, each labeled with the date it came from, so I can defend the call to whoever owns that meeting. When the verdict is to cut the attendee list, it has to name who should stay and who should drop, based on who actually spoke and who was named in the action items. Show the audit as running and then landed on the row itself, keep the previous audit visible until a new one finishes, and let me re-run an audit later. Cap how many transcripts a single audit reads and say so in the output, so one click on a long running series does not burn the whole day's rate limit.

On each series I record my own decision, using the same five verdicts as the agent plus a free text note and whether I agreed with the recommendation. Saving a decision appends a row to a Google Sheet with Google Sheets Append Values: decision date, who decided, series name, period audited, occurrences, total hours, person-hours, estimated cost, top speaker share, share of occurrences with no action items, the agent's recommendation, my decision, and my note. Let me point at an existing spreadsheet, or offer to create one with the right headers on first use. Read that sheet back with Google Sheets Get Values whenever the dashboard loads, so every series shows what was decided about it in previous reviews right beside what it still costs today. That readback is the whole point of keeping the record: the most damning thing on this dashboard is a meeting I said I would shorten last quarter that is still ninety minutes long.

Give me a button that posts the audit summary to our leadership channel with Slack Bot Send a Message. The summary covers the period reviewed, total hours and cost across all qualifying series, the worst offenders by cost, the decisions made in this session, and the hours and money that come back if those decisions stick. Let me pick the channel, preview the message, and edit it before it sends. Never post automatically.

Settings hold the hourly rate and any per series overrides, the minimum occurrence threshold, the talk time dominance threshold, the one-to-one toggle, my manual series merges and renames, the tracking spreadsheet, and the default Slack channel. On design: this dashboard exists to turn a vague feeling that there are too many meetings into a number and a quote that someone has to argue with. Lead with the worst-first table and the headline cost, and keep configuration out of the way until it is asked for.

What does this prompt do?

  • Groups every recorded meeting in a period you choose into recurring series by name, then shows how many times each one met, how many hours it burned, and what it cost at an hourly rate you set
  • Ranks the worst offenders first, so the standing meeting eating twelve person-hours a month with one person talking eighty percent of the time and no action items sits at the top
  • Shows the talk time split for every person in the room and flags the meetings that finished without a single action item
  • Gives every series an Audit button that sends an assistant through that meeting's whole history and writes back a recommendation: keep it, shorten it, make it fortnightly, trim the guest list, or cancel it, with quotes from the meetings to back it up
  • Saves your decision on each series to a spreadsheet, so next quarter you can see what you decided last time, and posts the summary to your leadership channel

What do I need to use this?

  • A Fireflies account that has been recording your meetings for a few months, so recurring series have enough history to judge
  • A Google account, plus a spreadsheet to keep the decision record in or permission to let the app create one
  • A Slack workspace if you want to post the audit summary to your leadership channel
  • An hourly rate you are comfortable using as a stand-in for what an hour of your team's time is worth
  • Note on plans: free and lower Fireflies tiers cap how much you can pull each day, so deep audits move faster on a business plan

How can I customize it?

  • Change how many times a meeting has to have happened before it shows up, so you only audit habits and not one-offs
  • Bring one-to-ones back into the view, or leave them out since talk time balance means nothing when there are only two people
  • Set your hourly rate, and override it for a specific meeting when the room is unusually senior
  • Adjust what counts as one person dominating the conversation, and how the worst-first ranking weighs cost against talk time and missing action items
  • Pick which Slack channel gets the summary and edit the message before it goes out

FAQs

Does this cancel meetings for me?
No. It gives you the numbers and the quotes, and it records what you decided. Actually cancelling or shortening the meeting still happens in your calendar, on purpose, by a person.
Why are my one-to-ones missing from the list?
They are excluded by default. Talk time balance is meaningless when there are only two people in the room, and one-to-ones are rarely the meetings worth auditing. There is a toggle to include them if you want the hours counted.
How does it know that two meetings are the same recurring series?
It groups meetings by name after tidying up the parts that change each time, like trailing dates and week numbers. If it splits or merges something wrongly, you can fix the grouping by hand and the correction sticks for future reviews.
Will this work on a free Fireflies plan?
Yes, with patience. Lower plans limit how much you can pull each day, so the dashboard loads your meeting list once for the period and only pulls full detail for the series you actually choose to audit. On a business plan you can audit many more series in one sitting.
What does the audit actually read before it recommends something?
It reads the transcripts from that meeting series across its history, looking at who did the talking, what got decided, and whether anything came out of it. Every recommendation comes with direct quotes and the dates they came from, so you can defend the call to whoever owns that meeting.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Share of voice dashboard for your brand and competitors

See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.

GDELT
Notion
Slack Bot
App
Approval war room for every social post awaiting sign-off

One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.

Hootsuite
Slack Bot
App
Turn champion job changes into new pipeline in Attio

Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.

Boomerang
Attio
Slack Bot
Agentic Task
Collect social post requests and schedule them in Hootsuite

Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.

Hootsuite
Slack Bot
General Input Database
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App

Find out what your standing meetings actually cost.

Walk into your next meeting review with real numbers and real quotes instead of a vague feeling that there are too many meetings.