Pular para o conteúdo
Automação

Como criar alertas automáticos de vencimento no Google Sheets com Apps Script

Você pode criar alertas automáticos de vencimento no Google Sheets sem contratar um sistema de gestão. Com uma planilha organizada e um pequeno script do Google Apps Script, é possível verificar datas uma vez por dia e enviar um e-mail para a pessoa responsável quando uma tarefa estiver próxima do prazo.

O método deste guia serve para contas a pagar, documentos, manutenção, contratos, entregas e qualquer rotina que tenha uma data limite. Ele não transforma o Sheets em um ERP, mas elimina uma tarefa repetitiva: abrir a planilha todo dia para descobrir o que está vencendo.

Planilha do Google Sheets usada para acompanhar tarefas e comentários
Uma planilha simples pode funcionar como a base de um alerta de prazos.

Como funciona o alerta de vencimento

O fluxo tem quatro partes:

  • o Google Sheets guarda a tarefa, o responsável, o e-mail, a data e o status;
  • o Apps Script lê as linhas da aba;
  • o código calcula quantos dias faltam para cada vencimento;
  • o MailApp envia o aviso e registra a data do último alerta.

O Google Apps Script é a plataforma de automação do Google Workspace. Ele roda JavaScript no ambiente do Google e consegue conversar com serviços como Sheets, Gmail, Drive e Calendar, respeitando as permissões e cotas da conta.

Para este caso, usaremos SpreadsheetApp para ler e alterar a planilha e MailApp para enviar mensagens. A vantagem do MailApp é ser focado no envio: ele não precisa acessar a caixa de entrada do Gmail.

Monte a planilha antes de escrever o código

Crie uma aba chamada Vencimentos e use esta primeira linha:

Tarefa Responsável E-mail Vencimento Status Último aviso
Renovar certificado Marina marina@empresa.com 15/09/2026 Aberto
Enviar proposta João joao@empresa.com 18/09/2026 Concluído

Formate a coluna Vencimento como data de verdade, e não como texto digitado com apóstrofo. O script precisa receber um objeto de data para comparar o prazo com o dia atual. Na coluna Status, mantenha um padrão simples, como “Aberto”, “Em andamento” e “Concluído”.

A coluna Último aviso evita que a mesma pessoa receba vários e-mails no mesmo dia. Se você preferir avisar mais de uma vez, pode retirar essa coluna e a condição correspondente, mas isso aumenta o risco de transformar o lembrete em spam.

Adicione o Apps Script à planilha

Abra a planilha, clique em Extensões > Apps Script, apague o conteúdo inicial e cole o código abaixo:

function verificarVencimentos() {
  const aba = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Vencimentos');
  if (!aba) {
    throw new Error('A aba Vencimentos não foi encontrada.');
  }

  const linhas = aba.getDataRange().getValues();
  const hoje = new Date();
  hoje.setHours(0, 0, 0, 0);

  for (let i = 1; i < linhas.length; i++) {
    const [tarefa, responsavel, email, vencimento, status, ultimoAviso] = linhas[i];
    const statusAtual = String(status || '').trim().toLowerCase();

    if (!(vencimento instanceof Date) || !email || statusAtual === 'concluído') {
      continue;
    }

    const dataVencimento = new Date(vencimento);
    dataVencimento.setHours(0, 0, 0, 0);

    const diasRestantes = Math.ceil(
      (dataVencimento - hoje) / (1000 * 60 * 60 * 24)
    );

    const avisoAnterior = ultimoAviso instanceof Date
      ? formatarData(ultimoAviso)
      : String(ultimoAviso || '').trim();

    if (diasRestantes >= 0 && diasRestantes <= 3 &&
        avisoAnterior !== formatarData(hoje)) {
      const prazo = formatarData(dataVencimento);
      const assunto = `Prazo próximo: ${tarefa}`;
      const texto = [
        `Olá, ${responsavel || ''}!`,
        `A tarefa “${tarefa}” vence em ${diasRestantes} dia(s), em ${prazo}.`,
        'Atualize a planilha quando concluir.'
      ].join('\\n');

      MailApp.sendEmail({
        to: String(email),
        subject: assunto,
        body: texto,
        htmlBody: texto.replace(/\\n/g, '<br>')
      });

      aba.getRange(i + 1, 6).setValue(hoje);
    }
  }
}

function formatarData(data) {
  return Utilities.formatDate(
    data,
    Session.getScriptTimeZone(),
    'yyyy-MM-dd'
  );
}

function instalarGatilho() {
  ScriptApp.getProjectTriggers()
    .filter(gatilho => gatilho.getHandlerFunction() === 'verificarVencimentos')
    .forEach(gatilho => ScriptApp.deleteTrigger(gatilho));

  ScriptApp.newTrigger('verificarVencimentos')
    .timeBased()
    .everyDays(1)
    .atHour(8)
    .create();
}

O que você precisa ajustar no código

O exemplo considera que os dados começam na linha 2 e que as colunas estão exatamente na ordem mostrada. Se você mover Último aviso para outra posição, também terá de alterar o número usado em getRange(i + 1, 6). O número 6 representa a sexta coluna.

O limite de três dias aparece nesta condição:

diasRestantes >= 0 && diasRestantes <= 3

