Prototype
Try: {{ tip }}
NewSlot holds during Stripe checkout

Scheduling that never double-books.

Rota syncs Google, Outlook and Apple Calendar both ways, holds a slot while someone pays, handles every time zone and creates a Zoom link for each booking. Share one link and let people book you.

rota.app/
{{ ic.check }}Free plan, no card {{ ic.check }}No card required {{ ic.check }}Bookers don't need an account
JM
Jessica Moreno
Strategy session · 50 min · $150
SMTWTFS12345678910111213141516171819202122232425262728
9:00am10:30am1:00pm2:30pm4:00pm
Synced with Google Calendar
{{ ic.lock }}Held for you · 9:42
Features

Everything that breaks in DIY scheduling, handled.

The fragile parts of booking software, built in and kept running for you.

{{ ic.refresh }}
Two-way calendar sync

Connect Google, Outlook and Apple Calendar. Existing events block your slots, and new bookings land on your calendar within seconds through push webhooks.

Google Calendar · 3 calendarsSynced
Outlook · 1 calendarSynced
Apple Calendar · via iCloudChecked 2 min ago
{{ ic.globe }}
Every time zone, every clock change

Bookers see times in their own zone. Each date is converted on its own, so daylight saving never moves your working hours.

{{ ic.lock }}
No double-bookings

A slot is held while someone pays with Stripe and released the moment they abandon checkout.

{{ ic.lock }}Tue 10:30am held for you9:42
{{ ic.card }}
Reschedule, cancel, refund

Every confirmation has self-serve links. Refunds follow the policy you set for each event type.

{{ ic.video }}
A Zoom link for every booking

Each booking gets its own meeting, updated on reschedule and deleted on cancel.

{{ ic.shield }}
Maintained for you

Token refresh, webhook renewals and sync retries run automatically. If a connection breaks, you hear about it before it costs you a booking.

How it works

Live in five minutes.

01
Connect your calendar

Sign in with Google or Outlook. Rota imports your busy times and keeps them in sync.

02
Set hours and event types

Choose when you work, what people can book, and what it costs.

03
Share your link

Send rota.app/you, embed it on your site, or email it. Bookings flow in.

Pricing

Free for individuals. Simple when you grow.

Pricing that scales with your calendar.

Unlimited people on every paid plan, never per seat. A team of 5 pays $80 a month on Calendly and $60 on Cal.com. On Rota it starts at $6. You only pick how many bookings you take.

{{ p.name }}
Most popular
{{ p.desc }}
{{ p.price }}{{ p.per }}
{{ p.note }}
{{ ic.checkS }}{{ f }}
Compare plansFreeStarterBusinessStudio
{{ c.f }}{{ c.a }}{{ c.b }}{{ c.c }}{{ c.d }}
FAQ

Questions, answered.

Anything else? Email [email protected].

{{ q.a }}

Your booking link, live in five minutes.

Free for individuals. No card required.

Rota
© 2026 Rota

Your booking page in five minutes.

{{ x.n }}{{ x.t }}
Free for one person. Unlimited people from $6 a month.
{{ suPlan.name }}· 14 days free, no card. Then pick a plan or stay on Free.

Create your account

Already have one? Sign in to the demo account

or with email
{{ c.err }}
{{ ic.link }}Your link will be rota.app/{{ claim }}

By continuing you agree to the Terms and Privacy Policy.

RotaStep {{ obv.n }} of 4
{{ x.label }}

Tell people who they're booking

This shows on your public booking page.

Enter your name
rota.app/
{{ ic.checkS }}rota.app/{{ obv.handle }} is available
{{ obv.handleMsg }}

Connect your calendars

Rota checks these for conflicts so you're never double-booked, and adds new bookings to them.

{{ p.initial }}
{{ p.name }}
{{ p.sub }}
{{ ic.checkS }}Connected
{{ ic.shield }}Two-way and self-maintaining. Your existing events block slots on your page. Rota refreshes access tokens, renews webhooks and alerts you if a connection breaks.

Get paid for bookings

Optional. Connect a gateway to charge for paid event types. You can do this later in Integrations.

{{ p.initial }}
{{ p.name }}
{{ p.sub }}
{{ ic.checkS }}Connected

Add video conferencing

Optional. Every booking gets its own meeting link, added to the invite.

{{ p.initial }}
{{ p.name }}
{{ p.sub }}
{{ ic.checkS }}Connected
{{ me.initials }}

{{ pg.name }}

{{ pg.bio }}

