Skip to content

How to build an interview scheduling pipeline

Interview scheduling is a coordination nightmare. Recruiters spend hours cross-referencing interviewer calendars, candidates wait days for a confirmed time slot, and when the call finally happens, nobody records it consistently. The debrief devolves into “I think they said something about distributed systems” because the notes are incomplete or missing entirely.

This tutorial builds a pipeline that eliminates all of that. Candidates pick their own slot from a scheduling page, Nylas distributes interviews across your team using round-robin, conferencing links are generated automatically, and Notetaker joins every call to record and transcribe. After the interview, you get a structured transcript, summary, and action items through a webhook. The recruiter never touches a calendar.

By the end of this tutorial, you will have a working interview scheduling pipeline with these components:

  • A Scheduler Configuration with round-robin distribution across multiple interviewers
  • Automatic conferencing (Google Meet, Microsoft Teams, or Zoom) attached to every booking
  • Notetaker integration that joins each interview and generates a transcript, summary, and action items
  • A scheduling page (Nylas-hosted or embedded in your careers site) where candidates book their own slot
  • Webhook handlers that notify your ATS when bookings happen and when recordings are ready

The flow is straightforward. A candidate visits the scheduling page, picks a time, and confirms. Scheduler checks all interviewer calendars, picks the interviewer who was booked least recently, and creates the event. Notetaker joins the call at the scheduled time, records everything, and delivers the processed media afterward.

Make sure you have the following before starting this tutorial:

  • A Nylas account with an active application
  • A valid API key from your Nylas Dashboard
  • At least one connected grant (an authenticated user account) for the provider you want to work with
  • Node.js 18+ or Python 3.8+ installed (depending on which code samples you follow)

New to Nylas? Start with the quickstart guide to set up your app and connect a test account before continuing here.

You also need the following for this tutorial:

  • Connected grants for each interviewer on your hiring panel, each with calendar access
  • A conferencing provider configured for at least one grant (Google Meet, Microsoft Teams, or Zoom). See Adding conferencing to bookings for setup.
  • Notetaker enabled on your Nylas plan
  • A publicly accessible HTTPS endpoint to receive webhook notifications (use VS Code port forwarding or Hookdeck for local development)

Nylas blocks requests to ngrok URLs. Use VS Code port forwarding or Hookdeck to expose your local server during development.

Round-robin requires every participant to have a valid grant under the same Nylas application. Scheduler reads each interviewer’s calendar to compute availability. If a grant expires or is revoked, Scheduler skips that interviewer during assignment. Check your grants regularly in the Nylas Dashboard.

Create a round-robin scheduling configuration

Section titled “Create a round-robin scheduling configuration”

Create a Configuration that defines your interview panel, meeting duration, and round-robin distribution method.

A few things to note:

  • availability_method: "max-fairness" distributes interviews evenly. Scheduler assigns candidates to whichever interviewer was booked least recently. If Sarah conducted the last two interviews, Marcus or Priya gets the next one.
  • {{invitee_name}} is a template variable. Scheduler replaces it with the candidate’s name from the booking form, so events show “Interview with Dana Chen” instead of a generic title.
  • Each participant needs both availability.calendar_ids (calendars to check for conflicts) and booking.calendar_id (calendar to create the event on).

Choose between max-fairness and max-availability

Section titled “Choose between max-fairness and max-availability”

Scheduler offers two round-robin strategies:

  • max-fairness keeps the interview count balanced. Good for teams where equal distribution matters. The tradeoff is fewer time slots shown to candidates, because Scheduler only offers times when the least-booked interviewer is free.
  • max-availability shows the most possible time slots by assigning the interview to whichever interviewer is free at the chosen time. High-volume recruiting teams tend to prefer this because candidates see more options and book faster.

To switch, change availability_method to "max-availability".

For performance, keep your participant list under 10 interviewers. If you have a larger panel, split them into separate Configurations by interview stage or role.

Update the Configuration to attach automatic conferencing and enable Notetaker.