Para avisar com sete dias de antecedência, troque o 3 por 7. Para incluir tarefas atrasadas, retire o limite inferior, mas decida antes por quantos dias o aviso deve continuar sendo enviado. Uma alternativa segura é criar outra regra para vencimentos passados e marcar a linha como “Atrasado”.

Também vale trocar o texto do assunto e do corpo. O exemplo envia uma mensagem simples em texto e HTML, suficiente para um lembrete interno. Se o aviso for para clientes, revise o tom, o endereço do remetente e a política de privacidade da sua empresa.

Crie o gatilho diário

O Apps Script não executa a função sozinho só porque ela existe. Você precisa criar um gatilho instalável, que é uma regra para chamar a função automaticamente. O código já traz a função instalarGatilho para isso.

  1. No editor do Apps Script, selecione instalarGatilho no menu de funções.
  2. Clique em Executar.
  3. Na primeira execução, revise as permissões e autorize o acesso solicitado.
  4. Abra o menu lateral de Acionadores para confirmar que existe um evento baseado em tempo.

A documentação de gatilhos instaláveis explica que os eventos baseados em tempo podem executar uma função em intervalos definidos. O horário não deve ser tratado como um despertador de precisão: o Google pode fazer pequenos ajustes no momento da execução. Para um alerta de prazo, essa diferença normalmente não importa.

O fuso horário do projeto também merece atenção. Em Configurações do projeto, confira se o fuso está correto para a sua operação. A função usa o fuso do projeto ao formatar as datas; se ele estiver errado, uma tarefa perto da meia-noite pode parecer vencer no dia anterior ou seguinte.

Como fazer um teste sem esperar até amanhã

Não dependa do gatilho para descobrir se o código funciona. Faça um teste controlado:

  1. Crie uma linha de teste com seu próprio e-mail.
  2. Informe uma data de vencimento para hoje, amanhã ou daqui a três dias.
  3. Deixe o status como “Aberto”.
  4. Selecione verificarVencimentos e clique em Executar.
  5. Confira se o e-mail chegou e se a coluna Último aviso recebeu a data.
  6. Execute a função uma segunda vez e confirme que outro e-mail não foi enviado no mesmo dia.

Se o teste passar, altere a linha para uma data distante e execute novamente. Assim você verifica também o caminho em que nada deve acontecer. Depois, apague a linha de teste ou marque-a como concluída.

Erros comuns e como corrigir

A data foi ignorada

Quase sempre isso acontece porque o valor está armazenado como texto. Selecione a coluna, use Formatar > Número > Data e digite novamente uma data. Evite valores como “daqui a dois dias” ou “15 de setembro”; use uma célula reconhecida pelo Sheets como data.

Nenhum e-mail foi enviado

Verifique se o e-mail está na terceira coluna, se o status não é “Concluído” e se o prazo está entre hoje e os próximos três dias. Depois consulte o painel Execuções do Apps Script: ele mostra se a função falhou por permissão, nome de aba ou limite de serviço.

O aviso foi enviado várias vezes

Confira se a coluna Último aviso é realmente a sexta coluna. O script grava a data depois do envio. Se a execução falhar antes dessa linha, o próximo acionamento tentará enviar novamente. Isso é preferível a marcar como avisado antes de enviar, pois evita perder um alerta quando o serviço de e-mail estiver indisponível.

A autorização parece exagerada

O script precisa de autorização porque vai ler uma planilha e enviar mensagens em seu nome. O quadro de cotas do Apps Script também se aplica: os limites variam entre contas pessoais e Google Workspace e podem mudar. Consulte a página oficial antes de usar o fluxo para centenas ou milhares de destinatários.

Quando esse método deixa de ser suficiente

Para uma equipe pequena, alguns responsáveis e dezenas de prazos, a solução é barata e fácil de manter. Ela também é uma boa ponte para quem já usa planilhas e ainda não precisa de um sistema completo. Se você organiza pedidos no Sheets, este guia sobre controle de pedidos com Google Forms e Google Sheets mostra outra forma de estruturar os dados antes de automatizar avisos.

O limite aparece quando várias pessoas editam a planilha sem padrão, os prazos exigem histórico de auditoria ou os avisos precisam chegar por WhatsApp, SMS e e-mail com regras diferentes. Nesse cenário, considere um banco de dados, um sistema de tarefas ou uma automação com fila e registro de eventos. O Apps Script resolve repetição; ele não substitui governança de dados.

Perguntas frequentes

O alerta funciona com uma conta Gmail comum?

Sim. O Apps Script pode ser usado com uma conta pessoal, mas as cotas de envio são diferentes das disponíveis em contas Google Workspace. Para uso intenso, confira os limites oficiais antes de colocar a rotina em produção.

Posso enviar o aviso para mais de uma pessoa?

Sim. Você pode separar endereços por vírgula no campo to ou usar os campos cc e bcc do objeto enviado ao MailApp. Cada destinatário conta para a cota diária.

O script envia alertas pelo WhatsApp?

Não neste formato. O exemplo usa o MailApp e envia e-mail. Para WhatsApp, seria necessário integrar uma API autorizada ou uma plataforma de automação com regras próprias de autenticação, templates e cobrança.

Preciso deixar o computador ligado?

Não. O gatilho instalável roda nos servidores do Google, desde que o projeto continue autorizado e dentro das cotas. Você só precisa abrir a planilha para conferir ou alterar os dados.