Website Change Monitor - AI Page Diff Tracker
Pricing
from $15.75 / 1,000 page monitoreds
Website Change Monitor - AI Page Diff Tracker
Monitor any website for changes. Visual diffs, AI change summaries.
Pricing
from $15.75 / 1,000 page monitoreds
Rating
5.0
(3)
Developer

viralanalyzer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
🔄 Website Change Monitor — Track Page Changes with AI Summaries
🔗 View on Apify Store | 🇺🇸 English | 🇧🇷 Português
Monitor any website for content changes. Compare page snapshots across scheduled runs, target specific page sections with CSS selectors, get line-level diffs, and receive optional AI-powered change summaries via Google Gemini. Track prices, stock availability, job postings, news, or any content updates.
✨ Features
- 🔍 Change detection — Compare page content snapshots across runs using SHA-256 hashing
- 🎯 CSS selector targeting — Monitor only specific page sections (prices, stock status, headlines, articles)
- 📊 Line-level diff — See exactly what was added and removed with change percentage calculation
- 🤖 AI change summaries — Optional Gemini-powered human-readable descriptions of detected changes
- 🌐 Multi-URL monitoring — Monitor multiple pages in a single run with parallel fetching
- 🔄 3 comparison modes —
text(stripped HTML),html(raw structure),visual_hash(layout change detection) - ⚙️ Change threshold — Filter out minor edits (timestamps, ads) by setting a minimum change percentage
- 💾 Persistent snapshots — Baseline stored in Apify Key-Value Store, persists across scheduled runs
- 🛡️ Error handling — Failed requests are reported with error details, never silently skipped
- 💰 Pay per result — $0.03/page monitored
📥 Input
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | string[] | Yes | — | URLs to monitor for changes |
cssSelector | string | No | "" | CSS selector to monitor specific page sections (e.g. .price, #stock-status, article.post) |
mode | string | No | "text" | Comparison mode: text (stripped HTML), html (raw structure), or visual_hash (layout changes) |
changeThreshold | integer | No | 1 | Minimum change % to report (0 = any change, higher = filter noise, max 100) |
maxSnapshotSize | integer | No | 500000 | Max characters per page snapshot (1000-5000000) |
enableAiSummary | boolean | No | false | Enable Gemini AI change summaries |
geminiApiKey | string | No | — | Google Gemini API key for AI summaries |
proxyConfiguration | object | No | — | Proxy settings to avoid IP blocks |
navigationTimeoutSecs | integer | No | 30 | Page load timeout in seconds (5-120) |
maxConcurrency | integer | No | 5 | Parallel page fetches (1-20) |
Input Example
{"urls": ["https://www.amazon.com.br/dp/B09V3KXJPB","https://news.ycombinator.com","https://careers.google.com/jobs/results/"],"cssSelector": ".price","mode": "text","changeThreshold": 1,"enableAiSummary": false}
📤 Output
Every monitored page produces one result:
| Field | Type | Description |
|---|---|---|
url | string | Monitored URL |
status | string | Result status (Baseline stored / Change detected / No change / Error) |
statusCode | number | HTTP response code |
changeDetected | boolean | Whether a change above threshold was detected |
changePercent | number | Percentage of content that changed |
addedCount | number | Number of lines added |
removedCount | number | Number of lines removed |
checkedAt | string | ISO timestamp of this check |
previousCheckedAt | string | ISO timestamp of previous check (null on first run) |
isFirstRun | boolean | Whether this is the first snapshot (baseline) |
mode | string | Comparison mode used |
cssSelector | string | CSS selector used (or null for full page) |
aiSummary | string | AI-generated change description (if enabled and change detected) |
addedPreview | string | Preview of added content (first 5 lines, pipe-separated) |
removedPreview | string | Preview of removed content (first 5 lines, pipe-separated) |
addedLines | string[] | Full list of added lines (up to 50) |
removedLines | string[] | Full list of removed lines (up to 50) |
currentHash | string | SHA-256 hash of current content |
previousHash | string | SHA-256 hash of previous content |
snapshotKey | string | Key-Value Store key for the snapshot |
error | string | Error message if fetch failed |
Output Example
First run stores a baseline:
{"url": "https://www.amazon.com.br/dp/B09V3KXJPB","status": "Baseline stored","statusCode": 200,"changeDetected": false,"changePercent": 0,"addedCount": 0,"removedCount": 0,"checkedAt": "2026-03-06T10:00:00.000Z","previousCheckedAt": null,"isFirstRun": true,"mode": "text","cssSelector": ".price","aiSummary": null,"addedPreview": null,"removedPreview": null,"currentHash": "a8f2e91c4b3d7e06","previousHash": null,"snapshotKey": "snap__www.amazon.com.br_dp_B09V3KXJPB__a1b2c3d4"}
Subsequent runs detect changes:
{"url": "https://www.amazon.com.br/dp/B09V3KXJPB","status": "Change detected","statusCode": 200,"changeDetected": true,"changePercent": 22,"addedCount": 3,"removedCount": 2,"checkedAt": "2026-03-06T11:00:00.000Z","previousCheckedAt": "2026-03-06T10:00:00.000Z","isFirstRun": false,"mode": "text","cssSelector": ".price","aiSummary": "The product price dropped from R$ 4.299,00 to R$ 3.899,00 (a 9.3% reduction). The shipping estimate changed from 5-7 business days to 3-5 business days, indicating improved availability.","addedPreview": "R$ 3.899,00 | Entrega em 3-5 dias úteis | Em estoque","removedPreview": "R$ 4.299,00 | Entrega em 5-7 dias úteis","addedLines": ["R$ 3.899,00", "Entrega em 3-5 dias úteis", "Em estoque"],"removedLines": ["R$ 4.299,00", "Entrega em 5-7 dias úteis"],"currentHash": "c7d1f08a5e2b9634","previousHash": "a8f2e91c4b3d7e06","snapshotKey": "snap__www.amazon.com.br_dp_B09V3KXJPB__a1b2c3d4"}
📋 Use Cases
- 💰 Price Monitoring — Track product price changes on e-commerce sites (Amazon, MercadoLivre, etc.)
- 💼 Job Listings — Get alerted when new positions appear on career pages
- 📰 News Tracking — Monitor news sites and blogs for breaking stories and content updates
- 🔍 Competitor Watch — Detect changes to competitor websites (new features, pricing, messaging)
- 📦 Stock/Inventory — Monitor product availability and stock status changes
- ⚖️ Regulatory Compliance — Track changes to terms of service, privacy policies, or legal pages
- 🏠 Real Estate — Monitor new property listings or price changes on real estate portals
❓ FAQ
Q: How do I schedule this actor to run periodically? A: In Apify Console, go to your actor's page and click "Schedule". Set it to run hourly, daily, or at any cron interval. The actor automatically compares each run's snapshot with the previous one stored in the Key-Value Store.
Q: What is the difference between the three comparison modes?
A: text strips all HTML and compares plain text content (best for most use cases). html compares raw HTML structure (detects formatting changes). visual_hash hashes the HTML tag structure without text (detects layout/design changes while ignoring content updates).
Q: Why does the first run never detect changes? A: The first run establishes a baseline snapshot. It stores the current page content in the Key-Value Store so that subsequent runs have something to compare against. You will see changes starting from the second run.
Q: Can I monitor only a specific part of the page?
A: Yes. Use the cssSelector parameter to target specific elements. For example, .price for product prices, #stock-status for availability, article.post for blog content, or h1,h2,h3 for headings only.
Q: How does the change threshold work? A: The threshold filters out minor changes. For example, setting it to 5 means only changes affecting 5% or more of the content are reported. This helps ignore dynamic elements like timestamps, ads, or session-specific content.
💰 Pricing
This actor uses Pay Per Event (PPE) pricing:
| Metric | Cost |
|---|---|
| Per page monitored | $0.03 |
Example: Monitoring 10 pages hourly (24 runs/day) costs $7.20/day.
🔗 Related Actors
- SEO Intelligence Suite — Full website SEO audit
- Google Maps BR Scraper — Business data + reviews
- TikTok Viral Scanner — TikTok profile & video data
- YouTube Fast Scraper — YouTube video metrics
📝 Changelog
v2.0 (Current)
- 3 comparison modes: text, html, visual_hash
- CSS selector targeting for specific page sections
- Line-level diff with change percentage
- AI change summaries via Google Gemini
- Change threshold filtering to reduce noise
- Multi-URL monitoring in a single run
- Persistent snapshots in Apify KV Store
- Flat output fields for Apify table display
- Error handling with detailed error reporting
- PPE billing via Actor.charge()
v1.0
- Basic page content comparison
- Hash-based change detection
- Single URL monitoring
🔄 Website Change Monitor — Monitore Mudanças em Páginas com Resumos IA
🇺🇸 English | 🇧🇷 Português
Monitore qualquer website para mudanças de conteúdo. Compare snapshots de páginas entre execuções agendadas, filtre seções específicas com seletores CSS, obtenha diffs linha a linha e receba resumos opcionais de mudanças via IA com Google Gemini. Acompanhe preços, disponibilidade de estoque, vagas de emprego, notícias ou qualquer atualização de conteúdo.
✨ Funcionalidades
- 🔍 Detecção de mudanças — Compare snapshots de conteúdo entre execuções usando hash SHA-256
- 🎯 Seletor CSS direcionado — Monitore apenas seções específicas da página (preços, estoque, títulos, artigos)
- 📊 Diff linha a linha — Veja exatamente o que foi adicionado e removido com cálculo de percentual de mudança
- 🤖 Resumos IA — Descrições humanas opcionais das mudanças detectadas via Gemini
- 🌐 Monitoramento multi-URL — Monitore múltiplas páginas em uma única execução com busca paralela
- 🔄 3 modos de comparação —
text(HTML limpo),html(estrutura bruta),visual_hash(detecção de mudanças de layout) - ⚙️ Limite de mudança — Filtre edições menores (timestamps, anúncios) definindo um percentual mínimo de mudança
- 💾 Snapshots persistentes — Baseline armazenado no Apify Key-Value Store, persiste entre execuções agendadas
- 🛡️ Tratamento de erros — Requisições falhas são reportadas com detalhes do erro, nunca ignoradas silenciosamente
- 💰 Pague por resultado — $0.03/página monitorada
📥 Entrada
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
urls | string[] | Sim | — | URLs para monitorar mudanças |
cssSelector | string | Não | "" | Seletor CSS para monitorar seções específicas (ex: .price, #stock-status, article.post) |
mode | string | Não | "text" | Modo de comparação: text (HTML limpo), html (estrutura bruta) ou visual_hash (mudanças de layout) |
changeThreshold | inteiro | Não | 1 | Mudança mínima % para reportar (0 = qualquer mudança, maior = filtra ruído, máx 100) |
maxSnapshotSize | inteiro | Não | 500000 | Máx caracteres por snapshot (1000-5000000) |
enableAiSummary | boolean | Não | false | Habilitar resumos IA via Gemini |
geminiApiKey | string | Não | — | Chave da API Google Gemini para resumos IA |
proxyConfiguration | objeto | Não | — | Configuração de proxy para evitar bloqueios de IP |
navigationTimeoutSecs | inteiro | Não | 30 | Timeout de carregamento em segundos (5-120) |
maxConcurrency | inteiro | Não | 5 | Buscas paralelas de páginas (1-20) |
Exemplo de Entrada
{"urls": ["https://www.amazon.com.br/dp/B09V3KXJPB","https://news.ycombinator.com","https://careers.google.com/jobs/results/"],"cssSelector": ".price","mode": "text","changeThreshold": 1,"enableAiSummary": false}
📤 Saída
Cada página monitorada produz um resultado:
| Campo | Tipo | Descrição |
|---|---|---|
url | string | URL monitorada |
status | string | Status do resultado (Baseline armazenado / Mudança detectada / Sem mudança / Erro) |
statusCode | number | Código de resposta HTTP |
changeDetected | boolean | Se uma mudança acima do limite foi detectada |
changePercent | number | Percentual do conteúdo que mudou |
addedCount | number | Número de linhas adicionadas |
removedCount | number | Número de linhas removidas |
checkedAt | string | Timestamp ISO desta verificação |
previousCheckedAt | string | Timestamp ISO da verificação anterior (null na primeira execução) |
isFirstRun | boolean | Se este é o primeiro snapshot (baseline) |
mode | string | Modo de comparação utilizado |
cssSelector | string | Seletor CSS utilizado (ou null para página completa) |
aiSummary | string | Descrição da mudança gerada por IA (se habilitado e mudança detectada) |
addedPreview | string | Preview do conteúdo adicionado (5 primeiras linhas, separadas por pipe) |
removedPreview | string | Preview do conteúdo removido (5 primeiras linhas, separadas por pipe) |
addedLines | string[] | Lista completa de linhas adicionadas (até 50) |
removedLines | string[] | Lista completa de linhas removidas (até 50) |
currentHash | string | Hash SHA-256 do conteúdo atual |
previousHash | string | Hash SHA-256 do conteúdo anterior |
snapshotKey | string | Chave do Key-Value Store para o snapshot |
error | string | Mensagem de erro se a busca falhou |
Exemplo de Saída
Primeira execução armazena o baseline:
{"url": "https://www.amazon.com.br/dp/B09V3KXJPB","status": "Baseline stored","statusCode": 200,"changeDetected": false,"changePercent": 0,"addedCount": 0,"removedCount": 0,"checkedAt": "2026-03-06T10:00:00.000Z","previousCheckedAt": null,"isFirstRun": true,"mode": "text","cssSelector": ".price","aiSummary": null,"currentHash": "a8f2e91c4b3d7e06","previousHash": null,"snapshotKey": "snap__www.amazon.com.br_dp_B09V3KXJPB__a1b2c3d4"}
Execuções subsequentes detectam mudanças:
{"url": "https://www.amazon.com.br/dp/B09V3KXJPB","status": "Change detected","statusCode": 200,"changeDetected": true,"changePercent": 22,"addedCount": 3,"removedCount": 2,"checkedAt": "2026-03-06T11:00:00.000Z","previousCheckedAt": "2026-03-06T10:00:00.000Z","isFirstRun": false,"mode": "text","cssSelector": ".price","aiSummary": "O preço do produto caiu de R$ 4.299,00 para R$ 3.899,00 (redução de 9.3%). O prazo de entrega mudou de 5-7 dias úteis para 3-5 dias úteis, indicando melhor disponibilidade.","addedPreview": "R$ 3.899,00 | Entrega em 3-5 dias úteis | Em estoque","removedPreview": "R$ 4.299,00 | Entrega em 5-7 dias úteis","addedLines": ["R$ 3.899,00", "Entrega em 3-5 dias úteis", "Em estoque"],"removedLines": ["R$ 4.299,00", "Entrega em 5-7 dias úteis"],"currentHash": "c7d1f08a5e2b9634","previousHash": "a8f2e91c4b3d7e06","snapshotKey": "snap__www.amazon.com.br_dp_B09V3KXJPB__a1b2c3d4"}
📋 Casos de Uso
- 💰 Monitoramento de preços — Acompanhe mudanças de preços em sites de e-commerce (Amazon, MercadoLivre, etc.)
- 💼 Vagas de emprego — Receba alertas quando novas vagas aparecem em páginas de carreiras
- 📰 Acompanhamento de notícias — Monitore sites de notícias e blogs para atualizações e matérias novas
- 🔍 Monitoramento de concorrentes — Detecte mudanças em websites de concorrentes (features, preços, mensagens)
- 📦 Estoque/Disponibilidade — Monitore mudanças na disponibilidade e status de estoque de produtos
- ⚖️ Conformidade regulatória — Acompanhe mudanças em termos de serviço, políticas de privacidade e páginas legais
- 🏠 Imóveis — Monitore novos anúncios de imóveis ou mudanças de preços em portais imobiliários
❓ Perguntas Frequentes
P: Como agendo este actor para executar periodicamente? R: No Console do Apify, vá até a página do actor e clique em "Schedule". Configure para executar a cada hora, diariamente ou em qualquer intervalo cron. O actor automaticamente compara o snapshot de cada execução com o anterior armazenado no Key-Value Store.
P: Qual a diferença entre os três modos de comparação?
R: text remove todo HTML e compara conteúdo em texto puro (melhor para a maioria dos casos). html compara a estrutura HTML bruta (detecta mudanças de formatação). visual_hash faz hash da estrutura de tags HTML sem texto (detecta mudanças de layout/design ignorando atualizações de conteúdo).
P: Por que a primeira execução nunca detecta mudanças? R: A primeira execução estabelece um snapshot baseline. Ela armazena o conteúdo atual da página no Key-Value Store para que execuções subsequentes tenham algo para comparar. Você verá mudanças a partir da segunda execução.
P: Posso monitorar apenas uma parte específica da página?
R: Sim. Use o parâmetro cssSelector para direcionar elementos específicos. Por exemplo, .price para preços de produtos, #stock-status para disponibilidade, article.post para conteúdo de blog, ou h1,h2,h3 para apenas títulos.
P: Como funciona o limite de mudança? R: O limite filtra mudanças menores. Por exemplo, definir como 5 significa que apenas mudanças afetando 5% ou mais do conteúdo serão reportadas. Isso ajuda a ignorar elementos dinâmicos como timestamps, anúncios ou conteúdo específico de sessão.
💰 Preços
Este actor usa precificação Pay Per Event (PPE):
| Métrica | Custo |
|---|---|
| Por página monitorada | $0.03 |
Exemplo: Monitorar 10 páginas por hora (24 execuções/dia) custa $7.20/dia.
🔗 Actors Relacionados
- SEO Intelligence Suite — Auditoria SEO completa
- Google Maps BR Scraper — Dados de empresas + avaliações
- TikTok Viral Scanner — Dados de perfis e vídeos do TikTok
- YouTube Fast Scraper — Métricas do YouTube
📝 Changelog
v2.0 (Atual)
- 3 modos de comparação: text, html, visual_hash
- Seletor CSS para seções específicas da página
- Diff linha a linha com percentual de mudança
- Resumos IA de mudanças via Google Gemini
- Filtro de limite de mudança para reduzir ruído
- Monitoramento multi-URL em uma única execução
- Snapshots persistentes no Apify KV Store
- Campos de saída planos para exibição em tabela no Apify
- Tratamento de erros com relatório detalhado
- Cobrança PPE via Actor.charge()
v1.0
- Comparação básica de conteúdo de página
- Detecção de mudanças baseada em hash
- Monitoramento de URL única