Nurture TechnologiesNurture Tech
Integrations15 min read·August 1, 2026

Google OAuth Verification Kept Getting Rejected Until We Fixed These Issues

Next.jsNestJSGoogle OAuth 2.0Google Calendar APIGoogle Drive API

Our Google OAuth verification was rejected five times. The application worked perfectly every time. Here is what we actually got wrong and the systematic approach that finally got us approved.

The application worked perfectly.

Google still rejected it.

We updated the documentation. Rejected again. We recorded a new demo video. Rejected again. Five rejections over eight weeks for an application that had zero bugs and handled user data correctly from day one.

Google OAuth verification is not a test of whether your application works. It is a test of whether you can prove that your application works, justify why it needs each scope it requests, demonstrate a complete user flow on video, and document your data practices in a way that satisfies a policy reviewer who will spend thirty minutes on your submission.

If you are building anything that touches Google Calendar, Gmail, Google Drive, Google Workspace, or Google Contacts, you will hit this process. Apps using sensitive or restricted scopes cannot go to production with real users until verification is complete. Your app stays locked in a warning-screen mode that scares away users and caps your audience at 100 test accounts.

This is the full account of what went wrong, what we fixed, and what finally got us through.

Our Environment

We were building a project management SaaS that connected to users' Google accounts for two features: syncing project deadlines with Google Calendar (creating, reading, and updating events) and attaching project documents stored in Google Drive to project records inside the app.

  • Frontend: Next.js with a Google Sign-In button and an account connection flow in settings
  • Backend: NestJS handling OAuth 2.0 token exchange, refresh token storage, and Google API calls
  • Authentication: Google OAuth 2.0 using the authorization code flow with PKCE
  • Google Calendar: reading upcoming events, creating deadline events, and updating event descriptions when task status changed
  • Google Drive: reading file metadata for files the user selects, downloading files for preview inside the app
  • Users: project managers and their teams at small-to-medium businesses

The scopes we needed put us squarely in the sensitive scope category. calendar.events for creating and updating calendar events. drive.file for accessing Drive files the user explicitly selects. These require Google verification. Without it, every user who tries to authorize the app sees a red warning screen that says the app is unverified. Most users click away immediately.

First Rejection: Insufficient Application Explanation

Twelve days after our first submission, the rejection arrived by email: 'The OAuth consent screen description does not adequately explain how your application uses Google user data. Please provide a clear explanation of how your application uses each requested scope.'

We read that and thought we had explained it. We had a one-line description on the consent screen and a paragraph in the submission form. Neither was specific enough for the reviewer to understand exactly what the app did with the Calendar and Drive data it was requesting.

Google's reviewers need to understand your application's complete data flow from the consent screen description alone. They will not explore your app to figure it out. If the description is vague or generic, they have no basis for approving it.

What we originally wrote on the OAuth consent screen:

bad-consent-description.txt
App name: Nurture Projects
Description: We use Google login and access your Google data to improve your productivity.

What we replaced it with:

good-consent-description.txt
App name: Nurture Projects
Description: Nurture Projects syncs your project deadlines to Google Calendar and lets you attach
Google Drive files to project tasks.

When you connect Google Calendar, Nurture Projects creates calendar events for task due dates,
reads your upcoming events to detect scheduling conflicts, and updates event descriptions when
task status changes. It never reads or modifies calendar events it did not create.

When you connect Google Drive, Nurture Projects reads the names, types, and preview thumbnails
of files you explicitly select. It does not access, read, or store Drive files without your
direct selection. No files are uploaded to or shared from your Drive on your behalf.

Your Google data is never sold or shared with third parties. You can disconnect your Google
account at any time from the Settings page, which revokes all access and deletes stored tokens.

Write your consent screen description as if the reviewer has never seen your product and needs to understand the full data flow in two paragraphs. Explain what you read, what you create, what you never touch, and how users can revoke access. Specificity is what gets approvals.

Second Rejection: Demo Video Did Not Meet Requirements

We rewrote the description, resubmitted. New rejection: 'The provided demo video does not demonstrate how the application uses each requested scope. Please submit a video that shows the complete user flow including sign-in, permission grant, and the feature that uses the requested data.'

