How to Build Interview Scheduling Across Greenhouse, Outlook, and Google Calendar with ATS and Calendar APIs
March 4, 2026
Updated June 2026
Recruiting platforms often need to coordinate interviews between candidates, recruiters, and hiring managers. Many SaaS products build scheduling features so their customers can schedule interviews using their existing ATS and calendar systems.
For example, a recruiting platform may let hiring teams schedule interviews for candidates in Greenhouse while automatically creating calendar events in Outlook or Google Calendar.
The challenge is that interview data and calendar scheduling live in different systems. Applicant tracking systems store candidate and application data; calendars manage availability and meetings. Each platform exposes different APIs and schemas.
Unified.to provides normalized APIs across ATS and calendar platforms. You retrieve candidates, applications, and interview stages from an ATS and create interview events in calendar systems through one consistent API — all fetched live from the source, with no candidate data stored at rest.
Why SaaS products build interview scheduling
Many recruiting and hiring platforms provide scheduling for their customers — recruiting workflow tools, interview coordination products, candidate scheduling assistants, hiring analytics platforms, and AI recruiting assistants.
Typical workflows include recruiters scheduling interviews with candidates, candidate self-scheduling links, panel interviews with multiple interviewers, and automated rescheduling and cancellations. Connecting ATS and calendar data lets these run automatically.
The two Unified.to categories involved
| Category | Description | Key objects |
|---|---|---|
| ATS | Candidate, application, and interview data from platforms like Greenhouse or Lever | candidate, application, interview |
| Calendar & Meetings | Calendar events used to schedule interviews | calendar_event |
| Normalizing these objects across providers lets a SaaS platform coordinate interview workflows without building separate integrations per system. |
ATS objects and key fields
Candidate
The person being interviewed.
| Field | Purpose |
|---|---|
id | Unique identifier |
first_name / last_name | Candidate name |
emails | Used for calendar invitations (each entry has name, email, type) |
telephones | Contact information |
created_at / updated_at | Record timestamps |
Application
Connects a candidate to a job.
| Field | Purpose |
|---|---|
id | Unique identifier |
candidate_id | Candidate associated with the application |
job_id | Job being applied for |
status | Current normalized stage |
original_status | Raw stage label from the ATS |
applied_at | Date the candidate applied |
Application stage often determines when an interview should be scheduled. The normalized status enum includes FIRST_INTERVIEW, SECOND_INTERVIEW, and THIRD_INTERVIEW — so you might trigger scheduling when a candidate reaches FIRST_INTERVIEW, for example. |
Interview
Holds the scheduling information.
| Field | Purpose |
|---|---|
id | Unique interview identifier |
candidate_id | Candidate being interviewed |
job_id | Associated job |
application_id | Application context |
user_ids | Interviewers participating |
status | Interview state (e.g. SCHEDULED, COMPLETE) |
start_at / end_at | Interview time window |
location | Meeting location or remote link |
external_event_xref | Reference to the linked calendar event |
created_at / updated_at | Timestamps |
The external_event_xref field is what ties an ATS interview to the calendar event you create for it. |
Job (context)
Provides context for the interview — job name, group/department, location, and hiring managers — useful detail to include in calendar invitations and candidate communications.
Connecting customer ATS and calendar systems
Customers authorize their ATS and calendar integrations through Unified.to's embedded authorization flow:
- Your application launches the authorization flow.
- The user selects integrations such as Greenhouse, Outlook, or Google Calendar.
- The user authorizes access.
- Unified.to returns a
connection_id.
Store the mapping user_id → connection_id, and reference that identifier in all subsequent API calls.
Retrieving candidate and application data
Scheduling begins by reading candidate and application data from the ATS:
GET /ats/{connection_id}/candidate
GET /ats/{connection_id}/application
GET /ats/{connection_id}/interview
GET /ats/{connection_id}/job
This lets a scheduling tool retrieve candidate contact details, identify the associated job, determine the current application stage, and list existing interviews.
Scheduling interviews in calendars
Once candidate and interview details are known, the scheduling system creates a calendar event through Unified.to's Calendar & Meetings API:
POST /calendar/{connection_id}/event
The normalized CalendarEvent carries the fields you need for an interview:
| Field | Purpose |
|---|---|
subject | The event title shown on the calendar |
start_at / end_at | Interview time window |
attendees | Candidate and interviewers (each with email, name, optional user_id, and a status of ACCEPTED/REJECTED/TENTATIVE) |
conference | Video meeting details (url, label, access codes) for Zoom, Google Meet, or Teams |
location | Physical location for in-person interviews |
notes | Interview agenda or instructions |
send_notifications | Whether to send calendar invitations to attendees |
| Node SDK: |
const event = await sdk.calendar.createCalendarEvent({
connectionId,
calendarEvent: {
subject: 'Frontend Engineer Interview – Round 2',
startAt: '2026-07-01T15:00:00Z',
endAt: '2026-07-01T16:00:00Z',
attendees: [
{ email: 'jane@example.com', name: 'Jane Doe' },
{ email: 'interviewer@yourco.com', name: 'Sam Lee', required: true },
],
notes: 'Technical round. Focus on system design.',
sendNotifications: true,
},
});
The attendees array ensures both interviewers and the candidate receive invitations. Store the returned event id against the ATS interview's external_event_xref so the two stay linked.
Handling rescheduling and cancellations
Scheduling systems need to react when meetings change. Subscribe to Unified.to calendar webhooks for created and updated events so your system can update interview times and notify participants. A cancelled meeting is represented by the event's status moving to CANCELED (the event status enum is CONFIRMED, TENTATIVE, or CANCELED), so a cancellation arrives as an update you can act on.
Supported platforms
Unified.to covers a wide range of hiring and scheduling platforms.
ATS (82 integrations) — including Greenhouse, Lever, Ashby, SmartRecruiters, iCIMS, Workday, Jobvite, BambooHR, and Workable.
Calendar & Meetings — including Google Calendar, Microsoft Outlook, Zoom Calendar, Calendly, and Webex.
Why product teams choose Unified.to
Building interview scheduling normally means integrating with multiple ATS platforms and calendar systems separately. Unified.to provides normalized ATS objects for candidates, applications, and interviews; a unified calendar API for creating events; consistent authentication; and webhooks for updates — so product teams can focus on the recruiting workflow instead of maintaining dozens of integrations.
Start building interview scheduling across Greenhouse, Outlook, Google Calendar, and dozens of other platforms today. Start a free 30-day trial or book a demo.