On this page
- How the pieces fit
- Your Google Drive, folder by folder
- The Sheet, tab by tab
- Adding a job
- Workers and their private links
- What arrives, and when
- Reading a visit
- The work page (showcase)
- Assessments and quotes
- Your referral code and partner page
- Changing the setup
- Housekeeping and privacy
- When something goes wrong
1 How the pieces fit
Three things only you can see: the Drive folder, the Sheet, and the emails. The crew sees their jobs and nothing else. The public sees only the work page, and only what you tick.
2 Your Google Drive, folder by folder
MobilePros ← the root, in the account that runs the script ├── Jobs │ └── Harbourview Plaza ← one folder per client │ └── 2026-10-31 - Harbourview Plaza – Building A - J-1001 ← one per job │ ├── Pre-visit - Harbourview Plaza – Building A - 2026-10-31.pdf │ ├── Certificate - Harbourview Plaza – Building A - 2026-10-31.pdf │ ├── Post-job - Harbourview Plaza – Building A - 2026-10-31.pdf │ ├── Pressure washing ← one per service │ │ ├── Pressure washing - Before - 1.jpg │ │ ├── Pressure washing - Before - 2.jpg │ │ ├── Pressure washing - After - 1.jpg │ │ └── Pressure washing - Before - video 1.mp4 │ └── Window cleaning │ └── … ├── Assessments │ └── Harbourview Plaza - Building B - 2026-10-31 │ ├── Quote - Harbourview Plaza - 2026-10-31.pdf │ ├── Pressure washing - Front walkway ← photos per quote line │ └── Area - Front entrance ← photos per documented area ├── Showcase ← public copies of consented photos only (see 8) │ └── J-1001 └── _uploads ← video pieces while they upload; empties itself
Share the MobilePros folder with the office team only. Never share Jobs with a client; send them the certificate PDF or a link to the one job folder instead.
config.json (drive section). Change them there before the first real job, not after — the script files new jobs by the new pattern and leaves old ones alone.3 The Sheet, tab by tab
| Tab | Who writes it | What it holds |
|---|---|---|
| Workers | you | One row per contractor or employee: name, phone, email, role (worker sees their jobs, admin sees all), the access key and private link the script generates, Active on/off. |
| Jobs | you, then the script | The schedule. You fill in the job (see 4); the script fills in Folder, Started, Certificate, Finished, Rating, Photo consent and Flags as the visit happens. Status moves Assigned → In progress → Done by itself. |
| Visits | script | One line per event: on my way, started (with GPS), certificate, finished (with GPS), review request. The audit trail. |
| Media | script | Every photo and video: job, service, Before/After, file name, Drive link, when it was taken and by whom. |
| Certificates | script | One line per certificate: services with areas, issue flagged, not-completed reason, rating, the site contact's comment, photo consent, whether they signed, the PDF. |
| Assessments | script, then you | One line per quote: prospect, totals, services, the PDF and folder. Your menu action turns a row into a job (see 9). |
| Showcase | script, then you | Jobs eligible for the public work page. You write the Caption and tick Show on page? (see 8). |
| Log | script | Setup, links generated, digests sent. For troubleshooting. |
4 Adding a job
- Jobs tab → new row. Job ID: anything unique (
J-1042). Status: Assigned. Date as a date, Time as text (8:00 AM). - Client (the company), Site (the location, if a client has several), Address with city and province — the app opens it in Maps and the work page uses the city.
- Site contact (name and role), Contact phone (makes the "on my way" text and tap-to-call work), Contact email (where the review request goes).
- Access notes: gate codes, parking, water, keys. Job notes: what the client asked for.
- Services: comma-separated, spelled exactly as in
config.json(Pressure washing, Window cleaning). Each becomes a Before/After card and a certificate line. - Documents: one per line,
Work order 2291 https://drive.google.com/…. They appear as buttons on the job. - Assigned to: the worker's name as on the Workers tab (several: comma-separated). The job appears on their phone the next time the app checks, usually within a minute.
5 Workers and their private links
- Workers tab → new row: Name, Phone, Email, Role. Leave the key and link cells empty.
- Menu MobilePros → Generate private links for workers. The key and link fill in; Active is ticked.
- Text or email the person their Private link plus the crew training page:
…/training/. They open the link once and save the app to their home screen (the training page shows how). - Someone leaves or loses a phone: untick Active (link stops at once) or menu → New key for selected worker (old link dies, new one to send). Their past visits stay on record under their name.
6 What arrives, and when
| When | What to do | |
|---|---|---|
| Visit started | the technician taps Start visit | Nothing. It confirms they are on site and when; the folder link is in it. |
| Certificate (PDF attached) | the certificate is sent, usually at the end of the work | Skim it. If the subject starts with ACTION, something was flagged: not completed (book the return visit) or an issue on site (tell the client). |
| Visit finished (PDF attached) | the post-job checklist is submitted | Read the answers that say "see notes". Damage or injury: call the technician. |
| Assessment (quote PDF attached) | a technician saves an on-site assessment | Follow up with the prospect; turn it into a job when they say yes (see 9). |
| Daily digest | 6 pm every day | The one to read: done today, flags needing action, started-not-finished, finished without a certificate, tomorrow's jobs and anyone unassigned. |
| Thank-you with review link | sent to the client after a 4- or 5-star certificate, if the job has a contact email and you set the review link | Nothing; a copy is logged on the Visits tab. |
Who gets them and the digest hour are set at the top of the script (NOTIFY_EMAILS, DIGEST_HOUR). Send the daily digest now is on the menu if you want one on demand.
7 Reading a visit
- Fastest: the certificate PDF from the email. One page: services with areas, the before/after thumbnails, the rating, the site contact's comment, both signatures, time on site.
- The whole story: Jobs tab → the row's Folder link. Full-size photos by service, the three PDFs, any video.
- Minute by minute: Visits tab filtered by the Job ID: on-my-way text, start time and GPS, certificate, finish time and GPS, review request.
- To send to the client: forward the certificate email, or share the job folder's Pressure washing sub-folder as view-only. Do not share the Jobs folder itself.
8 The work page (showcase)
- When a visit finishes and the certificate had Photo consent = Yes, the script copies that job's photos into Showcase / Job ID, makes the copies viewable by link, and adds a row to the Showcase tab. The originals stay private.
- Open the Showcase tab. Look at the row: city, services, rating, the client's comment, links to the before and after files. Open the folder and look at the photos — only good pairs belong on the page.
- Write a short Caption ("Plaza entrance and walkway, hot-water pressure wash") and tick Show on page?. Within ten minutes it is on
…/work/. - Untick to take it down. A client changes their mind: untick, then delete the job's folder inside Showcase; the originals in Jobs are untouched.
- Photos added after the job was synced (or a sync that failed): select the job on the Jobs or Showcase tab → menu → Refresh showcase photos for selected job.
9 Assessments and quotes
- The email arrives with the PDF. The folder in Assessments has the photos per line and per documented area.
- Edit the quote if needed: the technician can reopen it on their phone (Jobs screen → Saved on this phone), change lines, and Save & send again; the PDF is replaced and the Assessments row updated.
- Prospect says yes: Assessments tab → select the row → menu → Create job from selected assessment. A new Jobs row appears with the client, site, address, contact and services filled in and the quote linked. Add the date, time and Assigned to.
Prices on the phone come from the price list in config.json (assessment.priceList); the technician can override a price on the spot, and the note says why.
10 Your referral code and partner page
- Your code is your company name, short (for example ALWAYSCLEAN). It came in your welcome email, and your partner page is mobilepros.ca/partner/?p=YOURCODE. Bookmark it.
- The partner page has your link and code with copy buttons, texts and emails ready to send, images for social, a one-page PDF with a QR code, and a scoreboard of who has applied, who is live and how many count toward your four.
- A referral counts once that business has been live for 30 days. Waivers are recalculated on the first of each month; the page shows your fee for the month.
- Four names is all it takes: the sub you hand work to, the trade you share a site with, the owner at the supply counter, the competitor in another town you respect. Send the first text on the page; it takes thirty seconds.
11 Changing the setup
config.json, on the website. Everything the office side does is at the top of the script. Neither needs a developer to change.| You want to change… | Where | Then |
|---|---|---|
| Company name, colours, logo, phone, email | config.json → company | Re-upload the site folder to Netlify (drag onto Deploys). Phones pick it up on their next open. |
| The list of services, areas, standard notes | config.json → services, areas, standardNotes | |
| Pre-visit checklist, post-job questions, "on my way" wording, blurry-photo strictness, location recording | config.json → visit | |
| Price list, units, tax, quote terms | config.json → assessment | |
| Training videos (crew and owner pages), work page title and intro | config.json → training, showcase | |
| Folder and file naming | config.json → drive (and the matching lines in the script) | |
| Who gets the emails, digest hour, review link, email the client the certificate automatically | Top of Code.gs: NOTIFY_EMAILS, DIGEST_HOUR, REVIEW_LINK, EMAIL_SITE_CONTACT | Save → Deploy → Manage deployments → pencil → New version → Deploy. Then run setup once if you changed the digest hour. |
12 Housekeeping and privacy
- Share the Drive folder with the office only. Clients get a PDF or one sub-folder, view-only.
- Public means consented twice: the client's tick on the certificate and your tick on the Showcase tab. Use only those photos anywhere public, including social media.
- Keep records as long as you need them for the client relationship and what your accountant or lawyer advises; delete the rest once a year. Deleting a job folder removes its photos; the Sheet row stays as the record that the visit happened.
- A leaked link: Workers tab → New key for that worker. Done.
- Staff leaving: untick Active. Remove them from the Drive folder share if they had it.
- Backups: Google keeps the Drive and Sheet history (File → Version history). Once a quarter, download the Sheet as Excel and keep it with your books.
? When something goes wrong
- A job is not showing on a technician's phone
- Check the Jobs row: Status is Assigned (not Unassigned or Cancelled), the Date is a real date, and Assigned to matches their Workers name exactly. Ask them to tap ↻ on the Jobs screen.
- "This link is not active" on a phone
- Their Workers row has Active unticked or the key was regenerated. Re-tick, or send the new link.
- The photos arrived but the certificate didn't, or the other way round
- The phone sends things in order and keeps trying; check again in a few minutes or ask them to open the app (it resends when opened). The Visits tab shows what has landed.
- A certificate came in with no site contact signature
- Allowed; the post-job answer for the walkthrough says why. Follow up with the client if it matters for that account.
- The digest didn't arrive
- Script editor → Triggers (clock icon): there should be a daily
dailyDigest. If not, runsetupagain. CheckNOTIFY_EMAILShas your address. - A job is on the Showcase tab but not on the page
- Show on page? must be ticked and the row must have at least one Before or After file. The page refreshes within ten minutes; add
?nocache=1to the feed link to force it. - Videos are missing
- Clips over the limit (40 MB, about a minute) are refused on the phone with a message. Pieces of a clip in _uploads mean it is still arriving or the phone lost signal; it will resend.
- I changed config.json and nothing changed on the phones
- Was the site re-uploaded to Netlify? Then have them close the app fully and reopen; it checks for a new config on every open.
Technical contact: the person who set this up.