
Ein Agent sammelt planmäßig Preise, Anzeigen und Jobs von mehreren Diensten, räumt alles in eine Tabelle und meldet sich nur bei echten Änderungen.
Du beschreibst eine Quelle einmal: URL, Pagination und benötigte Felder. Der Agent lädt die Seite, das Modell extrahiert Felder in ein festes Schema, Einträge werden über einen stabilen Key dedupliziert, ein Snapshot wird gespeichert und ein Diff zum letzten Lauf geschrieben.
- Tabellen: sources, runs, items, item_changes
- Edge Function mit Fetch und HTML-zu-Text-Bereinigung
- Strukturierte Extraktion mit strengem Feldschema
- Zeitplan alle paar Stunden
- Alerts per E-Mail oder Webhook plus CSV-Export
Monitoring als Abo pro Quelle verkaufen: Händler zahlen für Wettbewerbspreise, Recruiter für Job-Feeds, Agenturen für Lead-Listen. Kürzere Intervalle und API-Zugang kosten mehr.
Ein Wochenende
- Zuerst die Regeln: robots.txt und Nutzungsbedingungen lesen, nur öffentliche Seiten laden und eine offizielle API bevorzugen, wenn es eine gibt.
- Tabelle sources anlegen mit url, Pagination-Muster, Selector-Hinweis, Feldliste, Intervall und Aktiv-Flag. Eine Zeile ist ein beobachteter Dienst.
- Edge Function fetch_source schreiben: HTML mit normalem User Agent laden, Skripte und Styles entfernen und den Text auf den Listenbereich kürzen.
- Diesen Text mit strengem JSON-Schema (Titel, Preis, Währung, Link, Datum, raw_key) und Temperatur null an das Modell geben. Fehlende Werte bleiben null.
- Über raw_key deduplizieren: Upsert in items, und bei Abweichung eines beobachteten Feldes eine Zeile in item_changes mit alt und neu schreiben.
- Retries mit Backoff, ein Rate Limit pro Quelle und eine runs-Tabelle mit Status, Anzahl und Fehlertext ergänzen, damit ein kaputter Selektor sofort auffällt.
- Die Funktion je Quellintervall planen und dann eine Digest-Mail oder einen Webhook mit den neuen Zeilen aus item_changes senden.
- UI bauen: Quellenliste mit Status-Badge, Laufhistorie, filterbare Items-Tabelle, Änderungs-Feed und CSV-Export.
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.



















