OpenMeet
Sign in
The free Calendly alternative

Unlimited event types, reminders, and your own brand — free.

Everything Calendly’s free plan gates, unlocked — with no per-seat tax, ever. And the part no other free scheduler can promise: every slot you offer is genuinely bookable, guaranteed by the database, not by hope. You can check it yourself.

Sign in with Google — takes about 10 seconds.
You’re 3 minutes from your first booking link.
Free vs free

Calendly’s free plan gates the basics. Ours ships them.

No per-seat tax, no “Powered by” badge, no reminder paywall. The differences that matter most — the rest are on the full comparison.

Free-tier comparison between Calendly Free and OpenMeet Free.
On the free planCalendly FreeOpenMeet Free
Event types1Unlimited
Email remindersIncluded
No “Powered by” branding on your booking pageFree, forever

And on every OpenMeet plan, a database constraint makes double-booking physically impossible, and each confirmation is read back on your calendar before it says “confirmed.” See how it’s proven.

Calendly Free-plan limits checked against calendly.com/pricing on 21 Jul 2026 — plans change, so it’s worth a look for yourself.

How the guarantee holds

Not a promise. A mechanism.

A database constraint, not a retry

Two bookings for the same host and time physically cannot both commit — Postgres rejects the collision at the source. Not application code hoping to catch it in time.

Timezone locked before you book

Detected, shown, and yours to change — confirmed before anything commits. Never a silent UTC guess that lands the call at 3am.

Read back before it says confirmed

The calendar write and the email commit atomically, and the event is read back before you ever see “confirmed.” No “accepted but never synced.”

No double-booking, live

Two people, one slot. Watch one get turned away.

See it happen

Two people click the same time at the same instant. Watch one win and one get turned away — decided by the database, not by luck.

AdaThu 16 · 09:00
ready
GraceThu 16 · 09:00
ready
The rejection isn’t animation logic — it’s this exact constraint, live in the schema at migrations/0000_init.sql:ALTER TABLE bookings ADD CONSTRAINT bookings_no_overlap EXCLUDE USING gist ( assigned_host_id WITH =, time_range WITH && ) WHERE (status IN ('held', 'confirmed'));
Reproduce the real race against Postgres
The animation above illustrates the mechanism — it isn’t a live counter. To watch the constraint reject a genuine concurrent race, run RUN_DB_TESTS=1 pnpm test: tests/integration/booking.int.test.ts fires two real commits at one slot and asserts exactly one wins.
Two people can’t grab the same slotA double-booking is blocked by the database itself — not a setting you can forget to switch on. See exactly how.
No credit card, everThe free plan has no billing path at all — there is nothing to enter a card for.
OpenMeet