All integrations

Google Contacts

GOOGLE WORKSPACE · PEOPLE

Look up and maintain the contacts in that person’s directory.

Connect Google Contacts with Fabriq Developer

Your user consents at Google Contacts. The credential lands in a vault your agent cannot read, and the tool list it gets back is the intersection of that user’s grant and the agent’s own scopes.

provider “contacts”
from af_sdk import AgenticFabriq

af = AgenticFabriq()                      # reads AF_APP_ID / AF_APP_SECRET

url = await af.initiate_connection(request, provider="contacts")   # consent at Google Contacts
return redirect(url)

async with await af.for_user(request) as session:
    tools = await session.get_tools()     # only what this user granted

Provider names are surfaces, not vendors, and the authoritative list is the capabilities endpoint rather than any page including this one — an unknown name returns 400 with the valid list. Fabriq Developer is free to start and needs no provider paperwork. Start free or read the quickstart.

Connecting Google Contacts in practice

Contacts sync tokens expire 7 days after the full sync, and the first page of a full sync draws on its own dedicated quota whose 429 explicitly cannot be fixed by a quota increase — so an agent that re-syncs too often has no way to buy its way out. Every parameter on a paged or synced call must match the first call exactly, which makes the sync loop unusually brittle.

Scopes that draw scrutiny

  • https://www.googleapis.com/auth/contacts Read-write access to the user’s contacts, the grant people.connections.list accepts alongside the read-only form.
  • https://www.googleapis.com/auth/contacts.readonly Reads every contact the user has, which is the address book of their whole organization in a Workspace tenant.

Worth knowing

  • Sync tokens expire 7 days after the full sync; an expired token errors and forces a fresh full sync, which is exactly the request with the unraisable quota.
  • pageSize accepts 1 to 1000 with a default of 100, so the default costs ten times as many calls as the maximum for the same address book.
  • When passing pageToken or syncToken, all other parameters must match the first call — changing a personFields mask mid-walk restarts the whole thing.
  • Changes can take several minutes to appear in an incremental sync, so contacts is not safe for read-after-write confirmation.

Checked against people.connections.list reference (2026-09-29), Authorizing requests (People API) (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

google_contacts_create_contactWRITE

Create a new contact in Google Contacts. Returns the created contact ID.

contacts
google_contacts_create_groupWRITE

Create a new contact group (label). Returns the new group's resource name.

contacts
google_contacts_deleteWRITE

Delete a contact. WARNING: This cannot be undone. IMPORTANT: You must first call google_contacts_list to get the resource_name.

contacts
google_contacts_getREAD

Get details for a specific contact. IMPORTANT: You must first call google_contacts_list to get the resource_name.

contacts.readonly
google_contacts_listREAD

List Google Contacts (People API). Returns contact names, emails, and phone numbers.

contacts.readonly
google_contacts_list_groupsREAD

List all contact groups (labels). Returns group names, IDs, and member counts.

contacts.readonly
google_contacts_list_otherREAD

List 'Other contacts' - contacts automatically saved from interactions (emails, etc.) but not explicitly added.

contacts.other.readonly
google_contacts_updateWRITE

Update an existing contact's information. IMPORTANT: You must first call google_contacts_list to get the resource_name.

contacts

Put Google Contacts behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.