iCal / ICS Calendar Feed to Events Extractor avatar

iCal / ICS Calendar Feed to Events Extractor

Pricing

from $0.30 / 1,000 results

Go to Apify Store
iCal / ICS Calendar Feed to Events Extractor

iCal / ICS Calendar Feed to Events Extractor

iCal / ICS Calendar Feed to Events Extractor reads any ICS or webcal:// URL and returns one row per event instance, expanding RRULE recurring events within a date window, with times converted to UTC.

Pricing

from $0.30 / 1,000 results

Rating

0.0

(0)

Developer

Murat Uzun

Murat Uzun

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

What is iCal / ICS Calendar Feed to Events Extractor?

iCal / ICS Calendar Feed to Events Extractor turns any public ICS or webcal:// calendar feed — public holidays, a shared team calendar, a booking system's feed — into a clean dataset row per event instance. It fetches each feed URL, hand-parses the ICS format per RFC 5545 (line unfolding, TZID/VALUE=DATE parameters, text unescaping) and expands RRULE recurring events into concrete occurrences inside the date window you give it, converting every start and end time to UTC. No calendar app, no .ics download-and-open, no manual recurrence math — paste feed URLs and get structured events back through the Apify API, on a schedule if you like.

What data does iCal / ICS Calendar Feed to Events Extractor extract?

The Actor extracts 21 fields per event instance:

FieldTypeDescription
feed, calendarNamestringSource feed URL and its X-WR-CALNAME, when published
uid, summary, description, location, urlstringEvent identity, title, description (unescaped, ≤2000 chars), location and linked URL
startAt, endAtstring (ISO 8601)Instance start/end, converted to UTC
allDay, durationMinutes, timezoneboolean, number, stringWhether DTSTART used VALUE=DATE, computed duration, and the original TZID (or "UTC")
isRecurringInstance, recurrenceRuleboolean, stringWhether the source event carries an RRULE, and its raw value
status, organizer, attendeeCount, categoriesstring, number, arraySTATUS, ORGANIZER display name, ATTENDEE count, CATEGORIES list
geo, lastModifiedobject, string{lat, lon} from GEO, and LAST-MODIFIED in UTC
error, scrapedAtstringFeed-level failure message and fetch timestamp

How to use iCal / ICS Calendar Feed to Events Extractor

  1. Paste one or more ICS/webcal feed URLs into ICS feed URLs, e.g. https://www.officeholidays.com/ics/usa or a webcal:// link exported from your calendar app.
  2. Optionally set From date / To date to narrow the window; leave them blank for the default 30-days-back to 365-days-forward range.
  3. Leave Expand recurring events on to turn a weekly/monthly RRULE into one row per occurrence, click Start, then export as JSON, CSV, Excel or HTML.

Example input

{
"feeds": ["https://www.officeholidays.com/ics/usa"],
"from": "2026-01-01",
"to": "2026-12-31",
"expandRecurring": true
}

Example output

{
"feed": "https://www.officeholidays.com/ics/usa",
"calendarName": "USA Holidays",
"uid": "2026-07-04US415regcountry@www.officeholidays.com",
"summary": "USA: Independence Day",
"location": "USA",
"startAt": "2026-07-04T00:00:00.000Z",
"endAt": "2026-07-05T00:00:00.000Z",
"allDay": true,
"durationMinutes": 1440,
"timezone": null,
"isRecurringInstance": false,
"recurrenceRule": null,
"status": null,
"attendeeCount": 0,
"categories": [],
"error": null,
"scrapedAt": "2026-09-12T18:00:00.000Z"
}

Input parameters

ParameterTypeDefaultDescription
feedsarray["https://www.officeholidays.com/ics/usa"]ICS/webcal feed URLs to read
fromstring30 days before todayOnly return instances starting on/after this ISO date
tostring365 days after todayOnly return instances starting on/before this ISO date
expandRecurringbooleantrueExpand RRULE events into one row per occurrence (cap 500)
maxEventsPerFeedinteger1000Max event rows kept per feed (1-20000)
maxConcurrencyinteger5Feeds fetched and parsed in parallel (1-20)

Pricing

iCal / ICS Calendar Feed to Events Extractor uses pay-per-event pricing: $0.0005 per event-instance result, i.e. $0.50 per 1,000 events, plus a negligible actor-start fee. A calendar with a year of daily events costs under 20 cents to fully expand. Maximum cost per run trims the row count to what the budget covers instead of overspending.

iCal / ICS Calendar Feed to Events Extractor vs. opening feeds by hand

Opening an .ics link in a calendar app shows you a UI, not structured data, and computing which occurrences of a recurring meeting fall inside a specific date range means writing your own RRULE code. This Actor does that parsing and expansion once per feed and returns a flat, exportable dataset — ready for a spreadsheet, a BI tool, or an automation trigger — for any number of feeds on a schedule.

Using iCal / ICS Calendar Feed to Events Extractor with AI agents and MCP

This Actor is pay-per-event with limited permissions — the two requirements for an Actor to be callable through the Apify MCP server at mcp.apify.com. An agent passes feeds (and optionally a date window) and gets back one structured row per event instance, ready to summarize an "upcoming holidays" or "this week's meetings" answer. The same run works from n8n, Make, Zapier and LangChain through Apify's integrations.

FAQ

Does this parse VTIMEZONE blocks? No — VTIMEZONE parsing is out of scope. A DTSTART;TZID=<IANA name> is converted to UTC using the JavaScript runtime's own time zone database (Intl), which is accurate for standard zone names like America/New_York but ignores a feed's custom VTIMEZONE overrides, which are rare outside enterprise calendaring systems.

What happens to a "floating" time with no Z and no TZID? RFC 5545 leaves it undefined; this Actor treats it as UTC and reports timezone: null so you can tell it apart from an explicit UTC or zoned time.

How are recurring events expanded? RRULE (plus RDATE/EXDATE) is expanded with the rrule library inside your from/to window, capped at 500 instances per event. Turn Expand recurring events off to get a single row per recurring event at its original DTSTART instead.

What if a feed is down or isn't a calendar? You get one row with error set (e.g. "Response does not look like an ICS calendar") instead of the whole run failing — other feeds in the same run are unaffected.

Is this legal to run? Yes. Public ICS feeds are published by their owners specifically to be read by calendar clients; this Actor performs the same read.

Part of the webdatatools web-intelligence suite — every Actor is pay-per-event, reads public data without a login, and returns one clean row per entity:

Browse the whole suite at webdatatools, or call ten of these Actors straight from Claude, Cursor or Cline with the webdatatools MCP server.

Website & domain intelligence

Content for AI, LLMs and RAG

Search, video and social

Leads, jobs and company data

Developer, app and research data

Support and feedback

Found a feed this Actor mishandles, a field worth adding, or a parsing bug? Open an issue on the Issues tab.