Every small-business project I ship ends up with the same question: "where do people book us?" Three tools cover 90% of the answers I hear — Cal.com, Fillout, and Google Calendar Appointment Schedules. All three are free-tier viable, all three embed on a marketing site in under an hour, and all three have edges you only feel after you ship them.
Here is what I've kept and thrown out across the last dozen websites.
Cal.com — the "developer default"
Open-source (AGPLv3), Next.js under the hood, and a public REST + tRPC API. Cloud tier is free for one user with unlimited event types; self-hosting is free forever if you want to run your own container.
What it does well
- Round-robin, collectives, and group events work on the free tier. Most competitors gate this.
- Embed API ships four flavors — inline iframe, floating pop-up, element-click modal, and a headless React component. The floating pop-up is the one clients actually notice; two lines of script and you have a "Book" button in the corner of every page.
- Webhooks + Zapier + native Google/Outlook/Zoom/Whereby. No zap-count metering on the free tier.
- Workflow builder for SMS/email reminders. Twilio SID lives in your account, so you pay the SMS cost directly — no 3× markup.
What bites you
- Timezone-picker UX is powerful but noisy. For a local barbershop, hide it (
hideEventTypeDetails=false,layout=month_viewkeeps things flat). - Payments (Stripe) exist but require a paid tier for anything beyond a fixed price per event. If you want deposits or variable pricing, you'll outgrow the free plan.
- Their branding sits under the widget by default. You need Teams (€12/user/mo) to remove it — not a dealbreaker, but budget for it before you promise a white-label site.
Fillout — form-first with booking bolted on cleanly
Fillout started as a form builder (think Typeform without the price shock) and added Scheduling as a block type. That order matters: you build a multi-step form, drop a Schedule block anywhere in it, and the calendar view is just one step among many.
What it does well
- Conditional logic before the calendar. "Which service?" → dynamic price, dynamic duration, dynamic staff. Cal.com needs a separate event type per variant; Fillout keeps it in one flow.
- Stripe payment step is drag-and-drop. No plan upgrade needed for a fixed deposit. This alone is why I use it for cosmetics studios that want a €10 no-show fee.
- Answers land in your Google Sheet / Airtable / HubSpot without paying for Zapier.
- The generated form looks less "SaaS-y" than Typeform out of the box, especially with a custom accent color.
What bites you
- Free tier caps at 1,000 submissions/mo. Cheap to upgrade (~$15) but not free-forever.
- Round-robin / team scheduling is on paid tiers only.
- Reminders are email-only unless you connect Twilio yourself via an integration step.
Google Calendar Appointment Schedules — the one you almost forgot
Bundled with every Workspace plan (and personal Gmail accounts as of 2024). Zero setup on the calendar side, native buffer times, native "check my other calendars for conflicts," native Google Meet link.
What it does well
- Anti-double-booking is free and native. It reads your other Google calendars automatically.
- Meet links generated per booking. No Zoom account juggling.
- Shows up in Gmail with sender reputation Google already trusts.
- Public booking page URL that Google indexes reasonably well for
[your name] terminsearches.
What bites you
- Personal Gmail: no team scheduling, no payment collection, no custom domain for the page.
- Design controls are minimal. You get a color and a logo.
- No webhooks. If you want a booking to trigger anything in your stack — a CRM row, a Slack ping — you're screenshotting the confirmation email or building a Gmail-parse Zap.
- The embed is an iframe of the public page. It works, but it doesn't merge with your site's typography.
Decision matrix I actually use
| You need… | Pick |
|---|---|
| Multi-step form + payment in one flow | Fillout |
| Custom-branded booking on many pages, developer team can host | Cal.com |
| One person, one calendar, done in 15 minutes | Google Appointments |
| SMS reminders on free tier | Cal.com (bring your Twilio) |
| No-show deposit up to €20 | Fillout |
| Team of 5+, round-robin | Cal.com Teams or Calendly (paid) |
What I would not do
Do not build your own booking flow. I've watched three founders try. They end up with two bugs — double-bookings across timezones and a broken reminder loop — six weeks in. All three tools above will beat a custom build in reliability, deliverability, and mobile UX. Reach for a custom flow only when the booking is the product (marketplace, multi-provider staffing tool). For "let people book me," a hosted widget is table stakes.
The most common failure isn't the tool; it's that the booking link is buried three clicks deep. Put it in the header, put it above the fold, put it on the mobile sticky footer. A widget that converts is one people can see without scrolling.
Written from acessio, a small web-design and process-automation studio based at Königstraße 35, 70173 Stuttgart. We build the plumbing (site + booking + CRM handoff) so small businesses don't have to. More writing at acessio.de.
Top comments (0)