Privacy Policy
Last updated: 26 August 2026
PeekWhen lets you share a view-only link that shows when you are freein the viewer’s own time zone. It does not book meetings, create calendar events, or modify your calendar in any way. This policy explains exactly what we access, what we store, and what we deliberately do not touch.
The short version
- We read free/busy information only — the start and end times of when you are busy. We never read or store the title, description, location, attendees, or any other content of your calendar events.
- We do not store your calendar’s events. We query your provider live when someone opens your link and compute your free windows on the fly.
- Someone who only opens your link needs no account and grants us no access. Connecting a calendar to compare availability is entirely optional.
- You can disconnect a calendar at any time, which immediately deletes its stored access token.
What we access
| Provider | Scope requested | What we use it for |
|---|---|---|
https://www.googleapis.com/auth/calendar.freebusy | Read your free/busy intervals only | |
openid | Identify your account by email (no calendar access) | |
| Microsoft | Calendars.Read | Read your events’ timing to compute free/busy |
An honest note on the Microsoft scope.Microsoft’s minimal free/busy scope (Calendars.ReadBasic) requires an organization admin’s consent, which personal Microsoft accounts (outlook.com, hotmail.com, live.com) cannot grant — so it does not work for them. To support personal accounts we request Calendars.Read, which technically could return event titles and attendees. We deliberately never read them.Our request to Microsoft explicitly selects only each event’s start time, end time, all-day flag, and free/busy status ($select=start,end,showAs,isAllDay) — never subject, body, organizer, attendees, or location. This restriction is enforced in our code, and any change to it is treated as a change to this policy. Google’s calendar.freebusy scope is the least-privileged availability permission Google offers and cannot return event contents at all.
What we store
- Your account identity: the email and display name from your sign-in or connected provider.
- Encrypted OAuth refresh tokens, encrypted at rest (AES-256-GCM), so we can query your free/busy when a link is opened.
- Your settings: which connected calendars contribute busy time, working hours, buffers, minimum notice, link slugs, offered durations, temporary overrides, and each link’s time horizon.
We do not store your calendar events, or their titles, descriptions, locations, or attendees; nor any busy/free intervals beyond the moment we compute a response — those are computed live and not retained.
How your availability is computed
When someone opens your link, PeekWhen queries your calendar provider for your free/busy intervals over the link’s time horizon, subtracts them (plus your buffers, minimum notice, and any exclusions) from your working hours, and shows the resulting free windows in the viewer’s time zone. The query happens at view-time; results may be briefly cached (seconds) to protect provider quotas, then discarded.
What recipients get
Anyone who opens your link sees only your free windows, in their own time zone. Opening a link requires no account and grants the viewer no access to your calendar or your account.
Viewers who connect a calendar (optional)
A recipient may optionally connect their own calendar to see when the two of you are mutually free (“overlap”). This is opt-in and gated by a consent screen before any provider sign-in. When a viewer connects:
- We create a lightweight account for them, keyed by their email, on the same terms as this policy.
- We store an encrypted access token for their connected calendar, used only to compute overlap. We read only their free/busy — the same event-timing-only restriction applies.
- The viewer can disconnect at any time, which deletes the stored token.
- If a connected calendar is unused for 30 days, we automatically delete its stored token (idle-expiry).
Data retention and deletion
- Configuration is retained while your account is active.
- Disconnecting a calendar immediately deletes its stored access token — from settings (owners) or the link page (connected viewers).
- Idle-expiry: any connected calendar’s token unused for 30 days is deleted automatically.
- Account deletion: you can delete your account and all associated data yourself from settings (“Delete account”), or email us to request it.
- You may also revoke our access directly at your Google account permissions or your Microsoft account’s app permissions at any time.
What “free/busy” reveals
Showing when you are free necessarily implies when you are busy. A determined viewer who reloads your link over time could infer patterns in your schedule. We do not reveal what those busy periods are — only that they exist. To limit this, PeekWhen provides per-link horizon caps and optional link expiry.
Sharing and third parties
We do not sell your data. We share data only with your chosen calendar provider (to query free/busy) and with infrastructure providers strictly necessary to run the service (hosting, database, transactional email), under data-processing terms. We do not use Google or Microsoft user data for advertising, for training AI/ML models, or for any purpose beyond providing the availability-viewing feature you requested. Our use of Google user data complies with the Google API Services User Data Policy, including its Limited Use requirements.
Security
OAuth tokens are encrypted at rest (AES-256-GCM) with a key held outside the database. We request the narrowest scopes each provider makes workable, read no event content, and delete tokens on disconnect and after idle-expiry — minimizing the impact of any incident.
Contact
Questions, data-export, or deletion requests: privacy@peekwhen.com.