Forty minutes, a Google account, and no money. At the end you will have the full audit system running on your own computer, saving into your own Google Sheet, which nobody else can read — including us.
| File | What it is | Who opens it |
|---|---|---|
| Daily-Audit-Desktop.html | The full system — enter figures, tick the 21 compliance rules, raise corrective actions, print the report. | Whoever does the audit |
| Daily-Audit-Mobile.html | The same thing, laid out for a phone. | Whoever does the audit |
| Daily-Audit-Viewer-Desktop.html | Read-only. 24% smaller. Cannot change anything. | Owners and managers |
| Daily-Audit-Viewer-Mobile.html | Read-only, on a phone. | Owners and managers |
| AppsScript-Entry.gs | The code that lets the app read and write your sheet. | You, once, in Step 2 |
| AppsScript-Viewer.gs | The read-only version of that code, for the viewer files. | You, once, in Step 6 |
| Sample-data.json | A made-up month of four outlets, so you can see a filled-in system before you commit. | Optional, Step 7 |
Every one of these is a plain file. There is no installer, no account, and nothing that runs in the background. Copy them to a USB stick and they still work.
Before setting anything up, double-click Daily-Audit-Desktop.html. It opens in your browser and it already works. Type figures, tick rules, print a report.
Everything you type is saved on that computer only, in the browser's own storage. That is a real, usable system for one person on one machine, and if that is all you need, you can stop reading here.
Go to sheets.new while signed in to your Google account. A blank spreadsheet opens. Name it something you will recognise — Daily Audit — Kakkanad, for instance.
Do not add any columns or headings. The script builds every tab it needs in Step 3. An empty sheet is exactly right.
This spreadsheet is your database. It lives in your Google Drive, under your account, and counts against your ordinary 15GB. A year of daily audits for four outlets is roughly 4MB.
In your new spreadsheet, click Extensions → Apps Script. A new tab opens with a code editor and a small file called Code.gs containing an empty myFunction.
Delete everything in that editor. Select it all (Ctrl+A, or Cmd+A on a Mac) and press delete.
Now open AppsScript-Entry.gs from your download folder in any text editor — Notepad on Windows, TextEdit on a Mac — select all of it, copy, and paste it into the empty script editor.
Press Ctrl+S to save. Give the project any name you like.
At the top of the script editor there is a dropdown listing the functions. Choose setup, then click Run.
Google will ask for permission the first time. This is normal and it is asking on your behalf — the script is in your account, editing your spreadsheet. Click Review permissions, choose your account, and if you see "Google hasn't verified this app", click Advanced then Go to (your project name) (unsafe).
When it finishes, open Execution log at the bottom. You will see:
SETUP COMPLETE Access token (paste into the HTML Cloud settings): a1b2c3d4e5f6a7b8c9d0
Copy that token and keep it. It is the password between your HTML file and your sheet. Anyone who has it can read and write your audit data, so treat it like a password: do not put it in a WhatsApp group, and do not email the HTML file to anyone once you have pasted it in.
Lost it? Run showToken to see it again, or resetToken to issue a new one — after which every device has to be updated with the new value.
Click Deploy → New deployment. Click the gear beside Select type and choose Web app. Then set:
| Field | Set it to | Why |
|---|---|---|
| Description | Anything | Just a label for you |
| Execute as | Me | The script uses your access to your own sheet |
| Who has access | Anyone | Required — see the note below |
Click Deploy, then copy the Web app URL. It ends in /exec and looks like:
https://script.google.com/macros/s/AKfycb…long…string…/exec
You now have the two things you need: the URL and the token.
Open Daily-Audit-Desktop.html. Click ⚙ Settings, then the Backup & sync tab.
Under Google Sheet sync fill in:
Click Save cloud settings, then Test connection. You want to see a success message. Then set Automatic sync to On and give the machine a name under This device is called — counter-pc, manager-phone — so the sync log tells you where each change came from.
Now repeat this on the phone: open Daily-Audit-Mobile.html and paste the same two values. Both devices now share one sheet.
Give an owner the full file and they can edit last month's figures — usually by accident. The viewer files exist so that cannot happen.
Back in the script editor, click the + beside Files, add a script file, and paste in AppsScript-Viewer.gs. Near the top you will find:
var SHEET_ID = ''; /* paste your own spreadsheet id here */
Put your spreadsheet's id between those quotes. The id is the long piece in your sheet's own address:
docs.google.com/spreadsheets/d/THIS-LONG-PART-HERE/edit
Save, then Deploy → New deployment → Web app again. Run setup in this file to get its own separate token, and paste that URL and token into the two viewer HTML files the same way as Step 5.
The viewer's token only ever permits reading. Even if it leaks, nobody can alter your audit history with it.
In the app: ⚙ Settings → Backup & sync → Restore from file, and choose Sample-data.json. It will ask whether to apply the settings layout too — say yes.
You get 28 days across four outlets, one of which (DC) is deliberately a problem site: damage running over threshold, negative stock, and a corrective action that has escalated to critical because it failed four times. It is there so you can see what the dashboard and the action register look like with real pressure in them.
These are not crippled features. They are things that genuinely need a server, and the free edition does not have one.
You cannot attach photographs to a finding. Images are far too large for a spreadsheet cell, so they need real file storage. Everything else about a finding — the note, the owner, the due date, the escalation — works normally.
There is no sign-in. Whoever opens the file can use it. Control is by who has the file and the token — which is why the read-only viewer in Step 6 matters.
You can print or export a report any time. Sending one to a list every morning without anybody pressing a button needs something that is awake at 7am. Your desktop is not.
One file can hold several companies, but each needs its own sheet and its own token, and you switch by hand. There is no central place to manage who sees what.
All 21 compliance rules, scored daily per outlet
Sales, cash, UPI, credit, void, discount, damage, expiry, variance
Corrective actions with owners, due dates and automatic escalation
The dashboard, trends and forecasting
Printable PDF reports, Excel and JSON export
Full offline use — the internet is optional, always
| What you see | What to do |
|---|---|
| "Open this in a browser" on a phone | You tapped the file in WhatsApp or Gmail, which shows a preview that cannot run code. Save the file first, then open it from your Files app, or use Open in Chrome. |
| Test connection fails | Check the URL ends in /exec, not /dev. Then try Connection method → Compatibility only. |
| "Not authorised" | The token does not match. Run showToken in the script editor and paste it again, with no spaces before or after. |
| Changed the script, nothing happened | Editing the code is not enough — you must Deploy → Manage deployments → edit → New version. |
| Data on the phone but not the desktop | Press 🔄 Sync on both. If one has been offline, its changes queue and go up when it reconnects. |
| Everything vanished | Browser storage was cleared — "clear browsing data" wipes it. This is exactly what the Google Sheet protects you against: set up sync and it comes back. Also use Back up now to a file, regularly. |