Can you hide the User Profile sheet from your Users?

Hi All,

I have a directory app that lists members of a particular group. The app is intended for use by group members as well as certain outsiders, and collects name, title, and e-mail address into the User Profiles sheet.

My app is built from an existing shared Google Sheet (private to members) where members list their own information. This won’t change, I am just enhancing the experience by adding the app - 1.) so that members can more easily access the directory in a much sleeker way and 2.) so that a larger group of select outsiders can also access a filtered version of this directory.

My problem: I don’t want existing group members to see the User Profiles sheet. I thought I had this solved early on by assigning the User Profiles sheet to a Glide-only sheet. I recently learned that the Glide-only sheets can not successfully be used for User Profiles as any auto-calculated columns cannot be referenced from within the app (Side note to Glide: unless you plan on fixing this please make this more clear to app builders :pray:t2:)

Currently I have moved User Profiles back to my Google Sheet and have hidden that sheet, locked the cells, and turned all text to white. These are all incredibly lame security measures that are easily undone by any curious user. While the chances of a directory member peeking through my hidden sheets is rather low, this “solve” still feels very unethical from a security and privacy standpoint and I feel uncomfortable releasing this app as is.

Has anyone been in a similar situation and solved this issue in a better way? I’m not the only one building an app from a shared sheet am I?

Thanks for any input!!

If you lock edits of that sheet to yourself I assume others can’t set the text back to black. Can you confirm?

Do group members have editing or copy rights to the sheet, or just you?

Also, do you allow any data editing from the app, or is it all in the sheet?

Also at some point Glide should be releasing fixes today. You could possibly try using the glide sheet again to see if they fixed any issues. I don’t know when exactly they push those updates.

Others can’t change the text to black but all editors can view hidden sheets as well as copy/paste the locked cells, plus they can make their own copy of the entire sheet which results in full permissions towards the copy :-/

Again, chances someone would do so are low, but exist nonetheless and “securing” data this way feels irresponsible.

All group members have edit and copy rights (also I am not the spreadsheet owner, I can try reaching out to walk her through removing the copy rights but the edit rights are imperative)

The app allows members to edit their own profiles but that’s it - new profiles need to be created within the privately-shared sheet (this prevents non-members from creating profiles using the app)

If Glide fixed it that would be AMAZING!!! I am not too hopeful since I found this on their official documentation:

I mean, it does say not YET, which is hopeful…but this official documentation makes me think they don’t view this as a bug, and I am guessing they prioritize bugs over features?

Maybe I’m not clear on the original problem you were having. That statement from Glide is just telling you that existing computed columns will not be visible if you use the exact same glide table in a separate app. Are you trying to use a glide table in multiple apps?

I may have some ideas for the Google sheet option. Give me a little bit to compose my thoughts.


Oh, I might be misunderstanding their statement of limitation then. I only have one app, but when I had the User Profile sheet assigned to a Glide Table several features of my app did not work at all, and they were all reading from columns of the Glide Sheet that were not basic or user-specific (if-then-else, roll-up, a few others I can’t remember because I troubleshooted it a few weeks ago…)

Actually I feel like a few basic columns were also giving me trouble as well when using the Glide sheet. I only kept light troubleshooting notes and am now wishing I kept more extensive notes on the exact issues. (my once great memory is either failing from age or “pandemic brain”) I can only say with certainty that many things were wonky with the Glide sheet, and resolved when I moved User Profiles to my Google sheet :confused:

Gosh thank you!!! :crossed_fingers:t2:

1 Like

I honestly haven’t ventured into glide tables yet. They are still new and people have found some bugs. Based on other posts, Glide may be rolling out updates right now which mayo address some issues people have had with glide tables. For my project, I prefer the data in the google sheet because I have a process to make timestamped backups of the sheet. I may move over a few static or non-critical tables to glide at some point when they allow for bulk uploads.

I had hoped that your app would be display only as far as the app is concerned. If that would have been the case, then I would have suggested creating a new sheet with you as the owner and use a series of IMPORTRANGE formulas to duplicate data from the original sheet. The you could have an added user profile sheet tab and it would never be visible to the other users because they wouldn’t have access to your copy of the sheet.

As an alternative, I had hoped that the user would not have editing rights to the original sheet. This way the sheet could have had a user profile sheet tab that is set as hidden. According to Google, users with view only access cannot access a hidden sheet tab, but if they are still able to copy the sheet, then they would able to unhide and view it in the copied sheet.

You can protect an entire sheet tab and set permissions on who has access to edit it, but short of hiding the sheet tab and crossing your fingers that nobody see’s it, it’s not a great solution if the user profiles will contain sensitive information. If there is no sensitive information and your main goal is to prevent users from editing the user profile sheet, then I would protect the sheet tab (only allowing your account to have permission to edit), then hide the sheet.

