Pular para o conteúdo principal

Como Automatizar suas Finanças Pessoais com Google Sheets e Python

Como Automatizar suas Finanças Pessoais com Google Sheets e Python

Obs: Este é o primeiro artigo da nova fase do blog, agora focado em finanças e automação para desenvolvedores.

Manter o controle das finanças pessoais pode ser uma tarefa tediosa e repetitiva. Que tal automatizar uma parte ou até todo o processo, tendo suas receitas, investimentos e gastos atualizados automaticamente? Neste guia prático, iremos mostrar como criar uma planilha atualizada automaticamente usando Google Sheets e Python. O tutorial apresenta uma planilha básica que você poderá melhorar à medida que ganha experiência.

Fonte: https://br.freepik.com

💡 Dica: Este guia assume que você tem conhecimentos básicos de Python e planilhas. Mesmo sem experiência avançada, você conseguirá seguir os passos!

Por que Automatizar suas Finanças?

  • Economia de tempo: Chega de digitar extrato por extrato
  • Visão em tempo real: Dados sempre atualizados
  • Tomada de decisão: Informações precisas para investir melhor
  • Controle de gastos: Alertas automáticos quando ultrapassar orçamentos

Pré-requisitos

  • Conta no Google e credenciais no Google Cloud
  • Python e bibliotecas instaladas
  • Conhecimento básico de planilhas e programação

Passo a Passo da Automação

1. Estruturando sua Planilha no Google Sheets

Crie uma planilha com as seguintes abas:

📊 Dashboard Principal

Saldo Atual: R$
Receita do Mês: R$
Despesas do Mês: R$
Investimentos: R$

💳 Transações (com as seguintes colunas)

Data Descrição Categoria Valor Tipo

📈 Investimentos (com as seguintes colunas)

Ativo Quantidade Preço Médio Preço Atual Valor Investido

2. Ativar APIs do Google Drive e Google Sheets e obter credenciais

O primeiro passo aqui, após logar na sua conta Google, consiste em acessar o Google Cloud e clicar em Console no canto superior direito.

Botão Console no Google Cloud

Em seguida clique no menu e na opção APIs e serviços ou use os botões de acesso rápido. Clique então em Biblioteca no menu e ative Google Drive API e Google Sheets API.

Botão APIs e serviços

Finalmente, ainda na opção APIs e serviços, vá em Credenciais. Se você já tiver uma conta de serviço, clique no e-mail visível no grupo Contas de serviço, a fim de criar uma chave. Se não, clique em + Criar credenciais e Conta de serviço para criar uma.

Contas de serviço

Depois que visualizar a Conta de serviço, clique em Chave e em Adicionar chave. Selecione Criar nova chave, deixe marcado JSON e clique em Criar. Salve o arquivo JSON numa pasta segura no seu computador, dê um nome a ele, por exemplo credenciais.json. Em seguida copie o e-mail na chave client_email do JSON salvo. Ele será usado para compartilhar a planilha no Google Sheets.

Criar uma chave na Conta de serviço

3. Conectando a API do Google Sheets

Primeiramente, instale as bibliotecas que serão usadas no código Python:

pip install gspread pandas google-auth yfinance

Em seguida, escreva a função responsável por fazer a conexão com a API do Goolge Sheets. Note que utilizamos o arquivo credenciais.json que foi obtido na seção anterior:

automatizar_financas.py
import gspread
import pandas as pd
from google.oauth2.service_account import Credentials


def conectar_google_sheets():
    scopes = [
        "https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/drive",
    ]

    creds = Credentials.from_service_account_file(
      "credenciais.json", scopes=scopes)

    client = gspread.authorize(creds)
    return client

4. Script para Atualizar Transações Bancárias

Aqui é necessário obter um extrato da sua conta por meio do aplicativo do banco. Após a solicitação você irá receber um e-mail com o extrato em três formatos: PDF, CSV e OFX. Nós iremos utilizar o formato CSV. Dois pontos merecem atenção:
a) Não existe uma estrutura padrão. Cada banco usa nomes de campos diferentes e posições diferentes no arquivo;
b) Pode ser necessário fazer uma limpeza (preparação dos dados) antes de fazer a importação. Checamos isso em dois bancos: Nubank e Inter. Nubank envia um extrato onde os campos são separados por vírgula e o Inter usa ponto e vírgula como separador, além de precisar deletar algumas linhas no início do arquivo.
No nosso exemplo usaremos um extrato obtido do banco Inter, usando o seguinte código:

automatizar_financas.py
import gspread
import pandas as pd
from google.oauth2.service_account import Credentials

# Código anterior vai aqui

def importar_extrato_csv(arquivo_csv, worksheet):
    df = pd.read_csv(
        arquivo_csv,
        sep=";",
        decimal=",",
        encoding="utf-8",
        on_bad_lines="skip",
    )
    for _, row in df.iterrows():
        worksheet.append_row(
            [
                row["Data Lançamento"],
                row["Histórico"] + " " + row["Descrição"],
                "",
                float(row["Valor"].replace(".", "").replace(",", ".")),
                0,
            ]
        )

Esta função deve receber como parâmetros o extrato em CSV e o objeto planilha obtido por meio da conexão com a API Google Sheets.
A função lê o CSV e o converte em um DataFrame, o qual é precorrido e cada uma de suas linhas é adicionado à planilha Google.  Os nomes das colunas no DataFrame são definidos pelo CSV fornecido pelo banco Inter. Para um outro banco esses nomes podem ser diferentes.
Juntando essas duas funções com o trecho que vai executar:

automatizar_financas.py
import gspread
import pandas as pd
from google.oauth2.service_account import Credentials


def conectar_google_sheets():
    scopes = [
        "https://www.googleapis.com/auth/spreadsheets",
        "https://www.googleapis.com/auth/drive",
    ]

    creds = Credentials.from_service_account_file(
        "credenciais.json", scopes=scopes)

    client = gspread.authorize(creds)
    return client


def importar_extrato_csv(arquivo_csv, worksheet):
    df = pd.read_csv(
        arquivo_csv,
        sep=";",
        decimal=",",
        encoding="utf-8",
        on_bad_lines="skip",
    )
    for _, row in df.iterrows():
        worksheet.append_row(
            [
                row["Data Lançamento"],
                row["Histórico"] + " " + row["Descrição"],
                "",
                float(row["Valor"].replace(".", "").replace(",", ".")),
                (
                    "Receita"
                    if float(
                        row["Valor"].replace(".", "").replace(",", ".")
                        ) >= 0
                    else "Despesa"
                ),
            ]
        )


if __name__ == "__main__":
    # Conectar à planilha
    client = conectar_google_sheets()
    # Abrir a planilha e a aba desejada (case sensitive)
    planilha = client.open("Minhas Finanças Pessoais")
    sheet = planilha.worksheet("Transações")
    # Importar o extrato CSV para a aba especificada
    importar_extrato_csv(
        "./extratos/Extrato-30-09-2025-a-30-10-2025-CSV.csv", sheet)
    print("Importação concluída com sucesso!")

Atente para os comentários neste trecho. Além da questão de que os nomes das planilhas são case sensitive, o CSV está numa pasta denominada extratos.

5. Atualizando Preços de Investimentos

investimentos.py
from automatizar_financas import conectar_google_sheets
import yfinance as yf


def atualizar_investimentos():
    client = conectar_google_sheets()
    planilha = client.open("Minhas Finanças Pessoais")
    worksheet = planilha.worksheet("Investimentos")

    # Obter dados atualizados
    investimentos = worksheet.get_all_records()

    for i, investimento in enumerate(investimentos, start=2):
        ticker = investimento['Ativo']
        preco_atual = obter_preco_atual(ticker)

        # Atualizar preço atual
        worksheet.update_cell(i, 4, preco_atual)

        # Calcular e atualizar valor total
        quantidade = investimento['Quantidade']
        valor_total = quantidade * preco_atual
        worksheet.update_cell(i, 5, valor_total)


def obter_preco_atual(ticker):
    # Exemplo com API do Yahoo Finance
    ticker_yf = yf.Ticker(ticker + ".SA")
    info = ticker_yf.info
    return info.get('regularMarketPrice', 0.0)


if __name__ == "__main__":
    atualizar_investimentos()
    print("Atualização de investimentos concluída com sucesso!")

Neste módulo utilizamos o pacote yfinance para obter dados das ações, neste caso, o preço atual. O código lê da planilha Investimentos, cada ação, busca seu preço atual e atualiza os valores das células de preço e valor total.

6. Dashboard Automático com Fórmulas

A fim de que os dados sejam resumidos, no Google Sheets, use estas fórmulas na aba Dashboard:

Saldo Atual:

=SOMA(Transações!D:D)

Receita do Mês:

=SOMA(FILTER('Transações'!D2:D; 'Transações'!E2:E="Receita"; MÊS('Transações'!A2:A)=HOJE()))

Despesas do Mês:

=SOMA(FILTER('Transações'!D2:D; 'Transações'!E2:E="Receita"; MÊS('Transações'!A2:A)=HOJE()))

Investimentos:

=SOMA(Investimentos!E:E)

7. Agendando a Execução Automática

Visto que a obtenção do extrato bancário não pode ser automatizada, se agendarmos a atualização das transações bancárias, será necessário que você solicite o extrato antes que a tarefa agenda aconteça. Desse modo vamos mostrar apenas o agendamento da atualização dos investimentos. De toda maneira, com poucas alterações podemos incluir o agendamento das transações.
 
agendamento.py
import schedule
import time
from datetime import datetime
from investimentos import atualizar_investimentos


def rotina_diaria():
    atualizar_investimentos()
    print(f"Planilha atualizada em {datetime.now()}")


# Agendar execução diária às 18:00
schedule.every().day.at("09:27").do(rotina_diaria)

while True:
    schedule.run_pending()
    time.sleep(1)

Dicas para Personalizar

  1. Adapte às suas necessidades: Adicione categorias específicas do seu estilo de vida
  2. Múltiplas fontes: Conecte com diferentes bancos e corretoras
  3. Backup automático: Configure backup semanal da planilha
  4. Segurança: Mantenha suas credenciais em ambiente seguro
🚀 Próximos Passos:
  • Adicione gráficos automáticos no Google Sheets
  • Crie alertas por email
  • Crie relatórios mensais por email
  • Integre com Telegram para notificações
  • Adicione previsões de gastos com machine learning

Conclusão

Com essa automação, você terá suas finanças sempre organizadas e atualizadas, podendo focar no que realmente importa: tomar decisões inteligentes com seu dinheiro.

💡 Dica final: Comece simples e vá incrementando aos poucos. O importante é dar o primeiro passo rumo à liberdade financeira!

Comentários