Our original video was two minutes long. It showed a user logging in and seeing a calendar view in the app. It did not show the OAuth permission dialog, did not show Google API data appearing in the UI, and did not demonstrate what happened to the data after it was loaded.

Mistake #2: Recording an Inadequate Demo Video

Google's review team relies on demo videos to verify that requested scopes are actually used for the stated purpose. A video that skips the permission dialog, shows placeholder data instead of real Google API responses, or fails to demonstrate a specific scope's feature will result in rejection.

The five-part structure that Google's reviewers expect:

  1. 1Login: start from a logged-out state; show the Google Sign-In button; click it and show the redirect to accounts.google.com
  2. 2Permission request: show the OAuth consent screen with the exact scopes your application is requesting; do not skip this screen; it is the most important part of the video
  3. 3Feature demonstration: navigate to the specific feature powered by each scope; show real data loading from the Google API in your UI not mock data or empty states
  4. 4Data usage: show how the data is displayed and used in the application; for Calendar, show an event being created and appearing in Google Calendar; for Drive, show a selected file's metadata appearing in the app
  5. 5Account disconnect: navigate to settings and show the revoke/disconnect flow; confirm that after disconnect, the app no longer shows Google data

Additional video requirements Google looks for:

  • Host on YouTube as an unlisted video this is the most reliable delivery format for Google reviewers
  • Keep the video under 5 minutes total
  • Record at a resolution where UI text is clearly readable without zooming
  • Include audio narration or on-screen captions explaining what each step demonstrates
  • Do not fast-forward through the permission dialog show the full consent screen visible for at least 3 seconds
  • Demonstrate each scope separately if requesting multiple sensitive scopes
  • Use a real Google account with actual data, not an empty account with no calendar events or Drive files

Google reviewers watch the video looking for evidence that each scope is used for the stated purpose. If your video shows calendar.events scope approved in the permission dialog but never shows a calendar event being created or displayed, the reviewer has no evidence the scope is necessary. Show the scope being used, not just approved.

Third Rejection: Scope Requests Not Justified

Third submission, improved video, better description. New rejection: 'The requested scopes appear broader than necessary for the described use case. Please review your scope selection and request only the minimum scopes required for your application's features.'

We looked at our scope list and found the problem.

Mistake #3: Requesting Scopes Broader Than Necessary

When we first set up the OAuth flow, we had chosen scopes with a 'might as well get the broader one' logic. For Drive, we had requested the https://www.googleapis.com/auth/drive scope full Drive access. For Calendar, we had requested https://www.googleapis.com/auth/calendar full Calendar read and write access.

Our original scope request:

scopes-v1-rejected.txt
Scopes requested (submission v1):
  openid
  profile
  email
  https://www.googleapis.com/auth/calendar
  https://www.googleapis.com/auth/drive

Reviewer note: "auth/drive provides full access to all Google Drive files.
Your use case (attaching user-selected files) does not require full Drive access.
auth/drive.file is sufficient and limits access to files created by or opened
with your application only."

We replaced both with narrower scopes:

scopes-v2-approved.txt
Scopes requested (submission v2):
  openid
  profile
  email
  https://www.googleapis.com/auth/calendar.events
      Creates and updates calendar events for task deadlines only.
      Does not read events created by other applications.
  https://www.googleapis.com/auth/drive.file
      Reads metadata and content of files the user explicitly selects
      via the Google Picker. Does not access any Drive file the user
      has not directly chosen.

Scopes intentionally NOT requested:
  auth/calendar   not needed; we only manage events we create
  auth/drive   not needed; drive.file covers all picker-selected file access

The scope change was not just about satisfying the reviewer. drive.file is genuinely a better choice. It limits the app's access to files the user explicitly opens via the Google Picker API, which is a tighter security boundary than full Drive access. Users who understand OAuth scopes will trust drive.file more than drive. The least-privilege scope is both more approvable and more trustworthy.

Fourth Rejection: Privacy Policy Issues

