Google AppSheet for Nonprofits: Volunteer Rota App Without Code

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Google AppSheet for Nonprofits: Volunteer Rota App Without Code.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Google AppSheet for Nonprofits: Volunteer Rota App Without Code.

Yes. A charity on Google Workspace for Nonprofits gets AppSheet Core licences at no extra cost for accounts on its own domain, so a rota app built from a Google Sheet can cost nothing. The catch is volunteers on personal email addresses: licences, sign-in and automated reminders for outside users are limited, so settle that before you build.

Two dated rules on Google's own help pages decide the design. Core licences cover each domain-verified user inside your organisation, and since 4 May 2026 newer AppSheet accounts can send automation emails only to addresses on their own domain. For a charity with 42 volunteers the same rota can cost $0, about $2,500 or about $5,000 a year in licences, depending on who counts as a user and which rule applies to you.

Follow me on Instagram@sagnikteaches

What the Core licence covers for a charity, and what it leaves out

AppSheet has no separate nonprofit plan. The route Google documents is the Core licence bundled with Google Workspace for Nonprofits: Google's Admin Help lists that edition among those that include AppSheet Core at no cost for each domain-verified user in the organisation. Domain-verified means your charity has proved to Google that it owns its web address, so ask whoever administers your Google account to confirm it. Google's nonprofit page prices the base edition at $0 per user per month, up to 2,000 users. Both pages were checked on 28 October 2026.

Connect on LinkedInSagnik Bhattacharya

AppSheet's own pricing page lists Starter at $5, Core at $10 and Enterprise Plus at $20 per user per month, plus Publisher Pro at $50 per app per month. On discounts, Google's pages disagree: the pricing page says nonprofits with verified tax-exempt status can get one, while the help-centre FAQ says AppSheet does not currently offer nonprofit discounts. Treat a discount as unconfirmed and plan around the included Core licence.

Subscribe on YouTube@sagnikteaches
PlanList price per user per monthWhat matters for a rota
Free prototype$0Up to 10 test users. Emails from a free account go only to the app owner.
Starter$5Basic app and automation features, automated emails and Gemini for App Creation. No scheduled events and no security filters.
Core$10, or included with Workspace for NonprofitsAdds scheduled events (timed reminders), security filters, roles and private tables.
Enterprise Plus$20Adds enterprise sign-in providers, version restoration, domain integration and governance policies that control how apps are shared.
Publisher Pro$50 per app per monthPublic apps with no sign-in or security filters. Unsuitable for a rota that shows names and phone numbers.

Two counting rules matter. Each email on the app's user list counts as one user, and a signed-in user can use up to five devices without being counted again. If you switch sign-in off, every device that opens the app counts as a separate guest user, so keep sign-in on, which is AppSheet's default.

Why volunteers on personal Gmail addresses change the build

Three limits apply to anyone outside your Workspace domain, and each one bites at a different moment: when you invite people, when you remind them and when an administrator changes a setting.

  • The licence. The Core licences bundled with Workspace cover each domain-verified user in your organisation, and a volunteer on a personal address is not one of them. AppSheet's licensing page says external users of an app owned by someone in your organisation use the app owner's licence type, or an AppSheet User Pass if your organisation has bought them. No Google page gives a charity price for outside volunteers, so get the position in writing from Google or your Workspace reseller before you plan around it.
  • Reminder emails. Google's help page on out-of-domain email says that from 4 May 2026 creators sending email from automations can reach only recipients on the domain they sign in with. A Workspace organisation can also email any other domain it owns, while a creator signed in with a public address such as Gmail can email only themselves. Accounts created before 4 May 2026, and Workspace organisations created before it, are exempt. Ask your administrator which side of that line you are on.
  • The admin setting. Google Workspace has an AppSheet Core security setting that, while switched on, stops Core users sharing apps with external users, connecting to external data and sending automation emails to external recipients, and blocks webhooks and the app API too. Google's admin help says it starts switched on for organisations whose Core licences were assigned in July 2023 or later. Its wording for older organisations contradicts itself, so ask your administrator to read the current value in the Admin console before you promise volunteers anything.

