Calendar Feeds (ICS)
Subscribe to any calendar via ICS link for conflict detection 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 connect any calendar for conflict detection 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 uses it to hide conflicting time slots when candidates book interviews, just like the Google Calendar integration.
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
- 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 starts checking it for conflicts 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 | Real-time | 15-minute delay |
| Event creation | Yes (interview events on your calendar) | No |
| 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 and automatic interview event creation.
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, 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 checking this calendar for conflicts. 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
- 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
- Click Add Calendar Feed
- Paste your calendar’s secret ICS URL
- Verify the feed shows as “Active” after a few minutes
- Test by viewing a candidate booking page and confirming conflicting slots are hidden
- Optionally add feeds for additional calendars (personal, team, etc.)