google calendarics filesimporthow to

How to Add an ICS File to Google Calendar

By AddCal Team

Someone sends you a .ics file. You use Google Calendar. It should be a two-second job, and on a laptop it more or less is. On a phone it is close to impossible, which surprises people every time.

The desktop import flow is below, along with what actually happens to duplicates, the mobile workarounds, and why importing a file is often the wrong choice to begin with.

How to add an ICS to Google Calendar on desktop

The import option lives in settings, not on the calendar grid itself, which is why most people never find it.

  1. Open calendar.google.com in a browser. This does not work in the mobile app, see below.
  2. Click the gear icon in the top right, then Settings.
  3. In the left sidebar, click Import & export.
  4. Under Import, click Select file from your computer and choose your .ics file.
  5. Use the Add to calendar dropdown to pick which of your calendars the events should land in.
  6. Click Import.

Google will tell you how many events were imported. If the number is lower than you expected, that is a signal worth chasing, and the troubleshooting section below covers the usual causes.

Choosing the right calendar matters

Step 5 is the one people skip. The dropdown defaults to your primary calendar, which means a 200-event conference schedule gets mixed permanently into your personal diary with no easy way to separate it out again.

If you are importing a bulk set of events, create a dedicated calendar first. In the left sidebar, click the + next to "Other calendars", choose Create new calendar, give it a name, then import into that. You can then toggle the whole thing on and off with one checkbox, change its colour, or delete it wholesale if the schedule changes. Deleting a calendar takes one click. Deleting 200 individual events does not.

Importing a single event

For a single event there is a faster path. If the file arrived as a Gmail attachment, Gmail renders the event inline with RSVP or "Add to calendar" buttons in the message itself, so you never download anything. Invitations carrying METHOD:REQUEST get Yes / Maybe / No buttons, while METHOD:PUBLISH events get a plain add link.

What happens with duplicates

Google matches on the UID property inside each VEVENT. If you import a file containing an event whose UID already exists in the target calendar, Google updates the existing event instead of creating a second one. If the UID is new, you get a new event.

This is the mechanism that makes re-importing an updated schedule safe, and it is also why some imports produce a pile of duplicates. Plenty of calendar exporters generate a fresh random UID on every export. Import version one, import version two, and you now have every event twice, because as far as Google is concerned they are unrelated events that happen to share a title.

If you are unsure which situation you are in, open the file in the free ICS viewer and compare the UID lines between two exports. Stable UIDs mean re-import is safe. Changing UIDs mean you should import into a fresh calendar and delete the old one.

One important caveat: matching happens per calendar. Importing the same file into two different Google calendars gives you the event twice, in both, regardless of UID. Google will not deduplicate across calendars.

Adding an ICS file on mobile

Here is the blunt version: you cannot import an ICS file from the Google Calendar mobile app. There is no Import option in the Android or iOS app settings, and there has not been for years. If you have a file sitting in your phone's Downloads folder, the app offers you no way to get it in.

Three workarounds, in order of how well they work.

1. Open it from Gmail

If the ICS file is a Gmail attachment, the Gmail app renders the event card inline, exactly as the web client does. Tap the add or RSVP button and it goes straight into your calendar. This is by far the most reliable mobile path, and it is worth emailing yourself the file just to use it.

2. Use a desktop browser, even on the phone

Open Chrome on your phone, go to calendar.google.com, and enable Desktop site in the browser menu. The full settings interface loads, including Import & export. Fiddly on a small screen, but it works.

3. Subscribe instead of importing

If the events come from a URL rather than a file, add the subscription once on desktop and it syncs to every device including mobile. This sidesteps the mobile import gap entirely.

Subscribe to a URL vs a one-off import

Google Calendar offers two ways to bring in external events, and the difference between them is the single most consequential choice in this whole article.

Import fileSubscribe to URL
WhereSettings > Import & exportOther calendars > From URL
UpdatesNever, it is a snapshotAutomatically, roughly every 24 hours
Events areYours, fully editableRead-only, owned by the source
RemovalDelete each event or the calendarUnsubscribe, everything disappears
Best forFixed historical data, migrationsAnything that might change

To subscribe: in the left sidebar click + next to "Other calendars", choose From URL, paste the feed address, and click Add calendar. If the URL starts with webcal://, swap it for https://, because Google's field only accepts HTTP and HTTPS.

The trade-off is refresh speed. Google's polling interval for external feeds is not configurable and in practice runs around 24 hours, sometimes longer. If your fixture list changes at 9am, subscribers might not see it until the next day. Apple and Outlook both refresh more aggressively. There is more detail on per-client behaviour in the guide to webcal and subscription URLs, and a broader overview of the approach on the subscription calendars page.

Despite the lag, subscribing wins for anything ongoing. An imported file cannot be corrected. A subscription can.

Troubleshooting a Google Calendar ICS import

"Failed to import events" or the file is rejected

Google validates the file before importing and rejects anything malformed. Common causes: the file is not really ICS (a .csv renamed, or an HTML error page saved with an .ics extension), a missing BEGIN:VCALENDAR or VERSION:2.0 line, or broken line folding that has split a property across lines without the required leading space.

Open it in a text editor first. The first two lines should be BEGIN:VCALENDAR and VERSION:2.0. If they are not, the file is the problem, not Google. Running it through the ICS viewer will tell you quickly whether it parses at all.

Events import at the wrong time

Almost always a timezone problem. If DTSTART has no Z suffix and no TZID parameter, it is a floating time and Google interprets it in whatever timezone your calendar is set to. If it has a TZID that references a VTIMEZONE block that is missing from the file, behaviour is undefined and usually wrong.

Check your own calendar timezone under Settings > General > Time zone before blaming the file. Then check whether the file contains a VTIMEZONE component matching each TZID it uses. A well-formed file either uses UTC timestamps ending in Z or bundles its timezone definitions. The complete guide to the iCalendar format walks through all four ways a start time can be expressed.

Only the first event imported

Usually a structural problem: one VEVENT is missing its END:VEVENT, so the parser swallows everything after it. It can also mean the file genuinely contains one recurring event rather than many separate ones, in which case check whether Google has expanded the RRULE by clicking into the event.

The file is too large

Google caps ICS imports at 1MB. A dense multi-year export will exceed that easily. Split the file into chunks, each with its own BEGIN:VCALENDAR / END:VCALENDAR wrapper and the same VERSION and PRODID header lines, then import them one at a time. If you want to inspect or filter the contents before splitting, the ICS to CSV converter makes it easy to see exactly what is in there.

Recurring events look wrong

Google expands RRULE on import, but complex rules using BYSETPOS or an unusual week start can expand differently to the source system. Compare a few instances against the original before trusting a bulk import of a complicated recurrence.

A better option for events you share

Everything above assumes you are the recipient. If you are the one sending events out, the mobile import gap should worry you: a meaningful share of your audience physically cannot add your attachment on the device they are reading on.

A hosted add to calendar link solves it. One URL detects the recipient's platform and routes them to the right place, a Google Calendar deep link on Google, the native handler on iOS, an Outlook web link on Microsoft. Nobody downloads anything. And because the link resolves live, changing the time later updates what new people receive. That is the case laid out on the add to calendar links page.

If you need to move in the other direction and build a file rather than consume one, the free ICS generator produces a valid, spec-compliant file in a few fields, and the add to calendar link generator gives you the multi-platform link version of the same event. Both are free and neither needs an account.

Last updated on July 22, 2026

Continue reading

Browse all articles