Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Gmail, Calendar, Drive, Sheets, Docs via Google API (SA / OAuth)
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 825% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 457% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 202% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 198% | 0% |
Access Gmail, Google Calendar, Drive, Sheets, and Docs through the Google REST APIs. Requires either a service account JSON key (GOOGLE_APPLICATION_CREDENTIALS) or an OAuth2 access token.
Get a short-lived access token via gcloud CLI (requires Google Cloud SDK installed):
powershell# One-time login (opens browser) gcloud auth login # Get token for API calls $token = (gcloud auth print-access-token) $headers = @{ "Authorization" = "Bearer $token" }
For service accounts, set GOOGLE_APPLICATION_CREDENTIALS to the JSON key path and use gcloud auth application-default print-access-token.
powershell$resp = Invoke-RestMethod -Uri "https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=10" -Headers $headers $resp.messages | ForEach-Object { $msg = Invoke-RestMethod -Uri "https://gmail.googleapis.com/gmail/v1/users/me/messages/$($_.id)?format=metadata&metadataHeaders=Subject,From,Date" -Headers $headers $msg.payload.headers | Where-Object { $_.name -in @("Subject","From","Date") } | Select-Object name,value }
powershell$now = [System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ") $end = [System.DateTime]::UtcNow.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ssZ") $resp = Invoke-RestMethod -Uri "https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=$now&timeMax=$end&singleEvents=true&orderBy=startTime" -Headers $headers $resp.items | Select-Object summary, @{N="start";E={$_.start.dateTime}}
powershell$spreadsheetId = "your-sheet-id" # from URL: /spreadsheets/d/<id>/ $range = "Sheet1!A1:E20" $resp = Invoke-RestMethod -Uri "https://sheets.googleapis.com/v4/spreadsheets/$spreadsheetId/values/$range" -Headers $headers $resp.values | ForEach-Object { $_ -join "`t" }
powershell$spreadsheetId = "your-sheet-id" $range = "Sheet1!A1" $writeHeaders = $headers.Clone(); $writeHeaders["Content-Type"] = "application/json" $payload = @{ values = @(@("Name","Score"),@("Alice","95"),@("Bob","87")) } | ConvertTo-Json Invoke-RestMethod -Uri "https://sheets.googleapis.com/v4/spreadsheets/$spreadsheetId/values/$range`?valueInputOption=RAW" -Method Put -Headers $writeHeaders -Body $payload
powershell$resp = Invoke-RestMethod -Uri "https://www.googleapis.com/drive/v3/files?pageSize=20&fields=files(id,name,mimeType,modifiedTime)" -Headers $headers $resp.files | Select-Object name, mimeType, modifiedTime | Format-Table -AutoSize
powershell$docId = "your-doc-id" # from URL: /document/d/<id>/ $resp = Invoke-RestMethod -Uri "https://docs.googleapis.com/v1/documents/$docId" -Headers $headers $resp.body.content | Where-Object { $_.paragraph } | ForEach-Object { $_.paragraph.elements.textRun.content } | Where-Object { $_ } | Out-String
"Show me my unread Gmail emails from today" → Use step 2 with query parameter q=is:unread after:2026/04/17.
"What meetings do I have tomorrow?" → Use step 3 with tomorrow's date range for timeMin/timeMax.
"Read the sales data from my Google Sheet" → Use step 4 with the sheet ID from the URL and the relevant range.
gcloud auth print-access-token as needednextPageToken for paginationgmail.send scope — confirm scope during OAuth setupOther measured skills in the registry, with their headline benchmark lift.