fiveanddime Product Tutorials About Open the app
Tutorial · Reference

Troubleshooting

Things go sideways. When they do: a short checklist to run first, then a list of common symptoms and the specific fixes that usually work. Email support@fiveanddime.tools if nothing here matches.

Time: Reference; skim or search Difficulty: Most fixes are one or two taps

First things to check

Before diagnosing anything specific, run these four. Most weirdness resolves at one of these:

  1. Is the device online? Look at your phone's wifi/cell indicator. If you're offline, sales queue locally and sync when you reconnect; reports won't refresh from the backend. Get on a network if you can.
  2. Is the sync chip clear? The leftmost chip in the top strip shows pending sync state. If it shows a number, you have queued operations waiting to send. Tap it to see what's pending; the queue drains automatically when you're online. Don't post end-of-event inventory until the queue is empty.
  3. Have you pulled recently? Settings → Pull from Backend Now. Brings down the latest catalog, events, categories, bundles, and settings. Many "I edited the sheet but the app doesn't see it" issues are just a missing pull.
  4. Is the right event active? Tap the middle chip in the top strip. If it shows the wrong event (or "Test Event" when you meant to be on a real one), pick the right one before ringing sales.

Authorization warnings

I ran a function and got a yellow "Google hasn't verified this app" warning

This is normal and expected. Apps Script shows it any time a script needs permission for a capability it doesn't already have. You'll see it during initial setup (the six-screen flow in Step 2 of setup), and you may see a shorter version later the first time you use a feature like label PDF export, QR generation for forms, or daily backups, if you didn't grant all permissions upfront.

What to do: click Advanced at the bottom of the warning, then Go to Backend (unsafe), then Continue, then Allow. The "(unsafe)" wording is Google's catch-all for any unverified script. Yours is fine because you're the one installing and running it.

How to avoid it next time: when you do see the full permissions list (the screen titled "See what Backend can access"), tap Select All at the top before continuing. That grants every permission your script will ever need in one go, so you don't get re-prompted later.

If it keeps appearing on a function you've already authorized: something genuinely changed in the script's required permissions, usually because we shipped an update that needs a new capability. Repeat the Advanced, Go to, Continue, Allow flow once and it'll stop.

"Access blocked: Authorization Error, the OAuth client was not fully created yet"

You'll see this if you try to deploy or run a script within a few minutes of copying a fresh template. Google provisions the bound script's OAuth client asynchronously when you make the copy. For the first few minutes after copying, the OAuth client isn't ready and any authorization attempt is blocked.

Fix: wait 5-10 minutes, then try the same step again. The error almost always resolves on its own as Google finishes the behind-the-scenes setup. No action needed on your end other than waiting.

If it persists after 15+ minutes: close the Apps Script editor tab, refresh the spreadsheet, then re-open Apps Script via Extensions → Apps Script. Try Deploy again. If still blocked, trash that copy of the template and make a fresh one. Wait 10 minutes before opening Apps Script in the new copy.

Setup hiccups

First thing to try when setup feels off

Go to fiveanddime.tools/connect/, paste your license key in the first field, and tap Verify install. The site re-shares your library access, probes your backend, and tells you exactly what (if anything) needs attention. Most of the symptoms below can be diagnosed (and often fixed) in one click here.

"Script function not found: somefunctionname" when clicking a menu item

Happens to buyers who set up before a new feature was added to the spreadsheet menu. The menu item itself comes from the library (which auto-updates), but the function it points at has to physically exist in your spreadsheet's bound script — and yours was generated before that feature shipped.

Fix (about 90 seconds):

  1. Open your spreadsheet → Extensions → Apps Script.
  2. In the file list on the left, click Shim.gs.
  3. Scroll to the bottom of the file. Paste the missing function-line(s) the email from support gave you — they look like function someName(...args) { return FiveAndDimeLib.someName(...args); } — one line per missing function.
  4. Click the floppy-disk Save icon at the top.
  5. Close the spreadsheet tab, reopen it from your Drive, then try the menu item again.

Email support@fiveanddime.tools with the exact function name from the error (e.g. openCustomOrderRequestPanel) if you don't have it handy and we'll send the lines to paste.

"You do not have access to library xxxxx used by your script, or it has been deleted"

This shows in the Apps Script editor during deploy or when running any function. Behind the scenes, the backend code is a shared library that's granted to your Google account at license time. Two situations break that share:

After we re-share, close the spreadsheet tab, reopen it from your Drive, and try Deploy again. Apps Script caches library references per session, so a reopen is required for the new permission to take effect.

"Update available" banner inside the app

When we ship backend improvements, the library version bumps. Your spreadsheet's bound script is pinned to a specific version, so it doesn't pick up the new code automatically.