The custom instructions make a real difference for hiring workflows. Generic summaries are too vague for interview debriefs. By telling Notetaker to focus on technical skills and follow-up items, you get output that maps directly to your hiring scorecard.

Set conferencing.provider to match your video platform. Use "Google Meet" for Google Workspace, "Microsoft Teams" for Microsoft 365, or "Zoom Meeting" for Zoom. The autocreate object generates a unique meeting link for every booking.

With the Configuration ready, give candidates a way to book. Nylas supports two approaches.

Add a slug to your Configuration and Nylas hosts the page at book.nylas.com/<slug>. No frontend work required.

Your scheduling page is now live at https://book.nylas.com/interview-engineering-team. Drop that link into recruiter emails, your careers page, or your ATS’s candidate communication templates.

Embed the scheduling UI directly in your careers site using the <nylas-scheduling> web component.

The component handles date selection, time slots, the booking form, and confirmation. Notetaker consent and round-robin settings apply automatically. For styling options, see Customize Scheduler.

Subscribe to booking.created, booking.cancelled, and notetaker.media so your system tracks the full interview lifecycle.

When a candidate books, Nylas sends a booking.created notification with the event details:

Build a handler that routes booking events to your ATS:

Your webhook endpoint must respond quickly with a 200 status code. Nylas retries failed deliveries, but if your endpoint is consistently unreachable, notifications are dropped. Respond immediately and process asynchronously. See Using webhooks with Nylas for details.

Retrieve interview recordings and transcripts

Section titled “Retrieve interview recordings and transcripts”

After each interview ends, Notetaker processes the recording and sends a notetaker.media webhook. The payload includes download URLs for the recording, transcript, summary, and action items.

Add a notetaker.media handler to the same webhook server:

Media URLs expire after 60 minutes. Download the files immediately when you receive the webhook. If you miss the window, fetch fresh URLs from the Notetaker Media endpoint. Nylas retains media files for 14 days, then permanently deletes them.

Here are practical considerations for running this pipeline in production.

Round-robin does not guarantee strict alternation

Section titled “Round-robin does not guarantee strict alternation”

Max-fairness distributes interviews based on booking count for a given Configuration. It does not track assignments across Configurations. If Sarah is in two interview panels, her total load could still be uneven. Also, if one interviewer blocks out every Friday, candidates who book on Fridays never get assigned to them. Encourage interviewers to keep calendars accurate.

Scheduler displays time slots in the candidate’s local timezone, detected from their browser. The Configuration’s default_open_hours are defined in a specific timezone, so set these to match your team’s working hours. If your interviewers span multiple timezones, use participant-level open_hours instead. See Managing availability for details.

Notetaker joins as a non-signed-in participant. If nobody admits the bot within 10 minutes, it times out with a failed_entry state and you lose the recording. For fully automated pipelines:

  • Google Meet: Set meetings to “Anyone with the link can join”
  • Microsoft Teams: Enable “Anonymous users can join a meeting” in Teams admin
  • Zoom: Disable the waiting room for Scheduler-created meetings

Nylas deletes media files after 14 days. Hiring cycles often run longer. Build an automated download pipeline that triggers on the notetaker.media webhook and stores files in your own infrastructure. Do not rely on Nylas-hosted URLs for long-term access.

When a candidate cancels, Scheduler fires a booking.cancelled webhook and removes the calendar event. There is no in-place reschedule — candidates cancel and rebook. Build your ATS integration to handle both, and link records by the candidate’s email address to maintain an audit trail.

The scheduling page shows a consent message if show_ui_consent_message is true, and the bot sends a chat message shortly after joining. That said, recording laws vary by jurisdiction. Some require explicit opt-in consent before recording starts. Review the requirements for your jurisdiction. The messages Notetaker sends are informational, not legal consent mechanisms.

If you use Zoom with round-robin under a single grant, restrictive Zoom settings can prevent participants from joining meetings created by a different account. See the Zoom troubleshooting documentation for workarounds.

You now have a working pipeline where candidates self-schedule, interviewers are assigned automatically, and every conversation is recorded and transcribed. Here are ways to extend it: