How to Copy Events From One Google Calendar to Another in 2026
Need the same events in two Google Calendars? Copy one event in a few clicks, move a whole calendar with .ics, or copy new events automatically for free.
To copy one event to another Google Calendar, open it on a computer, click Options at the top right, choose the other calendar and click Save. To copy a whole calendar, export it as an .ics file and import it. To copy new events automatically, use a Zapier Zap or a free Google Apps Script on a timer.
Two calendars that don't know about each other are how a booking page offers a slot you already gave away. When I started keeping a separate calendar for a side project, my work calendar looked wide open on afternoons that were already spoken for. This guide covers each way to get events from one Google Calendar into another, which ones keep up with changes, and the gaps that catch people out.
Which way should you copy Google Calendar events?
Pick by how many events you need and whether new ones should keep arriving. A single event takes the built-in Options menu, a whole calendar takes export and import, and an ongoing copy takes Zapier or Apps Script. If you only need to see the other calendar, sharing it is simpler than copying anything.
Method | What it copies | Keeps copying? | Cost |
|---|---|---|---|
Options menu | One event at a time | No | Free |
Export and import (.ics) | Every event in a calendar, once | No | Free |
Zapier Zap | Each new event from now on | Yes, for new events | Free plan: 100 tasks monthly |
Google Apps Script | Upcoming events, on a schedule you set | Yes, for new events | Free |
Share the calendar | Nothing; you see the original | Always current | Free |
None of these keeps a copy perfectly in step. A copy is a separate event, so when the original moves or gets canceled, the copy stays where it was unless you've built something to chase it. That's the main reason to ask the next question first.
Do you need a copy, or just to see the other calendar?
If you only want both calendars in one view, share the source calendar with your other account instead of copying it. Google's sharing guide says the person you share with gets an email and clicks a link to add your calendar. Google's import page points the same way: to keep two accounts in sync, share rather than import.
- In a desktop browser, find the source calendar under My calendars on the left.
- Click its three-dot menu, then Settings and sharing.
- Click Shared with, then Add people and groups.
- Enter the other account's email address.
- Pick a permission, such as See event details or See only free/busy (hide details), and click Send.
Sharing has one limit that matters: the events still belong to the original calendar. A booking page or a scheduling tool that only checks your primary calendar won't treat them as busy. That's the situation where a real copy earns its keep. If your calendar comes from an employer or school, the administrator decides whether you can share it at all, Google notes. To check who sees which details, read how to make a Google Calendar private.
How to copy one event to another Google Calendar
Google Calendar has a built-in copy for single events, and Google's steps are for the web version on a computer. Google lists the steps in its guide to copying and transferring events:
- Open Google Calendar at calendar.google.com.
- Click the event you want to copy.
- In the event's top-right corner, click Options (the three dots).
- Choose the calendar to copy the event to.
- Click Save.
The original stays where it is and a second, independent event appears in the other calendar. I use this for the odd event that belongs in two places, like a dentist appointment that should also block my work calendar. For more than a handful, it gets tedious fast.
Move an event instead of copying it
If the event is simply in the wrong calendar, move it rather than leaving two versions around. Click the event, click Edit event, open the Calendar drop-down, choose the right one and click Save. Phones can do this part too. Open the event on your Android phone or iPhone, tap edit, tap the calendar name under the title, pick the new one and tap Save. On a phone you have to be the organizer, and moving a repeating event moves all its future dates, not just one. Google's page also covers Options, then Change owner, for handing an event you own to someone else's calendar.
How to copy a whole Google Calendar to another calendar or account
To copy every event at once, export the source calendar as an .ics file and import it into the destination. The result is a one-time snapshot: events created or changed afterwards don't follow. It's the right tool for moving to a new account or merging an old calendar you're retiring.
Step 1: Export the calendar
Per Google's export guide, on a computer:
- In Google Calendar, find the calendar under My calendars on the left.
- Hover over its name, click the three dots, then Settings and sharing.
- Under Calendar settings, click Export calendar. An .ics file downloads.
To export everything at once, go to the gear icon, Settings, Import & export, then Export. That gives you a .zip with one .ics file per calendar. You need the Make changes and manage sharing permission to export a calendar, and an organization's admin can block exporting. The Google Calendar phone app can't export.
Step 2: Import it into the other calendar
Google's import guide lists these steps:
- Sign in to the destination account at calendar.google.com.
- Open Settings from the gear icon.
- Click Import & export in the settings sidebar.
- Choose the .ics file from your computer. If you have a .zip, extract it and import each .ics file on its own.
- Choose the destination calendar. Google picks your primary calendar unless you change it.
- Click Import.
What doesn't come across
Google says guests and conference data aren't imported, so the copies have no attendee list and no Google Meet link. Imported events also don't stay in sync between two Google Accounts. If people need to keep joining from the invite, keep the original events and share the calendar instead.
My habit before any big import is to create a new, empty calendar and import into that, rather than straight into my primary one. If the result looks wrong, deleting one calendar is quicker than hunting down a few hundred stray events.
How to copy new events automatically with Zapier
Zapier can create a matching event in a second Google Calendar every time a new one appears in the first. Its ready-made Google Calendar to Google Calendar template pairs one trigger with one action. Set it up like this:
- Trigger: Google Calendar, New Event. Sign in with Google and pick the source calendar.
- Action: Google Calendar, Create Detailed Event. Pick the destination calendar.
- Map the fields: title, start and end time, description and location, plus all-day status if you use all-day events.
- Test with a recent event, check the copy landed where you expected, and turn the Zap on.
The template only fires when an event is created. Zapier's Google Calendar app page also lists New or Updated Event and Event Cancelled triggers and Update Event and Delete Event actions, but making a moved meeting move its copy means finding the right copy each time, which turns a two-step Zap into a project. For most people, copying new events and fixing the rare reschedule by hand is the honest trade.
Copy only what the other calendar needs
When I copy client meetings into my work calendar, I type a fixed title like "Busy" into the title field instead of mapping the real one. The time gets blocked, and nobody who can see my work calendar reads the client's name. The same idea works for leaving out the description and location.
What it costs
Each copied event uses one Zapier task, since triggers don't use tasks. On Zapier's Free plan you get two-step Zaps and 100 tasks every month, enough for a typical personal calendar. Past that, Professional costs $29.99 paid monthly, or the equivalent of $19.99 per month paid yearly, for 750 tasks. For how Zapier compares with Make and n8n on the same job, see our Zapier alternatives page.
Don't build a Zap in each direction
A Zap that copies Calendar A to B plus another that copies B to A will see each copy as a new event and copy it back, over and over. If you need both directions, each Zap needs a Filter step that skips anything carrying a marker you add to every copy's description. That makes it a three-step Zap, and the Free plan only allows two steps, so copying both ways needs a paid Zapier plan.
How to copy Google Calendar events for free with Apps Script
A short script in Google Apps Script can copy events between calendars on a timer at no cost, with no task limit to watch. The script below copies the next 30 days of events from a source calendar to a target calendar and tags each copy so it never copies the same one twice. The account that runs it needs access to both calendars.
Set it up
- Find each calendar's ID: in Google Calendar, open Settings, select the calendar under Settings for my calendars, and click Integrate calendar. Copy the Calendar ID. Google's integration page shows where that section is.
- If the source calendar belongs to another account, share it with the account that will run the script. Google's CalendarEvent reference says reading an event's description needs edit access to that calendar, so choose an edit permission such as Make changes and see event details if you want descriptions copied.
- Open script.google.com, click New project, delete the sample code and paste the script below.
- Replace the two placeholder IDs with your source and target calendar IDs, then click Save.
- Click Run once and accept the permission request. Check the target calendar for the copies.
- In the left panel, select Triggers, then Add Trigger at the bottom right. Choose the copyEvents function, make it a time-driven trigger that runs every hour, and select Save.
// Copies upcoming events from one Google Calendar to another.
// Run it on a time-driven trigger. It skips events it has already copied.
const SOURCE_ID = 'paste-the-source-calendar-id-here';
const TARGET_ID = 'paste-the-target-calendar-id-here';
const DAYS_AHEAD = 30;
function copyEvents() {
const source = CalendarApp.getCalendarById(SOURCE_ID);
const target = CalendarApp.getCalendarById(TARGET_ID);
const start = new Date();
const end = new Date(start.getTime() + DAYS_AHEAD * 24 * 60 * 60 * 1000);
// Remember what is already in the target, so nothing is copied twice.
const done = new Set();
target.getEvents(start, end).forEach(function (e) {
const tag = e.getTag('copiedFrom');
if (tag) done.add(tag);
});
source.getEvents(start, end).forEach(function (e) {
// Each repeat of a recurring event shares one ID, so add the start time.
const key = e.getId() + '|' + e.getStartTime().getTime();
if (done.has(key)) return;
const options = { description: e.getDescription(), location: e.getLocation() };
const copy = e.isAllDayEvent()
? target.createAllDayEvent(e.getTitle(), e.getAllDayStartDate(), e.getAllDayEndDate(), options)
: target.createEvent(e.getTitle(), e.getStartTime(), e.getEndTime(), options);
copy.setTag('copiedFrom', key);
});
}The methods it uses, such as createEvent and getEvents, are documented in Google's Calendar class reference. Recurring meetings arrive as separate one-off events, one per date. Every date of a repeating event shares one event ID, so the script checks the start time too; otherwise it would treat later dates as already copied.
Limits to know
- Quotas: Google's Apps Script quotas allow 5,000 calendar events created a day on a personal account and 10,000 on Google Workspace, with each run capped at 6 minutes. Triggers can run for 90 minutes a day in total on a personal account.
- Timing: a time-driven trigger can fire every minute at most, but Google's trigger guide says start times can be randomized within the hour, so an hourly run won't land on the hour.
- Changes: like the Zap, the script copies; it doesn't sync. If a meeting moves, the script adds a copy at the new time and the old copy stays until you delete it.
There's also a calendar trigger in Apps Script that fires when events are created, edited or deleted, which sounds ideal. Google's guide doesn't say it tells the script which event changed, so the script would still have to rescan the calendar. An hourly timer does the same work with less to go wrong.
Why aren't my copied events updating?
Copied events don't update because every method above makes a new, separate event. Google says plainly that imported events don't stay in sync between accounts, and the Zapier template and the script only act on events they haven't seen. Work through these when the two calendars drift apart:
- A meeting moved and the copy didn't. Delete the stale copy and copy the event again. Moving copies automatically takes extra Zap steps to find and update the matching copy, as the Zapier section explains.
- Events appear twice. You probably imported the same .ics file twice, or a Zap and a script are both copying. Turn one off, then clear the duplicates.
- Copies have no guests or Meet link. That's expected with import. Join from the original invite.
- The script copied titles but no descriptions. The running account only has view access to the source calendar. Raise it to Make changes and see event details.
- You can't find Export or Share. On an account your employer or school runs, IT can switch both off.
- You only need to see the other calendar. Stop copying and share it instead. It's always current.
If you're also pulling in a calendar from outside Google, our guide to bringing Outlook meetings into Google covers the subscription route, and automating Google Calendar covers alerts, daily agendas and the rest.
A brief before the meetings you copied in
Merlin, our Mac assistant, connects to Google Calendar and can run a routine that sends you a short brief before each meeting. Once side-project events sit on your calendar next to your regular ones, they're part of what Merlin preps you for.
Get MerlinFrequently asked questions
Can you copy an event from one Google Calendar to another?
Yes. In Google Calendar in a desktop browser, click the event, then Options at the top right, choose the other calendar and click Save. The copy is a separate event, so later changes to the original don't carry over.
How do I copy all events from one Google Calendar to another?
Export the source calendar from Settings and sharing, Export calendar, then import the .ics file in the other calendar under Settings, Import & export. It's a one-time copy without guests or Meet links.
How do I automatically copy events from one Google Calendar to another?
Use a Zapier Zap with the New Event trigger and the Create Detailed Event action, or a Google Apps Script on an hourly trigger. Both copy new events but don't update copies when the original changes.
Will copied events update when the original changes?
No. A copy is a separate event, so changes to the original don't reach it. Share the calendar instead if you need to see changes as they happen.
Can I copy Google Calendar events on my iPhone or Android?
Google's phone-app instructions cover moving an event to another calendar, not copying it, and Google says exporting isn't available in the app. Make the copy from a desktop browser instead, and it shows up on your phone afterwards.
What's the difference between copying and moving an event?
Copying leaves the original and adds a second event. Moving, through Edit event and the Calendar drop-down, takes the event out of one calendar and puts it in another.