Getting your Gmail app ready for real users
Verdict. The scope you pick decides the project. Sending mail needs a short verification. Reading mail means restricted-scope review plus a paid security assessment renewed every year. Until verified, your app is capped at 100 users for its lifetime and test tokens die after 7 days.
At a glance
The answer in one screen- The 100-user cap counts for the app's lifetime. Use a separate Google Cloud project for development and testing so you do not burn your production project's 100 users.
- "Internal" is only for Google Workspace organizations. Solo developers and startups without Workspace should plan for verification from day one.
- Uploading a logo triggers verification. Skip the logo until you are ready to submit.
- Adding a restricted scope later means a new assessment. Pick your restricted scopes once, before the assessment.
Prerequisites
What to have readyTo create and connect
- A Google account and a new Google Cloud project (separate one for testing)
- User support email: your account or a Google Group you manage (a shared inbox must be a Group)
- Agreement to the Google API Services User Data Policy
For approval (can take days)
- Public homepage and privacy policy on the same domain, linked from the consent screen
- Domain ownership verified in Google Search Console
- Unlisted YouTube demo video showing the consent screen, client ID and each scope in use
- Scope justifications naming the feature and why narrower scopes won't work
- Restricted scopes: a CASA assessment through an authorized assessor (reported cost about $540 to $3,000+)
App types
Which one is right for an agent product?Testing (External)
- Who can install
- Listed test users only, max 100 for the app's lifetime
- Review
- None
- Use it for
- Development; never for customers
Production (External), verified
- Who can install
- Any Google account
- Review
- Yes. Restricted scopes add CASA
- Use it for
- Agent products with customers
Internal
- Who can install
- Users in your own Workspace
- Review
- None
- Use it for
- Internal tools at your own company
Creation steps
Who does what, and how long it takes- YouSign in and create a project1 minconsole.cloud.google.com. The console may stay on another project until you switch.
- AgentRun the Google Auth Platform setup4 minApp name, support email, audience (External), contact email.
- YouAgree to the User Data Policy and create10 secConfiguration is created in Testing status.
- AgentAdd scopes under Data Access3 minGmail scopes only appear once the Gmail API is enabled; otherwise paste them in "Manually add scopes".
- AgentCreate an OAuth client2 minWeb application, with the Composio callback as the redirect URI.
- YouVerify your domain30 min to 1 dayIn Google Search Console, with DNS or site access. An agent cannot do this for you.
- YouComplete Branding and record the video2 to 4 hoursHomepage, privacy policy, terms, authorized domains, demo video.
- WaitingBrand and data access verificationDaysBrand check 2 to 3 business days. Sensitive scopes typically under a week.
- YouCASA assessment (restricted scopes only)5 to 20 daysScan, fix findings, answer the questionnaire, respond daily.
In our test: about 10 minutes to a Testing-mode app with Gmail scopes and three approvals. Production needs the human-only steps above.
Scopes
What each permission costs youGoogle classifies every scope as non-sensitive, sensitive or restricted. The console sorted our scopes into these groups for us.
| Agent use case | Scopes | What it costs you |
|---|---|---|
| Manage labels only | gmail.labels | Non-sensitive: brand check only |
| Send email on the user's behalf | gmail.send | Sensitive: verification, no CASA |
| Read messages and settings | gmail.readonly | Restricted: verification + CASA yearly |
| Read headers only | gmail.metadata | Restricted too, despite sounding light |
| Drafts, modify, labels on mail | gmail.composegmail.modify | Restricted |
| Full mailbox | https://mail.google.com/ | Restricted; hardest to justify |
gmail.sendgmail.readonlygmail.sendChanging scopes later
- Adding a sensitive scope means re-verification.
- Adding a restricted scope means re-verification and possibly a new security assessment.
- Users can grant only some scopes (granular consent). Check granted scopes after every connection.
Approval and distribution
Review, cost and renewalWhen you need it: Before any user outside your test list, and before your 100th user ever. Cost: Verification is free. CASA through an assessor: reported about $540 to $3,000+ per year. Renewal: Restricted scopes: CASA at least every 12 months. Google emails about 90 days before expiry.
What you submit
- Homepage, privacy policy, verified domain
- Demo video
- Scope justifications
- CASA results for restricted scopes
Common rejection reasons
- Requesting scopes you don't use
- Video not showing each scope
- Privacy policy missing Limited Use language
- Unmonitored contact email
Replying to Google and your assessor quickly is the biggest lever on time.
Before approval: what works and what's capped
Data use and compliance
Rules that shape agent design- Limited Use. Google user data may only be used to provide or improve user-facing features.
- No general model training on Workspace data. Disclose any AI use in the product and the privacy policy.
- Security assessment is required when restricted-scope data can be reached from or through your servers.
Common blockers
Symptom, cause, fix| Symptom | Cause | Fix |
|---|---|---|
| "Google hasn't verified this app" screen | Testing mode or unverified production app | Complete verification, or use Composio's managed app |
| Users disconnected after a week | Testing-mode refresh tokens expire after 7 days | Move to production and verify |
| Gmail scopes missing in the picker | Gmail API not enabled | Enable the API or paste the scope URLs manually |
| Cannot pick Internal | No Google Workspace organization | Use External and plan for verification |
| Review stalls | Contact inbox not monitored | Use a monitored Google Group and add a second project editor |
Sources
Where every claim comes from| Claim | Source |
|---|---|
| 100-user cap counted over the app's lifetime | Tested in our setup |
| gmail.send sensitive; gmail.readonly restricted | Tested in our setup |
| gmail.metadata is restricted | Official docs |
| Internal disabled without Workspace | Tested in our setup |
| Logo upload triggers verification | Tested in our setup |
| Testing refresh tokens expire after 7 days | Secondary source |
| CASA cost range | Secondary source |
All sources
- Gmail API scopes developers.google.com
- Google: Restricted scope verification developers.google.cn
- Nango: Google security review nango.dev
- Composio: Ship a Gmail integration composio.dev