Connecting InstantDM to Google Calendar lets you create calendar events when Instagram leads book appointments through DM flows, and send Google Calendar links directly in DMs.
Why Connect InstantDM to Google Calendar?
- Auto-create events - when a lead books via DM, it appears on your calendar
- Send calendar links - let leads add events to their own calendar
- Team visibility - shared calendars show Instagram appointments alongside other meetings
- Reminders - Google Calendar sends automatic reminders
Common Use Cases
- Create a calendar event when someone books a consultation via DM flow
- Send "Add to Calendar" links after confirming an appointment
- Block time on your calendar when a lead requests a specific slot
- Sync DM-booked appointments with your team calendar
What You'll Need
| Requirement | Details |
|---|---|
| InstantDM account | Trendsetter, Trendsetter Pro, or any Multi plan |
| Google account | With Google Calendar |
| InstantDM API key | Found at Settings → API in your InstantDM dashboard |
Method 1: Via Make.com (Recommended)
Step 1: Set Up the Webhook
Follow the Make.com integration guide to create a webhook scenario.
Step 2: Add Google Calendar Module
- After the webhook trigger, add a Filter:
eventequalsflow_completed. - Add Google Calendar → Create an Event.
- Connect your Google account.
- Configure:
| Field | Value |
|---|---|
| Calendar | Select your calendar |
| Summary | Instagram Lead: {{data.response_variables.full_name}} |
| Description | Email: {{data.response_variables.email}}\nPhone: {{data.response_variables.phone}}\nInterest: {{data.response_variables.interest}}\nInstagram: @{{data.username}} |
| Start Date | Tomorrow at 10:00 AM (or from flow data) |
| Duration | 30 minutes |
Step 3: Test and Activate
- Run once, trigger a test event.
- Check your Google Calendar for the new event.
- Activate.
Method 2: Send "Add to Calendar" Links
Generate a Google Calendar link that leads can click to add an event to their own calendar:
function createGoogleCalendarLink(title, description, startDate, endDate, location = '') {
const params = new URLSearchParams({
action: 'TEMPLATE',
text: title,
details: description,
dates: `${formatDate(startDate)}/${formatDate(endDate)}`,
location: location,
});
return `https://calendar.google.com/calendar/render?${params.toString()}`;
}
function formatDate(date) {
return new Date(date).toISOString().replace(/[-:]/g, '').replace(/\.\d{3}/, '');
}
// Usage
const calendarLink = createGoogleCalendarLink(
'Consultation Call',
'Call with YourBrand about Premium Plan',
'2025-02-01T10:00:00',
'2025-02-01T10:30:00'
);
Send via InstantDM:
{
"action": "send_message",
"type": "buttons",
"recipient_id": "INSTAGRAM_USER_ID",
"message": "Your call is confirmed! Add it to your calendar:",
"buttons": [
{ "title": "Add to Calendar", "url": "GENERATED_CALENDAR_LINK" }
]
}
Method 3: Direct API (Google Calendar API)
const { google } = require('googleapis');
const auth = new google.auth.GoogleAuth({
keyFile: './service-account-key.json',
scopes: ['https://www.googleapis.com/auth/calendar'],
});
const calendar = google.calendar({ version: 'v3', auth });
async function createEvent(summary, description, startTime, attendeeEmail) {
const event = await calendar.events.insert({
calendarId: 'primary',
requestBody: {
summary,
description,
start: { dateTime: startTime, timeZone: 'America/New_York' },
end: { dateTime: new Date(new Date(startTime).getTime() + 30 * 60000).toISOString(), timeZone: 'America/New_York' },
attendees: attendeeEmail ? [{ email: attendeeEmail }] : [],
reminders: { useDefault: true },
},
});
return event.data;
}
Troubleshooting
| Issue | Solution |
|---|---|
| Event not appearing | Check the calendar ID. For personal calendar, use primary. For shared calendars, use the calendar's email address. |
| Time zone wrong | Specify the time zone in the event start/end. Don't rely on defaults. |
| Service account can't access calendar | Share the calendar with the service account email address. |
| "Add to Calendar" link not working | Ensure dates are in the correct format (YYYYMMDDTHHmmssZ). |
Frequently Asked Questions
Can I let leads pick a time slot via DM?
Not directly through Google Calendar. For time-slot selection, use Calendly or Cal.com which provide a booking UI. Then sync the booking to Google Calendar.
Can I create events on a shared team calendar?
Yes. Use the shared calendar's ID instead of primary. The service account or connected account needs write access to the shared calendar.
What's Next
- Set up Calendly for a full booking experience.
- Connect to Cal.com for an open-source alternative.
- Read the Slack guide for appointment notifications.
- Explore the full API docs at instantdm.com/instagram-api-docs.