Viewing another customer as an administrator. Back to the console
Daily Audit

Sign in

Your outlets, your figures, your corrective actions.
Signed-in devices keep working for 7 days without internet.
Daily Audit Report
Open this in a browser to see the figures

Your phone is showing a quick preview, which is not allowed to run the code that fetches the figures. The file itself is fine — it needs a real browser.

On iPhone: tap the share icon (the square with an arrow) at the bottom, then choose Open in Safari or Open in Chrome.
On Android: tap the menu and choose Open in Chrome.

Saving the file to your phone first, then opening it from Files, also works.

Daily Audit Report
Retail Stores · Data cut-off
Prepared by
Auto-save on ☁ Cloud off
View-only copy. Figures come from the audit team's shared sheet. Press 🔄 Refresh data for the latest, including any corrections made to earlier days.
Score period
01Business Summary
02Audit ComplianceN/A rows are excluded from that store's score
03Cumulative Report Card
Recurring Failuresmisses ÷ days the rule applied · in selected period
04Audit ObservationsPick a scenario, set the status, add detail
ObservationStatusDetail / stores
05NotesAnything about this day worth remembering
06Tasks
TaskSiteGiven to GivenDue Status
05Damage Verification
StoreDamage %EvidencePicturesStatus
06Corrective Actions
ActionSiteSeverity OwnerRaised DueAge Status
07Sign-off

Audited by

Acknowledged by the client

Recorded when the manager or owner confirms they have seen the report. It is a record of what was said, not a second signature.
🔒 This day is signed and locked. Nothing on it can be changed until it is unlocked, and unlocking is recorded.
Days changed somewhere else
Clear this device and download again?
Set up this server

This creates the first administrator — you. It works once, and stops working the moment your account exists.

Choose a new password

This link works once. Pick something you have not used elsewhere — at least ten characters.

Items in “
📷 Evidence pictures Held on this device, and on the server when you are signed in
Pictures are shrunk on the device before they are stored — a camera photo of several megabytes becomes about 120KB, which is plenty for an audit and small enough to keep years of them. They are attached with the + beside a damage row or a corrective action.
⬆ Import figures Nothing is written until you have seen exactly what changes
1 · Where the figures come from
Select the block in the ERP, copy it, and paste it here. A table copied from any screen, a CSV, or an Excel export all work.
or
⊕ Tasks Given to a person, carried forward until it is closed
A task stays on the list, and on every day's report, until somebody closes it.
⚑ Corrective actions Nothing closes itself — one good day is not a fix
💬 Share on WhatsApp

WhatsApp does not allow a web page to send on its own, so this prepares everything and hands it over. On a phone the picture goes straight into WhatsApp; on a computer, save the picture and attach it — the message is already written.

Send to
Send this report by email?
Sync now?
Which sections to print?

The heading, score cards and footer are always included.

Save these changes?

The report and the dashboard will be rebuilt with the new setup. Saved daily figures are not deleted.

📈 Audit Management Dashboard Range Sites
⚙ Settings Changes apply to the report only after you press Save
Which metric means what
Used for the automatic Damage % row, the damage verification section and the report card columns.
Grade thresholds (%)
Which sections appear on the report
Switching one off hides it and keeps everything already recorded — turn it back on and the history is there. It disappears from the PDF and the image export too, because those print what is on screen.

Use and to change the order the sections appear in. They are renumbered automatically, so the report is always 01, 02, 03 down the page.