In the running app: a small banner at the top of Settings says a new library version is available. Tap the update button; it re-pins the library and reloads. One-tap fix.

In the Apps Script editor: if the in-app updater isn't available yet (very early installs) or didn't work, you can pin manually one time: open the Apps Script editor, click the Libraries icon on the left side (looks like a book), find FiveAndDimeLib, change the version dropdown to the latest number, click Save, then redeploy from Deploy → Manage deployments.

I scanned the setup QR, tapped Apply, and the app is still blank

Recent installs should auto-pull the catalog after the setup card. If yours doesn't, or you missed the catalog-loading status:

  1. Open the app in a regular browser tab (not the home-screen PWA) at fiveanddime.tools.
  2. Go to Settings → Sync → tap Pull from Backend Now. Watch for either a green "✓ N products" or a red error message.
  3. If you get an error: read it. The app explains library-access and authorization failures with specific recovery steps. If it says something generic ("see Settings"), check that the License section shows a valid green status.
  4. Once the browser tab shows products, your PWA home-screen install will also see them on next launch (they share storage).

The most common cause of a blank app after QR is the install-before-confirm race: you tapped "Add to Home Screen" before tapping Apply setup on the sticky card. The PWA shortcut points at the bare URL with no setup params. Opening the URL fresh in a browser tab and going through Apply again fixes it.

"Business gmail" — Workspace vs. just another personal gmail

fiveanddime works fine with either, with one specific Workspace gotcha to know about.

Are you actually on Workspace? If your email ends in @gmail.com (e.g., myshop@gmail.com), it's a regular personal Google account — no admin restrictions, treat it like any other gmail. If your email ends in a custom domain (@yourbusiness.com) and you sign in through Google, that's a Workspace account.

Workspace-specific issue: Workspace admins can restrict the "Who has access: Anyone" option on Apps Script Web App deployments. If the deploy dialog only offers "Anyone within [your org]", picking that breaks the connection — the fiveanddime frontend isn't in your organization, so it can't reach the backend. Two ways out:

The other Workspace blocker is a hard "blocked by your administrator" OAuth wall with no Advanced link. That one has no buyer-side workaround; personal gmail is the cleanest path.

Sync & data

Pending sync number won't go down

Sale rang on Device A doesn't appear on Device B

My sheet's QuantityOnHand doesn't match what the app shows mid-event

Expected, not a bug. The app's stock badges (OUT, LOW) are computed live — they account for sales you've already rung in the current event, even before posting. Your Products_Master.QuantityOnHand column on the sheet works on the older two-stage rhythm: it only changes when you tap Post sales to inventory at the end of an event. So mid-event, the sheet's number is "as of the last event you posted," while the app's badge is "as of this minute."

When end-of-event posting runs, the sheet catches up to reality and the two numbers reconcile. Until then, trust the app's badge for in-the-moment decisions and the sheet for historical reporting.

If you want a live look at "what's effectively on hand right now" without doing the math yourself, the items-grid badges (OUT in red, LOW in orange) carry that signal — that's why we built them to compute live rather than read straight off the sheet.

Inventory looks wrong after an event

End-of-Event card says "X unposted line items across 0 SKUs"

Means the event was rung as all manual items (no catalog SKU). Manual items have nothing in your catalog to decrement, so the inventory math is a no-op — but you still tap Post sales to inventory to mark them as accounted-for and clear the reminder card. Then Pull from Backend Now to refresh the device. Card disappears.

Mixed events (some catalog, some manual) show the same way with a smaller "0" — e.g., "5 line items across 2 SKUs" means 2 catalog items will decrement and 3 manual items will just get marked posted.

I rang the same sales twice by accident

Happens when you're not sure whether the first ring saved and re-enter from scratch (especially when backfilling from a paper list). The system doesn't catch it — each tap on Complete sale creates a fresh SaleID. To clean up:

  1. Open Events tab, find the duplicate sale rows. Look for matching totals + close timestamps as the giveaway.
  2. Tap Void on each duplicate. Don't try to delete the rows from the Sales sheet — voiding preserves the audit trail and excludes them from reports and end-of-event posting.
  3. Tap Post sales to inventory if it's prompting (the voided sales drop out automatically; posting is idempotent and safe to re-tap).
  4. Pull from Backend Now to refresh totals on this device.

Your Sales totals will now reflect the real number of transactions. If the items had SKUs and you already posted before noticing, voiding doesn't reverse the inventory decrement — do an Inventory adjustment (Settings → Inventory adjustment) to add back the over-decremented quantity, reason "count_discrepancy."

Catalog & products

Added a product but it's not in the app

