iCal / ICS Calendar Parser
Pricing
Pay per event
iCal / ICS Calendar Parser
Parse iCal/ICS calendar files from URLs or raw text. Extracts events with summary, start/end, location, attendees, organizer, recurrence rules, and more.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
The iCal / ICS Calendar Parser fetches and parses iCalendar (.ics) files from URLs or raw text and outputs structured JSON with events, attendees, recurrence rules, timezone info, and more. Bulk-parse multiple calendar sources in a single run — no proxy needed, pure computation.
Try it now at apify.com/automation-lab/ical-parser.
What does iCal Parser do?
The actor accepts one or more ICS calendar sources (URLs or raw text) and extracts every calendar event into clean, structured JSON. For each event you get:
- Summary (event title) and description
- Start and end dates in ISO 8601 format
- Location (physical address or virtual meeting link)
- Organizer name and email
- Attendees with name, email, role, and RSVP status
- Recurrence rules (RRULE) with optional expansion into individual occurrences
- Categories, status (CONFIRMED, TENTATIVE, CANCELLED), and UID
- URL associated with the event
- All-day flag, created/modified timestamps, and source tracking
Supports any standard iCalendar file: Google Calendar, Outlook, Apple Calendar, Fastmail, Proton Calendar, Calendly, Zoom, and any app that exports .ics files.
Who is iCal Parser for?
Automation engineers building calendar-driven workflows:
- Sync events from public calendars into databases, spreadsheets, or CRMs
- Trigger actions when new events appear on a team calendar
- Aggregate events from multiple calendar sources into a single dataset
Data analysts tracking scheduled events across organizations:
- Extract conference schedules, meetup events, or holiday calendars
- Build dashboards from public calendar data
- Monitor competitor event schedules for market intelligence
Developers integrating calendar data into applications:
- Parse ICS feeds from third-party APIs without writing parsing logic
- Convert calendar exports into JSON for web apps or mobile apps
- Batch-process calendar archives for migration projects
HR and operations teams managing company-wide schedules:
- Export and analyze company holiday calendars across regions
- Track office closures, training sessions, and team events
- Generate reports from shared calendar data
Why use iCal Parser?
- No proxy needed — works with public ICS URLs directly, zero bandwidth cost
- Bulk parsing — process multiple calendar sources in a single run
- Recurring event expansion — optionally expand RRULE-based recurring events into individual occurrences
- Date filtering — extract only events within a specific date range
- Universal format support — any RFC 5545 compliant ICS file works
- Graceful error handling — bad URLs are skipped, valid sources still process
- Raw text support — paste ICS content directly, no file hosting needed
- Structured output — clean JSON ready for databases, APIs, and spreadsheets
Output data sample
Each calendar event produces one JSON object:
| Field | Type | Example |
|---|---|---|
| uid | string | 20210118_09lrg7@google.com |
| summary | string | New Year's Day |
| description | string | Public holiday |
| location | string | Conference Room B |
| startDate | string | 2026-01-01T00:00:00.000Z |
| endDate | string | 2026-01-02T00:00:00.000Z |
| allDay | boolean | true |
| organizer | string | Alice <alice@example.com> |
| attendees | array | [{email, name, role, status}] |
| status | string | CONFIRMED |
| url | string | https://meet.example.com/abc |
| categories | array | ["Work", "Meeting"] |
| rrule | string | FREQ=WEEKLY;COUNT=10 |
| created | string | 2024-06-03T10:13:45.000Z |
| lastModified | string | 2024-06-03T10:13:45.000Z |
| icsSource | string | URL or raw-text-1 |
How much does it cost to parse calendar events?
iCal Parser uses pay-per-event pricing with tiered discounts based on your Apify subscription plan:
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| Run started (one-time) | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| Per event parsed | $0.001 | $0.0009 | $0.0008 | $0.00065 | $0.0005 | $0.0004 |
Example costs (FREE tier):
- Parse 1 calendar with 50 events: $0.005 + 50 x $0.001 = $0.055
- Parse 5 calendars with 200 total events: $0.005 + 200 x $0.001 = $0.205
- Parse 1 calendar with 1,000 events: $0.005 + 1000 x $0.001 = $1.005
No proxy costs, no hidden fees. The actor runs on 256 MB memory and finishes in seconds.
How to parse ICS calendar files step by step
- Go to iCal Parser on Apify
- Click Start
- Enter one or more ICS file URLs (e.g., a Google Calendar public link)
- Optionally set a date range to filter events
- Toggle "Expand recurring events" if you want individual occurrences
- Click Start and wait for results
- Download data as JSON, CSV, Excel, or connect to 2,000+ apps via integrations
Input configuration
Calendar Input
| Field | Type | Description |
|---|---|---|
| ICS file URLs | string[] | URLs of ICS/iCal files to fetch and parse |
| Raw ICS text | string[] | Paste raw ICS file content directly |
Filters
| Field | Type | Description |
|---|---|---|
| Events from date | string | Only include events starting on or after this date (YYYY-MM-DD) |
| Events to date | string | Only include events ending on or before this date (YYYY-MM-DD) |
Advanced Options
| Field | Type | Default | Description |
|---|---|---|---|
| Max events per calendar | integer | Unlimited | Cap the number of events extracted per source |
| Expand recurring events | boolean | false | Expand RRULE recurring events into individual occurrences |
| Include raw data | boolean | false | Include the raw parsed event object for debugging |
Output format
Results are stored in an Apify dataset. Each event is one record with the fields shown in the data sample table above.
Attendees are an array of objects, each containing:
email— attendee email addressname— display name (if available)role— REQ-PARTICIPANT, OPT-PARTICIPANT, etc.status— ACCEPTED, DECLINED, TENTATIVE, NEEDS-ACTION
Tips for best results
- Google Calendar: Use the public ICS link:
https://calendar.google.com/calendar/ical/{CALENDAR_ID}/public/basic.ics - Outlook/Office 365: Use the "Publish calendar" feature to get an ICS link
- Apple Calendar: Subscribe links use
.icsformat and work directly - Recurring events: Use "Expand recurring events" to get individual occurrences. Without expansion, recurring events appear once with their RRULE string
- Date filtering: Use date filters to limit output to a specific time window — especially useful for large calendars with years of history
- Performance: The actor processes calendars sequentially. For faster results with many URLs, split across multiple runs
Integrations
Connect iCal Parser output to your workflows:
- Google Sheets — auto-sync calendar events to a spreadsheet for team visibility
- Zapier / Make / n8n — trigger workflows when new events appear in a public calendar
- Airtable — build a searchable database of events from multiple calendars
- Slack / Email — get notifications when specific events are added to a calendar
- Webhooks — push parsed events to your own API endpoint in real-time
- Power BI / Tableau — visualize event patterns, busy periods, and scheduling trends
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('automation-lab/ical-parser').call({icsUrls: ['https://www.officeholidays.com/ics/usa'],dateFrom: '2026-01-01',dateTo: '2026-12-31',maxEvents: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Parsed ${items.length} events`);items.forEach(event => console.log(`${event.startDate} - ${event.summary}`));
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/ical-parser").call(run_input={"icsUrls": ["https://www.officeholidays.com/ics/usa"],"dateFrom": "2026-01-01","dateTo": "2026-12-31","maxEvents": 100,})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())print(f"Parsed {len(items)} events")for event in items:print(f"{event['startDate']} - {event['summary']}")
cURL
curl "https://api.apify.com/v2/acts/automation-lab~ical-parser/runs?token=YOUR_APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"icsUrls": ["https://www.officeholidays.com/ics/usa"],"dateFrom": "2026-01-01","dateTo": "2026-12-31","maxEvents": 100}'
Use with MCP (AI assistants)
Connect this actor to Claude, ChatGPT, or any MCP-compatible AI assistant.
Claude Code (terminal)
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/ical-parser"
Claude Desktop / Cursor / VS Code
Add to your MCP config file (claude_desktop_config.json or .cursor/mcp.json):
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com?tools=automation-lab/ical-parser","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"}}}}
Example prompts:
- "Parse the US holiday calendar and list all holidays in 2026"
- "Fetch this Google Calendar ICS link and show me all events next month"
- "Parse these two calendar URLs and find overlapping events"
- "Expand the recurring events from this calendar for Q2 2026"
Is it legal to parse ICS calendar files?
iCalendar (.ics) is an open standard (RFC 5545). Parsing publicly shared calendar files is standard practice — it is the entire purpose of the ICS format. The actor only accesses URLs you provide and does not scrape any website.
Always ensure you have permission to access any calendar URLs you provide. Public calendars (holidays, events, schedules) are freely accessible by design.
FAQ
Q: What ICS file formats are supported? A: Any file following the iCalendar standard (RFC 5545). This includes exports from Google Calendar, Outlook, Apple Calendar, Fastmail, Proton Calendar, Calendly, Zoom, and virtually any calendar application.
Q: Can I parse password-protected or private calendars? A: The actor fetches ICS files via HTTP GET. If the calendar URL requires no authentication (like Google Calendar "public" links or Outlook "published" links), it works. For calendars requiring login, you would need to use the authenticated ICS URL that some providers offer (e.g., Google Calendar's "secret address in iCal format").
Q: What happens if a URL is invalid or unreachable? A: The actor logs an error for that URL and continues processing the remaining URLs. Your run will still succeed with data from all valid sources.
Q: How does recurring event expansion work?
A: When "Expand recurring events" is enabled, events with RRULE patterns (e.g., FREQ=WEEKLY;COUNT=10) are expanded into individual occurrences within the date window. Each occurrence gets a unique UID suffix. Without expansion, you get the base event with its RRULE string.
Q: Is there a limit on calendar size? A: The actor runs on 256 MB memory, which handles calendars with thousands of events easily. ICS files are text-based and typically small (a calendar with 1,000 events is usually under 1 MB).
Related actors
- automation-lab/curl-to-code-converter — Convert cURL commands to Python, JavaScript, PHP, Go, and more
- automation-lab/base64-converter — Encode and decode base64 data
- automation-lab/unicode-text-inspector — Inspect Unicode code points and character properties in text