{
  "name": "CalPorter",
  "url": "https://calporter.com",
  "updated": "2026-10-23",
  "processing": "browser-local; no file uploads or calendar account access",
  "tools": [
    {
      "id": "compare-ics",
      "name": "Compare Two ICS Calendar Files",
      "url": "https://calporter.com/tools/compare-ics/",
      "description": "Check two calendar exports for added, removed and changed event records. Review migration differences without connecting any accounts.",
      "input": "compare",
      "output": "json",
      "limits": "Before and After describe file versions, not connected accounts. Matching uses event IDs and recurrence IDs. Changed IDs appear as added/removed; they do not prove an event was lost. No repair or import is performed.",
      "questions": [
        {
          "question": "Can this prove a migration is complete?",
          "answer": "No. Apps can rewrite IDs, time zones and properties. Added/removed means an identity is present in only one file. Duplicate identities are marked ambiguous. Verify suspicious records in your calendar app."
        },
        {
          "question": "What is compared?",
          "answer": "VEVENT properties and nested components, matched by UID and RECURRENCE-ID including its time-zone parameters. DTSTAMP, LAST-MODIFIED, CREATED and SEQUENCE are ignored. Time-zone definition differences are flagged separately. Other calendar metadata and task records are outside scope."
        },
        {
          "question": "Are repeating events expanded or times converted?",
          "answer": "No. Series rules and edited occurrences are compared as stored. Equivalent instants written in different time zones can appear changed. A matching event record can still behave differently if its time-zone definition changed."
        }
      ]
    },
    {
      "id": "remove-ics-reminders",
      "name": "Remove Reminders from an ICS File",
      "url": "https://calporter.com/tools/remove-ics-reminders/",
      "description": "Remove embedded event alarms from a calendar copy while keeping titles, notes, dates and repeating rules.",
      "input": "ics",
      "output": "ics",
      "limits": "Removes VALARM blocks inside VEVENT records only. Calendar defaults, device settings, task alarms and vendor-specific reminder fields are outside scope. This does not silence events already imported into your calendar.",
      "questions": [
        {
          "question": "Will it remove event details as well?",
          "answer": "No. Event titles, descriptions, attendees, locations, IDs, dates, recurring rules and time-zone definitions are preserved. Only embedded event VALARM blocks are removed; formatting can change during serialization."
        },
        {
          "question": "Why might I still receive notifications?",
          "answer": "Your calendar app may add its own default notifications or use vendor-specific reminder properties. Existing account events are not changed by downloading this file. This tool is not a notification-settings manager."
        },
        {
          "question": "Does it remove Apple Reminders tasks?",
          "answer": "No. It works on alarms nested inside calendar events, not the Apple Reminders app or VTODO task alarms."
        }
      ]
    },
    {
      "id": "csv-to-ics",
      "name": "CSV to ICS Converter",
      "url": "https://calporter.com/tools/csv-to-ics/",
      "description": "Turn spreadsheet rows into a calendar file. Map your columns, check the dates, then export.",
      "input": "csv",
      "output": "ics",
      "limits": "Save Excel or Google Sheets as CSV first. Choose the date order explicitly; ambiguous dates are never guessed.",
      "questions": [
        {
          "question": "Can I use an Excel file?",
          "answer": "Export your worksheet as CSV UTF-8 first. This tool reads CSV, not .xlsx workbooks."
        },
        {
          "question": "Which time zone is used?",
          "answer": "Times are floating local times: the receiving calendar decides the time zone. All-day dates stay dates. This converter does not assign UTC or an explicit time-zone definition."
        }
      ]
    },
    {
      "id": "ics-to-csv",
      "name": "ICS to CSV Converter",
      "url": "https://calporter.com/tools/ics-to-csv/",
      "description": "Move calendar events into a spreadsheet with time zones, recurrence rules and exception dates visible.",
      "input": "ics",
      "output": "csv",
      "limits": "One row per VEVENT, including edited occurrences. Repeating series stay rules; this export does not silently flatten them into one-off events.",
      "questions": [
        {
          "question": "Are repeating events expanded?",
          "answer": "No. A recurring master is one row, with its RRULE, RDATE and EXDATE. Modified instances appear in their own rows with a Recurrence ID."
        },
        {
          "question": "Can this CSV be reimported without losing fields?",
          "answer": "This is an inspection spreadsheet, not a lossless calendar backup. Keep the original ICS for attendees, alarms, custom properties and future reimport."
        }
      ]
    },
    {
      "id": "ics-viewer",
      "name": "ICS File Viewer",
      "url": "https://calporter.com/tools/ics-viewer/",
      "description": "Open a calendar without importing it. Search events and inspect dates, time zones and repeating rules.",
      "input": "ics",
      "output": "json",
      "limits": "The table shows stored events, not every occurrence of a recurring series. Nothing is added to any calendar account.",
      "questions": [
        {
          "question": "Does this connect to Google or Outlook?",
          "answer": "No. The file is parsed on your device. This viewer does not request calendar account access."
        },
        {
          "question": "Why does an all-day event end on the following day?",
          "answer": "iCalendar uses an exclusive end date. An event on November 2 ends at the beginning of November 3."
        }
      ]
    },
    {
      "id": "ics-validator",
      "name": "ICS Validator & Calendar Import Checker",
      "url": "https://calporter.com/tools/ics-validator/",
      "description": "Find missing IDs, invalid dates, broken structure and other common reasons an import can fail.",
      "input": "ics",
      "output": "json",
      "limits": "A structural check cannot guarantee that Google, Apple or Outlook will accept a file. Read warnings before importing a copy into a test calendar.",
      "questions": [
        {
          "question": "Does passing mean my file is fully RFC compliant?",
          "answer": "No. This checks common event structure, dates, required IDs, duplicate identities and timezone definitions. It is not a complete RFC certification or an actual calendar import test."
        },
        {
          "question": "Can you repair everything automatically?",
          "answer": "No. Missing time zones, conflicting revisions and ambiguous dates need your decision. The checker explains them instead of guessing."
        }
      ]
    },
    {
      "id": "merge-ics",
      "name": "Merge ICS Calendar Files",
      "url": "https://calporter.com/tools/merge-ics/",
      "description": "Combine calendars while keeping recurring events, edited instances, alarms and time-zone definitions.",
      "input": "multi",
      "output": "ics",
      "limits": "Exact duplicate event records are removed. Different revisions with the same UID are kept and flagged. Conflicting definitions of the same time zone stop the merge.",
      "questions": [
        {
          "question": "Are duplicates removed?",
          "answer": "Only exact copies of the same event record. A changed event sharing a UID is kept, because choosing the correct revision needs a human decision."
        },
        {
          "question": "Do repeating events survive?",
          "answer": "The recurrence rules and their exception records stay in the output. This tool does not expand or rewrite the series."
        }
      ]
    },
    {
      "id": "split-ics",
      "name": "Split ICS Files for Calendar Import",
      "url": "https://calporter.com/tools/split-ics/",
      "description": "Break a large calendar into smaller valid files, keeping each recurring series and its exceptions together.",
      "input": "ics",
      "output": "zip",
      "limits": "Choose a byte budget below your importer’s limit. Each file keeps calendar metadata and time zones. A single oversized series is reported, never silently broken.",
      "questions": [
        {
          "question": "Why might splitting be impossible at my chosen size?",
          "answer": "One recurring event family, or the calendar’s time-zone definitions, can exceed the budget alone. Raise the budget or remove unnecessary content from a separate copy."
        },
        {
          "question": "Will splitting remove duplicate imports?",
          "answer": "No. It controls file size only. Import into a new calendar and inspect it before replacing an existing calendar."
        }
      ]
    },
    {
      "id": "remove-duplicate-events",
      "name": "Remove Exact Duplicate Calendar Events",
      "url": "https://calporter.com/tools/remove-duplicate-events/",
      "description": "Remove identical event records from an ICS export, with a preview of what stays and what changes.",
      "input": "ics",
      "output": "ics",
      "limits": "Same title and time do not prove two events are duplicates. This tool removes only identical records and preserves conflicting versions for review.",
      "questions": [
        {
          "question": "Does it delete events from my calendar account?",
          "answer": "No. It creates a new local ICS file. It never connects to your calendar account."
        },
        {
          "question": "What counts as an exact duplicate?",
          "answer": "All parsed properties and nested components must match, including UID, times, notes and alarms. A different revision or changed property is retained."
        }
      ]
    },
    {
      "id": "calendar-privacy-cleaner",
      "name": "Calendar Privacy Cleaner — Share Availability Only",
      "url": "https://calporter.com/tools/calendar-privacy-cleaner/",
      "description": "Make a separate busy-time calendar with titles, notes, people, locations, links and reminders removed.",
      "input": "ics",
      "output": "ics",
      "limits": "Your schedule itself is still personal. This removes descriptive details, replaces event IDs and keeps dates and recurrence rules. Review the exported text before sharing.",
      "questions": [
        {
          "question": "What is removed?",
          "answer": "Event titles become Busy. Descriptions, locations, participants, organizers, links, attachments, alarms and nonessential custom fields are omitted. Original UIDs are replaced consistently within recurring families."
        },
        {
          "question": "Is the result anonymous?",
          "answer": "No. Times, recurrence patterns, event status and time-zone definitions remain. They can reveal habits. This is a detail scrubber, not a guarantee of anonymity."
        }
      ]
    },
    {
      "id": "create-ics",
      "name": "Free ICS File Generator",
      "url": "https://calporter.com/tools/create-ics/",
      "description": "Create a downloadable calendar event or a bounded repeating series without a calendar account.",
      "input": "form",
      "output": "ics",
      "limits": "Timed events use floating local time, interpreted in the receiving calendar’s zone. No invitation is emailed and no event is added automatically.",
      "questions": [
        {
          "question": "Will this send invitations?",
          "answer": "No. This creates a downloadable calendar file. It does not email guests or connect to accounts."
        },
        {
          "question": "What happens across daylight saving time?",
          "answer": "Floating local times keep the wall-clock time selected by the receiving calendar. Check its time-zone setting. This generator does not create explicit TZID/VTIMEZONE definitions."
        }
      ]
    }
  ]
}
