Calendar Feeds (ICS)
Subscribe to any calendar via ICS link without granting OAuth access. Works with Google Calendar, Outlook, Apple Calendar, and more.
Why It Matters
Not everyone wants to grant OAuth access to their calendar. Calendar feeds let you subscribe to any calendar by pasting a simple URL. No OAuth, no permissions dialog, no third-party app authorization.
This works with:
- Google Calendar (personal or workspace)
- Microsoft Outlook / Office 365
- Apple Calendar (iCloud)
- Any calendar app that offers an ICS/iCal export URL
Kit polls your calendar feed every 15 minutes and caches the busy windows it finds.
Conflict detection currently uses Google Calendar only. A calendar feed is stored against the whole account rather than against one person, so Kit can’t tell whose availability it should block. Until feeds carry an owner, the busy windows from a feed are cached and shown on the feed’s own page, but they do not remove slots from interview booking pages. To hide your busy times from candidates, connect Google Calendar and switch on Check for scheduling conflicts.
What You Need
- A Kit account with scheduling enabled
- A calendar app that offers a secret ICS/iCal URL (most do)
Adding a Calendar Feed
- Navigate to Integrations > Calendar Feeds
- Click Add Calendar Feed
- Paste your calendar’s ICS URL (must start with
https://) - Optionally set a display name (Kit auto-detects it from the feed)
- Click Add Calendar Feed
Kit validates the URL, fetches the feed, and begins caching its busy windows immediately.
Finding Your ICS URL
Google Calendar
- Open Google Calendar and click the gear icon (Settings)
- Click on the calendar name in the left sidebar
- Scroll to Secret address in iCal format
- Copy the URL
Important: Use the secret address, not the public one, unless your calendar is intentionally public. The secret URL includes a token that grants read access.
Microsoft Outlook / Office 365
- Open Outlook on the web and go to Settings > Calendar
- Click Shared calendars
- Under “Publish a calendar”, select the calendar you want
- Choose Can view all details and click Publish
- Copy the ICS link (not the HTML one)
Apple Calendar (iCloud)
- Open the Calendar app on your Mac
- Right-click the calendar you want to share
- Select Share Calendar…
- Check Public Calendar
- Copy the URL that appears
How It Works
| Aspect | Detail |
|---|---|
| Polling frequency | Every 15 minutes |
| Data accessed | Only event start/end times and busy/free status |
| Data stored | Busy time windows only (no event content) |
| Time range | Next 30 days |
| Recurring events | Automatically expanded (daily, weekly, monthly) |
| All-day events | Block the entire day |
When a candidate views available interview slots, Kit subtracts your calendar’s busy times from your availability schedule, exactly the same way it works with Google Calendar.
Google Calendar Integration vs Calendar Feeds
| Feature | Google Calendar (OAuth) | Calendar Feeds (ICS) |
|---|---|---|
| Conflict detection | Yes, queried live when a candidate opens a booking page | Not yet — busy windows are cached but don’t affect booking pages |
| Interview invites | Emailed as .ics, plus a direct calendar entry for the lead interviewer if they switched on Allow creating events in this calendar
|
Emailed as .ics only — Kit can never write to an ICS feed |
| Setup | OAuth authorization | Paste a URL |
| Works with | Google Calendar only | Any calendar provider |
| Privacy | Requires calendar permissions | URL-based, no account access |
| All-day events | Supported | Supported |
| Recurring events | Handled by Google API | Expanded from feed |
Use Google Calendar if you want real-time conflict detection, or if you want booked interviews to land on the lead interviewer’s calendar without anyone accepting an attachment (see Calendar Integration). A calendar feed is read-only: Kit reads busy windows from it and can never write to it. Either way, interview invites are always emailed as .ics attachments as well.
Use Calendar Feeds if you prefer not to grant OAuth access, use a non-Google calendar, or want to add a secondary calendar from a different provider.
You can use both at the same time. Kit merges busy times from all connected sources.
Managing Calendar Feeds
Editing a Feed
Navigate to Integrations > Calendar Feeds, find your feed in the Calendar Feeds section, and click the pencil icon. You can change the display name and toggle conflict checking on or off.
Refreshing a Feed
Click the three-dot menu (⋮) next to a feed and select Refresh Now. Kit fetches the latest version immediately instead of waiting for the next 15-minute poll.
Removing a Feed
Click the three-dot menu (⋮) and select Remove Feed. Kit stops polling this calendar and discards the busy windows it cached. Your calendar itself is not affected.
Privacy and Security
Calendar feeds are designed with privacy in mind:
- No event content stored – Kit reads event start/end times and busy/free status only. Event titles, descriptions, attendees, and locations are discarded immediately after parsing.
- Encrypted storage – Your calendar URL is encrypted at rest. It’s never logged or exposed in API responses.
- HTTPS only – Kit only accepts calendar URLs over HTTPS.
- You control access – To revoke Kit’s access, regenerate your calendar’s secret URL in your calendar app (Google, Outlook, etc.). The old URL stops working immediately.
Revoking Access
Unlike OAuth (where you revoke from Kit or your Google account), calendar feed access is controlled by the URL itself:
- Go to your calendar app’s settings
- Find the published/shared calendar
- Click “Reset” or “Unpublish” to invalidate the old URL
- In Kit, remove the old feed and add the new URL if needed
Troubleshooting
Feed Not Updating
Possible causes:
- The calendar URL has been revoked or regenerated
- Your calendar provider is temporarily unavailable
- The feed is paused after repeated failures
Fix:
- Check the feed status at Integrations > Calendar Feeds
- Click Refresh Now to force an immediate update
- If the URL was regenerated, remove the old feed and add the new URL
Events Missing from Conflict Check
Possible causes:
- The event is marked as “free” (transparent) in your calendar
- The event uses an unusual recurrence pattern Kit can’t expand
- The event is more than 30 days in the future
Fix:
- Edit the event in your calendar and set the status to “busy”
- For recurring events, check that they appear correctly in your calendar app first
Feed Shows “Error” or “Paused”
Kit pauses feeds after repeated fetch failures to avoid unnecessary requests.
- Error (3+ failures): Kit is still trying. Check that your URL is valid.
- Paused (extended failures): Kit has stopped polling. Remove the feed and re-add it with a fresh URL.
Quick Checklist
- Navigate to Integrations > Calendar Feeds
- Click Add Calendar Feed
- Paste your calendar’s secret ICS URL
- Verify the feed shows as “Active” after a few minutes
- Open the feed and confirm its busy windows were fetched
- Optionally add feeds for additional calendars (personal, team, etc.)