iCal / ICS Calendar Parser avatar

iCal / ICS Calendar Parser

Pricing

Pay per event

Go to Apify Store
iCal / ICS Calendar Parser

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

Stas Persiianenko

Maintained by Community

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:

FieldTypeExample
uidstring20210118_09lrg7@google.com
summarystringNew Year's Day
descriptionstringPublic holiday
locationstringConference Room B
startDatestring2026-01-01T00:00:00.000Z
endDatestring2026-01-02T00:00:00.000Z
allDaybooleantrue
organizerstringAlice <alice@example.com>
attendeesarray[{email, name, role, status}]
statusstringCONFIRMED
urlstringhttps://meet.example.com/abc
categoriesarray["Work", "Meeting"]
rrulestringFREQ=WEEKLY;COUNT=10
createdstring2024-06-03T10:13:45.000Z
lastModifiedstring2024-06-03T10:13:45.000Z
icsSourcestringURL 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:

EventFREEBRONZESILVERGOLDPLATINUMDIAMOND
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

  1. Go to iCal Parser on Apify
  2. Click Start
  3. Enter one or more ICS file URLs (e.g., a Google Calendar public link)
  4. Optionally set a date range to filter events
  5. Toggle "Expand recurring events" if you want individual occurrences
  6. Click Start and wait for results
  7. Download data as JSON, CSV, Excel, or connect to 2,000+ apps via integrations

Input configuration

Calendar Input

FieldTypeDescription
ICS file URLsstring[]URLs of ICS/iCal files to fetch and parse
Raw ICS textstring[]Paste raw ICS file content directly

Filters

FieldTypeDescription
Events from datestringOnly include events starting on or after this date (YYYY-MM-DD)
Events to datestringOnly include events ending on or before this date (YYYY-MM-DD)

Advanced Options

FieldTypeDefaultDescription
Max events per calendarintegerUnlimitedCap the number of events extracted per source
Expand recurring eventsbooleanfalseExpand RRULE recurring events into individual occurrences
Include raw databooleanfalseInclude 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 address
  • name — 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 .ics format 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 ApifyClient
client = 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"

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).