The tables you paste from Excel move as one block and keep their own switches on the Extra table tab, because each one is switched on separately.
How the compliance score is worked out
A site only answers the checks that apply to it, so a kitchen may have five applicable checks where an outlet has twelve. With pooled weights that makes the two percentages hard to compare: the same ten marks lost is a far bigger share of a small base. Balanced by severity scores each band on its own and then combines them, so the mix of checks at a site no longer decides how much a failure costs.
Add, rename, reorder or remove stores. Each store keeps a short code — historical data stays attached to that code, so avoid changing it once data exists.
The tick shows a field on the entry sheet. Switching one off hides it but keeps everything already recorded — turn it back on later and the history is still there. The letters set which kinds of site it applies to: Outlet, Kitchen, Both, Warehouse, Franchise. Fields in Calculated are worked out from other fields and cannot be typed into.
Rows of the Business Summary table. The key is what past data is stored under — leave it alone for existing rows.
Link a check to a figure and it marks itself as the Business Summary is filled in — useful for “Sales posted” or “No negative stock”, which simply restate what the numbers already show. Linked checks appear with a ⚙ and cannot be clicked.
Severity sets the weight — Critical 20, Major 10, Minor 5 — so nobody has to invent numbers. Choose Custom… to type your own weight for a check that matters more, or less, than the three standard levels. The letters set which kinds of site the check applies to; a kitchen never sees Counter closing and an outlet never sees Production.
Validations and their weights. A store's score = weight earned ÷ weight applicable (N/A rows excluded). Weights apply to past days too, so cumulative scores recalculate when you change them.
Observation scenarios
Status options
Severity controls the row colour: OK is plain, Review is amber, Investigate is red.
These settings only affect the management dashboard. The client report is untouched by anything on this tab.
Which panels appear on the dashboard
Switching one off hides it and keeps everything behind it — turn it back on and the figures are there. Use and to change the order they appear in; the dashboard, the PDF and the image all follow it.
Which validation means what
The dashboard counts negative-stock and late-submission incidents from these two validations.
Targets & alerts
Older days are kept as compact summaries once they are safely in the sheet. Every dashboard figure still covers the whole history; opening one of those dates fetches the full record back. Minimum 60.
Managers are assigned per store on the Stores tab — the dashboard rolls scores up by manager automatically.
Tables you fill by copying cells in Excel and pressing Ctrl+V — a stock count, a temperature log, a delivery list, anything already kept in a spreadsheet. They appear on the daily report under Audit Compliance as 02b, 02c and so on, are saved with the day like everything else, print with the report, and go out with the emailed one.

The limits, and why. Up to 8 columns and 500 rows per table, and the table says so when a paste was bigger — eight columns is as wide as a table can be and still be read on a phone. A paste carries the values only: bold, colours, merged cells and formulas do not come across, which is what keeps the report looking the same every day.

