Skip to main content
EZQR
How-To·

Calendar Event QR Codes: The Complete 2026 Guide to "Add to Calendar" (.ics)

TL;DR

A guest scans your printed save-the-date, and on their iPhone nothing happens — because the 'Add to Calendar' link only resolved in Google Calendar, which they don't use. Every 'add to calendar' QR is really a **URL QR** pointing at one of three things: a Google Calendar render deeplink (`calendar.google.com/calendar/render?action=TEMPLATE&...`), a hosted **.ics file** that Apple Calendar, Outlook, and Google all open, or a landing page with separate Add buttons. The hosted .ics is the most universal. The #1 mistake is the `dates` parameter: both timestamps are **UTC** (`YYYYMMDDTHHMMSSZ`), not local — get the offset wrong and a 6pm event lands at the wrong hour on every guest's phone. EZQR generates the URL QR free with no watermark; you host the .ics, EZQR encodes the link. **Static codes** survive forever and suit a fixed-date wedding or conference. **Dynamic codes** ($5/mo Lite) let you repoint the link if the event moves without reprinting a single flyer.

Key Takeaways

  • Every 'add to calendar' QR is a **URL QR** — there is no native 'calendar' barcode type. You encode a link, and what's on the other end decides which calendar apps it works in.
  • The **Google Calendar render deeplink** (`action=TEMPLATE`) is fast to build but only opens Google Calendar — an iPhone guest on Apple Calendar gets a worse experience.
  • A **hosted .ics file** (one VEVENT with DTSTART/DTEND, SUMMARY, LOCATION, DESCRIPTION) is the most universal — scanning downloads it, and Apple Calendar, Outlook, and Google Calendar all open it.
  • The **UTC dates gotcha** is the top failure: `dates=20260615T180000Z/20260615T200000Z` is UTC, not local time — a wrong offset lands your event at the wrong hour for every guest.
  • EZQR encodes the link; **EZQR does not host your .ics file** — you host it on your site or cloud storage, then paste the public URL into EZQR.
  • **Static codes survive cancellation** forever — right for a fixed-date wedding or conference. **Dynamic codes** ($5/mo Lite) let you repoint a rescheduled event without reprinting flyers.

What a calendar event QR code actually is — a URL QR, not a special barcode

There is no native 'calendar' QR type. Every 'add to calendar' QR you have ever scanned is a URL QR code — it encodes a web link, and the link decides what happens when someone scans it. That distinction is the whole game. A vCard QR carries contact data inside the pattern; an SMS QR carries an sms: URI. A calendar QR carries a URL, and the calendar behavior lives on the server the URL points to, not in the QR.

That changes how you think about reliability. The QR will scan fine on every phone — the failure mode is never the barcode. The failure mode is the destination: a Google-only deeplink that does nothing for the iPhone guest, an .ics file you hosted on a URL that 404s, a landing page that loads slowly on conference Wi-Fi. You are choosing a destination, and the three choices have different platform coverage.

You have three real options. The Google Calendar render deeplink opens a pre-filled event-creation screen in Google Calendar. A hosted .ics file downloads a standard calendar file that Apple Calendar, Microsoft Outlook, and Google Calendar all read. A multi-calendar landing page shows the guest separate 'Add to Google / Apple / Outlook' buttons and lets them pick. Each is still a URL QR underneath — generate any of them at EZQR's calendar QR generator. The rest of this guide is about picking the right destination and getting the timestamps right.

The three approaches — Google deeplink vs hosted .ics vs multi-calendar landing

Pick the destination by who is scanning. A corporate conference where every badge is a work laptop on Outlook is a different audience than a wedding where half the guests are on iPhones and half on Android. The table maps each approach to what it opens and where it fits.

The contrarian take: most guides push the Google Calendar deeplink because it is the easiest to build, but it is the worst default. Google Calendar is one app. An 'add to calendar' QR that only works in one calendar app is a QR that fails for everyone who uses a different one — and on iPhones, the default is Apple Calendar, not Google. If you are printing for a mixed public audience, start with the hosted .ics or the landing page and treat the bare Google deeplink as the corporate-Workspace special case.

