Save the event once. The invitation writes itself.
Pick a calendar and a direction once, and every event you publish keeps an entry in Google Calendar, and keeps it right. Move it in Google and the change comes back. Type an address there and it becomes a venue here.
Thursday Night Jazz
the event nameCalendar: Gigs
- When
- Thu, Sep 17 · 8:00 to 10:00 PM start time + duration
- Where
- The Blue Note, 131 W 3rd St the venue on the event
- Details
- Doors at 7:30. Trio plus guests. description, or your template
- Zone
- America/New_York the schedule's timezone
- Shown
- Public private for an unlisted event
One entry per event. The blue notes name where each line came from: you filled those in once, over here. Edit it in either place and the other side catches up.
The fields
What the invitation carries.
Seven fields cross, and five of them cross back. This is the whole list, so there is nothing to discover later.
| On the entry | Written from | Comes back |
|---|---|---|
| Title | The event name. | Yes |
| Description | The event description, or the calendar template you write for this schedule. | Yes |
| Start | The start date and time, stamped in the schedule's timezone. | Yes |
| End | The start plus the event's duration. There is no separate end field to keep in step. | Yes |
| Location | The address of the venue on the event. | Yes |
| Time zone | The schedule's timezone, so an entry does not drift for anybody reading it elsewhere. | Set here |
| Visibility | Public, or private when the event is unlisted. | Stays as set here |
An address that arrives in the Location field is matched against the venues you already have, and becomes a new venue only when none of them fit.
Guest lists and attendees are not on the list, in either direction. Who is coming lives in Event Schedule, on registrations and tickets, and is never written into somebody's calendar entry.
The reply
You say yes to Google once.
Connecting is Google's own consent screen, in your account settings. No password of yours is stored here, and the connection is yours to end.
What Google is asked for
FreePermission to read your calendars and to manage calendar events, plus your name and email so the connection has an owner. That is the whole request, and Google shows it to you before you agree.
It stays connected
FreeThe connection is offline, so the access token is refreshed in the background before it lapses. You are not asked to sign in again every few hours, and sync does not quietly stop while you sleep.
One account, every schedule
FreeConnect the Google account once. After that each schedule chooses its own calendar and its own direction, and disconnecting is one link in the same settings page.
Running your own install? Point it at your own Google client and the same flow is yours. Selfhost setup
The direction
Set per schedule, not per account.
A band schedule and a venue diary want different things from the same Google account. So the direction, and the calendar it points at, both live on the schedule.
- The calendar list is read from your Google account, so you pick a real calendar by name rather than pasting an id.
- Leave it unset and the schedule uses your primary calendar, which is what most people want on day one.
- Change your mind and there is a re-send button on the same tab that writes every published event out again.
Sync direction
Events you publish here are written to the calendar you picked. Nothing in that calendar touches your schedule.
Entries in that calendar become events on your schedule. Useful when the calendar is already where you book.
The one most people pick. Save it in either place and the other one catches up.
Where a newly connected schedule sits until you choose one of the other three. Connected, but nothing moves.
Four settings, one radio group, saved with the rest of the schedule. A new schedule starts on no sync, so nothing leaves until you say which way. Turning inbound sync on is what asks Google to start notifying us.
The channel
Somebody drags it to Friday. Now what?
Google does not wait to be asked. When inbound sync is on, it holds a notification channel for that calendar and calls us the moment something changes.
The notification
FreeGoogle posts to Event Schedule when the calendar changes, and only the changes since last time are read. Seconds, not a poll on the hour.
The backstop
FreeA channel can lapse and a single notification can go missing, so an incremental sweep runs every fifteen minutes as well, and the channel is renewed daily.
If it is deleted there
FreeYour call, per schedule: keep the event here, mark it cancelled so guests stop seeing it, or delete it here too. It defaults to keeping it, which is the choice you can undo.
Being straight about two things
A recurring event is written out as a single entry at the series start, not as a Google repeat rule, so a whole run does not appear date by date in Google. And an inbound entry arrives as a plain event, without your recurrence or your ticket types. If what you want is every date of a run on somebody's calendar, that is the iCal feed, not this.
The distribution list
The same entry, on everybody's calendar.
This one is Google only, and it costs nothing. Anybody who follows your schedule, and any team member on it, can point it at a Google Calendar of their own, so the entry is written there as well as wherever the schedule itself syncs.
Thursday Night Jazz
Thu, Sep 17 · 8:00 PM
Ada · Team member
ada@ · Work
Thursday Night Jazz
Thu, Sep 17 · 8:00 PM
Marco · Follower
marco@ · Personal
Thursday Night Jazz
Thu, Sep 17 · 8:00 PM
Priya · Follower
priya@ · Primary
Each person picks their own
FreeThey connect their own Google account and choose which of their calendars receives your schedule, from their own following list. Nobody sees anybody else's calendar, and turning it back off takes the entries that were written off their calendar again.
It works even when the schedule does not sync
FreeThese copies are written on each person's own account. If the schedule itself is set to no sync, the people who asked for the entry still get it, and unpublishing the event removes it from their calendars as well.
Following is free and open to anybody with an account; adding team members beyond yourself is an Enterprise feature, capped at five. Outlook and CalDAV connect at the schedule level only, so this part is a Google thing.
Your audience
They can take one too.
Add to Google Calendar
FreePublic event pages carry an Add to Calendar menu, except where the page is already leading with a Register or Buy tickets button. On a ticketed page it sits with the venue details instead. The Google item opens a new Google Calendar entry with the title, the date, the address and the details already filled in.
On a recurring event the link is built for the date they are looking at, so a Thursday in October is a Thursday in October and not the first night of the run.
No account, and no strings
FreeNobody signs up to take a copy, and nothing is tracked back to them. Being straight about it: a copy is a copy. If you move the start time afterwards, their entry does not hear about it.
Anybody who wants to stay current wants the schedule's iCal feed instead, which their calendar re-reads on its own.
How the feed worksEverything else
The small print, in full.
Write the entry the way you read it
FreeBy default the Google entry carries the event's own description. Give the schedule a calendar template instead and every entry is written to that shape, from the event's real values.
{event_name} · {time} to {end_time} · {venue}, {city} · {price} · {url}
A line whose values are all empty is dropped rather than left as stray punctuation, so a gig with no venue does not arrive with a dangling separator.
Drafts stay home
FreeNothing leaves while an event is a draft. Publish it and the entry appears; unpublish it and the entry is taken away again.
Unlisted goes out private
FreeAn unlisted event is written to Google marked private, so it is not offered up to anybody browsing a shared calendar.
Put them all on the right calendar
FreeThe schedule owner has a re-send button that walks every published event and puts it on the calendar the schedule points at now. It is the fix for a calendar you switched, or a batch you wrote before you connected.
Events already sitting on that calendar are left alone and the rest are moved across, so pressing it twice costs nothing. It only pushes, never imports, and it needs sync to Google switched on first. An old copy it can no longer reach stays where it is, and it says so before it runs.
Bookings are protected
ProAn appointment somebody booked with you is owned here, not by the calendar, so an inbound edit never rewrites the guest's own notes or drags the booking back to its old time.
Selfhosted, on your own client
FreeCreate an OAuth client in the Google Cloud Console, add your own callback as an authorized redirect URI, and put the client id, secret and redirect in your environment file. Nothing is proxied through us. Push notifications need your install reachable over HTTPS; without that, the fifteen-minute sweep still does the job.
Read the selfhost guideFree forever. Upgrade when you're ready.
Zero platform fees on ticket sales. You only pay Stripe's processing fee.
See all plansRelated features
Frequently asked questions
Common questions about Google Calendar sync.
Is two-way sync available on the free plan?
Yes. Google Calendar sync is available on all plans, including the free plan. You can push events to Google, pull events from Google, or sync both ways at no cost.
How quickly do changes sync?
Outbound, the entry is written when you save the event. Inbound, Google sends a push notification to Event Schedule and the change is read within seconds. An incremental sweep every fifteen minutes is the backstop, so a notification that never arrives costs you a quarter of an hour rather than the change itself.
Can I sync multiple schedules to different Google Calendars?
Yes. Each schedule picks its own Google Calendar and its own direction, from the one Google account you connected. That lets you keep a band schedule, a venue diary and your own week in separate calendars.
What happens to a recurring event?
A recurring event is written to Google Calendar as a single entry at the series start, not as a Google repeat rule. If you want every date of a run to land on a calendar, the schedule's iCal feed is the better road: it publishes one entry per date for the next ninety days, and a subscribed calendar re-reads it on its own.
If I delete an entry in Google Calendar, what happens here?
Whatever you told it to do. Each schedule has a policy for events deleted in the connected calendar: keep the event here, mark it cancelled so guests stop seeing it, or delete it here as well. It defaults to keeping the event, because that is the choice you can undo.
Does Google Calendar sync work with selfhosted Event Schedule?
Yes. A selfhosted install uses its own Google OAuth credentials: create a client in the Google Cloud Console, add your callback URL as an authorized redirect URI, and set the client id, secret and redirect in your environment file. Push notifications also need your install to be reachable over HTTPS. Full setup instructions are in the selfhosted documentation.
Google Calendar
Your first event
Written the moment you save it.
Free on every plan
Connect Google. Send the first one.
Pick a name, connect the calendar you already keep open, and the next event you save is on it.
No credit card required