Name the columns here rather than pasting a heading row. People usually copy their figures without the headings — the header row is frozen at the top of their sheet — and then the first reading of the day silently becomes a heading.
Only a super admin sees this. Roles are enforced on the server, so a sign-in cannot give itself more rights by changing this page.
People
Loading…
Add a sign-in
Clients
Loading…
Add a client
The client id is short and permanent — it is how their data is kept apart from every other client's. The name is what people see.
Sheet backup optional
A second copy of this client's days, written into a Google Sheet that they own. Leave all three blank and the client works normally — there is simply no sheet copy. To switch it on: create a blank spreadsheet, add the Apps Script from the setup guide, run setup, deploy it as a web app, and paste the two values it gives you.
Signed in as
Change my password
Choose something only you know. Every other device signed in as you is signed out, so if somebody else has been using your sign-in they will stop.
Sends the report by email through your own Gmail account, so there is nothing to pay for. A Workspace account allows about 1,500 messages a day; a plain gmail account 100 — far more than a daily report needs. The Google Sheet connection must be working first.
Who receives it
Separate several addresses with commas.
What it says
The subject is the one part of an email everybody reads, and a subject that is identical every day teaches people not to open it. These are filled in for you: {date}, {score} (today's compliance, or “not audited”), {flags} (“all clear” or “2 sites flagged”) and {worst} (the lowest-scoring site by name).
What goes in the message
Switching a block off does not delete anything — it stays on the report and in the attachment, it just stops taking up room in the email. What changed is the short list at the top: today's score against its 7-day average, the best and lowest site by name, any run of clear days, anything that has just changed for the worse, the most-missed check of the week and the state of the corrective actions. It is worked out fresh each day and leaves out whatever has nothing to say.
Two more emails, for different people
Whoever chases overdue actions is not always whoever reads the daily figures. These are separate messages with their own recipients, sent by their own buttons. Leave the address blank and the button stays off.
WhatsApp
WhatsApp charges for automatic sending, so this stays free by preparing the message and picture for you to send. Add the numbers you use most — one per line, with the country code, and an optional name after a |.
Groups cannot be addressed directly by any app — use Choose a chat or group and pick it in WhatsApp.
When it goes
Automatic sending runs on Google's servers, so it works with this file closed. It needs a one-time trigger: in the Apps Script editor open Triggers ▸ Add trigger, choose dailyEmail, Time-driven, Day timer, and pick the hour.
Send
Any day, not only the one on screen — if a client asks for last Tuesday, pick it here. The message is rebuilt from that day's saved figures.
A failed check becomes a task. Critical and major checks raise one automatically; minor ones can be raised by hand from the Actions panel. Each check's behaviour is set in Compliance rules.
Nothing closes itself. A check passing tomorrow does not close its action — one good day is not a fix. Done means the site says it is fixed; Verified means you confirmed it. Only the verified figure is reported as closed.
Failures before this day never become tasks — leave it empty to raise actions from every day you have. It is filled in with today the first time you switch corrective actions on, so turning the feature on does not hand you a month of tasks that were already late; a register that opens with forty overdue items teaches everybody that overdue means nothing.
Moving it earlier creates no old tasks on its own — an older day only raises one if you open and save it again — and anything already raised is never removed by it.
Tasks
Tasks are the instructions you give somebody while you are checking their work — separate from corrective actions, which the system raises itself from a failed check. A task carries forward until it is closed, so a follow-up cannot be forgotten. Switch the section on in General to have them appear on the report as well as in the Tasks panel.
Separated by commas. These are your people, so name them the way you do.
Used to fill in the due date when a task is given. It can always be changed on the task itself.

While you are entering

Help for the person filling the day in. Nothing here changes a figure or blocks a save.
A running count of what is still blank, and a quiet mark on any figure far from what that store usually does — while you still have the paperwork in front of you, rather than in tomorrow’s report. It compares each store against its own history, so a big outlet is not measured against a small one.
Below this it stays quiet. A judgement from three days is not a judgement.
Higher means fewer marks. 3.5 catches a typed extra digit without complaining about a busy Saturday.

Evidence

What can be attached as proof, and what is checked about it. Each of these is off until you switch it on.
A task can carry the screenshot of the problem, and its closing note the screenshot of the fix.
Fifteen seconds of speech where nobody would type four sentences — and it works in any language, today.
The report is generated fresh from the figures each time it is opened, so if a setting changes later, the report you open is not quite the one that was signed. This keeps the signed copy as a file — the one an auditor, a bank or an insurer will ask for. A correction adds a version; nothing is overwritten. Hosted accounts only.
Reads the date the camera recorded. A picture taken days before the day it is filed against is flagged — it is not refused, because there are honest reasons for it, but it is no longer invisible.
Days. 0 means the same day only.
Days allowed to fix
Counted from the day the check failed. Used to set the due date when an action is raised.
Owner
A new action is assigned to the site's accountant from the Stores tab, unless you type someone else on the action itself.
A checklist is a named selection from the library you already have — not a separate set of fields. That is deliberate: the field key is what every stored day, every archived summary and every corrective action is filed under, so keeping them means your whole history stays exactly where it is.
Leave a checklist with nothing ticked and it uses everything, which is what the daily audit wants. Switch checklists off and the app behaves exactly as it did before they existed.
Checklists
File backup
Saves every stored day plus all settings into one JSON file you keep yourself. Use it before clearing browser data, when moving to another computer, or as a routine safety copy. Works with no internet. The cloud URL and token are left out of the file on purpose.
Companies
One company, one Google Sheet. Each company keeps its own settings, its own saved days on this device and its own Apps Script link, so nothing can leak from one client's books into another's. Paste the Web App URL and token generated from that company's sheet, press Save companies, then pick the company from the selector at the top of the report.
Google Sheet sync
These two values belong to the company in use right now — editing them here also updates that company's entry in the list above. Backs the audit up to a Google Sheet through a Google Apps Script, so another computer can pick up the same data. The report keeps working with no internet — days are queued and go up on their own once the connection returns. Follow CLOUD-SETUP-GUIDE.md once to get the two values below.
Leave on Automatic. Switch to Compatibility if uploads keep timing out.
Daily data
Sends only the days you have changed on this device, then brings back anything changed elsewhere. This is all you normally need.
Start fresh on this device
Clear and re-download wipes everything this browser has stored for the audit — days, archive and settings — then downloads it all again from the Google Sheet. Clear this device only does the wipe and stops there, which is what you want when handing the machine to somebody else or when there is no cloud link to download from. Useful when you open a new version of the file in a browser that still holds older data. Anything not yet synced is lost, so sync or take a file backup first.
Occasional jobs
Use these on a new device, or if you suspect the sheet and this device have drifted apart.
·
Browser storage on this device
Recent sync activity