Every worship and ops leader I talk to is carrying two questions about their volunteers that they can’t quite answer with numbers.
The first is who is serving too much. Usually there’s a name attached to it already. The person who is somehow on the schedule every single week, who never says no, and who you have a quiet feeling about.
The second is who has gone quiet. Someone who used to be in the rotation and isn’t, and you can’t remember when that changed.
I’ve written elsewhere about why volunteer availability can change quietly. A scheduling tool correctly treats the immediate problem as a slot to fill; a team leader still has to decide whether a longer pattern deserves a conversation. This piece is the practical companion: what Planning Center Services records, how far its current reports get on serving frequency, and where custom analysis begins.
What Services actually stores
Worth starting here, because the ceiling on your reporting is set by the shape of the data, not by the reports.
Services is built around service types (Sunday Morning, Midweek, Youth), which contain plans (a specific date). Teams (Band, Hosts, Kids, Production) are their own objects since a February 2026 change: a team can be attached to several service types, or to none, and a plan draws on the teams attached to its service type. Teams have positions (Acoustic Guitar, Door 2, Camera 1). When you schedule someone, you create an assignment linking a person to a position on a plan.
Each assignment carries three things worth knowing about:
- A status. The request goes out unconfirmed, and the volunteer accepts or declines. Under the hood these are stored as confirmed, unconfirmed and declined, and the decline can carry a reason if the person typed one. On a split team a person can even accept one time and decline another within the same assignment.
- Times. A plan can have more than one service time, and a person can be scheduled for one or all of them. This matters more than it sounds like it does, and I’ll come back to it.
- A timestamp for when the status changed. So the raw material for “she took four days to respond and then declined” exists, even though nothing in the interface adds it up.
Separately, volunteers maintain blockouts: date ranges they’ve marked as unavailable, optionally with a reason and optionally repeating. Since March 2026 there are also per-team scheduling preferences, including Unavailable and Once a Quarter, so some of the people you never schedule now have a recorded, team-specific reason why. Blockouts aren’t scheduling events. They’re a statement about availability made in advance, which is why they’re one of the most underrated signals in the whole product.
So Services is holding, per person: every time you asked, whether they said yes, whether they said no, what reason they gave, and when they told you they weren’t available. That’s a genuinely rich dataset. The problem is entirely what you can do with it from inside the app.
Where to look inside Services
Three surfaces do most of the work.
The plan itself. Open any plan and the team list down the side shows every scheduled person with their status. This is the view everybody lives in, and it is built for one plan at a time.
The service-type People report. This is the first place to go for serving frequency. From the Plans page, open the service type’s settings and choose Reports, then the People tab. Pick a timeframe and the report summarizes people scheduled, new people and averages, with each person’s plan-level Confirmed, Unconfirmed or Declined status and attendance, filtered by team if you want it. It downloads as CSV, which means a basic “how often was this person scheduled in this service type?” question no longer requires transcribing a PDF.
The matrix. Hit Matrix from the Plans page and you get a grid. Plan dates run across the top, and down the left sit the sections of each plan: times, songs and teams, each of which expands into its positions with the scheduled person’s name in the cell. How many plans you see is set by the previous/next controls or a date range in matrix settings. Read down a column for one plan’s staffing; use the target icon to highlight one person across the loaded plans. It is useful visual context alongside the People report, especially across several service types.
The matrix is the single most useful thing in Services for this question, and most churches I talk to have either never opened it or opened it once and gone back to the plan view.
Blockouts. Volunteers add their own from My Schedule, and schedulers meet them at the moment of scheduling, as a conflict badge next to the person’s name with the details behind a hover. They aren’t only visible there. Since July 2026 the people tab in Services generates a dedicated blockout report, in list or calendar view, scoped to whatever filter you have applied, showing who is unavailable in the current and upcoming months. The availability data comes out of the scheduling flow, which is more than most churches realise.
Services also has a report template system for plan, matrix and people printouts, edited in HTML, CSS and Liquid, though the editor has grown up: since a May 2025 update it inserts fields by drag and drop and previews against real data. Matrix reports include scheduled-status breakdowns, and Timecard reports show number of plans and total time. Those printable reports remain useful, but they are not the only reporting route: the service-type People report provides the CSV dataset for per-person scheduling analysis.
Can Planning Center show how often someone serves?
Partly, and it’s worth walking the honest path before dismissing it, because for a single team over a single quarter this genuinely works.
1. Decide what “once” means before you count anything. If a person plays both the 9am and the 11am, is that one serve or two? Services stores it as one assignment covering two times, so if you count assignments you’ll get one and if you count times you’ll get two. Neither is wrong. But the volunteer who does a double every Sunday is having a very different month from the one who does a single, and if you count assignments you will not be able to tell them apart. Pick a definition and write it down, because you’ll forget by the second month.
2. Run the People report for one service type and set your window. Choose the same fixed start and end dates you will use everywhere else. Review the per-person totals and plan-level Confirmed, Unconfirmed and Declined statuses, then download the CSV if you need custom grouping.
3. Use the matrix and Timecard for the questions they answer. The matrix shows staffing in plan context and can span service types; Timecard reports provide plan counts and total time. These are useful checks on whether “one serve” in your analysis means one plan assignment or the time actually scheduled.
4. Repeat the People report for each relevant service type. Because teams can span service types, one service type’s report may cover only part of a team’s serving. A matrix can put several service types side by side, but a custom all-service-type total still requires combining datasets and deduplicating on a verified person ID.
5. Preserve scope. Record the service types, teams, timeframe, statuses and attendance rules included in each export. A clean CSV from only one team is still an incomplete organization-wide serving report.
6. Check blockouts separately. Blockouts can explain known unavailability. No blockouts do not prove avoidance or even that the person was available; they may simply not use the feature.
7. Use a spreadsheet only for the custom layer. One row per verified person ID, one column per service type, plus confirmed, unconfirmed, declined and attendance counts under a written definition.
For one service type, the built-in report may be enough. The effort grows when the question spans service types, teams or repeated periods, because those CSVs still have to be normalized and combined.
The wall: scheduling is not analytics
Here’s the honest framing. Services is a scheduling tool with useful historical reports. It can answer basic frequency, status, attendance and timecard questions over a selected window, and Planning Center’s own AI connector now answers live cross-product questions on top, like who is scheduled this Sunday but not in a group. The wall appears when you need history: a custom sequence, a distribution or a direction of travel rather than a standard per-person summary or a live lookup.
Two specific questions make the wall obvious.
“Who has served three or more times a month, every month, for the last six months?”
Every fact needed to answer this is in Services. But it’s a time-series question: it needs each person’s serving count bucketed by month across every relevant service type and team, then a filter applied to all six buckets. The People report can provide CSV rows for a chosen window, but it does not express that six-month sequence filter for you. This becomes a combined export and spreadsheet unless a narrower built-in report answers the actual operational question.
“Which teams are always pulling the same people?”
This is the one I’d actually chase first, because it’s the upstream cause of the other one. Call it rotation starvation: a team has forty people on the roster and twelve of them cover eighty percent of the Sundays. The other twenty-eight are technically on the team, get asked occasionally, and are functionally not volunteers.
Concentration can emerge from many reasonable scheduling decisions: availability, skill requirements, preferences, last-minute gaps or repeatedly asking known responders. The distribution does not prove burnout or explain why other roster members were not scheduled. It gives the team leader a concrete workload and participation pattern to review.
To see it you need the distribution of serving counts within a team, not only the roster size or average. The Services People report gives you the per-person scheduled totals needed to calculate that distribution for a service type, with a team filter to narrow it; a team that spans service types needs its reports combined. Export it, define the included statuses and plans, and compare the count distribution with the roster; the calculation is custom, but the source data no longer needs manual transcription.
The four numbers worth tracking
However you get them, matrix and spreadsheet, exports, or something automated, these are the ones I’d argue matter, and they’re all per-person rather than per-team:
| Number | What it catches |
|---|---|
| Serving count per month | The raw load. Compare against a target rhythm, not against zero |
| Direction of travel over three months | A person going 4 → 3 → 1 is a different conversation from someone steady at 2 |
| Decline rate | Separates declined requests from confirmed ones; reasons, where people typed them, need individual review |
| Blockout days as a share of the window | Adds recorded availability context without assuming that no blockout means available |
The last two add context to the raw count. One newer wrinkle: where a team enables volunteer-chosen replacements, a declining volunteer picks their own substitute, who lands on the schedule as confirmed without a scheduler having asked. None of the four numbers diagnoses motivation or predicts what the person will do next.
One more thing that isn’t a number: the difference between someone who declined and someone who wasn’t asked. Both produce zero serves. Only one of them is about the volunteer. Declines are recorded; not-asked leaves no assignment record, which is exactly why rotation starvation is invisible. The absence of an event is the hardest thing in any dataset to see.
Where this fits with everything else
Serving can change before, after or independently of somebody’s attendance. That makes it useful context, but ambiguous until a team leader checks the other records and talks to the person.
The volunteer whose serving dropped while attendance and group activity continued presents a different record from someone whose serving and attendance both changed. Neither record tells you why. It tells a team leader which evidence to review before asking.
People Lists can combine Services and Check-Ins conditions to produce a current person set, and Home can place source widgets side by side. A detailed row containing each assignment beside dated Check-Ins records still requires exported or API data joined on a stable person key, the deeper join underneath measuring engagement.
Doing it standing rather than annually
The manual method’s real weakness isn’t effort; most ops people will happily spend an afternoon on something useful. It’s that the output is a snapshot, and a snapshot of a trend is not a trend. You build it in September, it’s meaningless by November, and the second or third round is where most churches quietly stop.
This is what Parable does with the Services data you already have. It reads your plans, assignments, statuses and blockouts nightly, so serving load and its direction of travel sit on each volunteer’s record, next to their attendance, their giving and their group, and “who has served more than ten times in the last ninety days” or “who served regularly last year and hasn’t been scheduled since March” are questions you type rather than mornings you spend.
The team distribution question works the same way: ask for serving counts by person within a team and the shape of the answer tells you immediately whether you have forty volunteers or twelve volunteers and twenty-eight names.
If your serving data is thinner than you’d like because half the scheduling happens over text, it’ll show you that too. Which is annoying, and also worth knowing.
The point of any of this
None of these numbers tell you what to do about a person. They can’t. Whether someone needs a break, a thank-you, or a phone call is a judgement their team leader can make in about ten seconds and no dataset can make at all.
What the numbers do is decide who gets the ten seconds. That’s the whole job. A schedule read forwards is a rota; read backwards it’s the earliest record you have of who your church is leaning on and who has quietly stepped out of the frame. The second reading is the one nobody has time to do by hand.

