# Ics Expand Rrule — REST API endpoint `ics-expand-rrule`

Expand the recurring events of an iCalendar (.ics) file into one concrete event per occurrence between two dates, for a spreadsheet, a CRM or an importer that cannot read RRULE. Supports FREQ=DAILY, WEEKLY, MONTHLY and YEARLY with INTERVAL, COUNT, UNTIL, BYDAY (ordinals such as 2TU or -1FR included), BYMONTHDAY, BYMONTH and WKST, plus EXDATE, RDATE and RECURRENCE-ID overrides. A rule with BYSETPOS, BYYEARDAY, BYWEEKNO, BYHOUR, BYMINUTE, BYSECOND or an HOURLY or finer frequency keeps its first occurrence only and is named in notes. Each series stops at max_occurrences (default 366, at most 2000) and the output at 20000 events. Times are wall-clock as the file states them, never converted. Each occurrence gets its own UID (the series UID plus its start). Output is .ics, a JSON array in the ics_to_json shape, or CSV in the ics_to_csv spreadsheet columns. No calendar URL is fetched.

- Category: productivity
- MCP server: https://mcp.findutils.com/ (Streamable HTTP, API key for tools/call, 120 req/min per IP)
- REST endpoint: POST https://api.findutils.com/api/tools/ics-expand-rrule/execute (API key, 60 req/min per IP)
- API key: Running a tool needs an API key. Keys are not for sale yet: ask for early access. Without a key, a tool call answers HTTP 402 Payment Required with the error code PAYMENT_REQUIRED. The catalog and the schemas stay open without a key. https://findutils.com/api/#api-keys
- Reference page: https://findutils.com/api/ics-expand-rrule/
- Same tool on the other surface: https://findutils.com/mcp/ics-expand-rrule/

## Call the endpoint (verified example)

```bash
curl -X POST https://api.findutils.com/api/tools/ics-expand-rrule/execute \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nUID:standup@example.com\nDTSTART;TZID=Europe/Istanbul:20261005T093000\nDTEND;TZID=Europe/Istanbul:20261005T094500\nRRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=4\nSUMMARY:Standup\nEND:VEVENT\nEND:VCALENDAR\n",
    "from": "2026-10-01",
    "to": "2026-12-31",
    "format": "ics"
  }'

# Parameter schema (no key needed)
curl https://api.findutils.com/api/tools/ics-expand-rrule
```

## Input schema

| Argument | Type | Required | Description |
|---|---|---|---|
| `input` | string | yes | The .ics file contents. |
| `from` | string | yes | First day of the window, YYYY-MM-DD, inclusive, read in each event's own zone. |
| `to` | string | yes | Last day of the window, YYYY-MM-DD, inclusive. |
| `max_occurrences` | integer | no | Occurrences written per series at most. Default 366, at most 2000. A series with more in the window is cut and named in notes. Default: `366`. |
| `format` | string (ics \| json \| csv) | no | ics (default), json or csv. Default: `"ics"`. |
| `skip_cancelled` | boolean | no | Leave out STATUS:CANCELLED series, cancelled single occurrences and cancelled events. Default true. Default: `true`. |

Example arguments (verified):

```json
{
  "input": "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nUID:standup@example.com\nDTSTART;TZID=Europe/Istanbul:20261005T093000\nDTEND;TZID=Europe/Istanbul:20261005T094500\nRRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=4\nSUMMARY:Standup\nEND:VEVENT\nEND:VCALENDAR\n",
  "from": "2026-10-01",
  "to": "2026-12-31",
  "format": "ics"
}
```

OpenAPI 3.1 spec: https://findutils.com/api/openapi.json · Interactive docs: https://findutils.com/api/docs/

## Also an MCP tool

```bash
claude mcp add findutils --transport http https://mcp.findutils.com/ --header "Authorization: Bearer YOUR_API_KEY"
```

Then ask the client to call `findutils:ics_expand_rrule`. Full MCP reference: https://findutils.com/mcp/ics-expand-rrule/

---
Full catalog: GET https://api.findutils.com/api/tools · https://findutils.com/api/ · https://findutils.com/llms.txt
