[ Back to all articles ](https://addcal.co/blog.md)

google calendar ics files import how to

How to Add an ICS File to Google Calendar
=========================================

By Tom •July 22, 2026

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. To add just one or two events from a file, our [ICS to Google Calendar uploader](https://addcal.co/tools/import-ics-to-google-calendar.md) shows you what is inside and adds them in one click, no import needed. On an iPhone with Apple Calendar instead? See [how to add an ICS file to iPhone](https://addcal.co/blog/how-to-add-an-ics-file-to-iphone-apple-calendar.md).

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](https://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](https://addcal.co/tools/ics-viewer.md) 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 file | Subscribe to URL |
| --- | --- | --- |
| Where | Settings > Import & export | Other calendars > From URL |
| Updates | Never, it is a snapshot | Automatically, roughly every 24 hours |
| Events are | Yours, fully editable | Read-only, owned by the source |
| Removal | Delete each event or the calendar | Unsubscribe, everything disappears |
| Best for | Fixed historical data, migrations | Anything 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](https://addcal.co/blog/what-is-webcal-subscription-calendar-urls.md), and a broader overview of the approach on the [subscription calendars](https://addcal.co/solutions/subscription-calendars.md) 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](https://addcal.co/tools/ics-viewer.md) 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](https://addcal.co/blog/what-is-an-icalendar-ics-file.md) 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](https://addcal.co/tools/ics-to-csv.md) 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](https://addcal.co/solutions/add-to-calendar-links.md) page.

If you need to move in the other direction and build a file rather than consume one, the [free ICS generator](https://addcal.co/tools/ics-generator.md) produces a valid, spec-compliant file in a few fields, and the [add to calendar link generator](https://addcal.co/tools/add-to-calendar-link-generator.md) gives you the multi-platform link version of the same event. Both are free and neither needs an account.

 Last updated on August 14, 2026

![Tom](https://cdn.addcal.co/static/authors/atymic.jpg)### Tom

Founder

Built Calndr.link in 2020 because an event link broke in Outlook and it annoyed him enough to fix it properly. Six years later he can tell you exactly how each calendar app mangles a timezone, which is a worse party trick than it sounds. Otherwise found hanging off a rock somewhere in Australia.

[GitHub](https://github.com/atymic)[X](https://x.com/atymic)

###  Related articles 

[How to Add an ICS File to Outlook Outlook is four different products, and each handles ICS files differently. Classic Outlook alone offers three import options with three different outcomes. Here is what each one does and how to fix the usual timezone and recurrence problems.](https://addcal.co/blog/how-to-add-an-ics-file-to-outlook.md)[How to Add an ICS File to iPhone and Apple Calendar Opening an ICS file on an iPhone is easy. Working out which calendar it landed in, or why it shows on the wrong day, is the hard part. A full guide to iOS, macOS, iCloud sync and subscribed calendars.](https://addcal.co/blog/how-to-add-an-ics-file-to-iphone-apple-calendar.md)[How to Accept a Google Calendar Invite Every way to RSVP to a Google Calendar invite, from Gmail, the web and mobile, plus adding a note, proposing a new time, changing your answer, and finding invites that never arrived.](https://addcal.co/blog/how-to-accept-a-google-calendar-invite.md)

[ Browse all articles ](https://addcal.co/blog.md)
