Email Integration Security Brief

Last updated: October 22, 2026

SECURITY BRIEF

Stackpack Email Integrations

Gmail and Microsoft 365: Privacy, Access, and Data Handling

Updated October 14 2026  •  Stackpack, Inc.

Stackpack’s email integrations automatically identify and collect vendor contracts, invoices, and receipts from your organization’s email, enabling hands-free vendor document management. Two mail providers are supported: Google Gmail and Microsoft 365 (Outlook, through Microsoft Graph). Only emails determined to contain a relevant vendor document are ever collected; no other email content is accessed beyond the provider-side search used to find candidates.

Customer trust is foundational to everything we build at Stackpack. When you enable an email integration, you are trusting Stackpack with access to your business’s email. Both integrations were designed with this trust in mind: they share one pipeline with integration-specific controls that restrict our access to only what is necessary and protect your data at every stage. Where the two providers differ, this brief says so.

Product Overview

The email integrations are entirely automated. There is no human in the loop, at your organization or at Stackpack, in the vendor document matching process.

To operate, Stackpack periodically asks the connected provider for messages received since the last scan that match a short list of vendor-document indicators in the subject line or sender. The provider answers with message identifiers only; messages that do not match are never retrieved. For each candidate, Stackpack retrieves the message and runs it through a classifier that decides whether it is a vendor contract, invoice, or receipt. Candidates that are not vendor documents are discarded. Documents are matched to the correct vendor record in Stackpack and stored alongside it.

How the integrations process your email, at a glance:

1. The provider is searched for recent messages whose subject or sender indicates a vendor document; only identifiers of matches are returned

2. Messages that do not match are never retrieved

3. Each candidate is retrieved and classified as a vendor contract, invoice, receipt, or none of these

4. Candidates that are not vendor documents are discarded

5. Documents are matched to the correct vendor record

6. Matched vendor documents are stored; nothing else is stored

Stackpack’s Overall Security Posture

Stackpack maintains a SOC 2 Type II report, providing independent third-party validation that our security program meets industry standards to keep your data protected. This report is updated on an annual basis and is available to customers upon request. Our full list of current compliance certifications and supporting documentation is available at trust.stackpack.ai.

Certification

Status / Notes

SOC 2 Type II

Maintained bi-annually; available on request

Security trust page

trust.stackpack.ai

Threat Model

Two primary attack vectors informed the design of Stackpack’s email integrations:

  • Compromise of account access: If the credential Stackpack uses to reach your mail provider were compromised, an attacker could read email within the scope of the integration.

  • Compromise of Stackpack’s storage or admin systems: If Stackpack itself were compromised, an attacker could access information stored in Stackpack’s systems, including any retained email content.

To mitigate these risks, Stackpack designed the integrations to: minimize the data accessed at every stage; avoid storing information we do not need; and robustly protect the data and credentials that we do store. The sections below detail these mitigations.

Mitigations

Access to Your Inboxes

Both integrations use the provider’s official mechanism for an organization administrator to grant an application access to mailboxes, without each employee consenting individually. In both cases Stackpack interacts with your mail exclusively through the provider’s APIs over encrypted connections, with read-only permission, and only for the mailboxes your administrator adds in Stackpack.

Gmail

Microsoft 365

Who grants access

A Google Workspace super administrator, through domain-wide delegation

A Microsoft Entra Global Administrator, through tenant-wide admin consent

What Stackpack holds

A Google service account in Stackpack’s Google Cloud project

The credentials of Stackpack’s “Stackpack Contract Agent” app registration; access tokens are minted per tenant, are short-lived, and are held in memory only

Permission

gmail.readonly

Microsoft Graph Mail.Read (application permission)

Stored about the connection

Nothing provider-specific

The identifier of the tenant that granted consent, which is not a secret

Tenant-side limit on mailboxes

Not available; Stackpack’s own selection applies

Exchange Online role-based access control for applications can confine the app to chosen mailboxes, in addition to Stackpack’s selection

How to revoke

Remove the delegation entry in the Google Admin Console (Security → API Controls → Domain-wide Delegation)

Delete the “Stackpack Contract Agent” enterprise application in the Microsoft Entra admin center

Credentials for the service account and the app registration are available to only a small number of engineers actively maintaining the integrations.

