Legal
Privacy Policy
Last updated: September 8, 2026
This policy describes how Scan to Sheets (also called Scan to Google Sheets, the App), operated by Pham Minh Kha, handles information on iOS and Android. The App scans barcodes and QR codes and sends rows you confirm to Google Sheets that you choose.
Google Sign-In
The App uses Google Sign-In in two optional ways. You can use the scanner without signing in (guest mode).
- App account login. If you sign in to an App account with Google, we receive your Google name and email so we can create or look up your account on our backend.
-
Google Sheets connection.
If you connect Sheets with your Google account (Choose from Google Drive), the App requests only
https://www.googleapis.com/auth/drive.file. That is a per-file scope: See, edit, create, and delete only the specific Google Drive files you use with this App. We use your Google email to keep that session on the device. Access tokens are obtained from the Google Sign-In SDK and held in memory for Google API calls. They are not sent to our servers for this connection method. The App does not requesthttps://www.googleapis.com/auth/drive.readonly,https://www.googleapis.com/auth/drive, orhttps://www.googleapis.com/auth/spreadsheets(access to all of your Drive files or all of your spreadsheets).
Google Sheets and Google Drive
You choose how a spreadsheet is connected. The App only uses Google APIs for the spreadsheet features you request.
- drive.file. Used only for Google Drive files this App creates while you are signed in: create a spreadsheet; list those files (id, name, last modified time); read spreadsheet title, worksheet names, and header rows; append scanned rows; and create a worksheet when you ask. The App uses the Google Sheets API and Drive API on those files only. It cannot list, read, or write other files in your Drive.
- Existing spreadsheets. Spreadsheets you already have, and that this App did not create, are connected with the service account method: you share that file with the App service account email as Editor. That method does not use your Google Sign-In token or the drive.file scope.
- OAuth method. Your device talks directly to Google Sheets and Drive APIs with your token.
- Service account method. You share the spreadsheet with the App service account email shown in the App. Your device sends write and metadata requests to our Cloud Run API, which calls Google Sheets on your behalf.
- Public / Apps Script method. Your device sends scanned rows to the App’s Google Apps Script web app endpoints.
Other information the App uses
- Camera. Used to scan barcodes and QR codes. Images are not uploaded as photos for this purpose; the App stores the decoded value.
- Scanned values and form fields. Stored in local scan history on the device and, when you send, written as a row in the worksheet you selected.
- Location. Requested only if you add a location column. Coordinates are written into that column when you send the row.
- Device fields. If you map them, values such as device id or brand may be included in a row.
- Sheet configuration. Spreadsheet URLs, worksheet names, column mappings, and the Google email used for Sheets OAuth are stored on the device. If you use Backup, that configuration is saved to your App account on our backend.
- App account. Optional. Name, email, and (if you set one) a password. Passwords are hashed on our backend. We also store subscription-related fields you already have on the account when you update it.
- Purchases. In-app purchases and subscriptions are processed by RevenueCat and Apple or Google.
- Ads. Free users may see Google AdMob interstitial ads. Ads are requested as non-personalized. Spreadsheet contents and Google OAuth data are not sent to AdMob.
How information is transmitted
Traffic to Google APIs, our Cloud Run API, Apps Script, RevenueCat, and AdMob uses HTTPS. For the OAuth Sheets method, scanned rows go from the device to Google. For the service account method, they go from the device to our API, then to Google Sheets. For the public method, they go from the device to Apps Script.
Data protection mechanisms
Sensitive data includes your Google email, OAuth access tokens, and spreadsheet content you choose to read or write. We protect that data with the following mechanisms that exist in the current App:
- Encryption in transit. Requests to Google APIs, our Cloud Run API, Apps Script, RevenueCat, and AdMob use HTTPS / TLS.
- OS-encrypted storage on the device. The Google email for a Sheets OAuth session and optional saved login credentials are stored in the device Keychain (iOS) or Keystore (Android).
- Access tokens in memory only. For the OAuth Sheets method, Google access tokens are held in memory for API calls. They are not written to our servers and are not stored in our backend database.
- Password hashing. If you set an App account password, it is hashed on our backend before it is stored in our Users spreadsheet.
- Limited access. For Google Sign-In Sheets, Drive and Sheets API access is limited to files this App created under drive.file. We do not use Google user data for advertising or AI / model training.
Storage and protection
- Scan history is stored in a local SQLite database on the device.
- App settings, sheet configuration, and signed-in App account profile are stored in on-device app storage.
- The Google email for a Sheets OAuth session, and optional saved login credentials, are stored in the device Keychain / Keystore.
- App account passwords are hashed on our backend before they are stored in our Users spreadsheet.
- Rows you send remain in the Google spreadsheet you connected, under that spreadsheet’s Google sharing settings.
No security measure is perfect. Keep the App and your device operating system up to date, and review who can access your Google spreadsheets.
Retention
- Local scan history and configuration remain until you clear history, reset the App, or uninstall it.
- A Sheets OAuth session remains until you sign out of Google Sheets in the App.
- Data written to Google Sheets stays there until you (or someone with access) delete it in Google Sheets.
- App account records on our backend remain until you ask us to delete them. Signing out or using Delete Account in the App clears the local session; it does not automatically erase our backend row or rows already written to your spreadsheets.
Limited use of Google user data
Google user data obtained through Google Sign-In and the drive.file scope is used only to provide the App’s spreadsheet features (create and manage files you use with the App, and write scan rows you confirm). Service account access applies only to spreadsheets you share with the App email.
- We do not sell Google user data.
- We do not use Google user data to serve or personalize advertising.
- We do not use Google user data to train AI or machine-learning models.
- We do not transfer Google user data to third parties except Google, to carry out the action you requested, or as required by law.
How to revoke access or delete data
- In the App, open Account and sign out of Google Sheets to drop the local Sheets OAuth session and Google Sign-In for that connection.
- Use Logout or Delete Account to clear the local App account session and Google Sign-In on the device.
- In Settings, clear scan history or reset App configuration stored on the device.
- Revoke the App in your Google Account: https://myaccount.google.com/permissions.
- Delete or edit rows directly in your Google spreadsheet.
- Email pmkha92@gmail.com to request deletion of App account data we store on our backend.
Children
The App is not directed to children under 13. We do not knowingly collect personal information from children under 13.
Changes
We may update this policy. The current version is posted at https://scantosheet.net/privacy, with the Last updated date at the top.
Contact
Privacy questions: pmkha92@gmail.com.