# See which of your recurring meetings are one person talking

> Open one board to see how speaking time was really split in every standing meeting, then get facilitation notes you can act on next time.

- Workflow type: app
- Services: Google Meet, Google Calendar, Slack Bot, Google Sheets
- Categories: Operations, HR & People
- Published: 2026-08-24

## What it does

- Lists every recurring meeting series on your calendar with its latest session scored on how speaking time was split across the people in the room
- Goes past a simple talk-time percentage: it also shows the longest stretch one person spoke without interruption, how many questions got asked, and how many attendees sat through the whole thing without saying anything
- Measures each person's share against the time they were actually in the call, so someone who joined late is not counted as quiet for the part they missed
- Opens any series to show whether the split is getting better or worse over time, with a per-person bar chart for the latest session
- Gives every meeting a coaching button that reads the full conversation and writes back a short facilitation note with two or three concrete changes to try next time

## What you'll need

- A Google account that can see the calendars and Meet history for the meetings you want to review
- Transcription turned on in the meetings you care about, since the airtime numbers are built from what the transcript recorded
- A few weeks of history for a standing meeting before the trend view says anything useful
- A Slack workspace, if you want to share a summary with a channel
- A Google Sheet to keep the longer history in, or permission to let the app create one
- Note on history: Google Meet only keeps meeting records for about 30 days, so the app saves each session as it sees it and your trend line starts building from the day you begin using it

## Prompt

Build me a meeting airtime board that managers open to see how speaking time was actually distributed in the recurring meetings they run, so they can spot the ones that are really one person talking at everyone. It runs on Google Meet for the conversation and attendance data, Google Calendar for working out which meetings are a recurring series, Slack Bot for sharing a summary, and Google Sheets for keeping history. This is a surface a person opens and works in, not something that runs on a schedule. The framing matters more than any single number here: this is facilitation coaching for whoever runs the meeting, not a surveillance scoreboard on individuals. Every label, every tooltip, and every piece of agent output should judge the meeting, never the person.

Start by finding the recurring series. Use Google Calendar List Events over a window I pick, defaulting to the last 90 days, expanding recurring events into their individual instances. Keep only events that have a Google Meet conference attached, and group the instances into series using the recurring event id that ties instances of the same series together, falling back to a normalized title match when that id is missing. Drop single occurrence events entirely, since a series is the unit this whole board is about. For each series keep the series name, the organizer, the usual attendee list, and every instance with its scheduled start time and its Meet joining details.

Now connect each calendar instance to the real meeting that happened. Pull meeting records with Google Meet List Conference Records, filtered by the meeting space taken from the calendar event's conference details and by a time range around the scheduled start. Match an instance to the record whose start time sits closest to the scheduled start, and be tolerant here, because meetings begin late and a record can straddle the scheduled slot. An instance with no matching record simply did not happen or was not captured, so show it as not scored rather than as a zero, which would drag a trend line down for the wrong reason.

For a scored occurrence, gather four things from Google Meet. Use List Transcripts to find the transcript for that meeting record, then List Transcript Entries to get the individual speech segments, each attributed to a speaker with a start and end time. Use List Participants to get everyone who was in the call, and List Participant Sessions for each participant to get their join and leave times, since a person can leave and rejoin and will have several sessions. Sum a participant's sessions to get how long they were genuinely present. Handle the different kinds of participant that Meet returns, including signed in users, anonymous users, and people dialling in by phone, and de-duplicate a person across their sessions so one human is one row.

Score each occurrence on four measures. First, the speaking time split per person: sum the duration of every speech segment attributed to that person. Always express this as a percentage, never as raw minutes, because a 20 percent share means the same thing in a 30 minute meeting and a 90 minute one while eight minutes does not. Show each person's share of total speech, and separately show their share measured against the time they were actually present, so someone who joined for the last quarter of the call is judged on the part they were in. Second, the longest uninterrupted monologue: merge consecutive segments from the same speaker when the gap between them is short, then take the longest resulting run, and record who it was and when it started so the organizer can go back and listen to that moment. Third, the number of questions asked, per person and in total, counted from segments that read as questions. Treat this as an approximation and label it that way in the interface, since transcript punctuation is not reliable enough to promise an exact count. Fourth, the count of attendees who never really spoke, where someone counts as silent only if they were present more than ten minutes and spoke less than thirty seconds in total. Both of those thresholds are settings I can change.

Exclude one-to-one meetings from the board by default, since a speaking split is meaningless when there are two people in the room. Identify them as occurrences with fewer than three distinct human participants, and give me a toggle to include them if I want. Let me also hide individual series I do not want judged, such as all-hands broadcasts or externally run calls, where one person talking is the entire point of the format.

The main view is one row per recurring series, showing the series name, the organizer, how often it meets, the date of the latest scored occurrence, and that occurrence's four scores: the speaking split rendered as a compact stacked bar so a lopsided meeting is visible at a glance, the top speaker's share as a number, the longest monologue in minutes, the question count, and how many attendees stayed silent. Add a quiet badge to any series where the top speaker's share crosses a threshold I set, defaulting to somewhere around 60 percent, and another for a monologue running longer than a threshold that defaults to about eight minutes. Sort by the most lopsided split first by default, and let me switch to sorting by monologue length, silent attendee count, or most recent. Keep the tone even here: the badge should read as something to look at, not as a failing grade.

