---
title: "Merge ICS"
description: "Drop several .ics calendar exports and download one combined .ics for a single import or archive. Every event is kept by default, each time zone is written once, and an optional dedupe keeps the newest copy of an event that appears in more than one file. Nothing is uploaded."
url: https://findutils.com/convert/merge-ics/
category: convert
---

# Merge ICS

Drop several .ics calendar exports and download one combined .ics for a single import or archive. Every event is kept by default, each time zone is written once, and an optional dedupe keeps the newest copy of an event that appears in more than one file. Nothing is uploaded.

**Use this tool:** [Merge ICS](https://findutils.com/convert/merge-ics/)

## Programmatic access

- REST id `merge-ics`: POST https://api.findutils.com/api/tools/merge-ics/execute (reference: https://findutils.com/api/merge-ics/)
- MCP tool `merge_ics` on https://mcp.findutils.com (reference: https://findutils.com/mcp/merge-ics/)

## Why Merge ICS Files in the Browser?

Calendar apps export one .ics file per calendar and import one file at a time. Google Calendar's export is a zip with a separate .ics for every calendar you own; Apple Calendar exports the selected calendar; Outlook saves one calendar per file. To archive all of them in one place, or to move them into a new account with one import, you need one file, and the manual route is opening each export in a text editor and copying every VEVENT block into one VCALENDAR without breaking the folded lines. This page does that copy for you, in your browser, in the order you drop the files. Nothing is uploaded, because a calendar export is a record of who you met and when.

## Frequently Asked Questions

### How do I export the calendars I want to merge?

Google Calendar: open Settings, choose Import & export, and click Export; the zip holds one .ics per calendar. Apple Calendar: select a calendar and choose File > Export > Export, once per calendar. Outlook desktop: File > Save Calendar, with the date range and detail level under More Options. Drop every .ics on this page; the zip itself is not read, so unzip it first.

### Does merging change my events?

No. Every event, to-do and journal entry is written with every property it arrived with, in the order it arrived: RRULE, EXDATE, VALARM, ATTENDEE, DESCRIPTION, LOCATION, and the X- properties a calendar app adds. Two things are rewritten: long lines are folded again at 75 octets, and a parameter value holding a comma, colon or semicolon is written back in quotes. Both are required by the format, and a calendar app reads the result as the same event.

### What happens to events that appear in more than one file?

By default they all stay, so the merge never drops anything on its own. Turn on Remove duplicates by UID to keep one copy per UID and RECURRENCE-ID. The copy kept is the newest by LAST-MODIFIED, then DTSTAMP, then SEQUENCE; when none of those differ, the first copy seen stays. The line under the output reports how many duplicates were removed.

### Why does a modified occurrence of a recurring meeting survive the dedupe?

Because a modified occurrence shares the UID of its series and adds a RECURRENCE-ID naming the occurrence it replaces. The dedupe key is the UID and the RECURRENCE-ID together, so the series master and each modified occurrence are different keys. A tool that deduped on UID alone would keep one of them and lose either the rule or the exception.

### What does New UIDs do, and when should I use it?

A calendar app matches an imported event to one it already holds by UID; a match updates the existing event instead of adding one. New UIDs rewrites every UID to a fresh deterministic value, so the import adds the events as new. Use it when an app refuses an import because the events already exist, or when you want a second copy of a calendar. The same input always produces the same new UIDs, and a recurrence master and its exceptions keep sharing one.

### Which name and time zone does the merged calendar get?

The name you type is written as X-WR-CALNAME. If you leave it empty, the merged file keeps the name when every input carries the same one, and carries no name when they differ, so a calendar app asks you instead of guessing. The X-WR-TIMEZONE hint follows the same rule. CALSCALE and METHOD are kept when the inputs agree and set to GREGORIAN and PUBLISH when they do not.

### How are time zones handled?

A VTIMEZONE definition is written once per TZID. When every file carries its own copy of Europe/Istanbul, the merged file carries the first one seen. The times themselves are never converted: each DTSTART and DTEND keeps the TZID parameter or the trailing Z it was stated with. Converting would need the zone rules of the reader's calendar, and a silent guess is worse than the value the file already states.

### Can I merge Google Calendar, Apple Calendar and Outlook exports together?

Yes. All three write the same RFC 5545 format, and the events from each are copied as they are. The PRODID line in the header, which names the app that wrote the file, is replaced by one naming this tool, because the merged file no longer comes from any one of them. Vendor X- properties inside the events stay.

### One of my files could not be read. Do the others still merge?

Yes. A file that is empty, is not a calendar, or has no VCALENDAR component is reported next to its name with the reason, and the merge continues with the rest. A calendar with no events, to-dos or journal entries is skipped the same way. Only when no file at all can be read does the page show an error instead of an output.

### Is my calendar uploaded anywhere?

No. The files are read and merged in your browser, and no request carries the calendar text. You can confirm that in the browser's network panel while merging. The tool also never fetches a calendar URL: it merges the files you drop, nothing else.

### Can I merge calendars from a script?

Yes. The same code runs on the FindUtils API and MCP server as the merge_ics tool. Pass the .ics texts as the inputs array, at most twenty, with the same dedupe_uid, regenerate_uids and calendar_name options, and read the merged calendar from the ics field of the result along with the counts and a per-file report.

## Related Tools

- [Split ICS](https://findutils.com/convert/split-ics/)
- [ICS to JSON](https://findutils.com/convert/ics-to-json/)
- [ICS to CSV](https://findutils.com/convert/ics-to-csv/)
- [CSV to ICS](https://findutils.com/convert/csv-to-ics/)
- [Timezone Converter](https://findutils.com/productivity/timezone-converter/)
- [VCF to CSV](https://findutils.com/convert/vcf-to-csv/)
- [Date Difference Calculator](https://findutils.com/calculate/date-difference-calculator/)
