Scrapers / Developer & File Tools

iCal (.ics) Event Generator
hipersoft/ical-ics-generator
Turn a schedule into iCal (.ics) calendar files with timezones, all-day and recurring events, alarms and locations — importable into Google Calendar, Apple Calendar and Outlook.
Total users
2Monthly users
1Total runs
81Per calendar event generated
$0.002Last rebuilt
Oct 26, 2026Overview
Turn a schedule into iCal (.ics) calendar files — with timezones, all-day and recurring events, alarms, locations and organizers — importable into Google Calendar, Apple Calendar and Outlook. One .ics per event plus a combined calendar file.

What it does
- Generates RFC-5545 .ics events with title, times, location, description and URL.
- Supports all-day, recurring (RRULE), alarms/reminders and organizers.
- One file per event and a combined
calendar.ics.
Use cases
- Courses & webinars — hand attendees a click-to-add calendar invite.
- Events & bookings — generate calendar files from a bookings spreadsheet.
- Gyms / classes — publish recurring class schedules.
Input
{ "events": [
{ "title": "Team standup", "start": "2026-09-01T09:00:00Z", "durationMinutes": 30, "rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR", "alarmsMinutesBefore": [10] },
{ "title": "Company holiday", "start": "2026-12-25", "allDay": true }
] }
Each event supports: title, start (ISO, UTC), end or durationMinutes, allDay, location, description, url, rrule, alarmsMinutesBefore, organizerName, organizerEmail, lat, lng.
Output

{ "title": "Team standup", "start": "2026-09-01T09:00:00Z", "end": null, "icsUrl": "https://api.apify.com/v2/key-value-stores/.../records/event-0001.ics", "ok": true }
Output schema
| Field | Type | Description |
|---|---|---|
title |
string | Event title. |
start |
string | Event start (as given). |
end |
string | Event end (if provided). |
icsUrl |
string (URL) | Link to the event's .ics file. |
FAQ
Do recurring events work? Yes — pass an rrule like FREQ=WEEKLY;BYDAY=MO.
How do I import the whole schedule? Use the combined calendar.ics in the key-value store.
Can I automate it? Yes — via integrations on the Apify platform and the Apify API.
Notes
Original clean-room implementation. Times are handled in UTC.
Input
| Field | Type | Description |
|---|---|---|
events requiredEvents | array | One object per event. Keys: title, start (ISO datetime, UTC), end (ISO) or durationMinutes, allDay, location, description, url, rrule (e.g. "FREQ=WEEKLY;BYDAY=MO"), alarmsMinutesBefore (array), organizerName, organizerEmail, lat, lng. |
calendarNameCalendar name | string | Name for the combined calendar.ics file. Default: "My Calendar" |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~ical-ics-generator/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"events": [
{
"title": "Team standup",
"start": "2026-09-01T09:00:00Z",
"durationMinutes": 30,
"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
"location": "Zoom",
"alarmsMinutesBefore": [
10
]
},
{
"title": "Company holiday",
"start": "2026-12-25",
"allDay": true
}
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/ical-ics-generator").call(run_input={
"events": [
{
"title": "Team standup",
"start": "2026-09-01T09:00:00Z",
"durationMinutes": 30,
"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
"location": "Zoom",
"alarmsMinutesBefore": [
10
]
},
{
"title": "Company holiday",
"start": "2026-12-25",
"allDay": True
}
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/ical-ics-generator').call({
"events": [
{
"title": "Team standup",
"start": "2026-09-01T09:00:00Z",
"durationMinutes": 30,
"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
"location": "Zoom",
"alarmsMinutesBefore": [
10
]
},
{
"title": "Company holiday",
"start": "2026-12-25",
"allDay": true
}
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Calendar event generated One calendar (.ics) event generated | $0.002 | $0.001 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs · 103 users · $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs · 22 users · $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs · 8 users · $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs · 3 users · $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs · 13 users · $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy — reliable, no captcha, no setup.
121 runs · 8 users · $0.001 / result scrapedSend the site and the fields. We build it and you get it first.