Skip to content

alissonlinneker/rentmonitor-ai

Repository files navigation

RentMonitor

Sistema de monitoramento automatizado de imóveis de luxo para identificação de oportunidades de aluguel com excelente custo-benefício.

Sobre o Projeto

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.

Por que 0.5%?

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.

Funcionalidades

  • 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

Sites Suportados

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

Instalação

Pré-requisitos

  • Node.js 18 ou superior
  • npm ou yarn

Passos

# 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

Configuração

Arquivo .env

# 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.com

Configuração de E-mail (Opcional)

O 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-email

Configurações de Busca

As 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
};

Ajustando a Porcentagem Alvo

Para alterar o critério de oportunidade (ex: 0.4% ao invés de 0.5%):

maxRentToValueRatio: 0.004,  // 0.4%

Adicionando Regiões/Condomínios

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
];

Alterando Cidade/Estado

Para monitorar imóveis em outra cidade, você precisará:

  1. Alterar city em DEFAULT_CONFIG
  2. Atualizar os URLs de busca nos scrapers (src/scrapers/)
  3. Criar nova lista de condomínios para a cidade
  4. Atualizar os dados de referência de mercado em src/utils/market-data.ts

Uso

Busca Única

Executa uma busca completa e exibe os resultados:

npm run dev

Monitoramento Contínuo

Executa a busca e envia notificações por e-mail para novas oportunidades:

npm run monitor

Dashboard Web

Inicia um servidor web para visualizar as oportunidades:

npm run serve
# Acesse: http://localhost:3000

Automação com Cron

Para 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>&1

Ou use o script incluído:

./scripts/cron-monitor.sh

Scripts Disponíveis

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

Estrutura do Projeto

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)

Sistema de Score

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

Exemplo de Saída

╔══════════════════════════════════════════════════════════════════╗
║              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                                                      │
└────────────────────────────────────────────────────────────────────┘

Dados de Referência

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.

Recomendações

Segurança

  • 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

Uso Responsável

  • Respeite os termos de serviço dos sites
  • Não execute buscas com frequência excessiva
  • Use delays adequados entre requisições (já configurados)

Manutenção

  • 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

Tecnologias

  • 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

Licença

MIT License - veja o arquivo LICENSE para detalhes.

Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors