One Canonical Event Schema for Every Calendar You Integrate

Send an inputs array of provider payloads—google, outlook, apple, calendly, ews, generic, and more—or post raw .ics text to /normalize/ical. Get a merged events list with start/end in original time and UTC, recurrence, attendees, provenance, and interpretation.confidence. One bad input does not fail the rest. Stateless, 25MB max, no outbound calls.

Try Calendar Normalization Basic on RapidAPI: 100 requests/month free

Stop maintaining parallel parsers for Google items, Graph value, Apple shapes, and iCal RRULEs. One POST returns one sortable events array—your UI, conflict detection, and warehouses all target the same fields.

Real-world use cases

  • Unified calendar apps — Merge work and personal sources into one timeline using start.utc for ordering.
  • Scheduling products — Normalize Calendly, Acuity, and internal APIs before overlap and availability logic.
  • CRM & support — Ingest Exchange, Google, and Zoho meetings into one schema for “next meeting” surfaces.
  • Analytics & BI — Load canonical events with provenance.calendarId for capacity and density metrics.
  • iCal subscriptions — POST raw feed text to /normalize/ical with optional defaultTimezone.

Why not map every provider by hand?

  • Field names, timezone rules, and all-day semantics differ by vendor
  • Recurrence and exceptions are easy to get wrong
  • Every new integration duplicates the same risky glue code

Who this API helps

  • Product and platform engineers
  • Integration and iPaaS builders
  • Data teams ingesting calendar feeds
  • Scheduling and booking SaaS teams

Before and after

Provider-specific fragments become one predictable shape (illustrative).

Google-style fragment

items: [{ summary, start.dateTime }]

Canonical event (fragment)

{
  "title": "Team standup",
  "start": { "utc": "...", "timezone": "..." },
  "allDay": false,
  "provenance": { "calendarId": "google" }
}

What the API does

POST /normalize — JSON body with inputs[]: each item has required calendarId and payload; optional defaultTimezone (IANA), parsingHints. Returns results (per input), merged events, and errors.

POST /normalize/ical — Raw text/plain body (.ics). Query: calendarId (default ical), defaultTimezone (optional).

GET /health{ "status": "ok" }.

The service does not call Google, Microsoft, or other calendar APIs. You supply the JSON or .ics you already retrieved.

Partial success by design

Each input is normalized independently. Parse failures yield results[].error and entries in errors; successful inputs still contribute to events.

Request & response

JSON host: https://calendar-event-normalization.p.rapidapi.com — confirm x-rapidapi-host in your RapidAPI app.

· · · ·

Try it in the playground

Choose JSON or iCal, pick a sample (JSON), add your RapidAPI key, then run or copy generated code.

iCal mode sends the textarea as raw text with Content-Type: text/plain.

Subscribe on RapidAPI for production quotas.

Get code

Snippets match the playground. Host: calendar-event-normalization.p.rapidapi.com.

Integration time: One HTTP client that can POST JSON or plain text with RapidAPI headers.

Real-world examples

1. Multi-calendar personal dashboard

After OAuth sync jobs fetch Google and Outlook payloads, send both in one inputs array and render events sorted by start.utc.

2. Public iCal feeds

Download feed text server-side, POST to /normalize/ical, merge with JSON-normalized sources in your app if needed.

3. Unknown JSON shape

Use calendarId: "generic" for best-effort extraction; check interpretation.warnings and confidence.

Pricing & tiers (RapidAPI)

Built for teams that unify many calendar sources without owning parser maintenance.

Plans on RapidAPI:

Basic

$0/mo

100 requests/month included

Pro

$9.99/mo

10,000 requests/month included

Mega

$99.99/mo

250,000 requests/month included

Overage and plan changes follow the live RapidAPI listing.

What to expect

Successful normalization returns HTTP 200 with events, results, and errors (possibly empty). Invalid JSON or missing inputs on /normalize returns 400. Oversized JSON body returns 413. Rare server faults return 500.

About this API

Also known as

Calendar event normalizer, unified calendar schema API, multi-provider calendar converter.

Normalize Google Calendar, Microsoft Graph/Outlook, Apple, CalDAV, Calendly, Acuity, Canvas, Exchange EWS, and generic JSON into one event model—plus raw iCal via a dedicated route—so downstream code never branches on vendor shape.

Frequently asked questions

  • No. You pass data you already obtained. There are no outbound calls to providers.
  • 25MB per request for JSON and for plain-text iCal.
  • No. Stateless in-memory processing.
  • Yes. Use multiple objects in inputs, each with its calendarId and payload.
  • POST to /normalize/ical with Content-Type: text/plain and optional calendarId and defaultTimezone query params.
  • Other inputs still normalize. Check results[].error and the errors array.
  • On RapidAPI: Basic 100/mo free; Pro $9.99/10k; Ultra $49.99/100k (popular); Mega $99.99/250k; overage on the listing.
  • Only RapidAPI credentials here. Provider OAuth or keys are for your own fetch layer.