Skip to content
Skip to main content

List and sync contacts from Google and Outlook

Last updated:

You want a contact picker that pulls from a user’s Google or Outlook address book. Doing it natively means two integrations: Google’s People API with its own OAuth scopes and people.connections.list paging, and Microsoft Graph with GET /me/contacts and a different permission model. The field names don’t match, and neither covers the other.

The Nylas Contacts API returns both through one endpoint with one schema. The same request reads a Gmail address book and an Outlook one, so your picker code stops caring which provider a user signed in with.

Why use the Nylas Contacts API instead of native contact APIs?

Section titled “Why use the Nylas Contacts API instead of native contact APIs?”

Native contact APIs are provider-specific: Google exposes contacts through the People API and Microsoft through Graph, each with its own auth, field names, and paging. A multi-provider app maintains both and reconciles the differences by hand. Nylas normalizes them into one contact object, so a single request and a single parser cover all 3 providers: Google, Microsoft, and Exchange.

The table contrasts the native setup with the unified call.

PropertyGoogle People APIMicrosoft GraphNylas Contacts API
Endpointpeople.connections.listGET /me/contactsGET /v3/grants/{id}/contacts
SchemaGoogle field namesGraph field namesOne unified contact object
ProvidersGoogle onlyMicrosoft onlyGoogle, Microsoft, EWS
Address sourcesConnectionsDefault folderAddress book, domain, inbox

How do I fetch contacts from a user’s account?

Section titled “How do I fetch contacts from a user’s account?”

Send a GET request to /v3/grants/{grant_id}/contacts. Nylas returns the user’s address book as an array of contact objects with a single schema, whether the account is Gmail, Outlook, or Exchange. Each object carries the full contact (emails, phone_numbers, job_title, company_name, and groups), so one parser handles all 3 providers.

The request below lists contacts for a grant. The response includes a request_id and a data array of contacts.

For create, update, and delete operations plus the full field reference, see Manage contacts with the Contacts API.

Set the source query parameter to inbox to surface everyone the user has emailed, not only the people saved in their address book. Nylas recognizes 3 contact sources: address_book (saved contacts), domain (the organization directory), and inbox (participants from messages). The inbox source is what powers a recipient picker that suggests real correspondents.

The request below combines the inbox source with the email filter to narrow suggestions as the user types.

The inbox source needs an extra scope: contacts.other.readonly on Google and People.Read on Microsoft. It works on those 2 providers only; Exchange (EWS) doesn’t support the inbox source, so build EWS recipient pickers on the email filter instead, which works the same across all 3 providers. The scopes reference lists the exact strings.

Subscribe a webhook to the contact.updated and contact.deleted triggers, the 2 contact events Nylas emits. Your endpoint receives a notification whenever a contact changes or is removed, so you mirror the change instead of re-listing the whole address book. There’s no contact.created trigger; a brand-new contact arrives as a contact.updated notification.

One caveat worth planning for: Google has no push API for contacts, so Nylas polls Google accounts every 5 minutes and the webhook fires after that interval rather than instantly. Microsoft delivers changes faster. See Get real-time updates with webhooks for the subscription setup.

Things to know about contacts across providers

Section titled “Things to know about contacts across providers”

Contact behavior differs enough between providers that a few limits are worth knowing before you build. Microsoft Graph caps a contact at 3 email addresses and leaves the email type as null by default, so don’t rely on work or home labels for Outlook contacts. Exchange (EWS) goes further: it can’t add contacts to groups and drops the suffix field entirely.

Group filtering through the group query parameter works on Google and Microsoft but isn’t supported on EWS. Google’s 5-minute contact polling also means newly added Google contacts can take a few minutes to appear. For the complete per-provider list, see the Contacts limitations and Google’s People API documentation.