Welcome to "Simple Apps"! If you're here, chances are you're looking for smarter, faster ways to build tools that streamline your work, without burying yourself in spreadsheets or, worse, dealing with stacks of paper. That's exactly why I started this journey with AppSheet, and why I'm so passionate about sharing it with you.
For years, every time a new need arose—tracking inventory, logging client feedback, or performing a site inspection—the solution always involved paper, clipboards, and pens. We’d fill out forms, scribble notes, take physical photos, and then, at the end of the day, someone had to spend hours transcribing all that information into a central spreadsheet.
The reality was frustratingly inefficient:
Transcription Errors: Data entry mistakes were inevitable when moving information from handwriting to digital format.
Time Delays: Data was always hours (or days) old by the time it was entered and processed.
Lost Information: Forms got misplaced, photos were stored in separate folders, and connecting all the pieces was a nightmare.
Inaccessibility: We had no way to instantly check a status or retrieve a record while out in the field.
I knew there had to be a more immediate, reliable, and modern way to capture and manage our essential operational data.
My personal "aha!" moment came when I was trying to solve a seemingly simple problem: a field team needed a way to log equipment inspections on the go and sync the data seamlessly. Building a traditional solution was complex, but simply collecting data via email was unreliable.
Then, I stumbled upon AppSheet.
The premise was revolutionary: build powerful mobile apps directly from your existing data sources, primarily Google Sheets, without requiring complex setup. My initial skepticism quickly turned into amazement. I took their inspection checklist (the one that used to be a carbon copy form), pointed AppSheet to the underlying spreadsheet, and within an hour, had a working prototype.
A depiction of someone having an "aha!" moment while working with AppSheet on a laptop and seeing the results on a phone, with a whiteboard in the background showing concepts like "Spreadsheets" and "No-Code."
The field staff could open the app on their phones or tablets, fill out the form, capture photos directly into the record, and even capture GPS coordinates. All of this data flowed automatically back into the central Google Sheet, ready for immediate analysis. It felt like moving from the Stone Age to the digital era overnight.
While many solutions promise digital forms, AppSheet quickly became my platform of choice because it delivers a true, feature-rich app experience:
Direct Data Synchronization: No more manual transcription. The data captured in the field is instantly available in the office (or as soon as the user syncs).
Offline Capabilities: A game-changer for field teams or anyone working without a constant internet connection. The app works, and syncs when back online.
Rich Feature Set: AppSheet handles inputs that paper simply can't: GPS, barcode scanning, signature capture, and camera integration.
Deep Google Integration: As a tool built for the Google ecosystem, it leverages Sheets, Forms, and Drive perfectly.
Rapid Development: The speed at which you can go from a sheet of paper to a deployable app is unmatched.
This blog, "Simple Apps," is born from that excitement. My goal is to demystify AppSheet, sharing practical tips, tutorials, and insights at every level of expertise. Whether you're digitizing your very first paper form or looking to optimize an existing solution, you'll find something here to help you unlock the power of low-code.
Let's build something amazing, simply, and leave the clipboards behind.
When I talk about AppSheet, people often focus on the power of the app builder itself—the forms, the actions, the mobile interface. But the true unsung hero of the entire low-code ecosystem, and the engine powering my "Simple Apps," is the humble Google Sheet.
For me, Google Sheets isn't just a spreadsheet; it's the perfect, flexible, and powerful backend database for anyone building internal tools. Here’s why I love it and why it remains my go-to data source for AppSheet projects.
Unlike traditional databases that require complex setup, connection strings, and specialized software, Google Sheets is universally accessible.
You Already Know It: Chances are, you (and everyone on your team) already know how to open, edit, and manage a Google Sheet. This makes the transition to AppSheet incredibly easy.
Instant Management: If you need to fix a data error, bulk-update records, or check a history log, you simply open the sheet. There's no need to access a SQL console or database client.
Real-Time Collaboration: Multiple people can manage the data source simultaneously, and those changes are instantly available for AppSheet to sync.
Google Sheets doesn't exist in a vacuum; it’s deeply integrated into the Google Workspace ecosystem, which adds a layer of functionality no standalone database can match.
Google Forms: You can collect data via a polished Google Form and have the results instantly write to the sheet that powers your AppSheet app.
Scripts and Automations: Google App Script allows you to trigger automated functions, send custom emails, or clean up data within the sheet itself, adding complex logic without touching AppSheet's editor.
Reporting: You can use tools like Looker Studio or simply built-in charts to analyse the data in the same place it's collected, without complex data warehousing.
One of the biggest advantages Sheets has over a raw database table is the ability to easily view and use formulas.
Calculated Columns: You can create columns in your AppSheet app that use spreadsheet formulas (like SUM, AVERAGE, or IF) to provide instant calculations without using AppSheet expressions. For simple metrics, this is incredibly fast.
Debugging Made Easy: If your AppSheet app shows a strange value, you can immediately check the underlying sheet, see the cell value, and examine any spreadsheet formula that might be manipulating the data.
Virtual Columns: For more complex, non-database calculations, AppSheet’s Virtual Columns—which use AppSheet expressions—can perfectly coexist with your native sheet formulas, giving you maximum flexibility.
For small- to medium-sized internal applications, Google Sheet sharing permissions are often the perfect security layer.
AppSheet Respects Permissions: If a user doesn't have at least read access to the Google Sheet, they cannot access the app. The core security is managed where you're already managing it—in Google Drive.
Owner Control: You maintain clear control over who can edit the underlying schema (the column names and structure) and who can only view the raw data. This simple permission model is ideal for most "Simple Apps."
AppSheet provides the beautiful, functional interface and the powerful mobile logic, but Google Sheets provides the stability, familiarity, and collaborative structure for the data. It truly is the ideal pairing for low-code development, allowing you to focus on the business logic rather than database configuration.
If you’re just starting out, remember: if you can build a form in a Google Sheet, you can build an app with AppSheet.
You're ready to start building! But before you connect your precious data source to AppSheet, we need to talk about structure. In the AppSheet world, your Google Sheet is more than just a place to store numbers; it's a relational database schema. Following a few simple rules will save you hours of debugging and ensure your app performs brilliantly.
AppSheet expects your sheet to follow fundamental database design principles. If you're coming from a reporting or pivot-table background, this might feel a little rigid, but it's essential.
One Table Per Sheet Tab: Each sheet tab should represent a single "table" or entity (e.g., Customers, Projects, Inspections). Never combine unrelated data sources onto one tab.
Header Row ONLY: The very first row must contain your column names. Do not use merged cells, blank rows, or notes above this header row.
No Summary Rows or Columns: Do not include totals, averages, or calculations (like a running total) at the top, bottom, or sides of your data. These calculations belong in the AppSheet interface or in specific reporting sheets.
Unique Column Names: Every column header must be unique and descriptive (e.g., use Item_Quantity instead of just Quantity if you have multiple quantity types).
Every record in your app must have a Key—a column that contains a unique identifier for that row. AppSheet needs this to track changes and reference data.
Bad Key Column Example
Customer Name (Names can be duplicated)
Date (Multiple entries per day)
Good Key Column Example
CustomerID
InspectionID
Best Practice: Use the UNIQUEID() Expression
Create a column named something like RecordID, LogID, or UniqueID.
In AppSheet, navigate to Data -> Columns and find this column.
Set the AppSheet column type to Text.
Check the Key box.
Set the Initial Value property to the expression UNIQUEID().
This ensures that every new record created via the app gets a guaranteed unique ID, solving 99% of record-linking problems.
This is how you move from flat data entry (like your old paper forms) to a relational application. In paper, you might write down "Client: Simple Apps." In AppSheet, you create a reference.
If you have a Projects table and a Clients table, you don't want users typing in the client's name every time; you want them to choose a client from the Clients table.
In the Projects sheet, create a column called Client_Ref.
In AppSheet, go to the Projects table and find the Client_Ref column.
Set its Type to Ref (Reference).
Set the Source Table (the table it references) to Clients.
AppSheet will automatically turn this field into a dropdown menu showing the key column values (usually the Client ID) from your Clients table, linking the two tables together.
Both AppSheet and Google Sheets let you perform calculations, but you must know where to place them:
Calculation Type - Simple Sums/Averages
Where to Place It - Google Sheet Formula
Why? - Formulas like SUM or AVERAGE can be used on other tabs for simple reporting and are easy to check.
Calculation Type - Display Logic/Conditionals
Where to Place It - AppSheet Virtual Column
Why? - Logic that depends on the app user or context (e.g., "Is this overdue?") must be an AppSheet expression.
Calculation Type - Initial Value/Valid If
Where to Place It - AppSheet Column Properties
Why? -Logic that runs during form entry (like NOW() or SELECT()) must be an AppSheet expression.
Pro Tip: Avoid complex array formulas on your AppSheet data tables. They can slow down synchronization as AppSheet has to constantly evaluate the output. Stick to simple cell formulas and use AppSheet Virtual Columns for the heavy lifting.
By structuring your Sheets like a proper database from day one, you build a solid foundation that will support everything from basic data entry to complex workflows and security models.