Search all guides

Reference · Tools

Google Contacts integration

Manage contacts and group memberships in Google Contacts, including creating, retrieving, updating, and deleting entries.

Action Productivity v1

The Google Contacts node connects to the Google People API so you can create, retrieve, update, and delete contacts directly inside a BusyBot workflow. Use it to keep a CRM or form-submission pipeline in sync with a shared Google Contacts address book — new leads get added, existing records get patched, and stale entries get removed, all without manual exports.

Works as
Action
Tool name
google_contacts
Operations
5 — Create , Delete , Get , Get Many , Update
Parameters
20
Outputs
Output, Error
Credentials
Google Contacts OAuth2
Official docs
Google Contacts docs developers.google.com

What you can build with Google Contacts

  • Create a new contact with name, email, and phone number.
  • Delete a contact by its resource ID.
  • Get a contact by ID and return selected person fields.
  • List all contacts with sorting and pagination.
  • Search contacts by name or email.
  • Update a contact email address or phone number.
  • Add a contact to a contact group.

Overview

Google Contacts tool manages contacts via the Google People API (v1). Contact operations: create a contact with name, emails, phones, addresses, organizations, birthday, events, relations, custom fields and group memberships; delete a contact by resource name; get a contact by resource name with selectable person fields; get all contacts with optional search query, sort order, and pagination; update a contact with selective field patching. All contact operations use the contactId (people/{personId} resource name, or just the ID part). getAll supports both connections list and search query modes. The rawData toggle preserves full API response. The fields parameter controls which person fields are returned.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Google Contacts OAuth2 credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Contactcontact

Operations

OperationValueDescription
CreatecreateCreate a new contact.
DeletedeleteDelete a contact.
GetgetGet a contact by ID.
Get ManygetAllRetrieve many contacts.
UpdateupdateUpdate a contact.

Parameters

Contact: Create (create)

ParameterTypeRequiredDefaultDescription
Family NamestringNo—The last name (family name) of the contact. Supports expressions like {{ $json.lastName }}.
Given NamestringNo—The first name (given name) of the contact. Supports expressions.
Additional FieldscollectionNo{}Optional contact details to set on creation.
— AddressesfixedCollectionNo{}Postal addresses. Add one entry per address.
— — Street AddressstringNo—Street address line.
— — CitystringNo—City.
— — RegionstringNo—Region, state or province.
— — Country CodestringNo—Country code.
— — Postal CodestringNo—Postal or ZIP code.
— — TypeoptionsNo—The kind of address.
Options: home, work, other
— BirthdaydateTimeNo—The birthday of the contact.
— CompanyfixedCollectionNo{}Organizations the contact belongs to. Add one entry per organization.
— — CurrentbooleanNofalseWhether this is the contact’s current organization.
— — DomainstringNo—The organization’s domain.
— — NamestringNo—The organization’s name.
— — TitlestringNo—The contact’s job title at this organization.
— Custom FieldsfixedCollectionNo{}User-defined key/value pairs. Add one entry per field.
— — KeystringNo—The end user specified key of the user defined data.
— — ValuestringNo—The end user specified value of the user defined data.
— EmailsfixedCollectionNo{}Email addresses. Add one entry per address.
— — TypeoptionsNo—The kind of email address.
Options: home, work, other
— — ValuestringNo—The email address.
— EventsfixedCollectionNo{}Dated events. Add one entry per event.
— — DatedateTimeNo—The date of the event.
— — TypeoptionsNo—The kind of event.
Options: anniversary, other
— File AsstringNo—The name that should be used to sort the person in a list.
— Group Names or IDsmultiOptionsNo[]Contact groups to add this contact to. Specify contactGroup resource names (e.g. “contactGroups/myContacts”). The list is loaded from your account.
— Honorific PrefixstringNo—Honorific prefix (e.g. “Dr.”, “Mr.”, “Ms.”).
— Honorific SuffixstringNo—Honorific suffix (e.g. “Jr.”, “Sr.”, “PhD”).
— Middle NamestringNo—The contact’s middle name.
— NotesstringNo—Free-form text notes about the contact.
— PhonefixedCollectionNo{}Phone numbers. Add one entry per number.
— — TypeoptionsNo—The kind of phone number.
Options: googleVoice, home, homeFax, main, mobile, other, otherFax, pager, work, workFax, workMobile, workPager
— — ValuestringNo—The phone number.
— RelationsfixedCollectionNo{}People related to this contact. Add one entry per relation.
— — PersonstringNo—The name of the other person this relation refers to.
— — TypeoptionsNo—How the other person is related to this contact.
Options: assistant, brother, child, domesticPartner, father, friend, manager, mother, parent, referredBy, relative, sister, spouse

Contact: Delete (delete)

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—The contact resource name or numeric ID (e.g. “people/c123456789” or just “c123456789”). Supports expressions.

