Smart home, built right.

Home Assistant · Guides & Tutorials

Add your Apple iCloud Calendar to Home Assistant (2026 update)

Two ways to get iCloud calendars into Home Assistant: the Apple iCloud integration (calendars and Reminders since 2026.10) or CalDAV with an app password.

By the TechnoGecko Team· · Updated · 7 min read

There are now two good ways to get your iCloud calendars into Home Assistant. Since Home Assistant 2026.10, the Apple iCloud integration adds a calendar entity for each of your iCloud calendars and a to-do list for each Reminders list. You sign in with your Apple Account and a two-factor code, and you get your Apple devices’ locations and battery levels too. The older route, the CalDAV integration pointed at https://caldav.icloud.com/, still works and only needs an app-specific password, so Home Assistant never sees your main Apple Account password. Choose Apple iCloud if you want Reminders and presence in one place. Choose CalDAV if you only want calendars and would rather keep your account password out of Home Assistant.

Which method should you use?

Apple iCloud integrationCalDAV integration
CalendarsOne calendar entity per iCloud calendarOne calendar entity per calendar on the account (or a filtered list)
Create or edit events from Home AssistantNo. Home Assistant’s docs say the calendars are read-onlyNot covered in Home Assistant’s CalDAV docs; plan on reading events only
RemindersYes. Each Reminders list becomes a to-do list you can add to, complete and delete from, and changes sync back to your Apple devicesNot for iCloud Reminders
Also addsDevice trackers and battery sensors for devices in Find My, plus actions like Play sound and Lost ModeNothing else
Sign-inYour regular Apple Account password, plus a two-factor codeYour Apple Account email and an app-specific password
Set up inThe UIThe UI, or YAML in configuration.yaml
Update intervalDynamic for device tracking; not stated for calendarsAbout every 15 minutes, per the docs

Both are cloud-polling integrations: Home Assistant fetches from Apple’s servers, so they stop updating when your internet connection is down.

Method 1: The Apple iCloud integration

This integration has existed for years as a way to track iPhones and other Apple devices. The 2026.10 release added calendars and Reminders: “Each calendar shows up as a calendar entity, and each Reminders list as a to-do list, where you can add, complete, and remove items that sync right back to your Apple devices.”

  1. In Home Assistant, go to Settings > Devices & services and select Add integration.
  2. Search for and select Apple iCloud.
  3. Enter your Apple Account email and your regular password. Home Assistant’s docs say to use your normal password here, not an app-specific one.
  4. If Apple asks for two-factor authentication, enter the six-digit code shown on one of your trusted Apple devices or sent to your trusted phone number. If no code arrives, select Request a new verification code.
  5. Finish the setup. Your calendars appear as calendar. entities and your Reminders lists as todo. entities.

Things to know before you rely on it:

Method 2: CalDAV with an app-specific password

iCloud calendars speak CalDAV, a standard protocol. Home Assistant’s CalDAV integration lists iCloud Calendar among the systems it was tested against and uses https://caldav.icloud.com/ as its example server address.

Step 1: Create an app-specific password

Apple’s app-specific passwords let a non-Apple app sign in to iCloud without your main password. Your Apple Account needs two-factor authentication turned on. Per Apple’s instructions:

  1. Sign in at account.apple.com.
  2. In Sign-In and Security, select App-Specific Passwords.
  3. Select Generate an app-specific password and follow the steps. Give it a label you’ll recognize, such as “Home Assistant”.
  4. Copy the password. You’ll paste it into Home Assistant next.

Two Apple rules to remember: you can have up to 25 active app-specific passwords, and changing or resetting your main Apple Account password revokes all of them. If your calendars stop updating after a password change, generate a new one.

  1. Go to Settings > Devices & services, select Add integration, and choose CalDAV.
  2. For the URL, enter https://caldav.icloud.com/.
  3. For the username, enter your Apple Account email address.
  4. For the password, paste the app-specific password.
  5. Submit. Home Assistant finds your calendars and creates a calendar entity for each.

Or: add CalDAV in YAML

The YAML route lets you filter which calendars load, or build “custom calendars” that only contain matching events. Store the credentials in secrets.yaml, not in configuration.yaml:

# secrets.yaml
icloud_user: you@icloud.com
icloud_app_password: abcd-efgh-ijkl-mnop
# configuration.yaml
calendar:
  - platform: caldav
    url: https://caldav.icloud.com
    username: !secret icloud_user
    password: !secret icloud_app_password
    calendars:
      - Family
      - Work

Restart Home Assistant after editing configuration.yaml. The list under calendars uses the calendar names as they appear in Apple’s Calendar app. Leave it out to load every calendar.

To pull only certain events into their own entity, use custom_calendars instead. This example creates a calendar entity that only contains events with “Trash” in them:

calendar:
  - platform: caldav
    url: https://caldav.icloud.com
    username: !secret icloud_user
    password: !secret icloud_app_password
    custom_calendars:
      - name: "Trash day"
        calendar: "Family"
        search: "Trash"

Two limits from Home Assistant’s docs: you can’t use calendars and custom_calendars together, and “all day events are not supported by default when configured using yaml”. Custom calendars do include all-day events. If all-day events matter to you, like birthdays or holidays, set CalDAV up in the UI instead. YAML setup doesn’t support to-do lists, either.

Use your calendar in an automation

Whichever method you choose, the result is a standard calendar entity, so calendar triggers work the same way. Home Assistant’s docs recommend automations with calendar triggers over reading the entity’s attributes, because the entity only tracks one upcoming event at a time.

This automation sends a phone notification 30 minutes before any event on the Family calendar starts. Replace the entity IDs with your own:

alias: Family calendar heads-up
triggers:
  - trigger: calendar
    event: start
    entity_id: calendar.family
    offset: "-0:30:0"
actions:
  - action: notify.mobile_app_your_phone
    data:
      title: "Coming up in 30 minutes"
      message: "{{ trigger.calendar_event.summary }}"
mode: queued

mode: queued makes sure two events starting at the same time both get a notification. Home Assistant’s calendar docs warn against mode: single for calendar triggers for this reason.

For a seasonal example, our Christmas lights automation uses a holiday calendar trigger to turn the lights on on Christmas morning.

Show it on a dashboard

Add a Calendar card to any dashboard and pick your iCloud calendar entities. It shows a list or month view of upcoming events. Our Sections view guide walks through adding cards.

Troubleshooting

CalDAV says the login failed. Make sure you’re using the app-specific password, not your Apple Account password, and the full Apple Account email as the username. If you changed your Apple Account password recently, Apple revoked your app-specific passwords; generate a new one.

A calendar is missing. For CalDAV in YAML, check that each name in your calendars list matches the calendar’s name in Apple’s Calendar app exactly, or remove the list to load every calendar.

Apple iCloud keeps asking for a code. Re-authenticate when Home Assistant prompts you. If it keeps failing, Home Assistant’s docs suggest deleting the integration’s stored configuration (usually /config/.storage/icloud) and setting it up again.

All-day events don’t show. If you used YAML for CalDAV, that’s expected. Use the UI setup instead.

How pages like this are made: How we work.

Sources

Related

The short list

New guides and explainers when we publish them. No product spam. The form is not connected yet. Use the RSS feed.