ApproachOpens onBest for
Google Calendar render deeplinkGoogle Calendar only (any device, but the user must use Google Calendar)Internal teams on Google Workspace, audiences you know are Google-first
Hosted .ics fileApple Calendar, Microsoft Outlook, and Google Calendar — the file is a standard every major app readsMixed public audiences — weddings, conferences, store events, anything printed
Multi-calendar landing pageWhatever the guest taps — separate Add to Google / Apple / Outlook buttonsLarge mixed audiences where you want the guest to self-select; pairs with a [multi-URL QR](/qr-codes/multi-url)

Tips

  • **Default to the hosted .ics for any printed, public-facing event.** It is the only one of the three that opens cleanly on Apple Calendar, Outlook, and Google Calendar without the guest having a specific app installed.
  • **Use the Google deeplink only when you control the audience's stack** — an all-Google-Workspace company offsite, an internal training. For a wedding or a retail event, it strands every Apple Calendar guest.
  • **Use the multi-calendar landing page when the audience is large and unknown** and you would rather let people pick than guess. A [multi-URL QR](/qr-codes/multi-url) does the same job with a chooser screen.

The Google Calendar render deeplink — exact format and parameters

The Google Calendar render deeplink builds a URL that opens Google Calendar with a new event pre-filled. The guest scans, reviews the event, and taps Save. The format is documented and stable:

https://calendar.google.com/calendar/render?action=TEMPLATE&text=EVENT+NAME&dates=20260615T180000Z/20260615T200000Z&details=DETAILS&location=LOCATION

The parameters, in order:

  • `action=TEMPLATE` — always present, always this exact value. It tells Google Calendar to open the new-event template screen.
  • `text=` — the event title, URL-encoded. Spaces become + or %20. Acme Product Launch becomes Acme+Product+Launch.
  • `dates=` — the start and end timestamps, separated by a forward slash /. Both are in UTC in the format YYYYMMDDTHHMMSSZ — four-digit year, two-digit month, two-digit day, the letter T, two-digit hour, minute, second, then the literal Z that marks UTC. 20260615T180000Z/20260615T200000Z means 18:00 to 20:00 UTC on June 15, 2026.
  • `details=` — optional. The event description body, URL-encoded. Put your agenda, a link back to the event page, parking notes.
  • `location=` — optional. The venue address, URL-encoded. Google Calendar turns this into a tappable map link.

A real example for a 6pm-to-8pm UK launch on June 15, 2026 (UTC+1 in summer, so 18:00 local is 17:00 UTC):

https://calendar.google.com/calendar/render?action=TEMPLATE&text=Acme+Product+Launch&dates=20260615T170000Z/20260615T190000Z&details=Doors+at+5:30pm.+RSVP+at+acme.com/launch&location=10+King+St,+London

The honest limit, again: this URL only opens Google Calendar. An iPhone guest whose default is Apple Calendar will get bounced into a browser tab, see Google's interface, and may have to sign into a Google account they do not use. That is a worse experience than a hosted .ics. Build this deeplink when your audience is Google-first; otherwise read the next section.

The hosted .ics file — the most universal calendar QR

A .ics file is the iCalendar standard — the plain-text format every major calendar app reads. Host one at a public URL, encode that URL as a QR, and the guest who scans it downloads a file that Apple Calendar, Microsoft Outlook, and Google Calendar all open and offer to add. This is the most universal calendar QR, and it is the one to default to for anything printed.

A minimal single-event .ics file looks like this:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Acme//Event//EN
BEGIN:VEVENT
UID:[email protected]
DTSTART:20260615T170000Z
DTEND:20260615T190000Z
SUMMARY:Acme Product Launch
LOCATION:10 King St, London
DESCRIPTION:Doors at 5:30pm. RSVP at acme.com/launch
END:VEVENT
END:VCALENDAR