Narrower scopes, better video, clearer description. Fourth rejection: 'Your privacy policy does not clearly describe how Google user data is collected, used, and stored. Please ensure your privacy policy meets Google's requirements and is hosted at your authorized domain.'

Mistake #4: Privacy Policy Did Not Cover Google Data Specifically

We had a privacy policy. It covered standard data practices. What it did not cover was the specific Google user data calendar events, Drive file metadata that we were requesting, or the specific handling rules Google requires all OAuth apps to document.

Google's privacy policy requirements for OAuth applications:

  • Hosted at the authorized domain listed in your OAuth consent screen (not a subdomain, not a third-party policy host)
  • Directly accessible at a permanent URL no login required, no redirects to a PDF or paywall
  • Explicitly names Google APIs accessed (e.g., Google Calendar API, Google Drive API)
  • Describes what Google user data is collected and why (be specific: 'calendar event titles and dates' not 'calendar data')
  • States that Google user data is not shared with third parties except as required to operate the service
  • Includes the data retention period how long Google-sourced data is stored
  • Includes user data deletion instructions: how a user can request deletion of all Google-sourced data
  • Explicitly states that Google user data is not used for advertising, credit scoring, or any purpose not directly related to the app's stated function
  • Complies with Google's Limited Use Policy for sensitive and restricted scopes: 'The app's use of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements'

Google's Limited Use Policy is a required disclosure for any app using sensitive or restricted scopes. The exact text must appear in your privacy policy: 'Nurture Projects's use of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.' Without this exact statement, your privacy policy will fail the review.

Fifth Rejection: Reviewer Could Not Test the Application

Fixed the privacy policy, resubmitted. Fifth rejection: 'We were unable to test the application. Please provide test account credentials or instructions for accessing a demo environment.'

Mistake #5: No Test Accounts Provided

We had assumed the reviewer would use their own Google account to test the app. This assumption was wrong. Google reviewers may not be able to use personal accounts for testing production flows, and even if they could, they would encounter an empty app with no existing project data to demonstrate the Calendar and Drive integration meaningfully.

The correct approach is to add test user accounts in Google Cloud Console and provide dedicated login credentials:

  • In Google Cloud Console, go to APIs & Services > OAuth consent screen > Test Users
  • Add the email addresses that reviewers will use to test the app (you can use Gmail accounts you control, created specifically for review)
  • Create two to three test Google accounts for review purposes, each connected to a Google Workspace or Gmail account
  • Pre-populate each test account with realistic data: create 5 to 10 calendar events in the test account, upload 3 to 5 sample files to Google Drive
  • Configure your app with a test project that has existing tasks and deadlines so the Calendar and Drive features have data to demonstrate
  • Include the test account credentials (email and password) clearly at the top of your review submission notes
  • Confirm the test account can complete the full OAuth flow and access all demonstrated features before submitting

Create test accounts on gmail.com specifically for Google OAuth review submissions. Give them names that make their purpose obvious (e.g., reviewer.test@gmail.com) and strong passwords you rotate after review. Populate the accounts with enough data that every feature you demonstrate has real data to work with.

Sensitive Scopes vs Restricted Scopes

Understanding the difference between scope categories determines your verification strategy. Getting this wrong means either requesting a scope that requires a security audit when a less powerful scope would have sufficed, or requesting too narrow a scope and having to resubmit when the feature needs more access.

scope-categories.txt
SCOPE CATEGORY COMPARISON
=========================

Category     Risk    Verification      Examples                  Requirements
-----------  ------  ----------------  ------------------------  ---------------------------
Non-sens.    Low     None              openid, profile, email    None   available to all apps
Sensitive    Medium  Form + video      calendar.events,          1-4 week review
                                       drive.file,               Demo video required
                                       contacts.readonly         Privacy policy required
Restricted   High    CASA Tier 2 +     gmail.*,                  Security audit ($3K-$5K)
                     security audit    drive (full),             4-8 week review
                                       admin.directory           Annual reassessment

COMMON SCOPE DECISIONS
======================