Opening a series gives me its detail page. Show the trend across every occurrence the app has recorded, with the top speaker share and the silent attendee count plotted over time, so I can see whether a meeting is opening up or closing down as the weeks go by. Below that, a per-person horizontal bar chart for the latest occurrence, each bar showing that person's share of speaking time, with their presence time and question count alongside. List the occurrences underneath, each expandable to show its own numbers, and surface the longest monologue moment for the latest one. If the app has only recorded a couple of occurrences so far, say so plainly instead of drawing a trend line through two points.

Persistence is essential, not an optimization. Google Meet deletes conference records about 30 days after the meeting ends, so anything not saved is gone for good. Every time the app scores an occurrence, store the computed result app-side: the series identity, the occurrence date, meeting length, every participant with their presence time, speaking seconds, share, and question count, plus the monologue and silent counts. Build all trend views from that saved history rather than re-reading Meet, and never re-fetch an occurrence that is already stored. On first use, backfill as far as the 30 day window allows and tell me clearly that history starts from today, so nobody expects a year of trend on day one.

Every meeting card gets a Coach this meeting button that kicks off a background agent over the full transcript for that occurrence. The agent does three things. It judges whether the discussion actually reached decisions or just cycled through status updates, and says which, with evidence from what was said. It identifies who got talked over, using the transcript timing to find places where one person's segment was cut short by another starting, and names the pattern rather than shaming anyone. Then it writes a short facilitation note with two or three concrete changes the organizer could make next time, the kind of thing someone can actually do, such as putting a specific decision on the agenda, asking a named quiet attendee for their read first, or cutting the round table update that ate the first twenty minutes. The note lands back in the app on that meeting card so the board can display it. Show it as running and then landed, keep any previous note visible until the new one finishes, and let me re-run it. The agent writes to the organizer, about the meeting, and should never produce a ranking of people or anything that reads like a performance review.

Give me a Share button that posts a summary of a series or of the current board to a channel with Slack Bot Send a Message. The summary covers the series name, the latest occurrence's speaking split, the headline signals, and the facilitation note if one has been generated. Let me pick the channel, preview the message, and edit it before it goes out. Never post automatically, and keep the shared message in the same coaching register as the rest of the app, since this is the part other people see.

Give me an Export button that writes history to a spreadsheet with Google Sheets Append Values, one row per occurrence per person: date, series name, organizer, meeting length, person, time present, speaking seconds, share of speech, share of time present, questions asked, whether they were counted silent, plus the occurrence level longest monologue and top speaker share. Let me point at an existing spreadsheet or offer to create one with the right headers, and do not duplicate rows that have already been exported.

Settings hold the silence thresholds, the dominance and monologue thresholds, the one-to-one toggle, the list of hidden series, the default Slack channel, and the export spreadsheet. On design: this board has one job, which is to make an invisible dynamic visible to the person who can change it. Lead with the split and the trend, keep the language about the meeting rather than the people in it, and make the facilitation note the thing a manager leaves with.

## How to customize

- Change what counts as someone staying silent, which starts at being present more than ten minutes while speaking less than thirty seconds
- Adjust the point at which a meeting gets flagged as dominated by one person, and how long a single uninterrupted stretch has to run before it is called a monologue
- Bring one-to-ones back into the board, or keep excluding them since a speaking split means nothing with two people
- Choose which series appear at all, so ad hoc invites and all-hands broadcasts do not clutter the list
- Pick the Slack channel for shared summaries and the spreadsheet that history gets exported to

## FAQ

### Is this a scoreboard for ranking employees?

No, and it is deliberately built not to be. The board is aimed at whoever runs the meeting, and the unit being judged is the meeting, not the person. The coaching note talks about what the organizer can change in how the session is run, and quiet attendees are surfaced as a sign the format is not making room for them rather than as a mark against them.

### Why are my one-to-ones not on the board?

They are excluded on purpose. A speaking split between two people tells you nothing useful, so including them would just add noise. You can switch them back on if you want the numbers anyway.

### What happens if someone joins late or drops out early?

Their share is measured against the time they were actually in the call, not the full length of the meeting. Someone who was only there for the last ten minutes is judged on those ten minutes, and someone is only counted as silent if they were present long enough to have had a real chance to speak.

### Do I need to record my meetings for this to work?

You need transcription switched on, because the speaking times are built from the transcript of who said what and when. Meetings without a transcript will show up in the list but cannot be scored.

### Will I lose my history when Google deletes old meeting records?

No. Google Meet only keeps the underlying meeting records for about 30 days, so the app saves each session's numbers as it processes them and builds the trend from its own saved copy. You can also export the full history to a spreadsheet.

Use this prompt in General Input: https://www.generalinput.com/prompts/see-which-of-your-recurring-meetings-are-one-person-talking