The fields that matter:

  • `DTSTART` and `DTEND` — start and end, same UTC YYYYMMDDTHHMMSSZ format as the Google deeplink, same Z suffix marking UTC. The UTC rule is identical and the mistake is identical — get the offset wrong here and the event lands at the wrong hour in every guest's calendar.
  • `SUMMARY` — the event title (no URL-encoding needed inside an .ics file).
  • `LOCATION` — the venue address.
  • `DESCRIPTION` — the body text.
  • `UID` — a unique identifier for the event. Calendar apps use it to deduplicate, so a guest who scans twice does not get two copies. Make it unique per event.

Here is the part to be precise about: EZQR does not host your .ics file for you. You write the .ics file and host it at a public URL — your own website, an S3 or Cloudflare R2 bucket, Google Drive with public sharing, Dropbox with a direct-download link. Then you paste that URL into EZQR's calendar QR generator and EZQR encodes the link into the QR. EZQR's job is the QR and, on dynamic codes, the redirect that lets you repoint it. The file lives on your infrastructure.

One hosting detail that breaks people: the file has to download as an .ics, not render as text in the browser. Serve it with the text/calendar content type. If you host on a service that previews the file as plain text instead of downloading it, the calendar apps never get the prompt. Test the raw URL in a browser first — it should trigger a download or an 'Add to Calendar' prompt, not show you raw BEGIN:VCALENDAR text.

The UTC dates gotcha — why your 6pm event lands at the wrong hour

This is the single most common reason a calendar QR works in your test and lands wrong for your guests. Both timestamps in the dates parameter — and both in the .ics DTSTART/DTEND — are UTC, marked by the trailing Z. They are not your local time. If your event is at 6pm local and you write T180000Z, you have told the calendar the event is at 6pm UTC, which is not 6pm anywhere except the UK in winter.

Work an example. Your event is 6:00pm to 8:00pm on June 15, 2026, in New York. New York in June is on Eastern Daylight Time, UTC-4. So 18:00 local is 22:00 UTC, and 20:00 local is 00:00 the next day UTC. The correct value is:

dates=20260615T220000Z/20260616T000000Z

Note two things: the start hour shifted from 18 to 22, and the end rolled past midnight, so the date on the end timestamp became June 16. Miss the rollover and your two-hour event becomes a negative-duration event the calendar rejects.

The failure looks like this in the wild: you build the QR in New York at your desk, you scan it on your own phone, your phone is set to Eastern time, and the calendar quietly converts the UTC value back to your local zone — so it looks correct to you. Your guest in Los Angeles scans the same QR, their phone converts the same UTC value to Pacific time, and the event shows up three hours off. You never see the bug because your test phone hides it.

The fix is a discipline, not a tool. Always compute the UTC offset for the event's date — including whether daylight saving is in effect on that date in that location — and write the UTC value, not the local value. Then test on a phone set to a different time zone than the venue, or change your phone's time zone temporarily and re-scan. If the displayed time is correct on a phone in a different zone, the UTC math is right. For the full pre-print checklist, see the QR code best practices guide.

Tips

  • **Convert local event time to UTC before you build the QR.** A 6pm New York event in June (EDT, UTC-4) is `T220000Z`, not `T180000Z`. A 6pm London event in June (BST, UTC+1) is `T170000Z`.
  • **Watch the date rollover.** If converting to UTC pushes the end time past midnight, the date digits on the end timestamp must roll forward a day — otherwise the duration goes negative and the event breaks.
  • **Account for daylight saving on the event's actual date,** not today's date. The offset for a December event differs from a July event in the same city.
  • **Test on a phone in a different time zone than the venue.** If the time displays correctly there, your UTC conversion is correct. Testing only on a phone in the venue's zone hides the bug.

Step-by-step: build a print-ready calendar event QR

The workflow from picking a destination to handing a print-ready file to the printer:

Tips

  • **Step 1: Pick the destination.** Hosted .ics for a mixed public audience (weddings, conferences, store events). Google deeplink only if your audience is Google-first. Multi-calendar landing page for large unknown audiences where guests self-select.
  • **Step 2: Convert the event time to UTC.** Compute the offset for the event's date including daylight saving. Write `DTSTART`/`DTEND` (or the `dates` parameter) in `YYYYMMDDTHHMMSSZ` UTC format. This is the step that most often goes wrong — do it carefully.
  • **Step 3a (.ics route): write and host the file.** Build the VEVENT with `DTSTART`, `DTEND`, `SUMMARY`, `LOCATION`, `DESCRIPTION`, and a unique `UID`. Host it at a public URL served as `text/calendar`. Open the URL in a browser to confirm it downloads, not renders as text.
  • **Step 3b (Google route): build the deeplink.** Assemble `calendar.google.com/calendar/render?action=TEMPLATE&text=...&dates=...&details=...&location=...` with every value URL-encoded.
  • **Step 4: Decide static vs dynamic.** Static for a fixed-date event that will not move — the link is baked into the pattern and works forever. Dynamic ($5/mo Lite) if the event might be rescheduled or you want scan analytics — you can repoint the link without reprinting.
  • **Step 5: Paste the URL into [EZQR's calendar QR generator](/qr-codes/calendar).** EZQR encodes the link into the QR. You are encoding the destination URL, whichever route you chose.
  • **Step 6: Customize and export.** Add colors or a logo if it fits the brand; set error correction to H if a logo covers more than 10% of the code. Export PNG (free) for digital, SVG or PDF (Lite $5/mo and up) for press-ready print.
  • **Step 7: Add CTA copy beside the QR.** `Scan to add to your calendar` in 10–12pt type. A naked QR with no label converts far worse than one that tells the guest what happens.
  • **Step 8: Test on iPhone AND Android before the print run.** Scan on Apple Calendar and on Google Calendar. Verify the event title, the correct local time (on a phone in a different zone), the location, and that the Add/Save prompt appears. See the [QR code size guide](/guides/qr-code-size-guide) for print dimensions.

Use cases — where the calendar QR earns its keep

Calendar QRs pay off wherever you are asking people to remember a date that is weeks or months away. The scan turns 'I'll add it later' into a saved event with a built-in reminder, which is the difference between a no-show and an attendee.

Conferences and trade shows. Print the QR on badges, session-room door signs, and the printed agenda. A hosted .ics per session lets attendees build their own schedule by scanning the talks they want. For the full event-surface playbook, see the event QR codes industry page.

Weddings and save-the-dates. This is the mixed-audience case that makes the hosted .ics non-negotiable — half your guests are on iPhones, half on Android. A Google-only deeplink fails for every Apple Calendar guest. Print the QR on the save-the-date card and the invitation; a static code is right because a wedding date does not change.

Webinars and online workshops. The QR goes on the registration confirmation, the email footer, the landing page. The .ics carries the join link in the DESCRIPTION so the calendar event has the Zoom or Meet URL one tap away at start time.

Recurring classes and fitness studios. A studio schedule poster with a QR per class time. Here a dynamic code earns its keep — class times shift seasonally, and you repoint the link instead of reprinting the poster.

Store events, launches, and pop-ups. Window decals, in-store signage, and flyers for a grand opening or a sale weekend. The QR drops the date into the customer's calendar with a reminder that fires the morning of. A static code works for a one-off; a dynamic code suits a venue that runs a different event every weekend.

Static vs dynamic — and why rescheduling decides it

The static-vs-dynamic call comes down to one question: can the event move? A static calendar QR encodes the destination URL directly into the pattern. There is no server in the loop, no subscription required for the printed code to keep working. The URL is the QR. For a fixed-date wedding or a conference with a locked date, that is exactly right — print it, and it works forever regardless of whether the EZQR account stays open. Static codes also survive cancellation: cancel the plan, and every printed save-the-date still resolves.

The limit is that a static QR points at one URL forever. If the event gets rescheduled, you cannot change where a static code goes — the new date means a new QR and a reprint. For 500 already-mailed save-the-dates, that is impossible.

A dynamic QR routes through an EZQR redirect that resolves to the destination URL on each scan. Because the redirect is editable, you can repoint a rescheduled event — swap the .ics URL or the Google deeplink — and every already-printed QR now sends scanners to the new date. No reprint. Dynamic codes also log each scan's timestamp, country, and device in your dashboard, which is how you see how many people actually added the event. Lite ($5/mo) gives 25 dynamic codes; Pro ($10/mo) gives 100 plus deeper analytics; Max ($20/mo) is unlimited with API access. The free plan includes 3 dynamic codes and unlimited static codes exported as PNG.

The rule of thumb: print a dynamic code for any event that could plausibly move, any recurring schedule, and anything where you want to count adds. Print a static code for a one-time, locked-date event where simplicity and permanence beat flexibility. For the full trade-off, see static vs dynamic QR codes. One thing a calendar QR never does, on either type: it cannot notify you when someone adds the event or send the guest a reminder — the calendar app's own reminder handles that, and the scan itself is silent on your end unless you are running a dynamic code that logs it.

Permanent destinations — keeping a calendar QR alive after the event and after cancellation

A static calendar QR encodes the URL directly into the pattern, so the printed code keeps resolving with no subscription, no server, no active account. That permanence matters in two specific ways for events.

First, the code outlives the publisher's billing. A static QR printed on a 2026 conference badge keeps pointing at its .ics URL in 2030, whether or not the EZQR account is still paid — as long as the .ics file is still hosted at that URL. The QR's job is to carry the link; keeping the destination alive is on your hosting. If you host the .ics on your own domain and keep that domain, the static code works indefinitely.

Second, dynamic codes flip the dependency. A dynamic calendar QR's redirect runs on EZQR's server, so it needs an active subscription for the lookup to resolve. That is the trade for being able to repoint a rescheduled event. The right move for a recurring or movable event is a dynamic code on an active plan; the right move for a fixed, permanent date is a static code that needs nobody's billing to keep working.

For a calendar QR specifically, the hosting of the .ics is the load-bearing piece — the QR will scan forever, but a 404 at the destination breaks it. Use a stable URL on infrastructure you control, and confirm the .ics still downloads before any long-lived print run. Our permanent QR code generator guide walks the verification workflow for confirming a downloaded static QR keeps working after the generator's account is cancelled, and the best free QR generators roundup covers which free tools keep static codes alive versus expiring them.

FAQ

Is there a 'calendar' QR code type, or is it just a URL QR?

It is a URL QR. There is no native calendar barcode type — every 'add to calendar' QR encodes a web link, and the calendar behavior lives on whatever that link points to. That is why the QR itself never fails to scan: the failure is always in the destination, whether a Google-only deeplink, a hosted .ics file, or a landing page. EZQR's [calendar QR generator](/qr-codes/calendar) builds the URL QR around any of those destinations.

Which approach works on both iPhone and Android?

The hosted .ics file. A .ics is the iCalendar standard that Apple Calendar, Microsoft Outlook, and Google Calendar all read, so scanning the QR downloads a file that every major app offers to add. The Google Calendar render deeplink only opens Google Calendar, which is a worse experience for an iPhone guest whose default is Apple Calendar. For any mixed public audience — weddings, conferences, store events — default to the hosted .ics.

Why does my event show up at the wrong time after someone scans?

The `dates` parameter (or the .ics `DTSTART`/`DTEND`) is in UTC, marked by the trailing `Z` — not your local time. If your event is 6pm local and you wrote `T180000Z`, you set it to 6pm UTC, which is the wrong hour almost everywhere. Convert local time to UTC first: a 6pm New York event in June (EDT, UTC-4) is `T220000Z`. The bug hides on your own phone because it converts the UTC value back to your local zone, so test on a phone set to a different time zone.

Does EZQR host the .ics file for me?

No. EZQR generates the URL QR and, on dynamic codes, the redirect — but you host the .ics file yourself on your website, an S3 or Cloudflare R2 bucket, Google Drive with public sharing, or a Dropbox direct link. Then you paste that public URL into [EZQR's calendar QR generator](/qr-codes/calendar) and EZQR encodes it. Make sure the file is served with the `text/calendar` content type so it downloads instead of rendering as text in the browser.

What's the exact Google Calendar deeplink format?

`https://calendar.google.com/calendar/render?action=TEMPLATE&text=EVENT+NAME&dates=20260615T180000Z/20260615T200000Z&details=DETAILS&location=LOCATION`. `action=TEMPLATE` is always present. `text` is the URL-encoded title. `dates` is the start and end in UTC `YYYYMMDDTHHMMSSZ` format separated by a forward slash. `details` and `location` are optional and URL-encoded. Remember this opens Google Calendar only — use a hosted .ics for mixed audiences.

Will a static calendar QR keep working if I cancel EZQR?

Yes. A static calendar QR encodes the destination URL directly into the pattern, so the printed code does not depend on any EZQR subscription, server, or redirect. Cancel, downgrade, or switch generators, and every printed save-the-date keeps resolving — as long as the destination is still live. For an .ics, that means keeping the file hosted at its URL. Only [dynamic codes](/qr-codes/dynamic) need an active subscription, because their redirect lookup runs on EZQR's server.

Can I change the event date after I've printed the QR?

Only with a dynamic code. A static QR points at one URL forever, so a rescheduled event means a new QR and a reprint — impossible for save-the-dates already in the mail. A [dynamic QR](/qr-codes/dynamic) routes through an editable EZQR redirect, so you repoint it to the new .ics or deeplink and every already-printed code now sends scanners to the new date. That repointing ability is the main reason to spend $5/mo on the Lite plan for any event that could move.

Can the QR notify me when someone adds the event to their calendar?

No. A calendar QR cannot send you a notification when a guest adds the event, and it cannot push a reminder to the guest — the guest's own calendar app handles reminders. On a static code, the scan is completely silent on your end. On a [dynamic code](/qr-codes/dynamic), EZQR logs the scan (timestamp, country, device) in your dashboard, so you can count how many people scanned, but that is a scan count, not confirmation the event was saved. Anyone promising scan-add alerts is overstating what the technology does.

What should I put in the .ics DESCRIPTION field?

The agenda, parking notes, dress code, and — most usefully for online events — the join link. Putting the Zoom or Google Meet URL in `DESCRIPTION` means the calendar event has the link one tap away at start time, so attendees do not hunt through email. Keep it concise; the field is plain text inside the .ics and does not need URL-encoding the way a Google deeplink's `details` parameter does.

How big should I print a calendar event QR?

Match the print size to scan distance: roughly a 10:1 distance-to-size ratio. A save-the-date card scanned at arm's length needs about 2–3 cm; a conference door sign scanned from a meter needs 8–12 cm; a window decal scanned from the sidewalk needs 12 cm or more. Set error correction to H if a logo covers part of the code. The [QR code size guide](/guides/qr-code-size-guide) has the full table by surface.

Should I use a multi-calendar landing page or just an .ics?

Use a hosted .ics for most printed events — one scan, one download, every major app handles it. Use a multi-calendar landing page when the audience is large and you would rather let guests self-select 'Add to Google / Apple / Outlook' than guess their app. A [multi-URL QR](/qr-codes/multi-url) does the same chooser job inside the QR product. The landing page adds a tap and a page load, so it is the right call only when self-selection genuinely helps a mixed crowd.

Which EZQR plan do I need for a calendar QR?

The free plan covers a fixed-date event: unlimited static codes exported as PNG, plus 3 dynamic codes. Lite ($5/mo) adds SVG and PDF export for press-ready print and 25 dynamic codes — the right tier if your event could be rescheduled or you want scan analytics. Pro ($10/mo) gives 100 dynamic codes with deeper analytics; Max ($20/mo) is unlimited with API access for studios or venues running many events. See the [pricing page](/pricing) for the full breakdown.

More From This Category

Related Industries

Related Guides

Related Tools

Written by

EZQR Editorial Team
EZQR Editorial Team

The EZQR editorial team writes practical guides on QR code strategy, print workflows, and how small businesses use scan-based technology. Posts are fact-checked against the ISO/IEC 18004 standard and updated when specs or market conditions change.

Ready to create your QR code?

No signup for static codes. Dynamic codes start at $5/mo. No watermarks, no expiry.

Generate your free calendar event QR code