One more trap sits under all three. A free account can email only the app owner, and so can any app that has not yet passed AppSheet's deployment check, so a reminder that works in testing can still fail for everyone else on the first live week.

That leaves four routes for volunteers who do not have a charity account.

  1. Give volunteers charity accounts. They count as inside users, Core covers them, and sign-in and security filters work as designed. The licence cost is $0 on the nonprofit edition, but someone has to create and suspend the accounts, and volunteers must actually read the new mailbox. Check Google's nonprofit terms on who may hold an account before you issue them.
  2. Use the app for coordinators only. Volunteers send their availability through a Google Form that writes into the same Sheet. They never open the app, so they are not app users. Coordinators place people on shifts and send reminders by Google Calendar invitation or a mail merge.
  3. Pay for outside users. Count each volunteer who opens the app at the Starter or Core list price, and accept that the licence rules for outsiders are still unconfirmed.
  4. Buy a volunteer tool. A sign-up service or a volunteer database already sends reminders to personal addresses. The scorecard near the end compares them.

A charity shop with 42 volunteers, costed five ways

Take a charity shop open six days a week with a morning and an afternoon session, three volunteers per session, 42 volunteers on its books and four coordinators who already hold charity accounts. All of these figures are illustrative. Its Workspace for Nonprofits account was created in 2024, so the 4 May 2026 email rule does not apply to it. Its Core licences date from 2024 too, so the Core security setting started switched on, and route 4 below works only if the administrator turns it off. The rota holds 2 sessions x 6 days x 52 weeks = 624 shifts a year, and 624 x 3 = 1,872 sign-ups.

RouteLicences per yearWhat a volunteer doesMain weakness
1. Charity accounts for all 42$0Signs in to the app with the charity accountAccount admin for 42 people, and leavers must be removed
2. App for 4 coordinators, volunteers use a form$0Sends availability on a form, receives a calendar invitationCoordinators do the matching by hand
3. Outside volunteers on Starter42 x $5 x 12 = $2,520Opens the appNo scheduled reminders and no security filters on Starter
4. Outside volunteers on Core42 x $10 x 12 = $5,040Opens the appCost, unconfirmed licence rules for outside users, and the Core security setting must be off
5. A sign-up service (free to Gold tier)$0 to $269.89Picks slots on a page and gets reminder emailsLess custom logic, and not a full volunteer record

Row counts decide where the data lives. AppSheet's pricing page lists 10 databases of 2,500 rows each on Core, and the sign-up tab alone would pass 2,500 rows in about 16 months (2,500 / 1,872 x 12). Keep the data in a Google Sheet instead, where Google now allows 20 million cells per spreadsheet.

For this shop I would choose route 1 if the administrator is willing and route 2 if not. I would not pick route 3 or 4 until Google has confirmed in writing how outside volunteers are licensed. The build takes about eight to twelve hours for someone comfortable with spreadsheet formulas (my estimate), and most of that is data design rather than screens.

Build it in three tabs and nine steps

Create one Google Sheet in a shared charity account with three tabs. The columns below are examples, and the rule is to keep only what the rota needs.

TabColumns and AppSheet types
VolunteersEmail (key, Email), Full name (Name), Mobile (Phone), Trained for (EnumList), Check expires (Date), Active (Yes/No)
ShiftsShift ID (key, Text), Date (Date), Session (Enum: Morning, Afternoon), Role (Enum), Slots needed (Number), plus the virtual column Spots left
SignupsSignup ID (key, Text), Shift (Ref to Shifts), Volunteer (Ref to Volunteers), Status (Enum: Confirmed, Cancelled, Waitlist), Signed up at (DateTime)
  1. Build the Sheet with a header row on each tab and ten rows of fake data. Give Shift ID and Signup ID the initial value UNIQUEID(). About 30 minutes.
  2. In AppSheet, create an app from your own data and pick the Sheet. About 10 minutes.
  3. In Data, set each column's type, mark the keys and turn Shift and Volunteer into Ref columns. Most rota bugs start here. About an hour.
  4. Add the virtual column Spots left on Shifts, using the formula below.
  5. Add two slices, Open shifts (future dates with spots left) and My signups.
  6. Add views: a calendar or deck view of Open shifts, a table of My signups, and a coordinator view of every shift.
  7. Add two actions, Sign up and Cancel.
  8. In Security, require sign-in, build the user list and add security filters.
  9. Run the deployment check, deploy, and test as a volunteer.