{{ f.ini }}
{{ ic.globe }}{{ bkTzName }}
No public event types yet. Check back soon.
Rescheduling {{ bk.origLabel }} Pick a new time. No extra charge.
{{ me.initials }}{{ me.name }}

{{ cur.title }}

{{ cur.desc }}

{{ cur.hostsLabel }}

{{ ic.clock }}
{{ cur.durLabel }}
{{ ic.video }}
{{ cur.locLabel }}
{{ ic.card }}
{{ cur.priceLabel }}
{{ ic.globe }}
{{ cur.policyLabel }} refunds{{ cur.policyDesc }}
{{ monthLabel }}
{{ w }}
{{ dateLabel }}
{{ ic.alert }}{{ bk.slotErr }}
{{ g.label }}{{ g.n }}
{{ s.label }}
No open times this month. Try the next one.
{{ ic.clock }}{{ dst }}
{{ wkLabel }}
{{ ic.alert }}{{ bk.slotErr }}
{{ d.wd }}
{{ d.dn }}
No times
{{ selLabel }}
Next available times
{{ ic.alert }}{{ bk.slotErr }}
{{ d.wd }}
{{ d.date }}
{{ selLabel }}
{{ ic.lock }}
{{ hold.label }} is held for you
Nobody else can book it while you check out.
{{ hold.left }}

{{ cur.title }}

{{ ic.cal }}
{{ when.date }}
{{ when.time }}
{{ ic.clock }}
{{ cur.durLabel }}
{{ ic.video }}
{{ cur.locLabel }}
{{ ic.globe }}
{{ when.tz }}
Your details
{{ c.err }}
{{ q.err }}
{{ q.err }}
Payment
{{ cur.priceLabel }}
Express checkout
{{ xp.note }}
or pay with card
{{ c.err }}
{{ ic.lock }}{{ payProcNote }}
{{ cur.policyLabel }} refunds. {{ cur.policyDesc }}
{{ ic.checkL }}

{{ conf.heading }}

{{ conf.sub }}

{{ r.k }}
{{ r.v }}
{{ r.sub }}
{{ ic.card }}
Receipt {{ conf.rcpt.no }} · {{ conf.rcpt.amt }} paid with {{ conf.rcpt.method }} on {{ conf.rcpt.date }}
A copy was emailed to {{ conf.rcpt.email }}.
{{ ic.video }}
{{ conf.whereLabel }}
{{ conf.whereSub }}
{{ conf.link }}
Add to calendar
Need to make a change?
{{ changeNote }}

Cancel this booking?

{{ cx.what }} · {{ cx.when }}

{{ cx.amountLabel }}
{{ cx.amount }}
{{ cx.basis }}
Refund policy
{{ t.label }}
{{ t.val }}
{{ ic.x }}

Booking cancelled

{{ cxd.sub }}

{{ ic.check }}{{ l }}
{{ ic.alert }}
{{ banner.title }} {{ banner.body }}

{{ dash.greet }}

{{ dash.sub }}

Finish setting up · {{ setup.done }} of {{ setup.total }}
A few minutes now means bookers never hit a dead end.
{{ ic.clock }}{{ upNext.kicker }}
{{ upNext.title }}
{{ upNext.when }}
“{{ upNext.note }}”
Nothing booked yet. Share your link to fill your calendar.
Needs you
{{ att.count }}
{{ ic.checkS }}All caught up. No requests waiting.
{{ ic.cal }}Today
{{ dash.today }}
{{ dash.todaySub }}
{{ ic.clock }}Next 7 days
{{ dash.week }}
{{ dash.weekSub }}
{{ ic.card }}Upcoming paid
{{ dash.rev }}
{{ dash.revSub }}
Bookings
Times in {{ htzName }}
{{ ic.lock }}
{{ holdRow.when }} · {{ holdRow.title }}
Held while a booker is in checkout · auto-releases
{{ holdRow.left }}
{{ r.mon }}{{ r.day }}
{{ r.title }}{{ r.flag }}
{{ r.timeLabel }} · {{ r.loc }} · {{ r.pay }}{{ r.withLbl }}
{{ r.initials }} {{ r.name }} {{ ic.globe }}{{ r.their }}
{{ ic.cal }}
{{ emptyHead }}
{{ emptySub }}

Event types

What people can book with you.

{{ e.visLabel }} on booking page

{{ d.title }}