Contact: Get (get)

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—The contact resource name or numeric ID (e.g. “people/c123456789” or just “c123456789”). Supports expressions.
FieldsmultiOptionsNo[]Person fields to return. Use [”*”] for all fields.
Options: *, addresses, biographies, birthdays, coverPhotos, emailAddresses, events, genders, imClients, interests, locales, memberships, metadata, names, nicknames, occupations, organizations, phoneNumbers, photos, relations, residences, sipAddresses, skills, urls, userDefined
RAW DatabooleanNofalseReturn the raw API response without data cleaning.

Contact: Get Many (getAll)

ParameterTypeRequiredDefaultDescription
FieldsmultiOptionsNo[]Person fields to return. Use [”*”] for all fields.
Options: *, addresses, biographies, birthdays, coverPhotos, emailAddresses, events, genders, imClients, interests, locales, memberships, metadata, names, nicknames, occupations, organizations, phoneNumbers, photos, relations, residences, sipAddresses, skills, urls, userDefined
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo100Max number of results to return. Between 1 and 500. (shown when Return All is false)
Use QuerybooleanNofalseWhether to filter results using a search query (uses searchContacts endpoint) instead of listing all connections.
QuerystringNo—Plain-text query to filter contacts. Matches name, email, phone, etc. prefix phrases. (shown when Use Query is true)
RAW DatabooleanNofalseReturn raw API response without data cleaning.
OptionscollectionNo{}Extra listing options. (shown when Use Query is false)
— Sort OrderoptionsNo—The order in which contacts are returned.
Options: LAST_MODIFIED_ASCENDING, LAST_MODIFIED_DESCENDING, FIRST_NAME_ASCENDING, LAST_NAME_ASCENDING

Contact: Update (update)

ParameterTypeRequiredDefaultDescription
Contact IDstringYes—The contact resource name or numeric ID (e.g. “people/c123456789” or just “c123456789”). Supports expressions.
FieldsmultiOptionsNo[]Person fields to return. Use [”*”] for all fields.
Options: *, addresses, biographies, birthdays, coverPhotos, emailAddresses, events, genders, imClients, interests, locales, memberships, metadata, names, nicknames, occupations, organizations, phoneNumbers, photos, relations, residences, sipAddresses, skills, urls, userDefined
Update FieldscollectionNo{}The fields to patch. Only the fields you add are sent, and only those are overwritten.
— EtagstringNo—The etag of the contact to prevent conflicts. If omitted, it is fetched automatically.
— Family NamestringNo—The last name (family name) of the contact.
— Given NamestringNo—The first name (given name) of the contact.
— Middle NamestringNo—The contact’s middle name.
— Honorific PrefixstringNo—Honorific prefix.
— Honorific SuffixstringNo—Honorific suffix.
— AddressesfixedCollectionNo{}Postal addresses. Add one entry per address.
— — Street AddressstringNo—Street address line.
— — CitystringNo—City.
— — RegionstringNo—Region, state or province.
— — Country CodestringNo—Country code.
— — Postal CodestringNo—Postal or ZIP code.
— — TypeoptionsNo—The kind of address.
Options: home, work, other
— BirthdaydateTimeNo—The birthday of the contact.
— CompanyfixedCollectionNo{}Organizations the contact belongs to. Add one entry per organization.
— — CurrentbooleanNofalseWhether this is the contact’s current organization.
— — DomainstringNo—The organization’s domain.
— — NamestringNo—The organization’s name.
— — TitlestringNo—The contact’s job title at this organization.
— Custom FieldsfixedCollectionNo{}User-defined key/value pairs. Add one entry per field.
— — KeystringNo—The key of the user defined data.
— — ValuestringNo—The value of the user defined data.
— EmailsfixedCollectionNo{}Email addresses. Add one entry per address.
— — TypeoptionsNo—The kind of email address.
Options: home, work, other
— — ValuestringNo—The email address.
— EventsfixedCollectionNo{}Dated events. Add one entry per event.
— — DatedateTimeNo—The date of the event.
— — TypeoptionsNo—The kind of event.
Options: anniversary, other
— File AsstringNo—The name used to sort this person in a list.
— Group Names or IDsmultiOptionsNo[]Contact groups to set for this contact. The list is loaded from your account.
— NotesstringNo—Free-form text notes about the contact.
— PhonefixedCollectionNo{}Phone numbers. Add one entry per number.
— — TypeoptionsNo—The kind of phone number.
Options: googleVoice, home, homeFax, main, mobile, other, otherFax, pager, work, workFax, workMobile, workPager
— — ValuestringNo—The phone number.
— RelationsfixedCollectionNo{}People related to this contact. Add one entry per relation.
— — PersonstringNo—The name of the other person this relation refers to.
— — TypeoptionsNo—How the other person is related to this contact.
Options: assistant, brother, child, domesticPartner, father, friend, manager, mother, parent, referredBy, relative, sister, spouse