The expressions below use functions listed in AppSheet's function list: SELECT, COUNT, AND, OR, LOOKUP, USEREMAIL, USERROLE and TODAY. Note what is missing: AppSheet has no COUNTIF, SUMIF or VLOOKUP, which matters in the next section.

Spots left (virtual column on Shifts, type Number)
[Slots needed] - COUNT(SELECT(Signups[Signup ID], AND([Shift] = [_THISROW].[Shift ID], [Status] = "Confirmed")))

Open shifts (slice on Shifts, row filter)
AND([Date] >= TODAY(), [Spots left] > 0)

My signups (slice on Signups, row filter)
[Volunteer] = USEREMAIL()

Sign up (action on Shifts: add a new row to another table using values from this row)
Table: Signups    Shift = [Shift ID]    Volunteer = USEREMAIL()    Status = "Confirmed"
Only if this condition is true: AND([Spots left] > 0, LOOKUP(USEREMAIL(), "Volunteers", "Email", "Active"))

Cancel (action on Signups: set the values of some columns in this row)
Status = "Cancelled"

Security filter on Signups
OR([Volunteer] = USEREMAIL(), USERROLE() = "Admin")

Prompts that save time on the schema, formulas and test data

Use an AI assistant to draft the structure and the formulas, and use fake data in every prompt. The first prompt asks for the three tabs.

I coordinate volunteers for a charity shop: 42 volunteers, two sessions a day, six days a week, three volunteers per session. I will build a rota in Google Sheets and AppSheet.
Design three tabs: Volunteers, Shifts, Signups. For each, list column names, AppSheet column types, the key column and any Ref columns.
Rules: keep only what a rota needs; no home addresses, dates of birth or health details. Add 8 rows of obviously fake sample data per tab, using example.org email addresses.

A typical first answer (illustrative) returns sensible tabs but adds Date of birth, Home address and Emergency contact to Volunteers, and makes Shift a plain text column in Signups. Delete the three extra columns, because the rota does not need them, and change Shift to a Ref column so the Spots left formula can match rows. Asking the model to "list what you added that I did not ask for" catches this kind of drift quickly.

The second prompt asks for the formula, and it shows the classic slip.

Write an AppSheet expression for a virtual column on Shifts called Spots left: Slots needed minus the number of Signups rows for this shift whose Status is Confirmed. Use only functions that exist in AppSheet, not Google Sheets functions.

An assistant will often answer with [Slots needed] - COUNTIF(Signups[Shift], [Shift ID]). That fails twice: COUNTIF is a Sheets function that AppSheet does not have, and it ignores Status, so a cancelled volunteer would still use up a slot. Paste the error into the next prompt, or replace it with the SELECT and COUNT version above, which Google's function pages document.

A third prompt asks for ten test scenarios with steps and expected results, including two volunteers taking the last slot, a cancelled sign-up and a volunteer marked inactive. Run them against the fake rows before any real name goes in.

AppSheet can also draft the app for you. In My Apps, choose Create, then App, then Start with Gemini, and describe the process in plain language. It suggests tables, columns and links with sample data that Google warns may be inaccurate, so delete the samples. The feature is included with paid AppSheet licences, including Core through Workspace, and Google's page describes the generated app as using an AppSheet database. That brings the 2,500-row limit back, so treat the draft as a sketch and connect your own Sheet for the live rota. For wider background, see what AppSheet is and what a first app from a Sheet costs and when the free plan stops being enough.

Reminders: what a bot can send and where it can send it

Timed reminders come from a scheduled bot, and scheduled events sit on the Core plan, not Starter. A simple version runs every afternoon, looks for confirmed sign-ups whose shift is tomorrow and emails each volunteer. Add a virtual column Shift date to Signups with the formula [Shift].[Date], then use this as the bot's condition: AND([Status] = "Confirmed", [Shift date] = TODAY() + 1). Google's TODAY page confirms that TODAY() + 1 returns tomorrow's date.

The email itself should say who, what, when and how to cancel, and nothing else. An illustrative template:

Subject: Your shift tomorrow: [Session] on the shop floor

Hello [first name], thank you for covering [Role] tomorrow, [Date], from [Start] to [End]. Please arrive ten minutes early and sign in at the back door. If you can no longer make it, open the rota app and tap Cancel on your shift, or reply to this email so a coordinator can find cover. [Coordinator name]

Four details decide whether that email arrives.

  • Test mode. Google's pages say bot messages go only to the app creator until the app passes its deployment check. A coordinator who tests the bot by adding themselves as a volunteer will see the reminder arrive, announce the rota is live, and then watch 40 volunteers receive nothing. That is a realistic Friday-evening failure, so put "reminder received by a second person" on your launch checklist.
  • Domain limit. The 4 May 2026 rule above applies to automation emails. If your account falls under it, reminders can go only to charity-domain addresses.
  • Sender. Emails come from a noreply address by default. Bring Your Own Email, in public preview since September 2026, lets Workspace customers send from a charity address instead, and Google recommends it. The page does not say it lifts the recipient-domain limit.
  • Other channels. A push notification reaches a volunteer's phone only after they have signed in to an AppSheet app on it. A text goes through a third-party gateway and needs your own Twilio account, with Twilio's charges billed to you.

Two volunteers, one last slot

AppSheet's help page on concurrent usage says the last writer wins when two people change the same row at nearly the same time, and it describes no locking or slot-reservation feature. In this design each sign-up is its own new row, and the Sign up condition is checked against the copy of the data on each phone, so two volunteers tapping Sign up for the last place within seconds can both save. The shift then shows Spots left as minus one, with four people booked into three places.

Plan for it rather than hoping it never happens. Add a slice called Overbooked with the filter [Spots left] < 0 on the coordinator view, and a bot that emails the coordinator when a new sign-up leaves a shift below zero. The bot should flag the problem and let a person decide who moves to the waitlist, because two automatic waitlist moves firing at once could bump both volunteers. For low-stakes shifts, such as sorting donations, you may decide an extra pair of hands is fine.

Volunteer data: what the Sheet should and should not hold

Data-protection laws such as the GDPR and the UK GDPR treat a volunteer's name, phone number and availability as personal data, exactly as they treat a customer's. Their principles include data minimisation (data limited to what is necessary), storage limitation (kept no longer than necessary) and security. The CCPA's official FAQ says the CCPA generally does not apply to nonprofits, but a charity with a trading arm, or with volunteers covered by other privacy laws, should not rely on that. Ask a data-protection adviser about your own duties; the table below is a starting point, not legal advice.

FieldIn the rota Sheet?Reason and handling
Name and mobile numberYesNeeded to contact people. Visible to coordinators only.
Availability and trained rolesYesThe point of the rota. Update whenever it changes.
Safeguarding check statusDate it expires onlyKeep the certificate and its details in a restricted folder, not in the rota.
Emergency contactNoHold it in a locked record that coordinators open only when needed.
Date of birth, home addressNoA rota does not need them. For under-18s, store "Under 18: yes/no" and check your consent and safeguarding rules.
Health or access needsNoStore "Adjustments: see coordinator" and keep the detail elsewhere.
Hours workedIf a funder asksDecide how long to keep rows and delete or anonymise after that.

Four habits matter more than the legal wording. Keep the Sheet in a shared charity account, not in the builder's personal Drive. Share it with coordinators only, because AppSheet's own documentation says security filters are not a complete security solution, and anyone who can open the Sheet sees every row regardless of the app. Turn on two-step verification for every coordinator account. And write the retention period down, a number your trustees choose, so old rows are removed on a schedule instead of staying forever.

Rehearse one request before it arrives: a volunteer asks what you hold about them. In this design you filter each tab by their email and send what you find, which should take minutes. Finally, keep real volunteer details out of consumer chatbots. The fake rows in the prompts above exist for exactly that reason, and the charity AI risks and data trust tutorial covers the wider rules.

Build or buy: a scorecard for the charity manager

Score each row honestly. Where most answers land in the second column, buy.

