How to make multiple row owners?

Hi Community,

I want to have multiple row owners, but when I follow the guide on Glide Documentation page, it doesn’t work…

Can anyone help me out, or point me in the right direction?

1 Like

How did you create the array column?

The only way to use an array column as a Row Owner is if it is created in a connected Google Sheet. Or (I think) an AirTable base or Excel sheet.

1 Like

Ah damn, I made the array column in Glide with “Make Array”

Yes, that won’t work. You can’t use computed columns as Row Owners.
This is because computed columns are calculated on each users device after all data has been downloaded. So applying Row Owners at that point would be like shutting the gate after the horse has bolted :wink:


That makes sense haha!

So i need to connect a separate google sheet/Airtable, with users - To use this function?

Yes. Either that or have multiple row owner columns.

1 Like

I’ll try to work with that :slight_smile:
Is there any way to make it dynamic, so future added users can get access, without me having to add them manual to all “old” rows?

If you’re using a Google Sheet, then probably the easiest way is with an arrayformula.
As a general rule I try to avoid sheet formulas, but this is one case where it makes sense.

If you have an onboarding flow, then another option would be to have a button at the end of the onboarding that does a set column values on the user profile row (setting the appropriate row owner values).


How does Glide deal with multiple row owners created by formula in google sheet?

In our case the formula will generate different row owners depending on different variables in the sheet

  • so for example when an order is new, scheduling team see the order.
  • when its shipped, operations team no longer need to see the order.

How does the user device and the app sync with the sheet and operate when the row owner is changed? do you think the app will break or the user will continue to see that row if they have already downloaded it

our main use case of row owners is to improve performance of the app, not security.

We are talking about 10,000 rows of data & 2-3 changing row owners per row

I believe if you change a row owner, it should be reflected almost immediately in the app. If someone is viewing the data, and they lost ownership, it should disappear. If someone gains ownership, then it should appear. I don’t believe bit will break anything. If someone is actively viewing the details of a row when they lose ownership, then ai believe the screen may go blank, as if it’s no longer attached to a row.

I think something like this would be reasonably easy to test. I do have a process in my app, where I change the email of old records to a fake email, so the rows become unowned. All it does is make the data disappear from the app. The app continues to run normally.


We will be giving it a try this week, I’l update here what happens. We tried it a few month ago and it didn’t work out well.
It takes Glide a bit of time to calculate what rows a user has access to, hence some users weren’t able to access/launch the app at all.
Others had incorrect row counts accessed and some viewed duplicated rows on the interface.

I don’t want to confirm all this as it was months ago but will be giving it a try this week and will update what issues happen

1 Like

I’ll be curious how it turns out for you. I guess I could see some potential issues because technically the rows are shifting positions in the table. For example, of ownership is lost on a row in the middle of the table, then technically, every row afterwards gets moved up. That might be what leads to duplicates. Thinking about it now, I have seen weird results when this happened with an attached google sheet, but that was a long time ago. Since glide has a unique url for each row now, maybe it handles it better.

1 Like

I have a Google Sheet based table with a row count that fluctuates between 2500 and 3000 rows.
The table has 6 owner columns, one with an email address, and five that have roles as row owners.
The entire table is emptied and repopulated (except for the header row) multiple times every hour. There are actually 4 external Google Spreadsheets that push data into this one, each on an hourly basis. (I have a locking mechanism implemented to prevent them getting in each others way). When each one syncs, it will empty the table and repopulate it again.

This has been going on for just about 2 years.

I’ve never had a problem with it :wink:


very interesting…
do you have users on your app updating and editing data at the same time? the issue is we have users live updating and editing fields… when they start to get duplicates thats not possible. To be honest when we need to delete multiple rows in the app, users must go offline and come back and reload to fully sync.
These users are facing issues, delays app is so slow, probably brecause they see more rows than they need to see to fulfill their current tasks. But I also fear with row owners, their device will get lost with what row they are accessing and what they can see, which will not really help the cause of improving their performance. we will see this week when we implement it.
we are also looking at a higher number of rows. maybe a minimum of 9000 rows to deal with if we want to opt to stay in Glide and before business expands.

Yes, but not the table in question. That table is read-only to the users - which I guess may be one reason why I’ve never had any issues with it. The App itself has about 30,000 rows in total.

Okay, I can see how that could easily become an issue if you are bulk deleting rows at the same time that users are adding/editing data in the same table.

I do think that Row Owners should help you, though. As it’s less data that each user device has to sync.

Are your users active 24/7?
And how often do you need to refresh the data?
If it’s only periodically, are you able to choose a time of the day when your users are least active?

Also, when you refresh the table, how is it done?

This is how I do it:

  • a value is set in another table to indicate that the table is “locked”.
  • the entire contents of the table is read into memory
  • data changes are made, all in memory
  • the entire sheet is cleared
  • the new data is written back into the sheet, using a single setValues() call
  • the lock is released

Clearing the data then writing it all back in a single call takes less than a second, which minimises the chances that the sheet will be empty or partially empty at the same time that it syncs with Glide.

1 Like

Jumping in,
how do you build the google sheets “array”?

Not sure how the arrayformula plays here.

To set columns up in a Google Sheet so that Glide recognises them as an array, you just need to put them next to each other, and give them the same name with an incrementing number. Here is an example:

CleanShot 2023-04-07 at 18.23.34

Glide recognises the above 10 columns as two separate array columns, named Owner and Role respectively:

The Owner array contains 7 elements, and the Role array contains 3.