Basics
rota.app/{{ me.handle }}/
Payment & refunds
{{ ic.lock }}
{{ sp.edTitle }}
{{ sp.edBody }}
Free events have no payment or refunds. Bookers can still cancel and reschedule.
Hosts
Paid plans
Round-robin and collective events are on every paid plan. Change plan
Limits
Require approvalBookings arrive as requests. The slot is held and the card authorized, but nothing is confirmed or charged until you approve.
Booker sees
{{ d.title }}
{{ d.desc }}
{{ prev.dur }}{{ prev.price }}{{ prev.loc }}
{{ prev.policy }}
{{ ic.video }}{{ prev.zoomNote }}

Booking page

How rota.app/{{ me.handle }} looks to the people booking you. Changes are live.

Brand
{{ me.initials }}
PNG, JPG, SVG or WebP up to 2 MB. Square works best. Replaces your initials on the booking page.
Follows each booker's device setting. On this device: {{ sysLabel }}.
Layout
Let bookers switch between layouts
Profile
rota.app/{{ me.handle }}
{{ o.title }}
{{ o.sub }}
Booking questions
Asked after the booker picks a time.
{{ ic.lock }}NameRequired
{{ ic.lock }}EmailRequired
{{ q.typeLabel }}
Required
Add
Branding & domain
{{ brandTag }}
Show "Scheduling by Rota" on your page
Live preview
{{ me.initials }}
{{ me.name }}
{{ me.bio }}
{{ e.title }}{{ e.meta }}
Next
Scheduling by Rota

Payments

Get paid through Stripe, and set what happens when a booking is cancelled.

S
Payouts
{{ sp.sub }}
{{ sp.tag }}

Bookers pay into your own Stripe account and Stripe sends the money to your bank, usually 2 business days later. Rota never holds your money.

{{ ic.checkS }}{{ n }}
{{ x.k }}{{ x.v }}{{ x.s }}
Recent payouts
{{ p.date }}{{ p.n }} {{ p.st }} {{ p.amt }}
October so far
{{ m.k }}{{ m.v }}

Defaults for every paid event type. Each event type can use these or override the refund policy.

Default refund policy
Custom tiers
Cancelledh or more before → Later than that →
What a booker gets back on a {{ payExPrice }} booking
{{ x.when }}
{{ x.amt }}
Cancelling & rescheduling
After this, the cancel link is disabled and bookers are asked to contact you.
Let bookers reschedule themselves (free)
Refunds
Stripe keeps its fee when a payment is refunded. On {{ payExPrice }} that's {{ payFee }}.
Offer credit instead of a refundBookers can choose full-value credit for a future booking. No Stripe fee, and you keep the revenue.
Always on
{{ ic.checkS }}{{ r }}
Paid event types
{{ e.title }}
{{ e.price }}
No paid event types yet. Set a price on an event type to take payments.

Availability

Applies to all event types. Changes are live on your booking page.

Working hours
{{ a.name }}
Unavailable
to
Date overrides
{{ ic.cal }}
{{ o.label }}
{{ o.val }}
{{ ic.clock }}Daylight saving
{{ hostDst }}
Your 9:00am for bookers in
{{ g.range }}
{{ g.sub }}
{{ g.val }}

Integrations

Connect your calendars, meeting apps and payment gateway.

Calendars

Checked calendars block busy times. New bookings are added to the one you choose.

{{ calNote.text }} Upgrade

{{ a.initial }}
{{ a.name }}
{{ a.email }}
{{ a.status }}
Connect to block busy times and add bookings to this calendar.
{{ a.errTitle }} {{ a.errBody }}
Check for conflicts
{{ i.name }}
{{ ic.refresh }}{{ a.lastLabel }}

Sync status

Connection health and recent calendar activity.

Sync health
{{ h.k }}
{{ h.sub }}
{{ h.v }}
Activity
{{ l.t }}
{{ l.m }}
Z
Zoom {{ zoomTag }}
{{ zoomSub }}
M
Google Meet {{ gm.tag }}
{{ gm.sub }}
S
Stripe {{ sp.appTag }}
{{ sp.appSub }}
P
PayPal {{ pp.tag }}
{{ pp.sub }}

Emails & reminders

What Rota sends, and when. Sent from Jessica Moreno via [email protected]; replies go to you.

{{ emCur.label }}
To {{ emCur.who }} · {{ emCur.when }}
{{ emCur.state }}
{{ ic.lock }}Free sends Rota's standard wording. Edit subjects and messages on any paid plan.
Insert a variable
Preview · as Marcus Lee will see it
From Jessica Moreno <[email protected]>
{{ emPrev.subj }}
{{ emPrev.body }}

Settings

Your profile, plan and account.

