Internal tools are the small apps a team uses to run its own work: an inventory app, an employee directory, a job-request tracker, a client list with follow-ups. Customers never see them. In most small businesses they start life as a shared spreadsheet, and that is fine until the sheet starts breaking. The method is simple: keep the data, add a front door. Clean the sheet into proper tables, decide who sees and changes what, then put a form, a list and a few buttons on top.
What internal tools are, and why they start in a spreadsheet
An internal app does one job for the people inside the business. A warehouse lead checks stock. A manager approves a time-off request. A technician closes a work order from a phone. The audience is small and known by name, which changes everything about how you build it. You do not need marketing pages, search rankings or a signup funnel. You need correct data, the right screens for each role and something people will actually open.
Spreadsheets win the first round because everyone already knows them. Columns become fields, rows become records, and sharing takes one click. A good business app often begins exactly this way, and the sheet already holds the most valuable part: your real data, in your own words. The goal is rarely to throw the spreadsheet away. It is to stop asking the spreadsheet to be the screen, the database and the permission system at the same time.
Signs your sheet should become an internal app
Watch for the moment the file stops being a list and becomes a process. People type the same status in five spellings. Two colleagues edit the same row and one change disappears. Someone sorts a single column and scrambles every record. The person who built it is the only one who understands the formulas. Field staff squint at a desktop layout on a phone.
Permissions are usually the loudest sign. Google says plainly that protecting a sheet or range shouldn't be used as a security measure, because people can still print, copy and export a protected file [1]. So if a salesperson must see only their own clients, or a contractor must never see pay rates, a shared sheet cannot promise that.
Give every row a unique ID before you build anything. Apps link records by ID, and sorting or renaming will not break the links.
Size is the quiet sign. Google lists a ceiling of up to 20 million cells or 100MB for spreadsheets created in or converted to Google Sheets [2]. Most teams feel the file slow down long before that, once formulas, imports and many tabs pile up.
How to build internal tools from a spreadsheet: the method
The order matters more than the tool. Each step makes the next one cheaper.
- Name the one job. Write a single sentence: who does what and when. "Shift leads log stock counts every evening" is a job. "Manage operations" is not.
- Clean the data into tables. One tab per thing (items, locations, people, requests), one header row, one record per row, a unique ID column, no merged cells and no totals inside the data.
- Lock the vocabulary. Turn free-text columns like status, category and location into fixed choices, so reports and filters stop splitting one value into five.
- Map roles to actions. List each role and what it may view, add, edit and approve. This table becomes your permission design.
- Design the screens. Usually a list, a detail view, an entry form and one dashboard. Start with the screen people open most.
- Pilot with three people. Watch them use it for a week, fix what confuses them, then invite the rest.
Steps two and three are the free part, and they pay off whichever route you take next. Our guide to using Google Sheets as a database walks through them with data validation, forms, protected ranges and filter views.
List each role with what it may view, add, edit and approve. It takes ten minutes and becomes your permission design in any builder.
A worked example: an inventory app for a small shop
Here is an illustration with round invented numbers. A shop with two stockrooms tracks 400 products in one sheet. Staff add a row each time stock arrives or leaves, and the owner reorders by scrolling. After cleanup, the data becomes three tabs: Products (ID, name, category, reorder point), Locations (ID, name) and Movements (date, product ID, location ID, quantity in or out, who).
Current stock is no longer typed by hand. It is calculated: everything received minus everything sent out, per product and location. Say a product arrived in two deliveries of 60 units and left in sales of 25, 30 and 15. Stock is 120 minus 70, which leaves 50. If its reorder point is 40, it is safe today. One more sale of 15 drops it to 35 and puts it on the reorder list.
The inventory app on top is small. Floor staff get one form: pick the product, pick the location, enter the quantity. The owner gets a list of items below their reorder point. Nobody edits the Movements tab directly, so history stays intact. The same shape fits an employee directory (People, Teams, Locations) or a field request log (Requests, Sites, Technicians).
Common mistakes when you build a business app
Most failed internal apps fail on design, not on the tool.
- Copying the spreadsheet screen. A forty-column grid on a phone helps no one. Show the five fields each role needs.
- Treating filters as security. A filtered view hides rows on screen; it does not stop someone from seeing them. Real restrictions live in roles and server-side rules.
- Building for everyone at once. Ten departments, ten wish lists, nothing shipped. Ship one job, then add the next.
- No owner. Someone must own the data model and approve changes, or the app drifts back into chaos.
- Skipping the stranger test. Before launch, sign in as a new, low-permission user and try to open records you should not see.
Hiding a column, filtering a view or protecting a range does not stop someone with access from seeing the data. Restrict access with roles and server-side rules.
When an internal app outgrows the sheet
The homemade route stops at a predictable set of walls. The first is per-person views: each manager sees only their team, each rep only their accounts. A shared file shows the same rows to everyone with access. The second is the phone. Field staff need large buttons, a camera or barcode scan, and a form that fits one thumb. The third is roles with approval steps, like a request that only a supervisor can close.
Then come the softer walls. Edits collide when many people type at once. Formulas break when someone inserts a column. The audit trail is a version history nobody reads. None of this means the spreadsheet was a mistake. It means the data model is ready and the front door is not. At that point, a builder can sit on top of the same data, or move it into its own database, without starting from zero.
Tools that turn a sheet into an internal app
Some builders keep your Google Sheet as the live source; others copy it in once and run their own database. Know which you are choosing, because it decides where people edit from tomorrow.
Softr connects Google Sheets as a two-way data source on every plan, and user groups with conditional filters decide who sees which records (custom user groups from Pro); our Softr intranet guide shows how staff roles and pages fit together.
Connects your Google Sheet as a live, two-way data source, so edits in the app land in the sheet. Lists, forms and charts sit on top, and user groups with conditional filters decide who sees which records.
Glide Classic syncs a Google Sheet both ways from its Maker plan, while GlideOS copies the sheet into its own table. Our guide to Glide for internal tools covers CRMs, portals and forms.
Glide Classic syncs one Google spreadsheet both ways and turns it into a phone-friendly app with Row Owners for per-user data. GlideOS instead copies the sheet into its own table and does not write back.
Replit takes the other road: it imports an .xlsx, a .csv or a public Google Sheets URL once and builds an app on its own database, so the sheet does not stay live. Our Replit database guide explains how that database works.
Import an .xlsx, a .csv or a public Google Sheets URL and Replit builds a full-stack app with a database seeded from it, plus screens to view, search and manage records. Replit Auth suits staff sign-in for internal tools.
For the full map of builders and the parts each one covers, read our comparison of spreadsheet to app tools.
Frequently asked questions
What is an example of an internal app?+
An inventory app where staff log stock in and out, an employee directory, a time-off request form with manager approval, or a job-request tracker for field technicians. Each serves people inside the business, not customers.
Is a business app the same as an internal tool?+
Not always. Business app is the wider term and can include customer-facing portals. An internal tool is a business app used only by your own staff, so it can skip public pages and focus on roles and data.
Can I build an employee directory from a Google Sheet?+
Yes. Keep one row per person with an ID, team and location, then put a searchable list and a profile view on top with an app builder. Decide first which fields, such as phone numbers, only some roles should see.
Should the spreadsheet stay after I build the app?+
Only if people still need to edit it there. If they do, pick a builder with two-way sync; if the app becomes the only place for edits, moving the data into the app's own database avoids two sources of truth.
Keep the sheet live, or retire it into the app
Build the internal app the moment a shared spreadsheet starts deciding how your team works instead of serving it. Do the free part first: one clear job, clean tables, fixed choices and a written list of who may do what. That work survives any tool. When you need per-person views, a phone-friendly form or real permissions, put an app on top of the same data. Pick a builder that keeps the sheet live if people still edit there, and one that moves the data in if the sheet is ready to retire.
- [1] Google Docs Editors Help (Nov 2026) https://support.google.com/docs/answer/144687?hl=en
- [2] Google Drive Help (Nov 2026) https://support.google.com/drive/answer/37603?hl=en