The only other alternative would be to have separate google sheets. One for the users to have access to and one for the app. Then you could use a crazy combo of IMPORTRANGE, scripting, and other formulas to keep the sheets in sync. Possibly you could explore if zapier or integromat would work to keep sheets in sync. I have a use case in my app where I have a complicated set of calculations that take awhile to process. This would cause sync issues for me if there was rapid data entry from the app, but then I set up a second separate google sheet with importrange formulas to bring in the tables I needed for my calculations. The calculations run in that second sheet without interfering with the sheet used for the app. Once the calculations are done, an importrange in the original sheet brings back the calculated values. Someday I’d like to migrate that process to glide, but it currently doesn’t have he feature set that I need.

Long story short, unfortunately I don’t know if I have a good or particularly easy solution for you. I would explore protected sheets and hiding if your main concern is preventing users from altering any data in the user profile sheet and not so much securing sensitive date. Otherwise give glide tables another shot. In staging I just tried creating a glide table, setting it as a user profile sheet, then added a computed column and set visibility on another tab based on the value of that computed column. From what I can see it works just fine, whether I’m in the editor or adjusting that computed column directly in the app through the published url. So maybe, as far as staging is concerned (didn’t have a good app in production to test) everything seems to work.

If you still have issues, please provide screenshots of you user profile sheet and any settings where you are trying to use those computed columns, to help diagnose if it’s just a setting that needs to be adjusted, or if there is still a bug.


Thanks Jeff! Some of your suggestions I already had in place, you were thinking on my wavelength there. I have the User Data sheet hidden (tho it can be unhidden by the sheet users) and that entire sheet tab is a protected range. Plus I turned all the text white. However when I sign-in to Google under an alternate account (that also has edit-access) I am easily able to access the hidden information with a few clicks, whether that’s copy-pasting the data or copying the sheet. I am definitely trying to secure the data as opposed to just preventing it from being edited.

I knew about IMPORTRANGE from studying posts here but have no experience using it. Thanks for the explanation, I am going to keep that as a last-resort method! (Feels messy but if it works it works)

Since you’re saying Glide serendipitously made some updates to their tables today I think my next step will be to return my app to its old User Profiles Glide sheet and see what happens. At very least I can correctly document the exact issues I WAS having - tho they largely were related to tab visibility, which you seem to have working! This makes me hopeful.

Just knowing there’s no simple easy solution (outside of Glide possibly coming through on this!) is incredibly helpful - thanks! I’ll report back once I have results :sunglasses:

1 Like

Just to chime in here, I used Glide Table for user profiles in two of my apps and didn’t find any problems thus far.


I’ve now completed the switch-back to a Glide-owned User Profile sheet and have mostly good news - they do work now! This is a huge relief, thanks to Glide for fixing this :heart_eyes:

A notable bummer is when making this switch - whenever you change the source sheet for a tab the existing layout/components for that tab completely disappear. This means possibly recreating several pages of your app from scratch which is SUPER frustrating and time consuming. It would be nice if an option existed to map column connections from the old sheet to the new sheet instead. (name = name, email = email, etc…)

Some strange issues I’ve encountered that I don’t recall experiencing when using a Google Sheet as User Profiles:

  • Onboarding will work as expected, with a new row auto-generated into User Profiles after signing into the app with a new email address. I then have user-filled components that write to this row.
  • During testing I will often delete a row(s) from the User Profile sheet so that I can re-attempt a fresh onboarding using my personal email address(es).
  • With the Glide-owned sheet, once I delete that row, a new row will NOT be auto-generated when signing in with any email address that has been auto-recorded to that Glide sheet at ANY point in its history. After deleting a row from User Profiles and signing back in with the email from that deleted row, all my user-filled components are frozen, as there has been no new row auto-generated to receive them.
  • The only way around this is to force a new row into the Glide sheet by manually entering my email.
  • Meaning, somehow, Glide is recording and storing user data beyond the User Profile sheet?
  • I thought maybe this was connected to the auto-generated “App: Logins” sheet, but clearing that data out did not change behavior.
  • ALSO OF NOTE - if you duplicate an app (using the same Google sheet) and assign a separate User Profile sheet to the duplicated app, this same issue will occur with any email address that was previously onboarded into the OLD app. :frowning_face_with_open_mouth: Related - onboarding a fresh email address to the duplicated app creates a new row in the User Profile sheets of BOTH apps, even tho each app references a different sheet. :worried:

This…bug?..doesn’t affect app usability for the end-user (unless you publish two apps using the same sheet but different User Profile sheets and maybe one needs to be a Glide-owned sheet??) but it’s a huge annoyance when testing. I ended up deleting my original app to avoid possibility of future conflicts with the duplicate.

Issues aside, I am overwhelmingly relieved to have things working with the User Profiles sheet hidden away inside Glide - thank you!!