Sistema de monitoramento automatizado de imóveis de luxo para identificação de oportunidades de aluguel com excelente custo-benefício.
O RentMonitor realiza scraping automatizado em portais imobiliários para identificar oportunidades de aluguel onde o valor mensal está abaixo de 0.5% do valor de avaliação do imóvel — um indicador amplamente utilizado no mercado imobiliário brasileiro para determinar se um aluguel é vantajoso.
No Brasil, a regra geral do mercado imobiliário indica que:
- Aluguel até 0.5% do valor do imóvel = Excelente oportunidade
- Aluguel entre 0.5% e 0.7% = Valor justo
- Aluguel acima de 0.8% = Caro em relação ao valor do imóvel
Como é feito o cálculo:
Porcentagem = (Aluguel Mensal ÷ Valor de Avaliação) × 100
Exemplo:
- Imóvel avaliado em R$ 4.000.000
- Aluguel: R$ 18.000/mês
- Porcentagem: 18.000 ÷ 4.000.000 × 100 = 0.45%
- Resultado: Oportunidade (abaixo de 0.5%)
O sistema estima o valor do imóvel multiplicando a área pela média de preço por m² de imóveis à venda no mesmo condomínio.
- Scraping Multi-site: Busca simultânea em ZapImóveis, VivaReal e OLX
- Multi-navegador: Utiliza Chromium, Firefox e WebKit em paralelo
- Análise Automática: Calcula a porcentagem aluguel/valor para cada imóvel
- Sistema de Score: Pontua oportunidades com base em diversos critérios
- Notificações por E-mail: Alertas automáticos de novas oportunidades
- Dashboard Web: Interface visual para visualizar e filtrar oportunidades
- Persistência de Dados: Armazena histórico em JSON
- Deduplicação: Evita alertas repetidos para o mesmo imóvel
| Site | URL | Tipos de Busca |
|---|---|---|
| ZapImóveis | zapimoveis.com.br | Aluguel e Venda |
| VivaReal | vivareal.com.br | Aluguel e Venda |
| OLX | olx.com.br | Aluguel e Venda |
- Node.js 18 ou superior
- npm ou yarn
# Clonar o repositório
git clone https://github.com/seu-usuario/rentmonitor.git
cd rentmonitor
# Instalar dependências
npm install
# Instalar navegadores do Playwright
npx playwright install
# Configurar variáveis de ambiente
cp .env.example .env
# Edite o arquivo .env com suas configurações# API Key do Resend para envio de e-mails (grátis: 100 emails/dia)
# Obtenha em: https://resend.com/api-keys
RESEND_API_KEY=re_sua_chave_aqui
# E-mail(s) para receber notificações (separados por vírgula)
EMAIL_TO=seu-email@exemplo.comO sistema usa o Resend para envio de e-mails. É gratuito para até 100 e-mails por dia.
# Configurar e testar o e-mail
npm run setup-emailAs configurações de busca estão em src/types/index.ts:
export const DEFAULT_CONFIG: SearchConfig = {
city: 'Goiânia',
minRent: 10000, // Aluguel mínimo
maxRent: 20000, // Aluguel máximo
maxRentToValueRatio: 0.005, // 0.5% - ajuste conforme necessário
condominiums: LUXURY_CONDOMINIUMS_GOIANIA,
propertyTypes: ['casa'],
minArea: 200, // Área mínima em m²
maxArea: 1000, // Área máxima em m²
minBedrooms: 3, // Mínimo de quartos
furnished: true
};Para alterar o critério de oportunidade (ex: 0.4% ao invés de 0.5%):
maxRentToValueRatio: 0.004, // 0.4%Edite a lista de condomínios em src/types/index.ts:
export const LUXURY_CONDOMINIUMS_GOIANIA = [
'Goiânia Golf Clube',
'Alphaville Flamboyant',
// Adicione novos condomínios aqui
];Para monitorar imóveis em outra cidade, você precisará:
- Alterar
cityemDEFAULT_CONFIG - Atualizar os URLs de busca nos scrapers (
src/scrapers/) - Criar nova lista de condomínios para a cidade
- Atualizar os dados de referência de mercado em
src/utils/market-data.ts
Executa uma busca completa e exibe os resultados:
npm run devExecuta a busca e envia notificações por e-mail para novas oportunidades:
npm run monitorInicia um servidor web para visualizar as oportunidades:
npm run serve
# Acesse: http://localhost:3000Para executar automaticamente a cada hora:
# Editar crontab
crontab -e
# Adicionar linha (ajuste o caminho):
0 * * * * cd /caminho/para/rentmonitor && npm run monitor >> logs/cron.log 2>&1Ou use o script incluído:
./scripts/cron-monitor.sh| Comando | Descrição |
|---|---|
npm run dev |
Executa busca única completa |
npm run monitor |
Monitoramento com notificações |
npm run serve |
Inicia dashboard web na porta 3000 |
npm run setup-email |
Configura e testa envio de e-mail |
npm run test-email |
Envia e-mail de teste |
npm run cleanup |
Remove duplicatas dos dados |
npm run build |
Compila TypeScript |
npm run start |
Executa versão compilada |
rentmonitor/
├── src/
│ ├── index.ts # Busca única
│ ├── monitor.ts # Monitoramento contínuo
│ ├── types/ # Interfaces TypeScript
│ ├── scrapers/ # Scrapers por site
│ ├── services/ # Serviço de e-mail
│ ├── db/ # Persistência em JSON
│ └── utils/ # Funções auxiliares
├── public/
│ └── index.html # Dashboard web
├── scripts/
│ └── cron-monitor.sh # Script para cron
├── data/ # Dados gerados (gitignore)
└── logs/ # Logs de execução (gitignore)
O sistema calcula um score (0-100) para cada oportunidade:
| Critério | Pontos |
|---|---|
| Rent/Value Ratio baixo | Até 50 pts |
| Goiânia Golf Clube | +20 pts |
| Alphaville | +15 pts |
| Jardins | +10 pts |
| 5+ imóveis para comparação | +10 pts |
| Área > 300m² | +5 pts |
╔══════════════════════════════════════════════════════════════════╗
║ RENT MONITOR - Imóveis de Luxo ║
╚══════════════════════════════════════════════════════════════════╝
┌────────────────────────────────────────────────────────────────────┐
│ Alphaville Flamboyant │
├────────────────────────────────────────────────────────────────────┤
│ Aluguel: R$ 15.000/mês │
│ Área: 400 m² │
│ Valor estimado: R$ 4.000.000 │
│ Rent/Value Ratio: 0.38% │
│ Economia: R$ 5.000/mês vs máximo permitido │
│ Score: 45/100 │
└────────────────────────────────────────────────────────────────────┘
Quando não há imóveis à venda suficientes para calcular o preço médio, o sistema usa dados de referência de mercado configurados em src/utils/market-data.ts. Você pode atualizar esses valores conforme a realidade do mercado local.
- Nunca commite o arquivo
.env— ele está no.gitignore - Gere novas API keys antes de compartilhar o código
- Use variáveis de ambiente em produção
- Respeite os termos de serviço dos sites
- Não execute buscas com frequência excessiva
- Use delays adequados entre requisições (já configurados)
- Os scrapers podem precisar de atualização se os sites mudarem
- Atualize os dados de referência de mercado periodicamente
- Limpe dados antigos com
npm run cleanup
- TypeScript - Linguagem principal
- Playwright - Automação de navegadores
- Resend - Envio de e-mails
- chalk - Formatação de console
- cli-table3 - Tabelas no terminal
- ora - Spinners de loading
MIT License - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Por favor:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Aviso Legal: Este projeto é apenas para fins educacionais e de uso pessoal. Certifique-se de respeitar os termos de serviço dos sites utilizados.