--- title: Google Calendar Integration description: "Event and schedule management with Google Calendar integration for CrewAI." icon: "calendar" mode: "wide" --- ## Overview Enable your agents to manage calendar events, schedules, and availability through Google Calendar. Create and update events, manage attendees, check availability, and streamline your scheduling workflows with AI-powered automation. ## Prerequisites Before using the Google Calendar integration, ensure you have: - A [CrewAI AOP](https://app.crewai.com) account with an active subscription - A Google account with Google Calendar access - Connected your Google account through the [Integrations page](https://app.crewai.com/crewai_plus/connectors) ## Setting Up Google Calendar Integration ### 1. Connect Your Google Account 1. Navigate to [CrewAI AOP Integrations](https://app.crewai.com/crewai_plus/connectors) 2. Find **Google Calendar** in the Authentication Integrations section 3. Click **Connect** and complete the OAuth flow 4. Grant the necessary permissions for calendar access 5. Copy your Enterprise Token from [Integration Settings](https://app.crewai.com/crewai_plus/settings/integrations) ### 2. Install Required Package ```bash uv add crewai-tools ``` ### 3. Environment Variable Setup To use integrations with `Agent(apps=[])`, you must set the `CREWAI_PLATFORM_INTEGRATION_TOKEN` environment variable with your Enterprise Token. ```bash export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token" ``` Or add it to your `.env` file: ``` CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token ``` ## Available Actions **Description:** Get calendar availability (free/busy information). **Parameters:** - `timeMin` (string, required): Start time (RFC3339 format) - `timeMax` (string, required): End time (RFC3339 format) - `items` (array, required): Calendar IDs to check ```json [ { "id": "calendar_id" } ] ``` - `timeZone` (string, optional): Time zone used in the response. The default is UTC. - `groupExpansionMax` (integer, optional): Maximal number of calendar identifiers to be provided for a single group. Maximum: 100 - `calendarExpansionMax` (integer, optional): Maximal number of calendars for which FreeBusy information is to be provided. Maximum: 50 **Description:** Create a new event in the specified calendar. **Parameters:** - `calendarId` (string, required): Calendar ID (use 'primary' for main calendar) - `summary` (string, required): Event title/summary - `start_dateTime` (string, required): Start time in RFC3339 format (e.g., 2024-01-20T10:00:00-07:00) - `end_dateTime` (string, required): End time in RFC3339 format - `description` (string, optional): Event description - `timeZone` (string, optional): Time zone (e.g., America/Los_Angeles) - `location` (string, optional): Geographic location of the event as free-form text. - `attendees` (array, optional): List of attendees for the event. ```json [ { "email": "attendee@example.com", "displayName": "Attendee Name", "optional": false } ] ``` - `reminders` (object, optional): Information about the event's reminders. ```json { "useDefault": true, "overrides": [ { "method": "email", "minutes": 15 } ] } ``` - `conferenceData` (object, optional): The conference-related information, such as details of a Google Meet conference. ```json { "createRequest": { "requestId": "unique-request-id", "conferenceSolutionKey": { "type": "hangoutsMeet" } } } ``` - `visibility` (string, optional): Visibility of the event. Options: default, public, private, confidential. Default: default - `transparency` (string, optional): Whether the event blocks time on the calendar. Options: opaque, transparent. Default: opaque **Description:** Retrieve events for the specified calendar. **Parameters:** - `calendarId` (string, required): Calendar ID (use 'primary' for main calendar) - `timeMin` (string, optional): Lower bound for events (RFC3339) - `timeMax` (string, optional): Upper bound for events (RFC3339) - `maxResults` (integer, optional): Maximum number of events (default 10). Minimum: 1, Maximum: 2500 - `orderBy` (string, optional): The order of the events returned in the result. Options: startTime, updated. Default: startTime - `singleEvents` (boolean, optional): Whether to expand recurring events into instances and only return single one-off events and instances of recurring events. Default: true - `showDeleted` (boolean, optional): Whether to include deleted events (with status equals cancelled) in the result. Default: false - `showHiddenInvitations` (boolean, optional): Whether to include hidden invitations in the result. Default: false - `q` (string, optional): Free text search terms to find events that match these terms in any field. - `pageToken` (string, optional): Token specifying which result page to return. - `timeZone` (string, optional): Time zone used in the response. - `updatedMin` (string, optional): Lower bound for an event's last modification time (RFC3339) to filter by. - `iCalUID` (string, optional): Specifies an event ID in the iCalendar format to be provided in the response. **Description:** Update an existing event. **Parameters:** - `calendarId` (string, required): Calendar ID - `eventId` (string, required): Event ID to update - `summary` (string, optional): Updated event title - `description` (string, optional): Updated event description - `start_dateTime` (string, optional): Updated start time - `end_dateTime` (string, optional): Updated end time **Description:** Delete a specified event. **Parameters:** - `calendarId` (string, required): Calendar ID - `eventId` (string, required): Event ID to delete **Description:** Retrieve user's calendar list. **Parameters:** - `maxResults` (integer, optional): Maximum number of entries returned on one result page. Minimum: 1 - `pageToken` (string, optional): Token specifying which result page to return. - `showDeleted` (boolean, optional): Whether to include deleted calendar list entries in the result. Default: false - `showHidden` (boolean, optional): Whether to show hidden entries. Default: false - `minAccessRole` (string, optional): The minimum access role for the user in the returned entries. Options: freeBusyReader, owner, reader, writer ## Usage Examples ### Basic Calendar Agent Setup ```python from crewai import Agent, Task, Crew # Create an agent with Google Calendar capabilities calendar_agent = Agent( role="Schedule Manager", goal="Manage calendar events and scheduling efficiently", backstory="An AI assistant specialized in calendar management and scheduling coordination.", apps=['google_calendar'] # All Google Calendar actions will be available ) # Task to create a meeting create_meeting_task = Task( description="Create a team standup meeting for tomorrow at 9 AM with the development team", agent=calendar_agent, expected_output="Meeting created successfully with Google Meet link" ) # Run the task crew = Crew( agents=[calendar_agent], tasks=[create_meeting_task] ) crew.kickoff() ``` ### Filtering Specific Calendar Tools ```python meeting_coordinator = Agent( role="Meeting Coordinator", goal="Coordinate meetings and check availability", backstory="An AI assistant that focuses on meeting scheduling and availability management.", apps=['google_calendar/create_event', 'google_calendar/get_availability'] ) # Task to schedule a meeting with availability check schedule_meeting = Task( description="Check availability for next week and schedule a project review meeting with stakeholders", agent=meeting_coordinator, expected_output="Meeting scheduled after checking availability of all participants" ) crew = Crew( agents=[meeting_coordinator], tasks=[schedule_meeting] ) crew.kickoff() ``` ### Event Management and Updates ```python from crewai import Agent, Task, Crew event_manager = Agent( role="Event Manager", goal="Manage and update calendar events efficiently", backstory="An experienced event manager who handles event logistics and updates.", apps=['google_calendar'] ) # Task to manage event updates event_management = Task( description=""" 1. List all events for this week 2. Update any events that need location changes to include video conference links 3. Check availability for upcoming meetings """, agent=event_manager, expected_output="Weekly events updated with proper locations and availability checked" ) crew = Crew( agents=[event_manager], tasks=[event_management] ) crew.kickoff() ``` ### Availability and Calendar Management ```python from crewai import Agent, Task, Crew availability_coordinator = Agent( role="Availability Coordinator", goal="Coordinate availability and manage calendars for scheduling", backstory="An AI assistant that specializes in availability management and calendar coordination.", apps=['google_calendar'] ) # Task to coordinate availability availability_task = Task( description=""" 1. Get the list of available calendars 2. Check availability for all calendars next Friday afternoon 3. Create a team meeting for the first available 2-hour slot 4. Include Google Meet link and send invitations """, agent=availability_coordinator, expected_output="Team meeting scheduled based on availability with all team members invited" ) crew = Crew( agents=[availability_coordinator], tasks=[availability_task] ) crew.kickoff() ``` ### Automated Scheduling Workflows ```python from crewai import Agent, Task, Crew scheduling_automator = Agent( role="Scheduling Automator", goal="Automate scheduling workflows and calendar management", backstory="An AI assistant that automates complex scheduling scenarios and calendar workflows.", apps=['google_calendar'] ) # Complex scheduling automation task automation_task = Task( description=""" 1. List all upcoming events for the next two weeks 2. Identify any scheduling conflicts or back-to-back meetings 3. Suggest optimal meeting times by checking availability 4. Create buffer time between meetings where needed 5. Update event descriptions with agenda items and meeting links """, agent=scheduling_automator, expected_output="Calendar optimized with resolved conflicts, buffer times, and updated meeting details" ) crew = Crew( agents=[scheduling_automator], tasks=[automation_task] ) crew.kickoff() ``` ## Troubleshooting ### Common Issues **Authentication Errors** - Ensure your Google account has the necessary permissions for calendar access - Verify that the OAuth connection includes all required scopes for Google Calendar API - Check if calendar sharing settings allow the required access level **Event Creation Issues** - Verify that time formats are correct (RFC3339 format) - Ensure attendee email addresses are properly formatted - Check that the target calendar exists and is accessible - Verify time zones are correctly specified **Availability and Time Conflicts** - Use proper RFC3339 format for time ranges when checking availability - Ensure time zones are consistent across all operations - Verify that calendar IDs are correct when checking multiple calendars **Event Updates and Deletions** - Verify that event IDs are correct and events exist - Ensure you have edit permissions for the events - Check that calendar ownership allows modifications ### Getting Help Contact our support team for assistance with Google Calendar integration setup or troubleshooting.