Feature               Wrong Scope        Right Scope         Reason
--------------------  -----------------  ------------------  ---------------------------------
Read user's calendar  auth/calendar      calendar.readonly   Read-only if no writes needed
Create events only    auth/calendar      calendar.events     Narrower than full calendar
Access one file       auth/drive         drive.file          Only files opened by your app
Gmail search          auth/gmail         gmail.readonly      Read-only if not sending
Email send only       auth/gmail         gmail.send          Narrower than full Gmail access

The key insight from that table: most common use cases that initially reach for a broad scope can be served by a narrower one. Full drive access is almost never necessary for SaaS integrations. drive.file covers picker-based access. drive.readonly covers read-only browsing. Full gmail access is almost never necessary gmail.send, gmail.readonly, or gmail.compose cover the vast majority of Gmail use cases without requiring the restricted scope security audit.

Requesting a restricted scope when a sensitive scope would suffice forces you into a CASA (Cloud Application Security Assessment) Tier 2 security audit. This is a third-party security review that costs several thousand dollars and adds four to eight weeks to your timeline. Avoiding restricted scopes through careful scope selection is not just faster it is significantly cheaper.

What Finally Got Approved

  • Google Sign-In (openid, profile, email): approved on submission 4 alongside privacy policy fix
  • calendar.events: approved on submission 5 alongside test accounts
  • drive.file: approved on submission 5 alongside test accounts

Total elapsed time from first submission to approval: eight weeks. Four weeks was resubmission preparation time on our side. Four weeks was Google review queue time across submissions. Google's review queue depth varies considerably. Standard reviews typically take one to four weeks. If a reviewer cannot reach a decision and escalates to a policy specialist, add another one to three weeks.

The practical timeline recommendation for any team building a Google integration: submit your first verification request six to ten weeks before your intended launch date. Do not plan a hard launch date that depends on Google verification completing by a specific day.

Google Verification Checklist

  • App name matches the name displayed to users in the product
  • User support email is a monitored address, not a noreply alias
  • App logo is uploaded and meets Google's requirements (512x512px, no Google branding)
  • App homepage URL is a live, publicly accessible page describing the product
  • Privacy policy URL points to a live page on your authorized domain
  • Terms of service URL points to a live page on your authorized domain
  • Authorized domains include your production domain
  • Developer contact email is monitored Google may contact you here during review
  • Consent screen description explains each scope's purpose specifically

Privacy Policy

  • Hosted at the exact authorized domain listed in the OAuth consent screen
  • Publicly accessible without login or redirect
  • Explicitly names each Google API your app accesses
  • Describes what specific Google user data is collected (not generic 'Google data')
  • States the purpose for collecting each type of Google data
  • Includes data retention period for Google-sourced data
  • Includes user data deletion instructions
  • States that Google user data is not shared with third parties except as required to operate the service
  • Includes Google's Limited Use Policy compliance statement verbatim
  • Does not use Google user data for advertising, credit scoring, or non-app purposes

Terms of Service

  • Publicly accessible at your authorized domain
  • References acceptable use for Google-connected features
  • Does not contradict Google's API Terms of Service
  • Covers account termination and data deletion procedures

Verification Video

  • Hosted on YouTube as unlisted
  • Under 5 minutes in total length
  • Starts from a fresh logged-out state
  • Shows the Google Sign-In button and the click to authorize
  • Shows the full OAuth consent screen with all requested scopes visible
  • Demonstrates each scope's feature with real API data visible in the UI
  • Includes audio narration or on-screen captions
  • Shows the account disconnection / revoke access flow at the end
  • Resolution is high enough to read UI labels clearly

Test Accounts

  • Test Google accounts added as Test Users in OAuth consent screen settings
  • Test accounts pre-populated with realistic Calendar events and Drive files
  • Test account credentials included in the review submission notes
  • Test accounts can complete the full authorization flow and access all demonstrated features
  • Test passwords are strong and shared only in the submission, not in public documentation

Scope Justification

  • Each requested scope is the narrowest scope that supports the required feature
  • Each scope has a one-to-two sentence justification in the submission form
  • Each scope is demonstrated in the video
  • No scopes are requested for future features submit a new verification when those features are built
  • drive.file is used instead of drive whenever possible
  • gmail.send or gmail.readonly is used instead of gmail whenever possible
  • calendar.events is used instead of calendar when only event management is needed