Category tab is missing or shows the wrong name

Bundle isn't auto-applying

Parent product won't open the variant chooser

Sale flow

Complete sale button is disabled

Cart line is wrong after a price override

Tax looks wrong on a sale

Scanner

Camera permission denied

Scanner sees the barcode but nothing happens

Scanner doesn't recognize the barcode at all

Product photos

Photos work on my laptop but not on my phone (grey box appears then disappears)

The "grey box flashes and disappears" pattern means the image URL is reaching your phone correctly — the browser tries to render it, the fetch fails, the button silently falls back to text-only. The image data is the same on both devices, so the difference is in how each device accesses it.

By far the most common cause: the Drive folder (or individual photo file) isn't publicly shared. Your laptop browser is signed into the Google account that owns the photos, so Drive serves the image based on your authentication cookie. Your phone browser isn't signed into the same account (or isn't signed into Google at all), so the same URL returns a "sign in to view" page instead of the image, and the <img> tag errors out.

Fix (one folder share covers everything):

  1. Open Drive on any browser.
  2. Find the folder where your product photos live.
  3. Right-click → Share.
  4. Under "General access," change Restricted to Anyone with the link.
  5. Set the role to Viewer. Click Done.

Photos become visible to anyone with the URL, but the URLs are long random strings — effectively private in practice. Your spreadsheet, your sales data, and the rest of your Drive aren't affected. After sharing, close and reopen the fiveanddime app on your phone so it stops using cached "this URL doesn't work" entries, then the photos appear.

If you'd rather not share a whole folder: share photos individually with the same setting. For more than a handful, the folder approach is far less work.

Photos work on no device — including my laptop

Receipts

Receipt QR shows but customer's phone can't open the link

License

"Cached" warning banner

The licensing service couldn't be reached to revalidate your license, so the app is operating from the last-known-good cached state. License is still valid; you can keep selling. The banner clears the next time the device reaches the licensing service successfully.

"Blocked" or "Invalid"

Auto-email (custom orders)

Auto-email didn't fire when I marked an order Ready

Backups

Daily auto-backup doesn't seem to run

Saving and restoring pending sales (JSON export)

When you ring a sale offline, it sits in this device's local storage until you reconnect and the queue drains. Most of the time you just wait for the drain. But in rare cases (browser data accidentally cleared, you have to switch devices unexpectedly, you suspect the queue is corrupted) you want a way to grab those pending sales as a file and restore them later.

The Settings tab has a Backup & recovery section with two buttons for exactly this:

Save unsynced sales (JSON)

Tap the button. The app downloads a file named something like fiveanddime-pending-2026-05-10-1430.json. That file contains every queued operation on this device that hasn't synced yet (sales, voids, post-event requests, inventory adjustments, product edits).

Save the file somewhere safe: email it to yourself, drop it in Drive, AirDrop to another device, whatever you trust. The file is plain JSON; it doesn't contain credentials, just the operation data.

Restore from saved JSON

Tap the button, pick the JSON file you previously saved (or one you've moved to this device from another). The app re-adds those operations to the queue. They sync to the backend on the next drain (or you can tap Pull from Backend Now to nudge it).

Restoring is safe to re-run on the backend: sales have unique SaleIDs, so re-submitting one that already made it through won't double-post. Safe to restore a backup even if you're not sure whether the originals synced.

Discard all pending entries

Last resort. Below the save/restore buttons, the Discard all pending entries button wipes the local queue. Use this only when a specific queued entry keeps failing because its data is no longer valid (references a deleted SKU, deleted event, etc.) and you've already saved the JSON copy of anything you want to keep. Discarded entries can't be recovered after.

When to use this

99% of vendors never need any of this. Sales queue and drain in normal use. Use the save/restore flow if you're about to clear your browser data, switch to a new phone, or troubleshoot a stuck queue and want a safety copy first. Use Discard only when you've identified a specific bad entry and have backed up the rest.

Stuck in a weird state? Two nuclear options

Force a refresh of the device's local state

In Settings, scroll to Pull from Backend Now and tap. This re-downloads catalog, events, categories, bundles, and settings from your spreadsheet. Fixes most "stale UI" issues. Won't lose any queued sales (they stay queued).

Last resort: reinstall the app

If something is genuinely broken on the device (rare): uninstall the PWA from your home screen, clear the site data in your browser's settings (look for your fiveanddime install's domain in the site list), reinstall fresh from the URL. Warning: if you have pending un-synced sales in the queue, this wipes them. Either drain the queue to 0 first (Pull from Backend Now, wait), or use the JSON export below to save them first.

When to email support

If nothing here helps: support@fiveanddime.tools. Useful info to include:

What's next