A note on Microsoft 365: the permission a Global Administrator grants is tenant-wide at Microsoft’s side. Stackpack only ever reads the mailboxes an administrator adds in Stackpack, and checks that it can read each mailbox at the moment it is added. Organizations that want this boundary enforced by Microsoft as well can scope the application with Exchange Online role-based access control for applications.

🔒 Read-only access guaranteed

Stackpack uses the gmail.readonly scope for Gmail and the Mail.Read application permission for Microsoft 365, and nothing else.

We cannot and do not send, delete, forward, move, label, or modify any email in any connected inbox.

Opting Out Inboxes and Revoking Access

Stackpack gives you full control over which inboxes we access.

By default, Stackpack queries only inboxes that have an associated active Stackpack account and that an administrator has added to the integration. We never attempt to access inboxes without a corresponding, selected Stackpack user.

In-app control: Individual user inboxes are read only while selected on the agent settings page in the Stackpack App. When a user is removed from the list, Stackpack does not attempt to access email metadata or message bodies for their inbox.

Admin revocation: Stackpack administrators can disconnect an integration for all users in their organization from the agent settings page. To fully revoke access, administrators should also remove Stackpack at the provider, as described in the table above.

Minimizing Data Processed

The integrations are designed to minimize the data processed at every step.

The first filter runs at the provider. Stackpack searches a connected inbox for messages received since the last scan whose subject line or sender matches a short list of vendor-document indicators, such as invoice, receipt, contract, or billing. The provider returns message identifiers only; messages that do not match are never retrieved, and Stackpack never sees their headers or content. Junk and deleted mail are excluded from the search.

For each candidate, Stackpack retrieves the message, including its headers, body, and the names of its attachments, and a classifier decides whether it is a vendor contract, invoice, or receipt. The classifier is given the headers, the attachment names, and the first 16,000 characters of the readable body text, which is the entire body for all but the longest messages. Candidates that are not vendor documents are discarded. Attachments themselves are downloaded only for messages the classifier has accepted, and only up to a size limit.

Accepted documents are processed by Stackpack’s document-matching system, the same system used for vendor documents submitted manually through Stackpack’s document intake.

Minimizing Data Stored

Stackpack avoids storing data that is not necessary and deletes data after it is no longer needed. For each email processed, Stackpack potentially stores three categories of information:

Data Type

When Stored

Retention

Provider message identifier

Every accepted document

Retained indefinitely (deduplication)

Email headers

During classification; for accepted documents, stored with the document

Discarded immediately if not a vendor document

Email body & attachments

Only for accepted vendor documents

Retained per standard document retention policy

The message identifier is the provider’s own: Gmail’s message id, or Microsoft Graph’s immutable message id. Neither reveals anything about the message’s content.

Vendor documents sent to Stackpack’s document-processing system are retained for a period consistent with how documents submitted via other intake methods are handled.

Stackpack regularly snapshots and backs up our databases for service availability. Database snapshots and backups are deleted after 30 days in standard cases, and may be retained for up to six months. They are encrypted in transit and at rest.

Protecting Stored Data

All data retrieved by the email integrations is encrypted at rest in our database and file storage systems. The database used for email integration data uses a separate set of encryption keys from Stackpack’s other databases. Sensitive information stored within it, such as message subjects and headers, is additionally encrypted at the row level.

Access to integration data is not generally available to internal systems or to Stackpack personnel through any application, including internal administration tools.

Vendor documents sent to Stackpack’s document-processing system are also encrypted at rest and treated identically to documents submitted via other intake methods.

Stackpack’s platform, including all systems that process and store data for the email integrations, runs on Google Cloud. Following the principle of least privilege, only engineers actively maintaining these integrations have access to related databases and infrastructure.

Adding Providers

Both integrations run on one provider-neutral pipeline: a connector reads a mailbox through the provider’s API, and everything after that, classification, matching, storage, and retention, is shared. A new mail provider is a new connector with its own entry in the access table above; the mitigations in the rest of this brief apply to it unchanged. This brief will be updated when a provider is added.

Questions and Contact

For security-related questions about these integrations, please contact:

Security team

security@stackpack.ai

Trust & compliance

trust.stackpack.ai

General support email

support@stackpack.ai

General support website

support.stackpack.ai

Privacy policy

www.stackpack.ai/legal/privacy-policy

Terms of Service

www.stackpack.ai/legal/terms-of-service