Security

  • OAuth tokens are stored encrypted at rest
  • Refresh tokens are stored in the database, not in browser storage
  • Access tokens are never logged in plaintext
  • Token revocation is implemented and tested
  • HTTPS is enforced on all redirect URIs
  • PKCE (Proof Key for Code Exchange) is implemented for the authorization code flow

Brand Verification

  • App homepage describes the product clearly
  • Privacy policy domain matches the authorized domain
  • App name does not imply affiliation with Google
  • App logo does not include Google's branding elements
  • App is in production or has a clear path to production (not a test project)

Google Login Verification Checklist

Google Sign-In using only the non-sensitive scopes (openid, profile, email) does not require verification for production use. Your app can go live immediately. However, you still need a properly configured consent screen, an accessible privacy policy, and compliant data handling. Common issues that still cause problems in unverified sign-in flows:

  • Unverified app warning appears because the consent screen app type is set to External and the app is not verified users see a red warning screen; add test users or complete verification to remove it
  • The authorized redirect URI in Google Cloud Console does not exactly match the redirect URI in your code causes redirect_uri_mismatch errors
  • Privacy policy URL is not accessible causes the consent screen to show a broken link
  • App logo is missing or rejected causes the consent screen to show a generic app icon which reduces user trust
  • The app requests profile and email but the privacy policy does not mention what the app does with the user's name and email address

Google Calendar API Verification Checklist

Calendar API permissions are sensitive scopes. Verification is required before production use with external users. The review focuses on whether calendar data is used strictly for the stated scheduling or productivity purpose.

  • Requested scope is the narrowest that covers the use case: calendar.readonly for reading, calendar.events for create/update, calendar for full access
  • The demo video shows a specific calendar feature: an event being created, a calendar view rendered, or a scheduling conflict being detected
  • Real calendar data from the test account is visible in the UI during the video (not an empty calendar)
  • Privacy policy explains that calendar data (event titles, times, descriptions) is used only to power the scheduling feature and is not stored beyond the app's operational needs
  • The consent screen description explains which calendar actions the app takes on behalf of the user
  • The app correctly handles the case where a user has no calendar events the UI shows an empty state rather than an error
  • Revocation is tested: after a user disconnects Google Calendar, the app no longer accesses calendar data and removes stored calendar tokens

Google Drive API Verification Checklist

Drive API scope selection is critical. drive (full access) is a restricted scope and requires a CASA Tier 2 security audit. drive.file and drive.readonly are sensitive scopes and only require standard verification. Most SaaS use cases can be served with drive.file.

  • Use drive.file instead of drive whenever the app only accesses files the user explicitly selects via Google Picker
  • Use drive.readonly instead of drive when the app needs to browse and read Drive files but never creates or modifies them
  • The demo video shows the Google Picker opening, a file being selected, and file data appearing in the app UI
  • Real Drive files exist in the test account for the reviewer to select during testing
  • Privacy policy explains that Drive file metadata and content are accessed only for files explicitly selected by the user
  • Privacy policy states that files are not uploaded to Drive, shared, or transferred to third parties
  • File content is not stored server-side beyond the immediate operation (unless the use case explicitly requires storage, which must be documented)
  • The app handles the case where a user selects a file they do not have permission to view the error state is graceful and informative
  • Token revocation removes all Drive access and any stored file content associated with the user's account

