Free n8n template

Interview scheduling n8n template

What it does

An importable n8n workflow that starts when a Greenhouse candidate reaches an interview stage, checks interviewer free/busy in Google Calendar, and emails up to five options in the candidate's time zone. The candidate picks one on an n8n form, the workflow re-checks availability and books the event with a Google Meet link. Free-text availability is parsed by Claude for the coordinator. You need n8n, Greenhouse, Google Calendar, Gmail, an Anthropic API key and Slack.

What this workflow does

  1. Greenhouse stage change (Webhook) fires when a recruiter moves a candidate.
  2. Prepare scheduling request (Code) ignores stages you have not configured, looks up the interview plan (length, interviewer pool) and builds a free/busy query for the next week.
  3. Query free/busy (HTTP Request to the Google Calendar freeBusy API) returns busy blocks without exposing event details.
  4. Build slot options (Code) is the slot engine: working hours in each interviewer’s time zone, a 15-minute buffer, weekdays only, a rough daily load limit, and at most two options per day.
  5. Slots found? (If) sends a no-availability case to the coordinator.
  6. Email options to candidate (Gmail) lists the times in the candidate’s time zone with a link to the form.
  7. Wait for candidate choice (Wait, form) shows a dropdown of options plus a free-text box, and waits up to 72 hours.
  8. Re-check free/busy and Resolve choice (Code) confirm the chosen slot is still open and route to book, parse reply or coordinator.
  9. Create interview event (Google Calendar) books the candidate and interviewer with a Meet link and sends invites.
  10. Parse reply with Claude (HTTP Request) reads free-text availability into intent and time windows using a strict schema, and Summarize reply (Code) handles refusals and missing output.
  11. Notify coordinator in Slack gets timeouts, conflicts, parsed replies and errors.

Before you import

  • A Google account that can read interviewers’ free/busy and create events on a recruiting calendar. In Google Workspace, free/busy sharing inside the domain is usually enough.
  • Greenhouse webhook access for stage changes. Check the payload paths against a real event.
  • An Anthropic API key. The template uses claude-opus-5-5 at low effort; claude-haiku-5-5 is cheaper for high-volume, simple classification like short replies.
  • An n8n instance reachable from the internet, so the candidate form link works.

Setup

  1. Import the JSON and connect Google Calendar, Gmail, Anthropic and Slack credentials.
  2. Replace REPLACE_WITH_LONG_RANDOM_TOKEN in the webhook path and register the production URL in Greenhouse.
  3. In Prepare scheduling request, fill PLANS with job IDs, stage names, lengths and interviewer pools, and INTERVIEWERS with time zones, hours and daily caps.
  4. Replace REPLACE_WITH_RECRUITING_CALENDAR@yourcompany.com on Create interview event and REPLACE_WITH_SLACK_COORDINATOR_CHANNEL_ID.
  5. Adjust STEP_MIN, BUFFER_MIN and MAX_OPTIONS in Build slot options if needed.

Test it

Use a test candidate with your own email. Move them to the configured stage and check that the options email lists times that are actually free. Pick one: the invite should arrive with a Meet link. Run it again, then block the chosen time on the interviewer’s calendar before submitting the form, and confirm the coordinator gets a conflict message. Finally, choose “None of these work” and type “next Tuesday after 2pm”.

Make it production-ready

  • Place tentative holds on offered slots and release them when the candidate chooses or the wait expires.
  • Store each candidate’s time zone in Greenhouse and read it instead of the default.
  • Write the booking back to the Greenhouse activity feed, and send day-before reminders.
  • Count real interviews per interviewer per day from the recruiting calendar instead of the rough busy-block limit.
  • Verify Greenhouse’s webhook signature and add an n8n error workflow.

Read the full guide on automating interview scheduling for panels and Microsoft 365, or talk to Lumeor about extending it to multi-session loops.

Next steps