Google Cloud Console: OAuth 2.0, CLIENT_ID e Refresh Token do Zero
Seu passaporte para todas as APIs do Google — de graça
CLIENT_ID · CLIENT_SECRET · Refresh Token · 20+ APIs liberadas no plano gratuito
Se você já tentou automatizar qualquer coisa no ecossistema Google — seja fazer upload no YouTube, publicar no Blogger via script, ler planilhas do Drive ou enviar e-mails pelo Gmail — você esbarrou na mesma parede: OAuth 2.0. Três variáveis travam quase todo projeto: o CLIENT_ID, o CLIENT_SECRET e o refresh_token. Aqui no @CanalQb, rodamos e quebramos esse fluxo inúmeras vezes. Este guia é o resultado de tudo que funcionou.
O que é o Google Cloud Console e para que ele serve?
O Google Cloud Console é o painel central onde você cria projetos, habilita APIs e gera credenciais OAuth para acessar qualquer serviço do Google programaticamente. É gratuito para criar conta e projetos, e a maioria das APIs tem cotas diárias generosas no plano Free Tier — suficientes para automações pessoais e pequenos negócios.
Passo a passo: do zero ao Refresh Token funcionando
Acessar o Google Cloud Console
Abra o navegador e acesse console.cloud.google.com. Faça login com a conta Google que vai administrar as credenciais — de preferência uma conta principal de desenvolvedor, não uma conta compartilhada. A interface estará em inglês por padrão; você pode mudar o idioma no canto superior direito → ícone de engrenagem → Language.
Criar um novo Projeto
No topo da página você verá um seletor de projetos (geralmente escrito "Select a project" ou o nome do último projeto usado). Clique nele → no modal que abre, clique em "New Project" (canto superior direito do modal). Dê um nome descritivo como automacao-canalqb. A Location pode ficar como "No organization" para contas pessoais. Clique em Create e aguarde alguns segundos. Após criado, selecione-o no seletor.
Habilitar as APIs que você precisa
No menu lateral esquerdo, vá em APIs & Services → Library. Use a barra de busca para encontrar cada API. Clique no card da API → clique em Enable. Pronto — a API está ativa no projeto. Veja a lista completa de APIs populares logo abaixo neste post — fizemos o mapeamento de tudo que vale habilitar.
accessNotConfigured — se sua automação falhar com esse código, volte aqui e habilite a API correspondente.
Configurar a Tela de Permissão OAuth (Consent Screen)
Antes de criar as credenciais, você precisa configurar a tela de consentimento — é a tela que aparece pedindo permissão quando o OAuth abre o navegador. Vá em APIs & Services → OAuth consent screen.
- User Type: Selecione "External" (disponível para todos). Para uso apenas pessoal isso basta; o app ficará em modo "Testing".
- App name: Coloque algo como
AutoCanalQb. - User support email: Seu e-mail Google.
- Developer contact information: Seu e-mail novamente.
- Clique em Save and Continue nas próximas telas (Scopes e Test Users) sem alterar nada por enquanto.
- Na aba Test users — OBRIGATÓRIO — clique em "+ Add Users" e adicione o e-mail da conta que vai autorizar o OAuth. Sem isso o fluxo retorna erro 403.
access_denied e você fica 30 minutos debugando sem entender o motivo.
Criar a Credencial OAuth 2.0 e obter CLIENT_ID e CLIENT_SECRET
Agora o passo que todo mundo estava esperando. Vá em APIs & Services → Credentials. Clique em "+ Create Credentials" → OAuth client ID.
- Application type: Selecione "Desktop app" (ideal para scripts Python/Node rodando no seu computador).
- Name: Algo como
script-local-cqb. - Clique em Create.
Um modal vai aparecer mostrando o Client ID e o Client Secret. Copie ambos agora e guarde em local seguro — o Secret não aparece mais depois que você fechar essa tela (mas pode ser exibido novamente clicando no lápis da credencial).
# Estrutura dos valores que você vai copiar do Console:
CLIENT_ID = "XXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com"
CLIENT_SECRET = "GOCSPX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# Nunca compartilhe esses valores publicamente.
# Adicione-os como Secrets no GitHub Actions ou
# use variáveis de ambiente (.env) localmente.
CLIENT_SECRET diretamente no código-fonte que vai para o repositório público. Use .env + .gitignore localmente, ou GitHub Secrets em pipelines de CI/CD.
Instalar a dependência Python
Com as credenciais em mãos, instale a biblioteca OAuth do Google no seu ambiente Python. Abra o terminal (cmd, PowerShell ou terminal Linux/Mac) e rode:
pip install google-auth-oauthlib
Se você usa ambientes virtuais (recomendado), ative o seu venv antes. Se preferir instalar sem conflitos de pacotes:
# Cria e ativa ambiente virtual (opcional mas recomendado)
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install google-auth-oauthlib
Criar e rodar o script de geração do Refresh Token
Crie um arquivo chamado setup_oauth.py na sua máquina local com o conteúdo abaixo. Substitua os placeholders pelos seus valores reais copiados no Passo 5. Defina também os scopes — as permissões que seu app vai solicitar. Escolha apenas os escopos que você realmente precisa; pedir escopos demais aumenta a chance de rejeição na revisão do Google.
Escopos mais usados:
"""
🔑 setup_oauth.py — Gerador de Refresh Token OAuth
Rode UMA VEZ no seu computador local.
Créditos: @CanalQb — canalqb.com.br
"""
from google_auth_oauthlib.flow import InstalledAppFlow
# ─── Substitua pelos seus valores do Google Cloud Console ───
CLIENT_ID = "SEU_CLIENT_ID_AQUI"
CLIENT_SECRET = "SEU_CLIENT_SECRET_AQUI"
# ─── Defina apenas os escopos que você precisa ───
SCOPES = [
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/youtube",
# Adicione ou remova conforme necessário
# "https://www.googleapis.com/auth/blogger",
# "https://www.googleapis.com/auth/gmail.send",
]
client_config = {
"installed": {
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"],
}
}
flow = InstalledAppFlow.from_client_config(client_config, SCOPES)
creds = flow.run_local_server(port=0)
print("\n" + "="*60)
print("✅ AUTENTICAÇÃO OK — Guarde estes valores com segurança:")
print("="*60)
print(f"\nOAUTH_CLIENT_ID : {CLIENT_ID}")
print(f"\nOAUTH_CLIENT_SECRET : {CLIENT_SECRET}")
print(f"\nOAUTH_REFRESH_TOKEN : {creds.refresh_token}")
print("\n" + "="*60)
print("⚠️ Guarde o refresh_token — ele não expira (até ser revogado).")
print(" Para revogar: https://myaccount.google.com/permissions")
print("="*60)
Para rodar: python setup_oauth.py. O navegador vai abrir automaticamente pedindo que você faça login e autorize o acesso. Após confirmar, o terminal imprime os três valores. Anote o refresh_token — ele não vai aparecer novamente se você rodar o script uma segunda vez sem revogar o acesso.
refresh_token só é retornado na primeira autorização. Se você rodar o script de novo e o terminal mostrar refresh_token: None, vá em myaccount.google.com/permissions, revogue o acesso do seu app e rode novamente — aí o Google gera um novo token.
Guardar os valores com segurança (GitHub Secrets ou .env)
Com os três valores em mãos, nunca os coloque direto no código. Existem duas abordagens práticas:
Opção A — GitHub Actions Secrets (para CI/CD):
- Vá no seu repositório → Settings → Secrets and variables → Actions.
- Clique em "New repository secret" e crie três secrets:
OAUTH_CLIENT_ID·OAUTH_CLIENT_SECRET·OAUTH_REFRESH_TOKEN- No seu workflow
.yml, acesse via:${{ secrets.OAUTH_CLIENT_ID }}
Opção B — Arquivo .env (para uso local):
# .env — NUNCA faça commit deste arquivo (adicione ao .gitignore)
OAUTH_CLIENT_ID=seu_client_id_aqui
OAUTH_CLIENT_SECRET=seu_client_secret_aqui
OAUTH_REFRESH_TOKEN=seu_refresh_token_aqui
# No Python, carregue com python-dotenv:
pip install python-dotenv
from dotenv import load_dotenv
import os
load_dotenv()
CLIENT_ID = os.getenv("OAUTH_CLIENT_ID")
CLIENT_SECRET = os.getenv("OAUTH_CLIENT_SECRET")
REFRESH_TOKEN = os.getenv("OAUTH_REFRESH_TOKEN")
Quais APIs do Google habilitar? Lista completa 2026
Aqui no @CanalQb, mapeamos todas as APIs populares do Google disponíveis no Cloud Console, validamos quais têm plano gratuito real (sem pegadinhas de cobrança inesperada no primeiro mês) e organizamos por categoria de uso. Todas as listadas como Grátis possuem cotas diárias ou mensais suficientes para automações pessoais e pequenos projetos — verificamos os planos na página oficial de preços do Google Cloud.
📁 Produtividade & Armazenamento
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Google Drive API | Upload, download, listagem, criação de pastas e compartilhamento de arquivos no Drive. Essencial para automações de backup e distribuição de arquivos. | 15 GB storage / 1B req./dia | Grátis |
| Google Sheets API | Leitura e escrita em planilhas. Ótimo para dashboards, banco de dados simples e integração com automações de coleta de dados. | 300 req./min | Grátis |
| Google Docs API | Criação e edição de documentos. Ideal para geração automática de relatórios, contratos e templates. | 300 req./min | Grátis |
| Google Forms API | Criação e leitura de respostas de formulários. Permite automatizar pesquisas e captura de dados. | 300 req./min | Grátis |
| Google Slides API | Geração automática de apresentações. Perfeito para relatórios visuais e pitch decks gerados por script. | 300 req./min | Grátis |
📧 Comunicação
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Gmail API | Envio, leitura e organização de e-mails via código. Suporta threads, labels e busca avançada. Muito usado em automações de notificação e leitura de inbox. | 1B unid./dia (uso pessoal) | Grátis |
| Google Calendar API | Criação, leitura e atualização de eventos no Calendar. Ideal para bots de agenda, lembretes automáticos e sincronização com outras ferramentas. | 1M req./dia | Grátis |
| Google Chat API | Envio de mensagens e criação de bots no Google Chat (Workspace). Útil para notificações em equipe via webhook ou app. | 3.000 req./min | Grátis |
🎬 Conteúdo & Publicação
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| YouTube Data API v3 | Upload de vídeos, gerenciamento de playlists, leitura de métricas e comentários. A API mais usada pelos leitores do @CanalQb para automação de canais. | 10.000 unid./dia | Limitado |
| Blogger API | Criação, edição e publicação de posts no Blogger via script. Permite automação completa de blogs hospedados no blogspot.com — sem abrir o painel. | 10.000 req./dia | Grátis |
| YouTube Analytics API | Acesso a dados analíticos do canal: views, retenção, fontes de tráfego. Complementa a YouTube Data API para dashboards de desempenho. | Incluso na cota YT | Grátis |
| YouTube Reporting API | Relatórios em bulk de dados do canal. Ideal para análise histórica e exportação de dados para planilhas. | Incluso na cota YT | Grátis |
🔐 Identidade & Segurança
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Google Identity Services | Login com Google (Sign-In) para aplicações web e mobile. Substitui o OAuth manual para fluxos de autenticação de usuários finais. | Ilimitado | Grátis |
| People API | Acesso a contatos do Google, perfil e informações de pessoas. Útil para integrações de CRM e sincronização de listas de contatos. | 90 req./min | Grátis |
| Admin SDK API | Gerenciamento de usuários e grupos em domínios Google Workspace. Essencial para automações corporativas de TI. | Varia por operação | Workspace |
🤖 Dados, IA & Análise
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Google Analytics Data API (GA4) | Consulta dados do seu Google Analytics 4 via código. Permite criar dashboards customizados, relatórios automatizados e alertas de tráfego. | 200.000 req./dia | Grátis |
| Search Console API | Acessa dados do Google Search Console: cliques, impressões, CTR e posição média por query. Ótimo para monitoramento SEO automatizado. | 1.200 req./min | Grátis |
| Cloud Natural Language API | Análise de sentimento, extração de entidades e classificação de texto. Útil para moderar comentários e categorizar conteúdo automaticamente. | 5.000 unid./mês | Limitado |
| Cloud Translation API | Tradução automática de textos para 100+ idiomas. O plano gratuito cobre 500.000 caracteres/mês — suficiente para automações leves. | 500k chars/mês | Limitado |
| Cloud Vision API | Reconhecimento de imagens: OCR, detecção de objetos, faces e textos em imagens. Perfeito para automações de moderação e extração de dados visuais. | 1.000 unid./mês | Limitado |
| Gemini API (Google AI Studio) | Acesso aos modelos de IA generativa do Google (Gemini Pro, Flash). Geração de texto, código e imagens via API. Alternativa ao ChatGPT para automações. | 60 req./min (Flash) | Grátis |
| BigQuery API | Data warehouse serverless. Consultas SQL em datasets massivos. O plano gratuito inclui 10 GB de armazenamento e 1 TB de processamento/mês. | 1 TB queries/mês | Limitado |
🗺️ Localização & Mapas
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Maps JavaScript API | Mapas interativos em páginas web. Permite customizar totalmente o visual e adicionar marcadores, rotas e layers de dados. | US$200 crédito/mês | Crédito |
| Geocoding API | Converte endereços em coordenadas (e vice-versa). Essencial para apps de logística, delivery e mapeamento de dados. | US$200 crédito/mês | Crédito |
| Places API | Busca de estabelecimentos, avaliações e informações de locais. Base para apps de descoberta e recomendação geolocalizada. | US$200 crédito/mês | Crédito |
🔥 Firebase & Backend
| API | O que faz | Cota Grátis | Status |
|---|---|---|---|
| Firebase Realtime Database API | Banco de dados NoSQL em tempo real. Ideal para apps com sincronização instantânea de dados entre clientes. O plano Spark é gratuito. | 1 GB storage / 10 GB transfer | Grátis |
| Firestore API | Banco de dados NoSQL escalável e flexível. Mais robusto que o Realtime DB, com suporte a queries complexas e modo offline. | 1 GB / 50k reads/dia | Grátis |
| Firebase Cloud Messaging (FCM) | Envio de notificações push para Android, iOS e Web de forma gratuita e ilimitada. Uma das APIs mais usadas em apps móveis. | Ilimitado | Grátis |
| Cloud Functions API | Funções serverless acionadas por eventos. Escala automaticamente e cobra apenas por execução. O Free Tier inclui 2M invocações/mês. | 2M invocações/mês | Grátis |
A maioria dos tutoriais pede o escopo
https://www.googleapis.com/auth/drive (acesso total ao Drive). Mas se você só precisa fazer upload, use https://www.googleapis.com/auth/drive.file — ele dá acesso apenas aos arquivos criados pelo próprio app, não a todo o Drive. Isso reduz o risco de segurança e, no caso do YouTube, usar https://www.googleapis.com/auth/youtube.upload em vez de youtube completo evita que um token comprometido consiga deletar vídeos do canal. Validamos isso em produção nos nossos scripts do @CanalQb.
Dúvidas frequentes sobre OAuth Google
O refresh_token expira?
O refresh_token não tem prazo de validade fixo — ele só expira se você revogar o acesso manualmente em myaccount.google.com/permissions, se a senha da conta for alterada ou se o app ficar mais de 6 meses sem uso. Em produção, scripts que rodam diariamente nunca têm o token expirado.
Posso usar o mesmo CLIENT_ID em vários scripts?
Sim, mas não é recomendado para projetos diferentes. O ideal é criar uma credencial por projeto para facilitar o gerenciamento de permissões e revogar acessos de forma granular. Para múltiplos scripts dentro do mesmo projeto (ex: uploader do YouTube + poster do Blogger), uma única credencial funciona bem desde que os escopos abranjam ambas as APIs.
O que é o erro "This app isn't verified"?
Aparece quando você usa escopos sensíveis (como acesso total ao Gmail ou Drive) em apps ainda não revisados pelo Google. Para uso pessoal, clique em "Advanced" → "Go to [seu app] (unsafe)" na tela de consentimento. Para apps públicos, você precisará passar pela revisão oficial do Google — processo que pode levar semanas e exige política de privacidade pública.
Precisa de cartão de crédito para usar as APIs gratuitas?
Depende da API. As APIs de produtividade (Drive, Sheets, Gmail, Blogger, YouTube) não exigem cartão para uso dentro das cotas gratuitas. Já as APIs do Google Maps e algumas APIs de IA exigem um método de pagamento cadastrado, pois o billing é baseado em uso além do crédito mensal gratuito de US$200. O Google avisa antes de cobrar — mas sempre defina um orçamento máximo no console para evitar surpresas.
Como usar o refresh_token no GitHub Actions?
Adicione os três valores (CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN) como Repository Secrets em Settings → Secrets and variables → Actions. No workflow YAML, referencie-os como ${{ secrets.OAUTH_CLIENT_ID }} e passe como variáveis de ambiente para o step Python. No script, carregue via os.environ.get(). Nunca use echo para imprimir secrets no log — o GitHub mascara automaticamente, mas é boa prática evitar.
Conclusão: você agora tem acesso ao ecossistema completo do Google
Depois de seguir este guia você tem em mãos os três componentes que desbloqueiam praticamente qualquer automação dentro do universo Google: o CLIENT_ID que identifica seu app, o CLIENT_SECRET que autentica ele, e o refresh_token que mantém a sessão ativa indefinidamente sem precisar logar de novo. Com as APIs da tabela acima habilitadas, você consegue publicar no Blogger, fazer upload no YouTube, ler e escrever no Drive, enviar e-mails pelo Gmail e muito mais — tudo pelo terminal ou por GitHub Actions, sem abrir nenhum painel manualmente.
Este script foi otimizado para os leitores do canalqb.com.br com base em erros reais que cometemos durante a configuração de pipelines automatizados. O próximo passo natural é integrar esses tokens nos seus workflows de automação — temos tutoriais detalhados de upload automático no YouTube e publicação automática no Blogger. Explore o blog para os próximos passos.
⚠️ Aviso de Segurança: Nunca exponha credenciais OAuth em repositórios públicos, prints de tela ou grupos de suporte. Um CLIENT_SECRET comprometido permite que terceiros façam requisições em seu nome. Em caso de vazamento, revogue imediatamente a credencial no Google Cloud Console e gere uma nova.
Feito com Master Rules Claude v5 · @CanalQb · canalqb.com.br

Comentários
Comente só assim vamos crescer juntos!