Lessons Learned

  1. 1Google OAuth verification is a documentation problem, not a code problem your application's correctness is assumed; the review is about proving your data practices
  2. 2Write the consent screen description for a policy reviewer who does not know your product and needs to understand the full data flow in two paragraphs
  3. 3The demo video must show the OAuth consent screen dialog, not skip past it it is the centerpiece of the verification, not an administrative step
  4. 4Show real Google API data in the demo video mock data or empty states give the reviewer nothing to verify
  5. 5Host the demo video on YouTube as unlisted; avoid sharing as a file download or from a hosting service that requires login
  6. 6Always choose the narrowest scope that covers your use case drive.file over drive, calendar.events over calendar, gmail.readonly over gmail
  7. 7Restricted scopes (full Gmail, full Drive) trigger a CASA security audit; avoiding them through careful scope selection saves weeks and thousands of dollars
  8. 8Your privacy policy must include Google's Limited Use Policy compliance statement verbatim a paraphrase is not accepted
  9. 9The privacy policy must be hosted at the authorized domain in your consent screen settings a third-party policy host does not satisfy this requirement
  10. 10Provide dedicated test accounts pre-populated with realistic data reviewers cannot test a scheduling feature on an empty calendar
  11. 11Add test accounts as Test Users in Google Cloud Console before submitting this step is required for the reviewer's account to authorize your app without seeing the unverified warning
  12. 12Never request permissions for features you have not built and demonstrated submit a separate verification request when those features are ready
  13. 13Budget six to ten weeks for verification before your launch date do not plan a hard launch that depends on Google approving by a specific deadline
  14. 14If your submission is rejected, read the rejection message carefully and fix every item on the checklist before resubmitting, not just the specific item mentioned
  15. 15The Google API verification portal allows you to provide a note to the reviewer; use this to pre-answer likely questions about your scope justifications and data handling

Approval Framework

After five rejections, we built a systematic preparation process. Every Google OAuth submission we make now goes through these seven stages before the Submit button is clicked:

google-oauth-framework.mmd
flowchart TD
  A["Document\nPrivacy policy, ToS,\nGoogle Limited Use statement"] --> B["Explain\nConsent screen description\nper-scope justification"]
  B --> C["Record\nYouTube demo video\nall scopes demonstrated"]
  C --> D["Verify\nAll checklist items\nchecked internally"]
  D --> E["Test\nTest accounts populated\ndry run with reviewer credentials"]
  E --> F["Submit\nAll fields complete\nnotes to reviewer added"]
  F --> G["Approve\n✓ Verification complete"]
  • Document: write or update the privacy policy to explicitly cover each Google API and scope, including the Limited Use Policy compliance statement
  • Explain: write the consent screen description for a non-technical policy reviewer; write one-sentence justifications for each scope in the submission notes
  • Record: make the YouTube demo starting from logged-out, showing every scope's feature with real data, ending with account disconnection
  • Verify: run through every checklist category; treat any unchecked item as a guaranteed rejection reason
  • Test: follow your own instructions using only the test account credentials you are about to provide; if you cannot complete the flow, the reviewer cannot either
  • Submit: fill every required field, attach the video URL, add notes to the reviewer explaining the use case context
  • Approve: once approved, document the approved scopes and the specific version of documentation that passed this becomes the baseline for future scope additions

Conclusion

Most Google OAuth verification failures are not caused by code. The application handles tokens correctly. The API calls work. The user flow is clean. The failures come from documentation, scope selection, video quality, privacy policy compliance gaps, and not giving reviewers the tools they need to test the application independently.

Google's review process is genuinely trying to determine whether your application handles user data responsibly, uses the minimum permissions it needs, and can be trusted with access to sensitive data like calendar events and Drive files. Reviewers who cannot verify this will not approve it.

The fix is systematic preparation. Treat the verification submission as a product in its own right one where the user is the reviewer and the job-to-be-done is verification in under thirty minutes. Make it impossible to fail by giving the reviewer everything they need, documented clearly, demonstrated completely, and tested thoroughly before you submit.


Need help implementing secure Google OAuth flows, preparing verification submissions, or building production-ready Google Calendar, Drive, Gmail, or Workspace integrations? Nurture Technologies designs and implements Google integrations from architecture through verification, including scope strategy, privacy policy compliance, demo video preparation, and production deployment. Talk to us about your Google integration.

Nurture Technologies

NEED HELP WITH YOUR STACK?

Nurture Technologies builds and maintains production-quality software for startups and businesses. If engineering problems are slowing you down, our team can help.

Talk to our team →
FAQ

FREQUENTLY ASKED QUESTIONS

Why was my Google OAuth verification rejected?+

