This is what I would do if you wanted to keep everything within glide. First I would recommend having a RowID which will give every row a unique value. This will become important in a little bit. Then I would identify a unique value for each contact, whether it’s a name, phone number, email address, or something else that you know will be in each duplicate row, but is still unique only for that specific person. Let’s assume Name for now. Create a self relation that links the contact’s Name column back onto itself. Make sure this is a single relation. It should always find the first matching row for that contact. Next create a Lookup column that returns the Row ID for the first matching row. Finally create an IF THEN column that will check if the RowID for the row matches the RowID returned from the first matching row in the Lookup column. If it’s a match, then that contact row is the first unique row and you can return a value of ‘true’. If it’s not a match, then the row is most likely a duplicate and you can return a value of ‘false’. Now you can filter your list to only show the ‘true’ rows.
All of this is inside Glide and doesn’t require any sheet formulas…but I would consider reworking your app someday to make this more efficient instead of duplicating data.