Automatically create a Google Calendar event — a booking, appointment, or reservation — every time a form is submitted. Requires Contactum Pro with the Google Calendar module enabled.
Requirements #
- Contactum Pro, with the Google Calendar module active (Contactum → Modules)
- A Google Cloud project with a service account that has Calendar API access
- The service account’s JSON key file
- Each target Google Calendar shared with that service account
1. Create a Google Service Account #
- In Google Cloud Console, create a service account with access to the Google Calendar API, and download its JSON key.
- Open the JSON key and note the
client_emailvalue inside it. - In Google Calendar, open each calendar you want Contactum to create events on, and share it with that
client_emailaddress, granting “Make changes to events” permission.
2. Connect Google Calendar in Contactum #
- Go to Contactum → Settings → Integrations → Google Calendar.
- Paste the full contents of your Service Account JSON Key into the field.
- Click Verify Connection.
Contactum parses the JSON and makes a live call to list your calendars to confirm the credentials work. On success you’ll see “Your Google Calendar connection has been verified and saved” and the status badge turns green.
To disconnect, click Disconnect Google Calendar — this clears the stored key and stops all event creation until reconnected.
3. Enable Google Calendar on a Specific Form #
- Open the form in the builder.
- Go to Form Settings → Integrations.
- Toggle Google Calendar on, then click Configure.
4. Configure Event Details #
| Field | Required | Description |
|---|---|---|
| Calendar | Yes | Which calendar to create the event on. Click the refresh icon to load your shared calendars |
| Event Title | No | e.g. Booking: {field:name} |
| Start Date/Time | Yes | Must resolve to a date/time Google can understand — typically combining a Date field and a Time field, e.g. {field:appointment_date} {field:appointment_time} |
| End Date/Time | No | Leave blank to use Duration instead |
| Duration (minutes) | No | Used only if End Date/Time is left blank; default 60 |
| Location | No | e.g. {field:address} |
| Attendee Email | No | Adds the resolved address as a guest on the event. Google may not always send them an invite email unless your Workspace is configured for it — the event is still created either way |
| Description | No | Free text with smart tags |
Use the { } smart tag button (format {field:field_name}) to map any field into these values.
5. How It Works #
When a visitor submits the form:
- Contactum checks the form has Google Calendar enabled and a Calendar is selected.
- Start Date/Time is resolved from your mapping. If this resolves to an empty value or something Google Calendar can’t parse as a date/time, the event is silently not created — no error is logged, so it’s worth testing your Start Date/Time mapping carefully to make sure it always produces a valid date/time from real submissions.
- End Date/Time is used if it resolves to a valid time after the start; otherwise the event runs for the configured Duration (minimum 5 minutes, default 60).
- The event is created on the selected calendar with your mapped Title, Location, Description, and Attendee.
A failed event creation does not block the form submission and is recorded in Contactum’s API Log — but as noted above, an empty or unparsable Start Date/Time produces no log entry at all, so a “missing events” issue is often actually a mapping issue rather than an API failure.
Troubleshooting #
Events aren’t being created and nothing shows in the API Log #
- This almost always means your Start Date/Time mapping resolved to an empty value, or to text Google Calendar couldn’t parse as a date/time. Submit a real test entry and check exactly what your mapped fields produce.
Calendar dropdown is empty #
- Confirm the global connection shows verified.
- Confirm the calendar was actually shared with the service account’s
client_email, with “Make changes to events” permission.
Attendees aren’t receiving invite emails #
- This depends on your Google Workspace configuration and is outside Contactum’s control — the event itself is still created and the attendee is still added as a guest.
Event times look off by a fixed offset #
- If your WordPress site’s timezone is set as a manual UTC offset (rather than a named zone like
America/New_York), Google may interpret the event slightly differently. Setting your site to a named timezone under Settings → General avoids this.
Notes #
- Requires Contactum Pro with the Google Calendar module active — not available in the free plugin.
- Auth method: Google service account (JSON key), authenticated server-to-server — no interactive consent screen needed after setup.
- Credentials storage: stored in
wp_optionsunder the keycontactum_google_calendar. - Credential changes can take up to about an hour to fully apply, since a previously-issued access token stays cached until it naturally expires.
- A failed event creation never blocks the form — the visitor’s experience is unaffected either way.