The most common reasons are: the consent screen description does not explain how each scope's data is used, the demo video does not show real Google API data in the UI or skips the permission dialog, the requested scopes are broader than the feature requires, the privacy policy does not include Google's Limited Use Policy compliance statement, the privacy policy is not hosted at the authorized domain, or no test accounts were provided for the reviewer to test the application.

How long does Google OAuth verification take?+

Standard verification reviews take one to four weeks. Submissions that require escalation to a policy specialist can take four to six weeks. Reviews involving restricted scopes require a CASA Tier 2 security audit, which adds four to eight additional weeks. Plan for six to ten weeks between first submission and approval when building your launch timeline.

What are Google sensitive scopes?+

Sensitive scopes are OAuth scopes that allow access to Google user data with significant privacy implications but stop short of the highest-risk data. Examples include calendar.events, drive.file, drive.readonly, contacts.readonly, and gmail.readonly. Apps requesting sensitive scopes must go through Google's verification process, which includes a review form, a demo video, and documentation review. Sensitive scopes do not require a security audit that is required only for restricted scopes.

What are Google restricted scopes?+

Restricted scopes provide access to the most sensitive Google user data. Examples include the full Gmail scope (auth/gmail), full Drive scope (auth/drive), Google Workspace Admin SDK scopes (admin.directory.user), and Google Cloud Platform scopes (cloud-platform). Apps requesting restricted scopes must complete a CASA (Cloud Application Security Assessment) Tier 2 security audit in addition to the standard verification process. This audit typically costs several thousand dollars and takes four to eight weeks.

Do I need a verification video for Google OAuth?+

Yes, for sensitive and restricted scopes. Google's verification guidelines list a demo video as required for any app requesting permissions beyond the non-sensitive openid, profile, and email scopes. The video must show the complete user flow: login, the OAuth consent screen with requested scopes visible, feature demonstration with real API data, and account disconnection. Host it on YouTube as unlisted. A video that skips the consent screen or shows mock data will result in rejection.

How do I pass Google OAuth verification?+

Prepare systematically: write a specific consent screen description that explains each scope's data use, select the narrowest scopes for your use case, update your privacy policy to cover Google data with the Limited Use Policy compliance statement, record a complete demo video starting from logged-out on YouTube, add test users in Google Cloud Console and provide populated test account credentials, and run through the full checklist before submitting. Most successful submissions pass on their second or third attempt after addressing the specific checklist gaps.

Why did Google reject my OAuth consent screen?+

Common rejection reasons for the consent screen itself: the app description is too generic and does not explain scope-specific data use, the app name implies affiliation with Google, the logo contains Google branding, the privacy policy URL is not accessible or not at the authorized domain, the authorized domain does not match the application's homepage domain, or the user support email is not monitored.

What privacy policy does Google require for OAuth verification?+

Google requires a privacy policy that: is publicly accessible at your authorized domain without login, explicitly names each Google API you access, describes what specific Google user data is collected and why, states data retention periods, provides user data deletion instructions, states that Google data is not shared with third parties except as required to operate the service, and includes Google's Limited Use Policy compliance statement: 'Your app's use of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.'

How do I justify Gmail permissions for Google OAuth verification?+

Request the narrowest Gmail scope your feature requires. If you only need to read emails, request gmail.readonly. If you only need to send, request gmail.send. If you need to create drafts, request gmail.compose. Avoid the full auth/gmail scope unless you need complete Gmail read-write-delete access, because it is a restricted scope requiring a CASA security audit. In your submission, provide a one-sentence justification for the specific Gmail scope tied to a specific user-visible feature, and demonstrate that feature in your video.

How do I create test accounts for Google OAuth reviewers?+

In Google Cloud Console, go to APIs & Services > OAuth consent screen > Test Users. Add the email addresses you will provide to reviewers. Create Gmail accounts specifically for review use, populate them with realistic data (calendar events, Drive files), and configure your application to have an account in that state that demonstrably shows all requested features. Include the test account email and password clearly in your review submission notes, and confirm the test account can complete the full flow before submitting.

What is the difference between Google OAuth verification and CASA audit?+

