Recently, my niece’s iPhone 4S died. We got her a replacement phone, but all the data on her old phone was gone. Unfortunately, even though she had a Gmail account configured, her iPhone did not sync its addresses to Google Contacts. I checked my own Google Contacts account and found that it contained almost none of the addresses on my iPhone. Even though I had enabled contacts sync for my Gmail account, the iPhone addresses were not getting synced to Google. So I did some research, found the issue, and have summarized my findings and solution below.
Four Contact Types
For my purpose, there are four contact types that exist on the iPhone:
- SIM contacts are located on your legacy SIM card (which you will need to import into your iPhone to make visible).
- Local contacts exist only on your iPhone (not synced from Google).
- Google contacts synced from Google to the iPhone.
- iCloud contacts synced from iCloud to the iPhone. When you enable iCloud contacts sync, it will merge or delete any local contacts so the two types cannot co-exist. iCloud will also merge or delete any Google contacts on the iPhone.
Note: There are other contact types, like Yahoo contacts, but I don’t use them.
When you view your Contacts app, all the addresses (except non-imported SIM contacts) will show in one listing. The iPhone does remember which contacts are of which type, and there is a way to filter what you see. If you have more than one type of contacts, the Contacts app will show a Groups link on the top left. Click on it and you will see two or more these options to select which types to make visible (by checkmark):
- “All on My iPhone” (Local contacts; you won’t see this option if iCloud contacts sync is enabled.)
- “All your_Gmail_address” (Google Contacts)
- “All iCloud” (iCloud Contacts)
Set Google Contacts as the Default
On my iPhone, I had many local contacts and a few Google contacts. Even after configuring Google contacts sync, newly-created addresses were saved as local contacts and not synced to Google. The problem was a second, separate setting called “Default Account” which controlled the default type for newly-created contacts; on my iPhone, that setting forced all new addresses to be created as local contacts. I believe that the default type was set to local contacts because I had created some local addresses before configuring Google contacts sync and Google contacts sync did not set “Default Account” to itself. To fix this, I had to manually change “Default Account” to be Google contacts.
Note: If you configure Google contacts sync and there are no pre-existing local contacts on your iPhone (and iCloud contact sync is not enabled), then the default type for newly-created addresses will be set to Google contacts automatically.
To configure a Google account, go to “Settings->Mail, Contacts, Calendars” on your iPhone. Under Accounts at the top, click “Add Accounts” and input your Google account access information. Or if you have already created the Google account, it will be listed and you can just click on it to see its settings. In the Google account settings , make sure that “Contacts” sync is turned on (in addition to other services like “Mail” or “Calendar”). You will be prompted to “Keep on My iPhone” your current contacts (local or iCloud), which I recommend you agree to; otherwise, those pre-existing addresses will be deleted.
Note: Only addresses in your Google “My Contacts” group will be synced to the iPhone. So if you want a particular Google contact available on the iPhone, just move that contact into the “My Contacts” group.
Then make sure to set the iPhone to save new addresses to Google Contacts by going back to “Settings->Mail, Contacts, Calendars” and locating the “Default Account” setting. Change it to “your_Gmail_address” (Google contact), instead of “On My iPhone” (local contact) or “iCloud” (iCloud contact). The “Default Account” setting is also used to identify the default sender email address when you compose a new email.
Note: You will only see the “Default Account” setting if you have more than one contact type existing on your iPhone. If you have two contact types but still do not see the “Default Account” setting, manually close the Settings app (click on Home button twice and drag the Settings app up and out) and then re-open it to refresh the display.
Be aware that when creating a new address in the Contacts app, if the Contacts app is configured to not show Google contacts, then the newly-created address may be stored locally (or to iCloud) instead of to Google; even if the “Default Account” setting is configured to use your Google account.
Transfer Local Contacts to Google
Google contacts sync did not provide an option to merge local contacts. I had to figure out a workaround. The method I decided to use was to merge my local contacts into iCloud and then to export the contacts from iCloud for import into Google. (Alternatively, I could use iTunes sync, but it looked a lot cleaner to use iCloud.)
Developed by Apple, iCloud contacts sync is very comprehensive. When you enable iCloud contacts sync, it will offer the option to merge with any contacts on the iPhone (including local and Google contact types); if you decline to merge, it will delete all the pre-existing addresses. Once merged, whatever you see in the Contacts app (with all types visible) is what you will see in iCloud. Unlike Google contacts sync which only affects Google contacts, iCloud takes ownership of all the contacts on the iPhone. In addition, iCloud contact sync will set itself as the “Default Account” automatically.
First, configure the iCloud account by going to “Settings->iCloud” to add or view an existing iCloud account. (Alternatively, you can go to “Settings->Mail, Contacts, Calendars” and “Add [an] Account” of type “iCloud”. In the iCloud settings, turn on “Contacts” sync and agree to the merge prompt (to not delete all the pre-existing addresses).
Once iCloud contacts sync was enabled and the local contacts were merged (almost instantaneously because I only had 75 addresses), these are the steps which I took to transfer the addresses to Google:
- Browse to the iCloud website, log in, and click on Contacts. (Note: You must use a browser other than Chrome, like Internet Explorer or Firefox, because the iCloud contacts export function is currently broken under Chrome.)
- Verify that all addresses from the iPhone are present.
- Click on the grey gear icon on the bottom-left.
- Click on “Select All” and then “Export vCard” to download a .vcf file containing all the addresses.
- At this time, I recommend disabling the iCloud contact sync on the iPhone so that it won’t interfere with the Google contact sync. Disabling iCloud contacts sync will prompt you to delete or leave the addresses on the phone. If you want to start with a clean slate, I recommend deleting all the addresses. Once we are done, the iPhone will re-populate them from Google Contacts.
- Browse to Google Contacts and log in.
- Unfortunately, Google will default you to their new contacts UI preview which strangely does not make the “My Contacts” group visible or accessible. To see the “My Contacts” group, click on the “More” link at the bottom-left and then select “Leave the Contacts preview” to get back to the old UI. You should now see “My Contacts” listed as the top group.
- Click on “Import Contacts…” on the bottom-left.
- Browse to the downloaded .vcf file that was exported from iCloud.
- Click on the “Import” button.
- You will see a new “Imported
” group under the “My Contacts” group. It should contain all the addresses exported from iCloud.
- Optionally, you can delete the Imported group by selecting it, clicking on the “More” link at the top, and picking “Delete Group”. Don’t worry, the imported contacts won’t be deleted because they are also kept under the parent “My Contacts” group.
I ended up with a lot of duplicate contacts because my Google account had email addresses while my iPhone had telephone numbers. Thankfully, Google provided a mechanism to merge duplicate contacts. I recommend using the more sophisticated merge contacts function under the new UI preview, instead of under the old UI (under the old UI, click on the Imported folder under “My Contacts” and you will see a banner asking if you wish to “Find & merge duplicates”).
On the old Google Contacts UI:
- Click on “Try Contacts preview” on the bottom-left menu to return to the new UI preview.
- Click on “Find duplicates”.
- The duplicate contacts are nicely grouped together (2 or more by name) with their own “Merge” buttons. Click on the “Merge” button to merge the associated set of duplicate contacts.
Contacts Not Syncing From Google
I then checked my iPhone and did not see the newly imported Google contacts. There is an iPhone setting which controls how the iPhone syncs with Google. The default configuration on my iPhone is to manually sync Google contacts; meaning that when I start or use the Contacts app, my Google contacts will be synced. Unfortunately, even when starting and using the Contacts app, my Google addresses weren’t downloaded.
To see the Google sync setting, go to “Settings -> Mail, Contacts, Calendars”, click on “Fetch New Data”, and locate “your_Gmail_address”. Gmail doesn’t support “Push” (where Google would send newly-created contacts to the iPhone), so it is set to “Fetch” (the iPhone queries Google for new contacts) by default. The fetch schedule is located at the bottom and on my iPhone, it was set to “Manually”. The manual fetch meant that I had to start or use the Contacts app for the addresses to sync with Google. I could change the fetch schedule to sync with Google periodically (by minutes or hour), but decided that manual was fine (I want to reduce battery usage).
To force the iPhone to sync immediately with Google Contacts, I disabled and then re-enabled the Google contacts sync (see the Google account under “Settings -> Mail, Contacts, Calendars”). When disabling the Google contacts sync, it will force you to delete all Google contacts from the iPhone; this is okay because when we re-enable, it will re-download all the Google addresses. After that, I was able to see all the Google addresses in the Contacts app. (Make sure to double-check that the “Default Account” is still set to Google.)
Import SIM Contacts
If you have an old SIM card that contains addresses (the SIM storage was used by the older, non-smart phones) and wish to import it into your iPhone, put the SIM card into the iPhone, go to “Settings ->Mail, Contacts, Calendars”, click on “Import SIM Contacts”, and select your Google account (instead of “On My iPhone” or “iCloud”).
Simultaneous Google and iCloud Contacts Sync
It occurred to me that I could have both Google and iCloud contacts sync enabled at the same time. However, I’m not sure about some of the behavior. Every address on the iPhone will replicate from iCloud, while only Google-type addresses will replicate from the Google account. Will downloaded Google addresses that don’t exist in iCloud be replicated then to iCloud? Will downloaded iCloud addresses that don’t exist in Google be replicated to Google? Does this behavior depend upon which contact type “Default Account” is set to? I don’t know. It is probably best to use one or the other, not both.
Because I am leery about unnecessarily exposing my personal information on the Internet, I manually removed all the contacts from iCloud after I was confident that I had imported them into Google Contacts successfully.
An alternative for those of us using Google Apps Contacts (paid) is to use the Exchange feature on the iPhone (I still have a 4s) with the Google Apps account, NOT the Google Mail feature. That bring ups and supports real-time syncing between the phone and the Google Apps server. Every address entered into the iPhone shows up in Google Contacts and vice versa. I too purposely have NOT enable iCloud because I’m sure it won’t play nice with Google Apps. And I have 13,041 Contacts to worry about!
Thank you for this! Syncing used to work perfectly well with Google until I turned on iCloud Contacts sync – and it then defaulted to iCloud as default account and stopped syncing with Google. Your article helped me unravel that mess. 🙂