
Um agente coleta preços, anúncios e vagas de vários serviços por agendamento, organiza tudo em uma tabela e avisa somente quando algo muda de verdade.
Você descreve a fonte uma vez: URL, paginação e campos necessários. O agente busca a página, o modelo extrai campos em um schema fixo, os registros são deduplicados por uma chave estável, o snapshot é salvo e o diff em relação à execução anterior é gravado.
- Tabelas: sources, runs, items, item_changes
- Edge function com fetch e limpeza de HTML para texto
- Extração estruturada com schema de campos rígido
- Execução agendada a cada poucas horas
- Alertas por e-mail ou webhook e exportação CSV
Venda monitoramento como assinatura por fonte: revendedores pagam por preços de concorrentes, recrutadores por vagas, agências por listas de leads. Intervalos curtos e API custam mais.
Um fim de semana
- Regras primeiro: leia o robots.txt e os termos do serviço, colete apenas páginas públicas e prefira a API oficial quando existir.
- Crie a tabela sources com url, padrão de paginação, dica de seletor, lista de campos, intervalo e flag de ativo. Uma linha é um serviço monitorado.
- Escreva a edge function fetch_source: carrega o HTML com user agent normal, remove scripts e estilos e corta o texto até o bloco das listagens.
- Envie esse texto ao modelo com schema JSON rígido (título, preço, moeda, link, data, raw_key) e temperatura zero. Valores ausentes ficam null.
- Deduplique por raw_key: faça upsert em items e, quando um campo monitorado mudar, insira uma linha em item_changes com o valor antigo e o novo.
- Adicione retentativas com backoff, limite de requisições por fonte e uma tabela runs com status, contagem e erro para ver seletor quebrado na hora.
- Agende a função pelo intervalo de cada fonte e envie um e-mail digest ou webhook apenas com as linhas novas de item_changes.
- Monte a interface: lista de fontes com selo de saúde, histórico de execuções, tabela de itens com filtros, feed de mudanças e botão de exportar CSV.
Build a scraping and monitoring agent. Data: table "sources" (name, url, pagination_pattern, selector_hint, fields jsonb, interval_minutes, active). Table "runs" (source_id, status, items_found, error, started_at, finished_at). Table "items" (source_id, raw_key unique per source, title, price numeric, currency, url, published_at, payload jsonb, first_seen_at, last_seen_at). Table "item_changes" (item_id, field, old_value, new_value, created_at). Server: an edge function that takes a source id, fetches the page with a normal user agent, strips scripts, styles and navigation, trims the text to the listing area, then asks the model to extract rows into a strict JSON schema with temperature zero and null for missing values. Upsert rows into items on raw_key and insert item_changes whenever a tracked field differs. Log every attempt into runs, retry twice with backoff on network errors and respect a per source rate limit. Follow pagination up to a configurable page limit. Automation: a scheduled job that picks active sources whose interval has elapsed, runs them one by one, then sends a digest email or webhook containing only item_changes created since the previous digest. UI: sources page with add and edit form, health badge from the last run, run history with error text, items table with search and filters, a change feed and a CSV export button. Rules: only public pages, honour robots.txt, keep all keys and model calls on the server, enable row level security so each user sees only their own sources and items.



