All Operations

ParameterTypeRequiredDefaultDescription
AuthenticationoptionsNooAuth2Authentication method to use.
Options: oAuth2 (OAuth2, recommended), serviceAccount (Service Account)
Google AccountcredentialNo—Connect or select your Google account. (shown when Authentication is oAuth2)
Service Account EmailstringYes—The email address of the Google service account, for example my-service-account@project.iam.gserviceaccount.com. (shown when Authentication is serviceAccount)
Private KeystringYes—The private key from the service account JSON key file. Paste the full PEM block, including the BEGIN and END lines. (shown when Authentication is serviceAccount)
Max ConcurrencynumberNo5Maximum number of items to process concurrently. Between 1 and 20.

Output Data

The People API response is merged into the item JSON, so the incoming fields pass through except where a response field uses the same name. Binary data on the input item is not carried to the output.

Wherever the API returns a person record, the node also adds contactId — the ID part of the record’s resourceName, so you can feed it straight back into a later Get, Update or Delete.

OperationOutput
createOne item carrying the created person record plus contactId.
deleteOne item carrying success: true. The API returns no body for a delete.
getOne item carrying the person record plus contactId.
getAllFans out — one item per contact, each with contactId. A search that matches nothing still emits one item, carrying the input JSON unchanged.
updateOne item carrying the patched person record plus contactId.

With RAW Data off (the default) on get and getAll, the record is flattened for easier downstream use; turn it on to receive the People API response exactly as returned. Because getAll already emits one item per contact, you do not need a Split Out node after it.

Reference the result downstream by expression, e.g. {{ $json.contactId }}.

Example Configuration

Create a contact with a work email and a mobile number:

{
  "type": "google_contacts",
  "parameters": {
    "authentication": "oAuth2",
    "resource": "contact",
    "operation": "create",
    "givenName": "{{ $json.firstName }}",
    "familyName": "{{ $json.lastName }}",
    "additionalFields": {
      "emailsUi": {
        "emailsValues": [
          { "type": "work", "value": "{{ $json.email }}" }
        ]
      },
      "phoneUi": {
        "phoneValues": [
          { "type": "mobile", "value": "{{ $json.phone }}" }
        ]
      }
    }
  }
}

List contacts newest-first, one item per contact:

{
  "type": "google_contacts",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "fields": ["names", "emailAddresses", "phoneNumbers"],
    "returnAll": false,
    "limit": 100,
    "useQuery": false,
    "options": {
      "sortOrder": "LAST_MODIFIED_DESCENDING"
    }
  }
}

Search contacts by a plain-text query:

{
  "type": "google_contacts",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "fields": ["names", "emailAddresses"],
    "useQuery": true,
    "query": "{{ $json.searchTerm }}",
    "returnAll": true
  }
}

Patch one field on an existing contact:

{
  "type": "google_contacts",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "contactId": "{{ $json.contactId }}",
    "fields": ["names", "emailAddresses"],
    "updateFields": {
      "emailsUi": {
        "emailsValues": [
          { "type": "work", "value": "{{ $json.newEmail }}" }
        ]
      }
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

This tool manages contacts in Google Contacts, allowing creation, retrieval, updates, and deletion. It is ideal for precise operations on individual contacts or for retrieving multiple contacts based on various criteria. The tool produces contact information, including names, emails, phone numbers, addresses, and group memberships.

Frequently asked questions

What credentials do I need, and how do I set them up?

This node requires a Google Contacts OAuth2 credential (type: googleContactsOAuth2Api). You'll need to authorize BusyBot to access your Google account through the standard OAuth2 flow — no service account or API key will work here. Make sure the Google People API is enabled in your Google Cloud project before connecting.

What is the contactId and where do I find it?

Every Google contact is identified by a resource name in the format people/{personId} — for example, people/c1234567890. The node accepts either the full resource name or just the ID portion (the part after the slash) for operations like get, update, and delete. You can retrieve a contact's resource name by running a getAll or get operation first and inspecting the output.

When I update a contact, does it overwrite all existing fields?

No — the update operation uses selective field patching, meaning only the fields you explicitly include in the request are changed. Fields you leave blank are left untouched on the contact. This makes it safe to update, say, a phone number without accidentally clearing the contact's address or organization details.

How do I search for contacts instead of fetching all of them?

The getAll operation supports two modes: listing all contacts from your connections list, or running a search query. Switch to search query mode and provide a string to match against names, email addresses, or phone numbers. You can also control sort order and use pagination parameters to handle large address books without loading everything at once.

What does the rawData toggle do, and when should I use it?

By default the node returns a simplified, normalized version of the API response. Enabling rawData preserves the full Google People API response payload, including any fields or metadata that the simplified output omits. Turn it on when you need access to less common fields — like custom fields, events, or relations — that aren't surfaced in the default output.

Build with Google Contacts

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Google Contacts OAuth2 credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.