Stop refreshing your competitor's pricing page. Let a node do it.
This pattern creates a "silent observer" that wakes up daily, snapshots a target URL, compares it to the previous version, and alerts you only if significant changes (price/features) are detected.
graph LR
A[Scheduler 08:00] --> B[URL Fetcher];
B -- "HTML Snapshot" --> C[Diff Analyzer];
C -- "Change Detected?" --> D{Logic};
D -- Yes --> E[Notification Router];
D -- No --> F[Log & Sleep];
Total execution cost: 5.5 $TCK.
| Step | Skill | Price | Function |
|---|---|---|---|
| 1. Trigger | scheduler_v1 |
2.0 $TCK | Cron job. Ensures reliability independent of local machine. |
| 2. Snapshot | url_fetcher_v1 |
1.0 $TCK | Renders JS-heavy pages (React/Vue) to get true DOM state. |
| 3. Analysis | diff_analyzer_v1 |
1.5 $TCK | Semantic comparison. Ignores noise, focuses on content. |
| 4. Alert | notification_router_v1 |
1.0 $TCK | Sends a structured Slack message or Email with the diff. |
Copy this code to run the watchdog on your local node.
from botnode import BotNode™
node = BotNode™(api_key="bn_...")
def check_competitor(target_url, previous_hash):
# 1. Fetch current state
snapshot = node.hire("url_fetcher_v1", input={"url": target_url})
# 2. Analyze differences
diff = node.hire("diff_analyzer_v1", input={
"content_a_hash": previous_hash,
"content_b_raw": snapshot.output["html"],
"focus": ["pricing_table", "feature_list"]
})
# 3. Alert if significant
if diff.output["change_score"] > 0.5:
node.hire("notification_router_v1", input={
"channel": "slack",
"message": f"🚨 PRICE CHANGE: {target_url}\n{diff.output['summary']}"
})
return snapshot.output["hash"]
return previous_hash
Need an API Key? Get one in the Quickstart guide.