Gmail
Source - Vendo reads Gmail contact data through Google OAuth. The current source connector imports Google People contacts, not mailbox message bodies.
Gmail is also available as a destination/action connector for AI-created email drafts.
What Vendo Reads
The pipeline source connector uses the Google People API and imports two contact streams.
| Stream | Endpoint | Description |
|---|---|---|
| Contacts | /people/me/connections | Saved contacts from the connected Google account |
| Other Contacts | /otherContacts | Auto-saved contacts created by Gmail from email interactions |
Both streams are snapshot imports and are merged by Google People API resource_name.
Contact Fields
The contact schema can include personally identifiable information. Vendo stores the fields returned by the People API into the Gmail source tables.
| Field group | Examples |
|---|---|
| Identity | resource_name, display_name, given_name, family_name, nickname |
primary_email, emails | |
| Phone | primary_phone, phones |
| Work context | organization, job_title, department |
| Profile context | addresses, birthday, notes, photo_url, memberships, user_defined |
| Sync metadata | source_type, update_time, job_id, insert_time |
What Vendo Does Not Import As A Source
| Data | Status |
|---|---|
| Email message history | Listed in the app source options as Email History, but marked coming soon |
| Email body content | Not imported by the current pipeline Gmail source connector |
| Attachments | Not imported by the current pipeline Gmail source connector |
| Sent-mail history | Not imported by the current pipeline Gmail source connector |
OAuth Scopes
Gmail has two OAuth paths in the product.
Source Connector Scopes
The pipeline source connector registers these Google People API scopes:
| Scope | Purpose |
|---|---|
https://www.googleapis.com/auth/contacts.readonly | Read saved contacts |
https://www.googleapis.com/auth/contacts.other.readonly | Read other contacts created from email interactions |
App Connection Permission Scopes
The web app requests scopes based on the permissions selected in the App Connections flow.
| Permission | Scopes |
|---|---|
| Read Gmail context | https://www.googleapis.com/auth/gmail.modify, https://www.googleapis.com/auth/gmail.settings.basic, https://www.googleapis.com/auth/contacts.readonly, https://www.googleapis.com/auth/userinfo.email, openid |
| Draft and send emails | https://www.googleapis.com/auth/gmail.compose, https://www.googleapis.com/auth/gmail.send, https://www.googleapis.com/auth/gmail.labels, https://www.googleapis.com/auth/userinfo.email, openid |
If the app falls back to the static Gmail scope set, it may request the union of Gmail compose, send, modify, labels, send-as settings, contacts, Google profile/email, and OpenID scopes.
Table Names
Gmail source tables follow the source-table prefix pattern for the connection.
| Table pattern | Contents |
|---|---|
gmail_<source_short_id>_contacts | Saved contacts |
gmail_<source_short_id>_other_contacts | Other contacts |
Semantic mapping treats both tables as user data. The preferred user identifier is primary_email, with resource_name as a fallback.
Setup
- Navigate to App Connections > Add App Connection
- Select Gmail
- Review the Google OAuth consent screen and requested scopes
- Authorize the Gmail account Vendo should use
- Select the contact streams to import
- Save the source and run the first sync
Verify Setup
- Confirm the Gmail source status is Active
- Run a manual sync
- Query the contact tables in your Vendo dataset
- Confirm
primary_email, names, phone, and organization fields match expected contacts
Troubleshooting
| Symptom | What to check |
|---|---|
| OAuth consent shows unexpected scopes | Compare the selected app permissions with the scope table above |
| No contacts import | Confirm the connected Google account has People API contacts and the OAuth token is active |
| Other Contacts is empty | Some Google accounts do not have auto-saved other contacts |
| Email messages are missing | The source email-history stream is not enabled yet |