QuestionBuild in AppSheet ifBuy if
Who opens the app?Coordinators and volunteers with charity accountsMostly volunteers on personal email addresses
How must reminders arrive?Charity addresses or app notifications are acceptableYou need emails or texts to personal addresses from day one
Who looks after it?One person comfortable with formulas, plus a deputyNobody wants to own it
What do funders ask for?Hours totals from a Sheet are enoughHours reports, training records or background-check tracking
How big is the roster?A few dozen volunteers at one siteHundreds of volunteers or several sites
What is the budget?$0 in licences and a few hours a monthA subscription is easier to approve than staff time

Two ready-made options show what buying looks like. SignUpGenius lists a free plan with automatic confirmation and reminder emails, then Silver at $8.99, Gold at $22.49 and Platinum at $44.99 a month, with Gold at $269.89 when billed annually. Better Impact prices its Foundation, Growth and Impact plans by quote, based on volunteer numbers; its page lists automated shift reminders and background-check integration on Growth. If you would rather keep volunteers on forms and email, the community centre volunteer form tutorial shows that lighter route, and the volunteer onboarding checklist lists what to collect before anyone joins the rota.

My rule of thumb, which is a judgement and not a rule from Google: if more than half your volunteers would have to be outside users, buy. If you do build, record who owns the app, where the Sheet lives and when the licences are reviewed, and use Google Sheets AI prompts to keep the formulas tidy.

Seven checks before the first live week

CheckHowPass looks like
1. Volunteer viewSign in with a test volunteer accountSees open shifts and only their own sign-ups
2. Last slotTwo phones tap Sign up within secondsEither one place is taken, or the Overbooked slice and coordinator email fire
3. Cancel and rebookCancel, then sign up againSpots left rises, then falls
4. ReminderDeploy, then book a second person's address for tomorrowThat person, not just you, receives the email
5. Inactive volunteerSet Active to No on a test rowThey cannot sign up for new shifts
6. Sheet accessOpen the Sheet link as a non-coordinatorAccess denied
7. Data requestFind everything held on one test volunteerDone in a few minutes from the three tabs

Run checks 2, 4 and 6 twice, because they are the ones that fail quietly. Then launch to one session's volunteers first, watch the first reminder go out, and widen the rota only when a second person has confirmed the email arrived.

Questions charities ask before building a rota in AppSheet

Can a small charity run a real rota on AppSheet's free plan?

The free plan is meant for prototypes: you can build as many as you like and invite up to 10 test users. Emails from a free account go only to the app owner, so reminders cannot reach volunteers. Use it to test the design, then run the live rota on the Core licence that comes with Workspace for Nonprofits, or on a paid plan.

What happens to the app if the person who built it leaves?

An app belongs to the account that created it and reaches its data through that account's connection, so if the builder's account is suspended or deleted the rota can stop working. Build it from a shared role account rather than someone's own login, give two people edit access, and write down where the Sheet lives and who can change the user list.

Do volunteers have to install anything on their phones?

Google recommends that phone users open AppSheet apps through the gallery in the AppSheet app, while desktop users can use a browser, and a phone user can add a home-screen shortcut from inside the app. Push notifications go only to people who have signed in to an AppSheet app, and reach a phone only once they have signed in on it, so ask volunteers to open the app once on their phone.

Can the rota send volunteers a text message?

AppSheet has an SMS task for Starter plans and above, but it goes through a third-party gateway. Google's page says the default channel ended on 21 April 2025, so you need your own Twilio account, and Twilio bills its own charges to you. Check the current message rates before you plan on texts.

Further reads

Sources: AppSheet pricing page and help-centre articles on licensing, the subscription FAQ, plan features, out-of-domain automation email, sending email and SMS from automations, Bring Your Own Email, notifications, concurrent usage, app access, the function list and Gemini for App Creation; Google Workspace Admin Help on the AppSheet Core security setting; Google for Nonprofits Workspace page; SignUpGenius and Better Impact pricing pages; the UK GDPR principles as published by its regulator; the CCPA's official FAQ. All checked 28 October 2026.

Want your volunteer rota mapped before you build it?

On a 1:1 call we'll map how volunteers sign up and get reminded today, decide whether AppSheet, a form or a ready-made tool fits your charity, and agree what your team can run itself.

Book a 1:1 call with me