Google OAuth verification is the standard review process for apps requesting sensitive scopes. It involves a form submission, demo video, and documentation review by Google's team. CASA (Cloud Application Security Assessment) is an additional security audit required specifically for apps requesting restricted scopes. CASA is conducted by an independent third-party assessor and evaluates your application's security posture, data handling, infrastructure, and code. CASA Tier 2 costs several thousand dollars and takes four to eight weeks.

Can I launch a Google OAuth app without verification?+

Yes, but with significant limitations. Unverified apps requesting sensitive or restricted scopes can only be used by up to 100 test users who have been manually added in Google Cloud Console. All other users see a red warning screen ('This app isn't verified') with a prominent 'Back to safety' button. Most users will not proceed past this warning. Unverified apps are appropriate for internal tools, single-organization deployments, or development environments, but are not suitable for production SaaS with external users.

What is drive.file vs drive scope?+

auth/drive gives your application access to all files in the user's Google Drive. auth/drive.file gives access only to files created by your application or opened by the user specifically through your application using the Google Picker API. For most SaaS file-attachment use cases, drive.file is sufficient and appropriate. It is a sensitive scope (standard verification), whereas drive is a restricted scope (CASA audit required). Always use drive.file unless you have a specific reason to access files the user did not explicitly share with your app.

How do I structure a Google OAuth verification video?+

Start from a logged-out browser at your app's homepage. Click the Google Sign-In button and show the redirect to accounts.google.com. On the consent screen, pause long enough for the reviewer to read the requested scopes. Approve all permissions and return to the app. Demonstrate each scope-specific feature one at a time with real Google API data visible in the UI. End by showing the account disconnect / revoke access flow. Use audio narration or on-screen captions. Keep it under 5 minutes. Host it on YouTube as unlisted.

What is Google's Limited Use Policy?+

Google's Limited Use Policy (part of the Google API Services User Data Policy) restricts how applications can use data obtained from Google APIs. Key restrictions: you can only use Google user data to provide or improve the user-facing features of the app; you cannot use it for advertising, credit scoring, or surveillance; you cannot share it with third parties except to provide the service; you cannot allow humans to read user data unless the user explicitly consents or it is required for security/legal purposes. Your privacy policy must include a compliance statement for this policy.

How do I handle the 'unverified app' warning while verification is pending?+

While your app is pending verification, add all internal testers and early access users as Test Users in Google Cloud Console. Test Users can authorize your app without seeing the warning screen and without counting against any limit other than the 100-user test cap. For a closed beta or internal testing phase, this is the correct approach. Do not launch publicly while verification is pending the warning screen will prevent most users from connecting.

What happens if my Google OAuth verification keeps failing?+

Repeated rejections do not permanently block your application. After identifying the root cause of each rejection, fix all checklist items before resubmitting, not just the specific item mentioned in the rejection email. If the rejection reason is unclear, Google provides a feedback mechanism in the verification portal where you can request clarification. If you are stuck after multiple rejections, consider engaging with Google's developer support or a Google Cloud partner who has experience navigating the verification process.

Does Google OAuth verification expire?+

Google requires periodic re-verification for apps using sensitive and restricted scopes, particularly when the app's scopes, features, or data handling practices change. Google also conducts periodic audits of verified apps and may require resubmission if policies change. Apps using restricted scopes subject to CASA audits typically require annual reassessment. Stay up to date with Google's API Services User Data Policy updates, as policy changes can trigger re-verification requirements.

What is the authorized domain in Google OAuth?+

The authorized domain is the domain you register in the OAuth consent screen settings in Google Cloud Console. It must match the domain of your privacy policy URL, terms of service URL, and application homepage. Google verifies that your privacy policy is actually hosted at this domain. If your privacy policy is hosted at a different domain (e.g., a third-party legal platform) than your app, you will fail the privacy policy check. Host your privacy policy at a path on your own domain.

How should I respond to a Google OAuth verification rejection email?+

Read the rejection email carefully and map each issue to the relevant checklist category. Do not resubmit immediately methodically address every checklist item before resubmitting, because the next reviewer may catch issues the previous one did not flag. Fix the specific issue mentioned, then audit all other checklist items. Have someone outside the immediate development team follow your review instructions and watch your video to confirm they can reproduce the expected results before you submit again.