Coletor automatizado de dados de ações e FIIs da B3 usando GitHub Actions, brapi.dev e Turso (SQLite).
- ✅ Coleta automática de preços de fechamento via brapi.dev
- ✅ Armazenamento em banco SQLite (Turso)
- ✅ Execução agendada via GitHub Actions
- ✅ Configuração flexível via JSON
- ✅ Tratamento de erros e retry automático
- ✅ Processamento em lotes para otimização
# Clone o repositório
git clone <seu-repositorio>
cd stock-data-collector
# Instale as dependências
npm install- Crie uma conta em turso.tech
- Crie um banco de dados
- Anote a
DATABASE_URLeAUTH_TOKEN
No seu repositório GitHub, vá em Settings → Secrets and variables → Actions e adicione:
TURSO_DATABASE_URL: URL do seu banco TursoTURSO_AUTH_TOKEN: Token de autenticação do TursoBRAPI_API_KEY: Sua chave da API brapi.dev
Edite o arquivo config.json:
{
"schedule": {
"hour": 18,
"minute": 5,
"timezone": "America/Sao_Paulo"
},
"stocks": ["PETR4", "VALE3", "ITUB4"],
"fiis": ["HGLG11", "KNRI11", "XPML11"]
}No arquivo .github/workflows/stock-collector.yml, ajuste o cron para seu horário preferido:
schedule:
# Às 21:05 UTC (18:05 horário de Brasília)
- cron: '5 21 * * 1-5'Antes de fazer deploy, teste localmente:
# Configure as variáveis de ambiente
export TURSO_DATABASE_URL="sua-url-aqui"
export TURSO_AUTH_TOKEN="seu-token-aqui"
# Execute o teste de conexão
npm run test
# Execute o coletor
npm startCREATE TABLE closings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date NUMERIC NOT NULL,
code TEXT NOT NULL,
value REAL NOT NULL
);stock-data-collector/
├── .github/
│ └── workflows/
│ └── stock-collector.yml
├── src/
│ ├── collect-stocks.js
│ └── test-connection.js
├── .env.example
├── .gitignore
├── config.json
├── package.json
└── README.md
- Agendamento: GitHub Actions executa o workflow nos horários configurados
- Coleta: Script busca dados na API brapi.dev em lotes
- Processamento: Dados são formatados e validados
- Armazenamento: Dados são salvos no Turso com INSERT OR REPLACE
- Log: Processo é registrado nos logs do GitHub Actions
Edite o cron no arquivo stock-collector.yml:
schedule:
- cron: '0 22 * * 1-5' # 22:00 UTC todos os dias úteisEdite o arquivo config.json:
{
"stocks": ["PETR4", "VALE3", "NOVO_ATIVO"],
"fiis": ["HGLG11", "NOVO_FII"]
}{
"api": {
"batch_size": 10,
"retry_attempts": 3,
"retry_delay_ms": 1000
}
}Os logs são visíveis na aba Actions do GitHub:
🚀 Iniciando coleta de dados...
📅 Data: 19/09/2025
⏰ Horário: 18:05:32
🔍 Testando conexão com o banco...
✅ Conexão OK! Total de registros: 1250
📊 Processando 10 ações...
✅ PETR4: R$ 32.45
✅ VALE3: R$ 68.90
...
📈 Resumo da coleta:
• Total de ativos: 20
• Ações: 10
• FIIs: 10
• Data: 2025-09-19
✅ Coleta finalizada!
- Verifique se os secrets estão configurados corretamente
- Teste localmente primeiro
- Verifique se os códigos estão corretos
- Confirme se sua API key está válida
- A API tem rate limiting, o script já implementa delays
- Use a API key real para ter mais requests disponíveis
- Verifique a sintaxe do cron
- GitHub pode atrasar execuções em horários de pico
- Notificações por email/Slack em caso de erro
- Dashboard para visualizar os dados
- Backup automático dos dados
- Coleta de dados intraday
- Cálculo de indicadores técnicos
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
MIT License - veja o arquivo LICENSE para detalhes.