Sunday, August 5, 2012

How to Manage Shared Contacts on a Google Domain

If you are frustrated with all the third party shared contact solutions and you have not mastered this essential function on your own domain yet, then you must read this article. The first thing I am going to do is to describe exactly what is going on. Once you understand how Google intended it to work, you will know your best option to solve the issue for your domain.

First, the basics. Google domain contacts can be shared and you don’t need a third party app.

Every Google domain already has a directory where there are two types of contacts: (a) internal, and (b) external. Managing the internal contacts is easy using the tools provided for domain administrators under “Organization & users.” You are going to learn something here so don’t go away yet!

Everything the administrator does here is automatically reflected in the domain directory.

The details in the domain directory are easily shared with everyone. In the domain dashboard, all the administrator has to do is choose Settings, then Contacts, and then authorize what is shown. I recommend the option to “Show both domain profiles and domain shared contacts.” Now you will have a very nice “Directory” tab on the left side of the contacts manager that everyone on the domain can see.

Your users are now free to pick and choose who they want in the Directory of domain contacts to be a member of their personal My Contacts tab where the contacts are free to sync with smart devices.

But what about external contacts? This is that great list of names, emails, phone numbers, faxes, addresses, etc., that everyone in the organization needs to access seamlessly no only on their computers but also on their smartphones and other smart devices. Can you get these contacts in the directory? YES! … How?

Here is the answer: You now know that your great list of external contacts are supposed to go in the same domain directory as the internal contacts because that is where all the native indexing and other cool stuff that Google does is happening across the domain. The problem right now is that Google has left the external contact management up to the app developer community. Unfortunately there are no good apps in the marketplace at this time even though a Google Domain Shared Contacts Application Programming Interface (API) has been there from the beginning.

Sadly, the developer community has done a very poor job. In fact, this is where Google domain administrators and users are actually getting taken advantage of by some of the app developers in the Google Apps Marketplace. Here is the good news, there is a solution, and you don’t have to be a programmer!
Once again, you do not need to be a programmer to solve this problem on your own, but you do need a few skills and if you don’t have these skills you can learn as you go. You are going to be surprised how easy this is.
Here is what you do ...

Designate a person in your organization to install the Google Shared Contacts Python Client. Don’t worry if they have never heard of Python and if they have never written a script. All they have to do is manage a spreadsheet and run the script from time to time. You will get way better results than any third party app and I am going to tell you exactly why at the end of this article, but I don’t want to bore you with the details right now.

Here are the steps ...
  1. Download the latest version of the Google Shared Contacts Python Client
  2. Unzip the new download on your computer.
  3. Follow the directions in the README file. There is a sample spreadsheet in the file that you can use to manage your own contacts.
  4. I recommend that you store a copy of the sample spreadsheet on your domain in Google Docs format. Use Google sharing to delegate the maintenance of the contacts in this spreadsheet and then periodically run the Python Client to update all the internal and external contacts in your domain directory.
How about an even better solution? I have a great idea! Developers listen up! We need a good open source app to do a better job of this. All the resources are available and for a new open source project. What I recommend is a Windows, Apple, and Linux GUI that would manage the contacts. All it would have to do is use the already available Google Shared Contacts Python Client to sync with the proper domain. There are many examples of really great open source apps (e.g., GPodder) where the installation of the app even gives the user an option to install all the necessary requirements (such as Python) at the time of setup.

Let me finish by describing some of the problems with the current third party solutions that are in the Google Apps Marketplace.

First, most apps do not modify the domain directory. This is a huge problem! Instead, they use Google’s App Engine to prop up a user interface (that they control) where a designated administrative user theoretically creates a shared group and with select users on the domain. When it works, it will sync with everyone in the shared group automatically under My Contacts. The problem is that usually doesn't work.  Even worse, when it does work, here is why this solution is a bad idea:
  1. The app developers control the GUI and so you will be hostage to both: (a) any bugs in the app – and there are tons, and (b) per user subscription fees. I have not found a single app that is worth it here. Don’t forget that Marketplace Apps are not supported by Google.
  2. Most of the apps in the Google Marketplace choose not to modify the domain directory because if they did, then the results would sync a single copy with everyone on the domain as Google intends to happen. By restricting the app to each user's My Contacts folder they are able to control licensing fees (while creating a ton of problems).
  3. Syncing separate copies of contacts in the My Contacts folder with every shared user on your domain will start to use a HUGE amount of server resources.Just multiply the number of contacts times the number of shared users in a group and you will see how monstrous this will get. There is really no amount of computing power that can keep up with this if you sync every change in a huge organization. If you are using the resources of the app developer you will pay for the bandwidth – BIG time! There is no way around it. If the developers are kind enough to give you the code and let you install it in your own scripting engine for your domain they can wash their hands of having to deal with Google’s bandwidth fees and restrictions on their side but you will still have to pay Google for the bandwidth yourself. Google can change rules and fee schedule at any time (and they have). If you exceed any of your bandwidth restrictions on your domain (and you will even in a small organization) you will either receive a huge bill from Google assuming you allow them to bill you automatically for excess use or the app will simply crash and stop syncing for everyone.
  1. You can share both internal and external contacts with everyone on your domain and you don’t have to be a programmer to do it. You can do a better job than any third party app that is currently available and do so in a way that maximizes the sharing and indexing features that Google intends for you to use.
  2. You want to share your contacts using the existing domain directory that Google provides. Your users will have to take the responsibility of managing their own My Contacts folder to decide what they want to sync but that is the way it was meant to be!
  3. Stay away from third party apps that automatically manage shared groups under My Contacts for each user. These apps are not supported by Google apps and they require that your users authorize a third party to use their credentials to read and write to private contacts in user directories. For security purposes alone, this is not a good idea. Secondly, you will be held hostage by the app developers for per-user fees and potentially huge server resource costs not to mention the debugging nightmare you will create for yourself.
  4. There is a need for a good open source project that can provide an installable user-friendly GUI for managing internal and external contacts in the domain directory from a designated computer.
I hope you find this article useful. Please leave feedback and let’s have a discussion here as the technology improvements unfold.


    1. If you have an LDAP server, there is a solution called Google Apps Directory Sync. I purposely did not mention it. LDAP works great if you have an IT department that you can go to and the whole organization was set up in a perfect bubble where you've got it all under control with Microsoft Active Directory, Lotus Domino, or some other open source version of LDAP lockdown. There are a lot of organizations that can't do LDAP at the drop of a hat for a whole bunch of reasons and this article is for them!

    2. Came upon your article today as I run a small nonprofit with 15 volunteers that need to share contacts easily. We've been searching for a solution like what you've described for over 2 years and ran into many of the same hurdles or expensive solutions that don't do the job well. I know this article is pretty old but for anyone that comes upon this in their search, we found this company to offer a cost-effective and VERY simple setup process:

    3. Hey David, we had the same problem, so we built the script into a Google Sheet found here
      This might be an easier way for your readers to add external contacts to their Google Apps domain directory contacts folder. Hope this helps.