{{ me.initials }}
rota.app/
Changing it breaks links you've already shared. We redirect the old one for 30 days.
Dates show as {{ rg.datePv }} and prices as {{ rg.moneyPv }}. Bookers see dates in their own language and time zone. Currency should match your Stripe account.
Current plan
{{ bl.pName }}{{ bl.pPrice }}
{{ bl.pRenew }}
Invoices
{{ i.date }}{{ i.desc }} {{ i.st }}{{ i.amt }}
Billing email: {{ me.email }}
Email me when
Sent to {{ me.email }}. Booker emails are set in Emails & reminders.
{{ n.label }}{{ n.sub }}
{{ a.label }}{{ a.sub }}
Delete accountCancels upcoming bookings, disconnects calendars and Stripe, and deletes your data after 30 days.

Team

{{ tm.sub }}

{{ tm.seatLabel }}
{{ ic.lock }}
Teams start on any paid plan
Free is for one person. Every paid plan has unlimited people, round-robin, team pages, brands and a custom domain, from $6 a month.
{{ m.ini }}
{{ m.name }}Invited
{{ m.email }} · {{ m.load }}
Owner
{{ tm.invErr }}
OwnerBilling, plan, Stripe payouts and deleting the workspace.
AdminManage people, team events, brands and the domain. Sees every booking.
MemberTheir own availability, calendars and bookings. Joins team events they're added to.
{{ tm.pageUrl }}
rota.app/team/
On this page
Event types with more than one host.
{{ e.title }}
{{ e.sub }}
None yet. Set an event type to round-robin or collective.
{{ ic.lock }}
Multiple brands are on every paid plan
Run separate booking pages with their own name, colour and event types from one account.
{{ b.name }}
{{ b.url }}
Main
{{ b.evLabel }}
Add a brand
Choose which brand an event type belongs to in its Hosts settings.
{{ ic.lock }}
Custom domains are on every paid plan
Serve your booking pages from your own address, like book.yourstudio.com, with free SSL.
Custom domain
{{ tm.dTag }}
Use a subdomain. Your main website stays where it is.
{{ tm.dHelp }}
TypeNameValueStatus
{{ r.type }}{{ r.name }}{{ r.value }}{{ r.st }}
Your hold expired
We held {{ expired.label }} for {{ holdLabel }} and released it so others could book. {{ expired.msg }}
Card declined
Your bank declined the payment and nothing was charged. Your time is still held for {{ hold.left }}.
{{ sp.dlgTitle }}
{{ sp.dlgBody }}
{{ x.n }}{{ x.t }}{{ x.s }}
Waiting for Stripe…
Finish setup in the Stripe tab. We'll bring you back here when it's done.
Sign in to Rota with your Apple Account
{{ ap.appleId }}
Signing in with Apple doesn't connect your calendar. You can add Apple Calendar in the next step.
Signing in with Apple…
Creating your Rota account.
Delete your account?
Your {{ dlN }} upcoming booking(s) will be cancelled and refunded in full, and bookers will be emailed. Type DELETE to confirm.
{{ hc.title }}
{{ hc.body }}
{{ curSym }}
{{ hc.customErr }}
{{ c.k }}{{ c.v }}
{{ ic.card }}Free booking, so there's no payment to refund.
{{ hc.rc.title }}
{{ ic.check }}{{ l }}
Request a reschedule
{{ hr.body }}
{{ oa.title }}
Signing in as {{ oa.email }}. Rota is asking to:
{{ ic.checkS }}{{ p }}
{{ oa.msg }}
Add a date override
{{ ov.label }}
A
{{ icl.title }}
Connects over CalDAV with an app-specific password
{{ icl.idErr }}
{{ icl.pwErr }}
1Go to account.apple.com and sign in.
2Open Sign-In and Security, then App-Specific Passwords.
3Click +, name it "Rota" and paste the password here.
Your Apple ID needs two-factor authentication. Changing your Apple ID password revokes it, and Rota will ask you for a new one.
{{ ic.clock }}iCloud doesn't send change notifications, so Rota checks your calendars every 5 minutes and re-checks live before confirming any booking. Stored encrypted.
Signing in to caldav.icloud.com and discovering your calendars…
Share your booking page
rota.app/{{ me.handle }}
Link to one event type
{{ e.title }}
{{ e.path }}
{{ sh.code }}
{{ sh.qrImg }}
Print it on flyers, slides or your desk. It opens rota.app/{{ me.handle }}.
Add at least one valid email
{{ ic.check }}{{ toast }}