How to Sync Google Calendar with Outlook (the clean way)
The built-in import options leave you with stale, duplicated events. Here is how I keep Google Calendar and Outlook genuinely in sync.

Jakub Beneš
Founder, CalendarPipe · June 14, 2026 · 10 min read
To sync Google Calendar with Outlook so the copy stays correct, use a scheduled sync rule instead of an ICS subscription or a one-time import. A rule with Google as the source and Outlook as the target copies events on a fixed schedule — every 15 minutes on CalendarPipe's free plan, every 5 minutes on Pro — and on each run it applies your edits and removes the copies of events you cancelled, so the Outlook side never drifts. For changes flowing both ways, you add a second rule with Outlook as the source and Google as the target; two explicit one-way rules give you real two-way sync without the duplicate loops that "mirror everything" tools produce. One rule with two calendars connected fits the free plan, and two rules need Pro at $4/month.
The Tuesday meeting that wasn't
A few months ago I moved a client call from Tuesday to Thursday in Google Calendar. On Thursday morning, a colleague who books around my Outlook calendar asked why I'd no-showed the Tuesday slot — which, on his screen, I was apparently still attending. My Google calendar was right. My Outlook copy was a ghost of a decision I'd already changed. That tiny gap is the whole reason I care about how to sync Google Calendar with Outlook properly, instead of with the duct-tape methods most guides hand you.
If you've ever tried to connect Google Calendar to Outlook and watched it drift out of step, this one's for you. I'll cover what the built-in options actually do, why they let you down, what real Google and Outlook calendar sync should look like, and how I keep mine genuinely in sync — including true two-way, done without the usual mess.
Why the built-in options disappoint
There are two "official" ways to get Google events into Outlook, and both ship with a catch nobody mentions upfront.
Subscribing to a Google ICS link. Every Google calendar has a secret address in iCal format that Google itself describes as a way to view your calendar in another app. Paste it into Outlook as a subscribed calendar and your Google events appear — so far so good. The catch is what "subscribed" really means: it's read-only, and Outlook refreshes it on its own schedule. Reschedule a meeting in Google and Outlook keeps showing the stale time until it decides to poll again. Edits never flow back, because the subscription is one-directional by nature. It's not sync. It's a slow, occasional photocopy.
Exporting and importing a file. You export your Google calendar to an .ics file — the iCalendar format every calendar app speaks — and import it into Outlook. This is even more brittle: it's a frozen snapshot of the moment you exported. Nothing ever updates. Cancel an event in Google and the imported copy lingers in Outlook forever. Add new events and they're simply missing. Run the import again to "fix" it and you get duplicates, because Outlook has no idea the new file describes events it already has.
You don't have to take my word for the difference. Microsoft's own guidance on importing versus subscribing says an imported .ics gives you "a snapshot of the events in the calendar at the time of import" that doesn't refresh, and that a subscribed calendar does refresh but "can sometimes take more than 24 hours." A day late is a long time to be wrong about where you're supposed to be.
Here's the whole menu next to each other:
| Method | Direction | Stays current | Cancellations removed | Duplicates when re-run |
|---|---|---|---|---|
| Google ICS link subscribed in Outlook | Google → Outlook | On Outlook's schedule, slow | Not reliably | No |
Exported .ics imported into Outlook | One-time copy | No | No | Yes |
| Retyping events into Outlook yourself | Whatever you type | Only if you remember | Only if you remember | Yes |
| Scheduled sync rule | One per direction | Yes, 15 min free / 5 min Pro | Yes, on every run | No |
Neither built-in option is real sync. One is read-only and slow; the other is a one-time copy that starts rotting the second it lands. A rough at-a-glance view? The ICS subscription is fine. But if you actually depend on your calendar being right, you'll feel the gap fast — usually at the worst possible moment, like I did.
What "in sync" should actually mean
Before fixing anything, it's worth being honest about what we're even after. When I say two calendars are in sync, I mean four specific things:
- Fresh. A new event appears within minutes, not hours and not never.
- Correct. Move or rename something and the copy reflects it.
- Cancellations honored. Delete an event and its copy disappears too — no zombies.
- No duplicates. One real event, one copy. Re-running the sync doesn't pile up clones.
That's a low bar, honestly. The built-in tools just don't clear it. This is the whole reason I ended up building CalendarPipe — I wanted a calendar copy I could actually trust.
How CalendarPipe syncs Google Calendar with Outlook
CalendarPipe works with sync rules. A sync rule connects a source calendar to a target calendar and runs a small TypeScript function — a gate — on every event to decide whether it passes through and how it should look on the other side. It runs automatically on a schedule, picks up changes, and removes copies when the original is cancelled. That covers all four points above.
The setup is short:
- Connect both accounts. Add your Google account and your Microsoft Outlook account. This works with personal
outlook.comaccounts and work/school Microsoft 365 accounts alike. (Apple/CalDAV and read-only ICS feeds are supported too, if you live in that world.) - Create a sync rule. Pick Google as the source and Outlook as the target.
- Decide how events flow. Start from a ready-made template — "copy everything" is the obvious one if you just want all your Google events mirrored into Outlook. Or attach a gate to filter and transform events: use the visual builder (no code), describe what you want in plain English and let the AI write it, or drop into the TypeScript editor if that's your thing.
- Activate it. From there it runs on its own.
One thing I want to be straight about: a sync rule is one-way by design. Source → target, full stop. The rule above pushes Google into Outlook and never touches Google. That's deliberate — one-way is predictable, and predictable is exactly what you want from something running unattended.
A single one-way rule like this fits the free plan (two calendar connections, one sync rule, a 15-minute interval, direct delivery). If you only need events flowing in one direction — and plenty of people genuinely do — I wrote a focused walkthrough of a true one-way Google → Outlook sync that goes deep on that narrower case. The rest of this guide is about the bigger picture, and about doing real two-way the right way.
A rule I actually use
"Copy everything" is fine, but it's rarely what I want. My Google calendar has dentist appointments, kid logistics, and the occasional 11pm reminder to take the bins out. None of that belongs on my work Outlook calendar, and I really don't want a colleague opening my availability and reading "bins."
So my Google → Outlook rule does two things in the gate:
- It only lets through events whose title starts with a
[work]tag I add myself. Everything else is blocked and never reaches Outlook. - For the events that do pass, it clears the title to a plain "Busy", strips the location and description, and sets the event to private.
The result: my Outlook calendar shows accurate busy blocks at exactly the right times, so nobody books over me — but the actual content stays on Google where it belongs. The time block is always preserved (a gate can transform what an event says — title, description, location, visibility, busy/free, buffers, out-of-office — but never its start, end, or duration), so the busy blocks line up perfectly.
You can describe that whole thing to the AI generator in a sentence — "only sync events tagged [work], show them as a private busy block" — and it writes the gate for you. The AI generator is a Pro feature; if you'd rather stay free, click the same logic together in the visual builder instead. Either way it took me about two minutes.
Setting up true two-way Google and Outlook calendar sync
Here's the part most "sync everything both ways" tools get dangerously wrong. CalendarPipe does true two-way by combining two one-way rules pointed in opposite directions:
- Rule 1: Google → Outlook, with its own gate.
- Rule 2: Outlook → Google, with its own gate.
That's it. Edit a meeting in Google and Rule 1 carries it to Outlook; edit one in Outlook and Rule 2 carries it back to Google. Two clear directions, no guessing about what writes where.
Why bother being this explicit instead of one magic "mirror everything" toggle? Because mirror-everything is how you get feedback loops. A naive bidirectional tool copies an event from Google to Outlook, then sees the new Outlook copy as a change and copies it back to Google… and you end up with duplicates breeding duplicates. Splitting it into two named one-way rules kills that at the root: each rule knows precisely which calendar is its source of truth and which target it's allowed to write to. No ambiguity for the system to trip over.
Being explicit also lets you treat the two directions differently, which is usually what you actually want. For example:
- Google → Outlook: only events tagged
[work], retitled to "Busy", private — like my rule above. - Outlook → Google: copy everything across so your personal calendar shows your full work load in real detail.
Same model in both directions, two independent gates, total control over what crosses each way. For the full menu of what a gate can do — clearing titles, busy/free, privacy, pre/post buffers, out-of-office — the docs have the complete list.
The honest pricing note: two rules means Pro, because the free plan includes one. Pro is $4/month ($3.33/month billed annually, 14-day trial), and it also gets you the faster 5-minute interval, AI rule generation, invitation delivery, hosted calendars, and the API. So a single one-way sync is genuinely free; real two-way is four bucks a month. I'd rather say that plainly than bury it.
The short version
The built-in Google-to-Outlook options aren't really sync. The ICS subscription is read-only and refreshes slowly; the file import is a snapshot that rots into duplicates. Both are fine for a fuzzy glance and a liability for anything you depend on.
Real sync means fresh, correct, cancellations honored, no clones — something that runs on a schedule and respects what you change. In CalendarPipe that's a one-way sync rule (free) for a single direction, or two one-way rules (Pro) for true two-way without the feedback-loop chaos. Either way, you decide exactly what crosses over and what stays private — which, to me, is the entire point.
If you want to stop nursing a stale calendar copy, give CalendarPipe a try — this is the exact problem I built it to solve.
— Jakub
Frequently asked questions
How do I sync Google Calendar with Outlook?
Create a scheduled sync rule with Google Calendar as the source and Outlook as the target, instead of subscribing to an ICS link or importing a file. The rule copies events on a fixed schedule — every 15 minutes on the CalendarPipe free plan, every 5 minutes on Pro — and on each run it applies edits you made and removes the copies of events you cancelled, so the Outlook side stays accurate rather than drifting.
Can I sync Google Calendar and Outlook for free?
Yes, for one direction. Outlook can subscribe to a Google Calendar ICS link at no cost, but that subscription is read-only and refreshes on a schedule Outlook controls. A single one-way sync rule also fits the CalendarPipe free plan, which includes two calendar connections and one sync rule. Syncing in both directions needs two rules, which is a Pro feature at $4/month or $40/year.
Why do my synced events show up duplicated or out of date?
Because the built-in options are not really sync. An imported .ics file is a snapshot of the moment you exported it and never updates, so re-importing to catch up creates a second copy of every event. A subscribed ICS link does refresh, but on a schedule the receiving app controls, and cancellations can linger. A scheduled sync rule avoids both problems because it tracks each copy it created and reconciles the target on every run.
How do I set up two-way sync between Google Calendar and Outlook?
Create two separate one-way rules: one with Google as the source and Outlook as the target, and a second with Outlook as the source and Google as the target. Keeping the two directions explicit is what prevents the feedback loops that produce duplicate events, because each rule knows exactly which calendar it reads from and which one it writes to. Two rules require CalendarPipe Pro, since the free plan includes one.
How long does it take for a Google Calendar event to appear in Outlook?
With a sync rule, a new Google event appears in Outlook at the next scheduled run — within 15 minutes on the CalendarPipe free plan and within 5 minutes on Pro. With a subscribed ICS link instead, the delay is set by the receiving calendar app; Microsoft notes that a subscribed calendar can sometimes take more than 24 hours to reflect an update.
Keep reading
Set this up in CalendarPipe
Connect Google, Outlook, or Apple Calendar and build a pipe that filters and transforms your events exactly how you want — in a couple of minutes.
Get started free