Buscador de vagas de trabalho para desenvolvedores no Brasil
Um sistema de busca de vagas de emprego para desenvolvedores e notificações via apps de mensagens.
Num cenário onde as vagas de trabalho em desenvolvimento de software estão cada vez mais dispersas entre diversas plataformas e sites, este projeto surge como uma solução para centralizar a busca por oportunidades na área de tecnologia. Através da coleta automática de vagas de múltiplas fontes, o sistema oferece uma API unificada que permite aos usuários consultar e filtrar as vagas de acordo com seus critérios específicos, facilitando o processo de encontrar a vaga ideal.
A ideia é facilitar a vida de quem está procurando emprego na área de tecnologia, permitindo filtrar por critérios como localização, tipo de trabalho (remoto, híbrido, presencial) e palavras-chave, entre outras funcionalidades.
Esse sistema é composto por uma API REST que busca por novas vagas de trabalho periódicamente em fontes como Gupy e LinkedIn em background e notifica sobre as novas vagas encontradas via apps de mensagens como Telegram e Discord.
Os links de acesso ao sistema estão listados abaixo:
Important
O sistema está na sua fase inicial de desenvolvimento. Novas fontes e notificações em mensageiros podem adicionadas em breve. Caso queira contribuir com desenvolvimento, relatar bugs ou sugerir melhorias, sinta-se à vontade para abrir um PR ou issue com sua contribuição!
Para receber alerta das vagas encontradas pelo sistema faça parte do grupo de alerta no seu app mensageiro de preferência entre os listados abaixo:
O link de cada um é o link de convite para o grupo ou servidor.
- Busca periódica automática — scheduler configurável que roda em background e coleta novas vagas em intervalos definidos, sem intervenção manual
- Notificações — integração com Telegram e Discord para enviar alerta de novas vagas que correspondam a palavras-chave específicas
- Sem duplicação de vagas — vagas já registradas são ignoradas automaticamente, garantindo que o banco nunca acumule duplicatas, independente de quantas vezes o scheduler seja executado
- API REST centralizada — todas as vagas de todas as fontes acessíveis por um único endpoint, com filtros por palavra-chave, localização, tipo de trabalho e fonte
- Filtros disponíveis - busque vagas podendo filtrar pelas seguintes características:
- Palavra-chave — busca no título e descrição da vaga
- Localização — filtra por cidade ou estado (ex: "São Paulo", "Goiás")
- Tipo de trabalho — filtra por
remote,hybridouon-site - Fonte — filtra por plataforma de origem (ex:
gupy,linkedin, etc.) - Vagas para pessoas com deficiência — filtro específico para vagas que aceitam candidaturas de pessoas com deficiência
- Paginação — controle o número de resultados retornados e a partir de qual posição começar (limit/offset)
- Trigger manual de sync — é possível disparar uma sincronização sob demanda via endpoint, sem precisar esperar o próximo ciclo do scheduler
- Arquitetura extensível — adicionar uma nova fonte de vagas exige apenas criar um novo scraper herdando da classe base; toda a lógica de persistência e deduplicação já está pronta
- Interface Web - interface web desenvolvida com Next.js para visualização e busca das vagas encontradas pelo sistema.
| Fonte | Método | Status |
|---|---|---|
| Gupy | API | ✅ Disponível |
| Scraper | ✅ Disponível |
Novas fontes podem ser adicionadas criando um scraper que implementa
BaseJobScraper.
| Método | Rota | Descrição |
|---|---|---|
GET |
/jobs |
Lista vagas com filtros opcionais |
POST |
/jobs/sync/{source} |
Dispara sync manual de uma fonte |
GET |
/jobs/sources |
Lista fontes e quantidade de vagas por fonte |
GET |
/health |
Health check da aplicação |
| Parâmetro | Tipo | Descrição |
|---|---|---|
keyword |
string | Busca no título e descrição da vaga |
source |
string | Filtra por fonte (gupy, etc.) |
location |
string | Filtra por cidade ou estado |
workplace_type |
string | remote, hybrid ou on-site |
limit |
int | Máximo de resultados (padrão: 50) |
offset |
int | Paginação |
Caso queira adicionar uma nova fonte de vagas, siga os passos abaixo para adicionar um novo scraper:
- Crie um arquivo em
scrapers/minha_fonte.py - Herde de
BaseJobScrapere definasource_name - Implemente
fetch_jobs()retornando uma lista de dicts no formato do modelJob - Registre um job no
scheduler.pycom o intervalo desejado
from app.scrapers.base import BaseJobScraper
class MinhaFonteScraper(BaseJobScraper):
source_name = "minha_fonte"
async def fetch_jobs(self) -> list[dict]:
# sua lógica aqui
...- FastAPI — API REST assíncrona
- SQLAlchemy (async) — ORM e acesso ao banco de dados
- APScheduler — agendamento de tarefas em background
- httpx — cliente HTTP assíncrono para os scrapers
- Pydantic — validação e serialização de dados