I love Google Sheets. It is incredibly useful and versatile. So here I will share stuff I've learned and created with Google sheets and App Script.
Enjoy!
If your not utilizing Google's Secure PropertiesService Storage in your projects...you're really missing out. Click the image to the right to use an interactive demo of it's storage capabilities!
PropertiesService: Your Built-In, Secure Data Store
Stop reaching for external databases when Google Apps Script already provides a powerful, secure storage solution right out of the box. PropertiesService offers 500KB of storage—far more than most developers realize—capable of holding thousands of user records, activity logs, and configuration settings without ever leaving Google's infrastructure. Your data stays protected behind Google's enterprise-grade security, authenticated through the same OAuth system that guards your entire Workspace. There's no API keys to manage, no external services to configure, no additional costs, and no data leaving Google's servers.
Understanding the Three Storage Scopes
What makes PropertiesService truly powerful is that the 500KB limit applies per scope, per project—not as a global cap across your Google account. ScriptProperties gives your project 500KB for app-wide settings shared across all users. DocumentProperties provides a separate 500KB for each Google Doc, Sheet, or Slide your script is bound to. And UserProperties is where it gets really interesting: every individual who uses your app automatically gets their own private 500KB allocation, partitioned and secured by Google.
Build a web app used by 1,000 people? That's potentially 500MB of user-specific storage, and you didn't configure a thing.
Per-User Storage Without the Complexity
The elegance of UserProperties lies in its simplicity. You write one line of code—PropertiesService.getUserProperties()—and Google handles everything else. When User A runs your script, they read and write to their private space. When User B runs the same code, they access their own separate storage. The data is completely partitioned: your code can only access the UserProperties of whoever is currently running it. You can't write a script that peeks into User A's data while User B is logged in, and you can't browse through everyone's stored preferences from your developer account. Each user's information stays isolated and secure, yet you didn't have to build authentication, create database tables, or manage a single user record yourself.
The key distinction is: you write the code that accesses the data, but that code only ever touches the current user's space. You can't cross the boundary into another user's storage.
One important caveat: UserProperties requires users to be signed into a Google account. When you deploy your web app, choosing "Anyone with Google account" or "Anyone within [your domain]" enables per-user storage. Deploying to "Anyone" (including anonymous visitors) won't work—Google has no authenticated identity to tie the storage to, so data won't persist reliably between sessions. If your app needs to support anonymous users, you'll need to implement your own tracking scheme using ScriptProperties with unique identifiers.
Quickly build databases with this template/set up method. CRUD operations via a dynamic Sidebar form or via the sheet itself. Click on the picture to the left to access the Spreadsheet Template.
It is "View" only, so make a copy to gain Editor access. - Enjoy!
Click for video demo - Video