Schedule Interviews in Hours, Not Days

AI coordinates schedules across candidates and interviewers, handles timezones, and sends prep materials. Recruiters stay informed without being the bottleneck.


Why this matters

Coordinating interviews across multiple interviewers, candidates, and timezones is a logistical nightmare. A single interview loop with four panelists can take 15-20 emails to schedule. During this time, top candidates may accept competing offers. Recruiters spend more time scheduling than sourcing, and every day of delay increases the risk of losing the candidate.


How MultiMail solves this

MultiMail's AI agent handles the entire interview scheduling workflow via email. It collects availability from interviewers and candidates, finds overlapping slots with timezone awareness, and sends confirmations with prep materials. Monitored oversight lets recruiters review the communications log while the AI handles the coordination autonomously.

1

Receive Scheduling Request

When a candidate advances to the interview stage, the AI agent is triggered with the candidate's details, role, and required interviewer panel.

2

Collect Availability

The agent emails interviewers to collect availability or queries their calendars directly. It also coordinates with the candidate via email to understand their scheduling preferences and timezone.

3

Find Optimal Slots

The AI cross-references all calendars to find overlapping availability, handling timezone conversions and buffer times between interviews automatically.

4

Confirm and Send Prep Materials

Once a time is confirmed, the agent sends detailed confirmations to all parties with the interview format, prep materials, and video conferencing links.


Implementation

Coordinate Interview Schedule
python
import requests

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

def schedule_interview(candidate: dict, panel: list):
    "cm"># Get interviewer availability from calendar API
    available_slots = find_overlapping_slots(
        [get_calendar(p["email"]) for p in panel],
        duration_minutes=60,
        buffer_minutes=15
    )

    "cm"># Convert to candidate's timezone
    candidate_tz = candidate.get("timezone", "America/New_York")
    formatted_slots = [
        format_time(slot, candidate_tz) for slot in available_slots[:3]
    ]

    body = (
        f"Hi {candidate[&"cm">#039;name']},\n\n"
        f"We&"cm">#039;d love to schedule your interview for the "
        f"{candidate[&"cm">#039;role']} position. Here are some available times:\n\n"
        + "\n".join(f"- {s}" for s in formatted_slots) +
        f"\n\nAll times shown in {candidate_tz}. "
        f"Please reply with your preferred option or suggest "
        f"an alternative.\n\nLooking forward to speaking with you!"
    )

    requests.post(
        f"{API}/send",
        headers=HEADERS,
        json={
            "from": "[email protected]",
            "to": candidate["email"],
            "subject": f"Interview scheduling: {candidate[&"cm">#039;role']} at YourCompany",
            "text_body": body
        }
    )

Collect availability and propose interview times to the candidate.

Send Interview Confirmation with Prep Materials
python
import requests

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

def confirm_interview(candidate: dict, panel: list, slot: dict):
    "cm"># Send candidate confirmation
    candidate_body = (
        f"Hi {candidate[&"cm">#039;name']},\n\n"
        f"Your interview is confirmed!\n\n"
        f"Role: {candidate[&"cm">#039;role']}\n"
        f"Date/Time: {slot[&"cm">#039;formatted_time']}\n"
        f"Format: {slot[&"cm">#039;format']}\n"
        f"Video link: {slot[&"cm">#039;meeting_url']}\n\n"
        f"You&"cm">#039;ll be meeting with:\n"
        + "\n".join(f"- {p[&"cm">#039;name']}, {p['title']}" for p in panel) +
        f"\n\nPrep tips: {slot[&"cm">#039;prep_url']}"
    )

    requests.post(
        f"{API}/send",
        headers=HEADERS,
        json={
            "from": "[email protected]",
            "to": candidate["email"],
            "subject": f"Interview confirmed: {candidate[&"cm">#039;role']} - {slot['formatted_time']}",
            "text_body": candidate_body
        }
    )

    "cm"># Send interviewer briefings
    for interviewer in panel:
        send_interviewer_brief(interviewer, candidate, slot)

Confirm the interview and send preparation materials to all participants.

MCP Tool Integration
typescript
"cm">// Using MultiMail MCP tools for interview scheduling

async function scheduleInterview(
  candidate: Candidate,
  panel: Interviewer[]
) {
  const slots = findOverlappingSlots(panel, 60);
  const candidateTz = candidate.timezone || "America/New_York";

  "cm">// Propose times to candidate
  await mcp.send_email({
    to: candidate.email,
    subject: `Interview scheduling: ${candidate.role} at YourCompany`,
    text_body: [
      `Hi ${candidate.name},`,
      ``,
      `Available interview times:`,
      ...slots.slice(0, 3).map(s => `  - ${formatTime(s, candidateTz)}`),
      ``,
      `All times in ${candidateTz}. Reply with your preference.`
    ].join("\n")
  });

  "cm">// Track in contacts
  await mcp.add_contact({
    email: candidate.email,
    name: candidate.name,
    metadata: {
      role: candidate.role,
      stage: "scheduling",
      panel: panel.map(p => p.name).join(", ")
    }
  });
}

Manage interview scheduling using MultiMail MCP tools.


What you get

Schedule in Hours, Not Days

The AI coordinates across all participants simultaneously instead of sequentially. What takes a recruiter 2-3 days of back-and-forth is resolved in a few hours.

Automatic Timezone Handling

No more timezone confusion when scheduling with remote candidates. The AI converts all times to each participant's local timezone automatically.

Better Candidate Experience

Fast, professional scheduling with clear confirmations and prep materials shows candidates you're organized and respect their time.

Recruiter Time Saved

Recruiters spend time sourcing and evaluating candidates instead of playing calendar Tetris. The AI handles the logistics while recruiters focus on relationship building.


Recommended oversight mode

Recommended
monitored
Interview scheduling is low-risk but high-volume communication that follows predictable patterns. Monitored mode lets the AI handle coordination autonomously while recruiters can review the log to ensure candidate experience quality. If a scheduling error occurs, it's easily correctable.

Common questions

How does the AI handle interview panels with 4+ people?
The agent queries all panel members' calendars simultaneously and finds slots where everyone is available. For large panels, it may propose split sessions or suggest which panelists are essential versus optional. It handles the complexity algorithmically — the more people, the more value the AI provides.
What about EEOC compliance in scheduling communications?
The AI uses standardized, professional templates that treat all candidates equally. It doesn't reference protected characteristics in scheduling communications. Your recruiting team can review the communications log under monitored oversight to ensure compliance.
Can it handle rescheduling and cancellations?
Yes. The agent monitors for rescheduling requests from both candidates and interviewers. When a reschedule is needed, it finds new overlapping availability and sends updated confirmations to all parties, keeping the thread coherent.
Does this integrate with our ATS?
MultiMail handles the email communication. Your AI agent integrates with your ATS (Greenhouse, Lever, Ashby, etc.) via their APIs to receive scheduling triggers and update candidate status. The email coordination happens through MultiMail while candidate data management stays in your ATS.

Explore more use cases

The only agent email with a verifiable sender

Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.