My problem was that the "Contacts API" and "Calendar API" was not enabled in my project. But Vtiger just silently ignores error responses from the google api instead of handling them.
In Google_Contacts_Connector::pullGroups it is just assumed that everything went smoothly, when in fact there can be an error in the $response:
/** * Function to pull contact groups for user * @param <Boolean> $onlyIds * @return <Array> */ public function pullGroups($onlyIds = FALSE) { //max-results: If you want to receive all of the groups, rather than only the default maximum. $query = array( 'alt' => 'json', 'max-results' => 1000, ); if($this->apiConnection->isTokenExpired()) $this->apiConnection->refreshToken(); $headers = array( 'GData-Version' => $this->apiVersion, 'Authorization' => $this->apiConnection->token['access_token']['token_type'] . ' ' . $this->apiConnection->token['access_token']['access_token'] ); $response = $this->fireRequest(self::CONTACTS_GROUP_URI, $headers,$query,'GET'); var_dump($response); echo '<pre>'; print_r($response); echo '</pre>'; $decoded_resp = json_decode($response,true); $feed = $decoded_resp['feed']; $entries = $feed['entry']; $groups = array( 'title' => $feed['title']['$t'] ); if(is_array($entries)) { foreach($entries as $entry) { $group = array( 'id' => $entry['id']['$t'], 'title' => $entry['title']['$t'] ); if($onlyIds) $group = $group['id']; $groups['entry'][] = $group; } } return $groups; }