Test
10.000 pagina's
US$ 3,75
US$ 0,38/1K pagina's
- Probeer het op je eigen URL's
- Dezelfde API als het grootste pack
- Credits verlopen nooit
Use case · monitoring · /batch
Ruwe HTML vergelijken geeft een alert telkens wanneer een advertentie of een token verandert. De hoofdinhoud als Markdown vergelijken markeert alleen wat een lezer zou opmerken: een nieuwe prijs, een herformuleerde clausule, een nieuwe changelog-regel.
Kort antwoord
Hoe kan ik webpagina's monitoren op inhoudswijzigingen?
Lees elke pagina volgens een schema als Markdown van de hoofdinhoud, sla de tekst op en vergelijk hem met de vorige versie; stuur alleen een alert wanneer de tekst verandert. WebReaderAPI leest tot 100 URL's per batch-job, verwijdert advertenties en menu's zodat die geen valse alarmen kunnen veroorzaken, en rekent één credit per pagina vanaf US$ 0,07/1K pagina's per oktober 2026. Zonder KYC; betalen met crypto.
| Endpoint | POST https://webreaderapi.com/api/v1/batch, dan GET https://webreaderapi.com/api/v1/jobs/{job_id} |
|---|---|
| Batchgrootte | Tot 100 URL's per batch-job |
| Wat wordt vergeleken | Markdown van de hoofdinhoud, zonder advertenties, menu's of banners |
| Facturering | 1 credit = 1 pagina lezen zonder browser; 2 credits wanneer de pagina een browser nodig heeft om JavaScript te renderen. Een verzoek dat mislukt, of dat de robots.txt van een site weigert, wordt niet in rekening gebracht |
| Voorbeeldvolume | 200 pagina's per dag gecontroleerd = ongeveer 6.000 pagina's per maand |
| Prijs | US$ 3,75 voor 10.000 pagina's; credits verlopen nooit |
Pagina's waarvan de formulering belangrijk is voor je bedrijf en die zonder aankondiging veranderen:
Houd de lijst bij openbare pagina's. Persoonlijke profielen en pagina's achter een login vallen buiten bereik.
Omdat HTML voortdurend verandert zonder dat de inhoud verandert. Wisselende advertenties, sessietokens, tijdstempels in footers en A/B-test-markup zorgen ervoor dat twee loads van dezelfde pagina verschillen. Een diff op HTML maakt van die ruis meldingen, en mensen stoppen met ze te lezen.
Markdown van de hoofdinhoud haalt het meeste van die ruis weg voordat je vergelijkt. Wat overblijft is de tekst die iemand leest: koppen, paragrafen, lijsten en tabellen. Een diff op die tekst is kort, leesbaar en een melding waard.
import difflib
import json
import os
import pathlib
import time
import requests
API = "https://webreaderapi.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]}
STORE = pathlib.Path("snapshots.json")
URLS = [
"https://example.com/pricing",
"https://example.com/legal/terms",
"https://example.com/changelog",
]
old = json.loads(STORE.read_text(encoding="utf-8")) if STORE.exists() else {}
job = requests.post(API + "/batch", headers=HEADERS, json={"urls": URLS}, timeout=60).json()
results, cursor, delay = [], None, 5
while True:
params = {"cursor": cursor} if cursor else {}
page = requests.get(API + "/jobs/" + job["job_id"], headers=HEADERS, params=params, timeout=60).json()
results += page.get("results", [])
cursor = page.get("next_cursor")
if page["status"] == "done" and not cursor:
break
if not cursor:
time.sleep(delay)
delay = min(delay * 2, 60)
new = dict(old)
for item in results:
if "markdown" not in item:
print("not read:", item["url"], item.get("error", {}).get("code"))
continue
before = old.get(item["url"], "")
if before and before != item["markdown"]:
diff = difflib.unified_diff(before.splitlines(), item["markdown"].splitlines(), lineterm="", n=0)
print("CHANGED:", item["url"])
print("\n".join(list(diff)[:40]))
new[item["url"]] = item["markdown"]
STORE.write_text(json.dumps(new, ensure_ascii=False), encoding="utf-8")
Controleer zo vaak als de pagina realistisch gezien verandert, en niet vaker. Dagelijks past bij prijspagina's en changelogs; wekelijks bij beleid en documentatie. Een pagina die elk uur wordt gelezen, vertelt je zelden meer dan één keer per dag, en kost 24 keer zoveel.
WebReaderAPI volgt robots.txt voor elke pagina en respecteert de Crawl-delay van een site bij crawl jobs. Pagina's die de site niet toestaat worden overgeslagen en niet in rekening gebracht, dus een strikte site valt gewoon uit je rapport. Vraag de eigenaar als je toegang nodig hebt tot een pagina die robots weigert.
Eén credit per pagina per controle. Enkele voorbeelden bij de prijzen van oktober 2026:
Pagina's die een browser nodig hebben gebruiken twee credits; stel render=false in voor pagina's waarvan je weet dat ze platte HTML zijn om het op één te houden.
Vermenigvuldig pagina's met controles per maand en kies dan een pack dat een paar maanden meegaat. Credits verlopen nooit.
10.000 pagina's
US$ 3,75
US$ 0,38/1K pagina's
50.000 pagina's
US$ 14,25
US$ 0,28/1K pagina's
100.000 pagina's
US$ 21,75
US$ 0,22/1K pagina's
In elk plan: Hoofdinhoud extraheren · JavaScript rendering wanneer nodig · Mislukte en geweigerde pagina's niet in rekening gebracht · Credits verlopen nooit
Nee. Het leest pagina's en retourneert Markdown; je script vergelijkt versies en verstuurt de melding per e-mail, chat of ticket. De code hierboven print de gewijzigde regels als startpunt.
Vergelijk Markdown van de hoofdinhoud, niet HTML, en verwijder regels waarvan je weet dat ze bij elke load veranderen, zoals "5 minuten geleden bijgewerkt", voordat je difft. De meeste wisselende elementen zijn al verwijderd door de extractie van de hoofdinhoud.
Ja. Met render=auto worden pagina's die leeg zijn zonder JavaScript in een browser gerenderd voor twee credits. Pagina's die zonder werken blijven op één.
Ja: voer een crawl job uit in plaats van een batch en vergelijk dan pagina voor pagina. Vergelijk bij grote sites eerst de lastmod-datums van de sitemap en lees alleen de pagina's opnieuw die zijn gewijzigd.
Vanaf US$ 0,07/1K pagina's · zonder KYC
Vraag een API-sleutel aan