Recruiting agencies and headhunters
Multi-Candidate Interview Scheduling for Recruiting Agencies: A Slate Workflow
One finalist is a scheduling problem. Four finalists are a state-isolation problem. They need the same external hiring manager and panel, but they must never see one another’s names, windows, holds, or interview details. A client calendar change can invalidate three proposals at once. One crossed invite can undo the careful candidate experience the recruiter built before scheduling began.
Coordinate a candidate slate in eight steps
Use one client search with four candidates, a required hiring manager, two required interviewers, one optional observer, and a recruiting-agency owner. The client panel spans Google and Microsoft. Candidates provide bounded windows without connecting personal calendars. One panel calendar changes after three proposals exist.
- 1
Create the client lane and four candidate records
Store a client lane with search ID, role, stage, interview format, duration, bounded campaign window, scheduling deadline, required panel roles, optional roles, approved substitutes, client approver, agency owner, and organizer calendar. Give each candidate a separate meeting ID, revision, contact consent, windows, proposals, approvals, provider event, and terminal state.- Candidate records can reference shared panel roles without referencing one another.
- An ATS stage or interview-plan row is not a confirmed event.
- Completion is evaluated independently for every candidate.
- 2
Partition candidate identity and availability
Limit candidate identity, personal contact, current-employer sensitivity, availability windows, corrections, and decline reasons to authorized agency and client roles. The panel-capacity layer should see opaque candidate request IDs, duration, deadline, and eligible windows—not a list of candidate names attached to every open slot.- No candidate can discover another candidate through a link, poll, event title, or reply-all thread.
- Routine logs redact candidate contact and message content.
- The organizer and invite wording disclose only the approved search context.
- 3
Collect bounded candidate windows with consent
For each candidate, state the client, stage, purpose, duration, format, date boundary, local-time zone, response use, reminder cap, and opt-out path. Accept windows, blackout periods, notice needs, corrections, decline, and expiry through the approved channel. Calendar connection is optional; do not ask candidates to expose a full personal or current-employer calendar.- Every response binds to one candidate, search, meeting revision, and channel message ID.
- Ambiguous dates or zones receive one narrow clarification.
- A correction invalidates only that candidate’s derived proposals.
- 4
Resolve one current panel-capacity map
Read approved Google and Microsoft free/busy for required client roles. Request bounded windows from any unconnected interviewer. Normalize role, substitute eligibility, source, retrieval or reply time, IANA zone, consent, freshness, and provider error. Build panel intervals with exact required-role coverage before joining any candidate.- Missing access and provider errors are unknown, not open panel capacity.
- Optional observers improve coverage without becoming blockers.
- A named substitute cannot join until the client owner approves that role change.
- 5
Allocate proposals without leaking or overpromising capacity
Intersect each candidate’s current windows with valid panel intervals. Apply the agency and client’s declared allocation policy, such as scheduling deadline, candidate response time, interview sequence, and protected panel load. Give every proposal an exact candidate record, panel evidence versions, expiry, hold state, and approval requirement. A proposal is not confirmation.- The allocation rule is recorded before it decides between candidates competing for one slot.
- One panel interval cannot be promised to several candidates unless explicitly labeled and governed.
- Candidates receive only their own proposal and expiry information.
- 6
Route client approval and candidate acceptance separately
The client approves required interviewer assignment, substitute use, organizer, and any panel exception. The candidate accepts only their own exact slot and disclosed interview details. Bind both decisions to one proposal revision. If policy permits a tentative hold, name its owner, disclosure, expiry, and release rule.- The candidate is never asked to solve the client’s staffing decision.
- The client does not receive unnecessary candidate calendar context.
- Expired approval or acceptance cannot revive a stale proposal without fresh evidence.
- 7
Commit one canonical event per candidate
Re-check current candidate evidence and required panel free/busy, then use an idempotency key tied to candidate meeting ID, revision, and approved proposal. Write one event, persist provider correlation and event IDs, send invitations, and read back time, zone, organizer, candidate, every required interviewer, optional decision, and invitation state. Reconcile a timeout before retry.- A repeated worker delivery cannot create a second candidate invitation.
- Provider IDs from one candidate never attach to another candidate record.
- Unused holds are released or closed under the declared policy.
- 8
Repair the shared panel without restarting every candidate
When a required interviewer changes, invalidate the affected panel-capacity version and identify which candidate proposals or bookings depend on it. Preserve unaffected candidate windows, consent, approvals, and events. Reopen only the stale records, request only the missing update, and return a bounded substitute, date, duration, or priority decision to the client owner.- A panel change cannot trigger a broad candidate blast by default.
- Each exception has one owner, deadline, and candidate-safe next action.
- The final slate view separates waiting, proposed, approved, booked, declined, and reclaimed state.
The slate shares capacity, not candidate data
One panel-capacity map prevents the agency from asking the same interviewers for availability four times. Separate candidate records prevent that efficiency from becoming a privacy leak. The join happens on opaque request ID, valid interval, role coverage, deadline, and policy.
This also makes recovery exact. When the hiring manager’s calendar changes, the system can identify the candidate proposals derived from that old panel version without exposing the other candidates or restarting the whole search.
Allocation policy belongs to the recruiter and client
Software can show that Candidate A and Candidate B both fit the only Thursday panel slot. It should not invent which person receives it. The agency and client should declare the rule and preserve room for recruiter judgment, candidate notice needs, client relationships, and sensitive exceptions.
That keeps WonderCal in the companion role. The coordination layer executes settled policy and returns bounded collisions. Recruiters keep candidate judgment, search strategy, client advice, and the human call when the policy is not enough.
An ATS, booking link, poll, or draft is not slate execution
An ATS can hold stage, candidate, and interview-plan data. A self-scheduling link can let one candidate choose from configured host slots. A poll can collect panel votes. Calendar sync can expose conflicts. An AI assistant can draft reminders. Each can support the recruiter.
Scheduling execution joins separate candidate consent and windows with shared external panel capacity, allocation policy, approvals, current free/busy, one event per candidate, invitations, and recovery. The recruiter should receive completed interviews or precise exceptions—not four fragments to merge by hand.
Run the crossed-slate acceptance test
Create four candidate records and three valid panel intervals. Let two candidates compete for one slot. Change a required Microsoft calendar, correct one candidate window, deliver another candidate reply twice, approve a substitute for only one meeting, and time out one event write.
Pass when every candidate remains isolated, stale proposals are revoked, the duplicate reply is suppressed, unchanged windows survive, substitute authority stays scoped, the uncertain event is reconciled, and each booked candidate receives one correct invitation. Fail when one repair email reveals another candidate or reserves the same panel twice.
Compare multi-candidate scheduling by how the slate stays isolated
The winning workflow shares panel capacity across the search while preserving one private, recoverable path from candidate windows to invitation for each person.
| Decision vector | Recruiter relay, spreadsheet, and manual holds | ATS self-schedule, booking link, or poll | WonderCal execution direction |
|---|---|---|---|
| Coordination completion | The recruiter joins every candidate, panel interval, approval, hold, event, and repair by hand. | Can finish stable configured interviews while shared external-panel and slate state may remain coordinator work. | Target path carries each candidate record through one verified invitation or a bounded exception. |
| Cross-company reach | Works because the recruiter translates candidate, agency, and client state across every calendar. | Candidates can access a shared surface; client coverage depends on configured hosts and access. | Designed for candidate, agency, and client people across Google, Microsoft, and unconnected calendars. |
| Privacy | Depends on careful spreadsheets, aliases, holds, threads, and event titles for every candidate. | Depends on candidate partitioning and the data copied into each scheduling surface. | Target model shares opaque panel capacity while keeping candidate identity and windows isolated. |
| Exception handling | The recruiter has full context and carries every stale panel, competing slot, decline, and repair. | A panel change or slot collision may return without one cross-candidate dependency view. | Designed to reopen only affected records and return one allocation, substitute, or recovery decision. |
| Time and cost | No new platform path; placement time becomes candidate-by-candidate calendar dispatch. | Fast for standard cases; savings depend on shared panel and exception work left behind. | Value comes from completing the agency-client loop while recruiters keep candidate and client judgment. |
Coordination completion
Recruiter relay, spreadsheet, and manual holds
The recruiter joins every candidate, panel interval, approval, hold, event, and repair by hand.
ATS self-schedule, booking link, or poll
Can finish stable configured interviews while shared external-panel and slate state may remain coordinator work.
WonderCal execution direction
Target path carries each candidate record through one verified invitation or a bounded exception.
Cross-company reach
Recruiter relay, spreadsheet, and manual holds
Works because the recruiter translates candidate, agency, and client state across every calendar.
ATS self-schedule, booking link, or poll
Candidates can access a shared surface; client coverage depends on configured hosts and access.
WonderCal execution direction
Designed for candidate, agency, and client people across Google, Microsoft, and unconnected calendars.
Privacy
Recruiter relay, spreadsheet, and manual holds
Depends on careful spreadsheets, aliases, holds, threads, and event titles for every candidate.
ATS self-schedule, booking link, or poll
Depends on candidate partitioning and the data copied into each scheduling surface.
WonderCal execution direction
Target model shares opaque panel capacity while keeping candidate identity and windows isolated.
Exception handling
Recruiter relay, spreadsheet, and manual holds
The recruiter has full context and carries every stale panel, competing slot, decline, and repair.
ATS self-schedule, booking link, or poll
A panel change or slot collision may return without one cross-candidate dependency view.
WonderCal execution direction
Designed to reopen only affected records and return one allocation, substitute, or recovery decision.
Time and cost
Recruiter relay, spreadsheet, and manual holds
No new platform path; placement time becomes candidate-by-candidate calendar dispatch.
ATS self-schedule, booking link, or poll
Fast for standard cases; savings depend on shared panel and exception work left behind.
WonderCal execution direction
Value comes from completing the agency-client loop while recruiters keep candidate and client judgment.
Frequently asked questions
How do recruiting agencies schedule several candidates with one panel?
Should candidates share one panel scheduling poll?
How do you prevent the same panel slot from being promised twice?
Do candidates need to connect a personal calendar?
Where can recruiting agencies review WonderCal?
Primary sources
- Ashby Developer API: Create interview schedule — official recruiting-system operation for creating an interview schedule
- Ashby Developer API: Cancel interview schedule — official recruiting-system operation for canceling an interview schedule
- Greenhouse Developer Resources — official recruiting-system API entry point for candidate, interview, webhook, and audit integrations
- Google Calendar API: Freebusy query — official Google availability request, group expansion, time-zone, and error fields
- Microsoft Graph: calendar getSchedule — official Microsoft availability operation and least-privileged permission guidance
- ICO: A guide to the data protection principles — official purpose limitation, data minimization, accuracy, retention, security, and accountability guidance
Share panel capacity, not candidate data
Give each candidate a private coordination path and the client one current panel map. Keep recruiter judgment intact while every booked person receives one verified invitation.
See WonderCal for recruiting agencies