# Generate a new API key Source: https://docs.sitespy.app/api-reference/api-key-management/generate-a-new-api-key /api-reference/openapi.yaml post /generate_key Generate a new unique API key for accessing the API. This endpoint does not require authentication. Each API key is associated with a unique user account. **Rate Limiting**: This endpoint is rate-limited to prevent abuse. Excessive requests from the same IP address will result in a 429 Too Many Requests response. # Change password for authenticated user Source: https://docs.sitespy.app/api-reference/authentication/change-password-for-authenticated-user /api-reference/openapi.yaml post /auth/change-password Change the password for the currently authenticated user. Requires the current password for verification. # Create an ALTCHA signup challenge Source: https://docs.sitespy.app/api-reference/authentication/create-an-altcha-signup-challenge /api-reference/openapi.yaml get /auth/altcha-challenge Create a signed proof-of-work challenge for the signup form. The solved payload must be submitted as the `altcha` field when registering. # Get current user info Source: https://docs.sitespy.app/api-reference/authentication/get-current-user-info /api-reference/openapi.yaml get /auth/me Retrieve information about the currently authenticated user. Requires a valid API key in the x-api-key header. # Login or register via social/OAuth provider Source: https://docs.sitespy.app/api-reference/authentication/login-or-register-via-socialoauth-provider /api-reference/openapi.yaml post /auth/social-login Authenticate a user via a social login provider (e.g., Google). If the user already exists, returns their API key. If the user doesn't exist, auto-creates an account and returns the new API key. This endpoint is intended to be called server-side from the NextAuth callback. # Login to existing account Source: https://docs.sitespy.app/api-reference/authentication/login-to-existing-account /api-reference/openapi.yaml post /auth/login Authenticate with email and password to retrieve your API key. Use this API key for all subsequent authenticated requests. # Permanently delete user account Source: https://docs.sitespy.app/api-reference/authentication/permanently-delete-user-account /api-reference/openapi.yaml delete /auth/delete-account Permanently deletes the authenticated user's account and all associated data, including all watches, settings, notification configurations, and password reset tokens. This action cannot be undone. # Regenerate API key for authenticated user Source: https://docs.sitespy.app/api-reference/authentication/regenerate-api-key-for-authenticated-user /api-reference/openapi.yaml post /auth/regenerate-key Regenerate the API key for the currently authenticated user. The old key is invalidated and all watches are migrated to the new key. Only works for API keys linked to a user account. # Register a new user account Source: https://docs.sitespy.app/api-reference/authentication/register-a-new-user-account /api-reference/openapi.yaml post /auth/register Create a new user account with email and password. An API key is automatically generated and linked to the account. This API key can be used for all subsequent authenticated requests. Signup requires a solved ALTCHA proof-of-work payload from `/auth/altcha-challenge`. # Request a password reset Source: https://docs.sitespy.app/api-reference/authentication/request-a-password-reset /api-reference/openapi.yaml post /auth/forgot-password Request a password reset token for the given email address. Always returns success to avoid leaking whether an email is registered. # Resend account verification email Source: https://docs.sitespy.app/api-reference/authentication/resend-account-verification-email /api-reference/openapi.yaml post /auth/resend-verification Resend the account verification email. Requires authentication. Rate limited to one request per 60 seconds. # Reset password with token Source: https://docs.sitespy.app/api-reference/authentication/reset-password-with-token /api-reference/openapi.yaml post /auth/reset-password Reset the user's password using a valid reset token obtained from the forgot-password endpoint. Tokens expire after 1 hour. # Verify account email Source: https://docs.sitespy.app/api-reference/authentication/verify-account-email /api-reference/openapi.yaml get /auth/verify-email Verify a user's account email using the token sent via email. Returns an HTML page with the verification result. # Create a Lemon Squeezy checkout session Source: https://docs.sitespy.app/api-reference/billing/create-a-lemon-squeezy-checkout-session /api-reference/openapi.yaml post /billing/checkout Creates a hosted checkout URL for upgrading to a paid plan. # Get billing subscription status Source: https://docs.sitespy.app/api-reference/billing/get-billing-subscription-status /api-reference/openapi.yaml get /billing/status Returns the current subscription status and metadata. # Get customer billing portal URL Source: https://docs.sitespy.app/api-reference/billing/get-customer-billing-portal-url /api-reference/openapi.yaml get /billing/portal Returns the Lemon Squeezy customer portal URL for managing the subscription. # Lemon Squeezy webhook receiver Source: https://docs.sitespy.app/api-reference/billing/lemon-squeezy-webhook-receiver /api-reference/openapi.yaml post /billing/webhook Receives subscription lifecycle events from Lemon Squeezy. Called by Lemon Squeezy, not clients. # Create or replace the rating for an exact detected change Source: https://docs.sitespy.app/api-reference/change-feedback/create-or-replace-the-rating-for-an-exact-detected-change /api-reference/openapi.yaml put /watch/{uuid}/change-feedback/{to_timestamp} # Get the current rating for an exact detected change Source: https://docs.sitespy.app/api-reference/change-feedback/get-the-current-rating-for-an-exact-detected-change /api-reference/openapi.yaml get /watch/{uuid}/change-feedback/{to_timestamp} # Open the non-mutating signed feedback landing page Source: https://docs.sitespy.app/api-reference/change-feedback/open-the-non-mutating-signed-feedback-landing-page /api-reference/openapi.yaml get /change-feedback # Submit feedback using an exact signed change token Source: https://docs.sitespy.app/api-reference/change-feedback/submit-feedback-using-an-exact-signed-change-token /api-reference/openapi.yaml post /change-feedback # Enable email notifications (no auth) Source: https://docs.sitespy.app/api-reference/email-verification/enable-email-notifications-no-auth /api-reference/openapi.yaml get /email/enable Single-click enable using a token. Returns an HTML confirmation page. # Get email verification status Source: https://docs.sitespy.app/api-reference/email-verification/get-email-verification-status /api-reference/openapi.yaml get /email Get the current email address and verification status for your API key. # Resend verification email Source: https://docs.sitespy.app/api-reference/email-verification/resend-verification-email /api-reference/openapi.yaml post /email/resend Resend the verification email for the email address associated with your API key. # Set, update, or disable email address Source: https://docs.sitespy.app/api-reference/email-verification/set-update-or-disable-email-address /api-reference/openapi.yaml post /email Set or update the email address for your API key. A verification email will be sent to the provided address. The email must be verified before notifications can be sent. To disable email notifications, send an empty string for the email field. # Unsubscribe from email notifications (no auth) Source: https://docs.sitespy.app/api-reference/email-verification/unsubscribe-from-email-notifications-no-auth /api-reference/openapi.yaml get /email/unsubscribe Single-click unsubscribe using a token. Returns an HTML confirmation page. # Verify email address Source: https://docs.sitespy.app/api-reference/email-verification/verify-email-address /api-reference/openapi.yaml get /email/verify Verify an email address using the token from the verification email. This endpoint does not require authentication as the token serves as proof. # Get watch favicon Source: https://docs.sitespy.app/api-reference/favicon/get-watch-favicon /api-reference/openapi.yaml get /watch/{uuid}/favicon Get the favicon for a web page change monitor (watch) as displayed in the watch overview list. # Get feature flags Source: https://docs.sitespy.app/api-reference/feature-flags/get-feature-flags /api-reference/openapi.yaml get /feature-flags Retrieve the feature flags for the current API key. Feature flags control which features are enabled or disabled for specific users. # Submit the PMF (Sean Ellis) survey Source: https://docs.sitespy.app/api-reference/feedback/submit-the-pmf-sean-ellis-survey /api-reference/openapi.yaml post /feedback/pmf Records a one-time Product-Market-Fit survey response for the authenticated user. Returns 409 if the user has already submitted. # Import watch URLs with configuration Source: https://docs.sitespy.app/api-reference/import/import-watch-urls-with-configuration /api-reference/openapi.yaml post /import Import a list of URLs to monitor with optional watch configuration. Accepts line-separated URLs in request body. **Configuration via Query Parameters:** You can pass ANY watch configuration field as query parameters to apply settings to all imported watches. All parameters from the Watch schema are supported (processor, fetch_backend, notification_urls, etc.). **Special Parameters:** - `tag` / `tag_uuids` - Assign tags to imported watches - `proxy` - Use specific proxy for imported watches - `dedupe` - Skip duplicate URLs (default: true) **Type Conversion:** - Booleans: `true`, `false`, `1`, `0`, `yes`, `no` - Arrays: Comma-separated or JSON format (`[item1,item2]`) - Objects: JSON format (`{"key":"value"}`) - Numbers: Parsed as int or float # Site Spy API Source: https://docs.sitespy.app/api-reference/introduction Automate watch management, retrieve change history, and integrate Site Spy into your own tools with the REST API. The Site Spy API gives you programmatic access to everything the dashboard can do: create and manage watches, organize tags, read change history and snapshots, configure notifications, and more. ## Base URL ```text theme={null} https://api.sitespy.app/api/v1 ``` ## Authentication Almost all requests require an API key, sent in the `x-api-key` header: ```bash theme={null} curl -H "x-api-key: YOUR_API_KEY" \ https://api.sitespy.app/api/v1/watch ``` You can also pass it as a `key` query parameter (`?key=YOUR_API_KEY`) when setting headers isn't practical — for example in RSS readers. Get your API key from [Settings → API & Monitoring](https://sitespy.app/dashboard/settings?tab=api) in the Site Spy dashboard and use the **Copy Key** button to copy it to your clipboard. ## Quick examples ```bash curl theme={null} # List all your watches curl -H "x-api-key: YOUR_API_KEY" \ https://api.sitespy.app/api/v1/watch # Create a new watch curl -X POST -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com", "title": "Example"}' \ https://api.sitespy.app/api/v1/watch ``` ```python Python theme={null} import requests API_KEY = "YOUR_API_KEY" BASE = "https://api.sitespy.app/api/v1" # List all watches resp = requests.get(f"{BASE}/watch", headers={"x-api-key": API_KEY}) watches = resp.json() ``` ```javascript JavaScript theme={null} const API_KEY = "YOUR_API_KEY"; const BASE = "https://api.sitespy.app/api/v1"; // List all watches const res = await fetch(`${BASE}/watch`, { headers: { "x-api-key": API_KEY }, }); const watches = await res.json(); ``` ## Rate limits Rate limits are enforced per API key. Exceeding the limit returns HTTP `429`. The [MCP server](/docs/dashboard/mcp-integration) uses the same limits. ## MCP integration Prefer talking to your watches from Claude, Cursor, or another AI assistant? Site Spy ships an MCP server that wraps this API — see [MCP Integration](/docs/dashboard/mcp-integration). ## Explore the endpoints Every endpoint is documented in this section with an interactive playground — pick one from the sidebar, plug in your API key, and send real requests from the browser. # Add notification URLs Source: https://docs.sitespy.app/api-reference/notifications/add-notification-urls /api-reference/openapi.yaml post /notifications Add one or more notification URLs to the configuration # Delete notification URLs Source: https://docs.sitespy.app/api-reference/notifications/delete-notification-urls /api-reference/openapi.yaml delete /notifications Delete one or more notification URLs from the configuration # Get notification URLs Source: https://docs.sitespy.app/api-reference/notifications/get-notification-urls /api-reference/openapi.yaml get /notifications Return the notification URL list from the configuration # Replace notification URLs Source: https://docs.sitespy.app/api-reference/notifications/replace-notification-urls /api-reference/openapi.yaml put /notifications Replace all notification URLs with the provided list (can be empty) # Send a test notification Source: https://docs.sitespy.app/api-reference/notifications/send-a-test-notification /api-reference/openapi.yaml post /notifications/test Send a test notification to verify webhook URL(s) are configured correctly. Available on all plans. # Get current plan and usage Source: https://docs.sitespy.app/api-reference/plan/get-current-plan-and-usage /api-reference/openapi.yaml get /plan Returns the subscription plan, limits, and watch usage for the authenticated API key. # Generate RSS feed token Source: https://docs.sitespy.app/api-reference/rss-feeds/generate-rss-feed-token /api-reference/openapi.yaml post /rss Generate (or regenerate) a personal RSS feed token. This token is used in RSS feed URLs to authenticate access. Only watches owned by this user will appear in the feeds. Feed URLs use the format: `{server}/rss?token={rss_token}` # Get RSS feed settings Source: https://docs.sitespy.app/api-reference/rss-feeds/get-rss-feed-settings /api-reference/openapi.yaml get /rss Get the current user's RSS feed token and status. Use the returned token to construct RSS feed URLs for use in any RSS reader. # Revoke RSS feed token Source: https://docs.sitespy.app/api-reference/rss-feeds/revoke-rss-feed-token /api-reference/openapi.yaml delete /rss Revoke the RSS feed token, disabling all RSS feed access for this user. # Get screenshot history timestamps Source: https://docs.sitespy.app/api-reference/screenshots/get-screenshot-history-timestamps /api-reference/openapi.yaml get /watch/{uuid}/screenshot/history Returns the list of screenshot timestamps available for a watch with screenshot monitoring enabled. # Search watches Source: https://docs.sitespy.app/api-reference/search/search-watches /api-reference/openapi.yaml get /search Search web page change monitors (watches) by URL or title text # Get single snapshot Source: https://docs.sitespy.app/api-reference/snapshots/get-single-snapshot /api-reference/openapi.yaml get /watch/{uuid}/history/{timestamp} Get single snapshot from web page change monitor (watch). Use 'latest' for the most recent snapshot. Use the Watch History API to get a list of timestamps to pass. # Get system information Source: https://docs.sitespy.app/api-reference/system-information/get-system-information /api-reference/openapi.yaml get /systeminfo Return information about the current system state # List available proxies Source: https://docs.sitespy.app/api-reference/system-information/list-available-proxies /api-reference/openapi.yaml get /proxies Proxies a watch can be checked from, for the `proxy` field. Keys and labels only; proxy URLs are never returned. # Create tag Source: https://docs.sitespy.app/api-reference/tag-management/create-tag /api-reference/openapi.yaml post /tag Create a single tag/group # Delete tag Source: https://docs.sitespy.app/api-reference/tag-management/delete-tag /api-reference/openapi.yaml delete /tag/{uuid} Delete a tag/group and remove it from all web page change monitors (watches) # Get single tag Source: https://docs.sitespy.app/api-reference/tag-management/get-single-tag /api-reference/openapi.yaml get /tag/{uuid} Retrieve tag information, set notification_muted status, recheck all web page change monitors (watches) in tag. # List all tags Source: https://docs.sitespy.app/api-reference/tag-management/list-all-tags /api-reference/openapi.yaml get /tags Return list of available tags/groups # Update tag Source: https://docs.sitespy.app/api-reference/tag-management/update-tag /api-reference/openapi.yaml put /tag/{uuid} Update an existing tag using JSON # Generate Telegram connect link Source: https://docs.sitespy.app/api-reference/telegram-notifications/generate-telegram-connect-link /api-reference/openapi.yaml post /telegram Generate a deep-link URL for connecting your Telegram account. Open the returned link in Telegram and tap Start to complete the connection. # Get Telegram connection status Source: https://docs.sitespy.app/api-reference/telegram-notifications/get-telegram-connection-status /api-reference/openapi.yaml get /telegram Get the current Telegram connection status for your API key, including any pending link. # Remove Telegram notifications Source: https://docs.sitespy.app/api-reference/telegram-notifications/remove-telegram-notifications /api-reference/openapi.yaml delete /telegram Disconnect Telegram and stop receiving notifications. # Send a test Telegram message Source: https://docs.sitespy.app/api-reference/telegram-notifications/send-a-test-telegram-message /api-reference/openapi.yaml post /telegram/test Send a test notification to verify Telegram is configured correctly. # Telegram webhook endpoint Source: https://docs.sitespy.app/api-reference/telegram-notifications/telegram-webhook-endpoint /api-reference/openapi.yaml post /telegram/webhook Receives updates from the Telegram Bot API. This endpoint is called by Telegram when users interact with the bot (e.g. /start command). Not intended for direct use. # Get user-specific settings Source: https://docs.sitespy.app/api-reference/user-settings/get-user-specific-settings /api-reference/openapi.yaml get /settings/user Retrieve the authenticated user's custom settings, including recheck interval preferences and email notification settings. # Send a test email notification Source: https://docs.sitespy.app/api-reference/user-settings/send-a-test-email-notification /api-reference/openapi.yaml post /settings/user/test-email Send a test email to verify email notification settings are configured correctly. # Update user-specific settings Source: https://docs.sitespy.app/api-reference/user-settings/update-user-specific-settings /api-reference/openapi.yaml put /settings/user Update the authenticated user's custom settings, such as default recheck interval for new watches, email notification preferences, and global ignore patterns. # Get a screenshot for a watch at a specific timestamp Source: https://docs.sitespy.app/api-reference/visual-diff/get-a-screenshot-for-a-watch-at-a-specific-timestamp /api-reference/openapi.yaml get /watch/{uuid}/screenshot/{timestamp} Returns the screenshot image (PNG/JPEG) for a watch that uses the `image_ssim_diff` processor. Requires Pro plan. # Get rendered diff overlay image Source: https://docs.sitespy.app/api-reference/visual-diff/get-rendered-diff-overlay-image /api-reference/openapi.yaml get /watch/{uuid}/screenshot/diff Returns a rendered diff image (JPEG) showing changed areas highlighted in red. Compares two screenshot snapshots using OpenCV. Requires Pro plan. # Get visual diff metadata Source: https://docs.sitespy.app/api-reference/visual-diff/get-visual-diff-metadata /api-reference/openapi.yaml get /watch/{uuid}/screenshot/diff/metadata Returns metadata about the visual diff comparison including change percentage, threshold setting, and available versions. Requires Pro plan. # Get the difference between two snapshots Source: https://docs.sitespy.app/api-reference/watch-history/get-the-difference-between-two-snapshots /api-reference/openapi.yaml get /watch/{uuid}/difference/{from_timestamp}/{to_timestamp} Generate a difference (comparison) between two historical snapshots of a web page change monitor (watch). This endpoint compares content between two points in time and returns the differences in your chosen format. Perfect for reviewing what changed between specific versions or comparing recent changes. **Timestamp Keywords:** - Use `'latest'` for the most recent snapshot (to_timestamp) - Use `'previous'` for the second-most-recent snapshot (from_timestamp) - Or use specific Unix timestamps from the watch history **Format Options:** - `text` (default): Plain text with (removed) and (added) prefixes - `html`: HTML format with (removed) and (added) text - `htmlcolor`: Rich HTML with colored highlights (green for additions, red for deletions) **Word-Level Diffing:** - Enable word-level granularity with `word_diff=true` for detailed inline comparisons - Disable with `word_diff=false` for line-level comparisons only (default false/off, line-level mode by default) **Raw Diff Output:** - Use `no_markup=true` to get raw diff content without any formatting applied - Returns content with placeholders for opening/closing tags of changes - Allows you to implement your own custom colorisation or formatting - Skips all HTML color application and service tweaks (added text, html color tags, etc) # Get watch history Source: https://docs.sitespy.app/api-reference/watch-history/get-watch-history /api-reference/openapi.yaml get /watch/{uuid}/history Get a list of all historical snapshots available for a web page change monitor (watch), use the key `timestamp` as the query argument for fetching a single watch history snapshot. # Create a new watch Source: https://docs.sitespy.app/api-reference/watch-management/create-a-new-watch /api-reference/openapi.yaml post /watch Create a single web page change monitor (watch). Requires at least `url` to be set. Every watch can be configured with: - **Processor mode**: `processor` field (`restock_diff` or `text_json_diff` - default) - **Notification settings**: `notification_urls` (array), `notification_title`, `notification_body`, `notification_format`, `notification_muted` - **Tags/Groups**: `tag` (UUID string) or `tags` (array of UUIDs) - **Check settings**: `time_between_check`, `paused`, `method`, `fetch_backend` - **Advanced options**: `headers`, `body`, `proxy`, `browser_steps`, and more # Delete watch Source: https://docs.sitespy.app/api-reference/watch-management/delete-watch /api-reference/openapi.yaml delete /watch/{uuid} Delete a web page change monitor (watch) and all related history # Get single watch Source: https://docs.sitespy.app/api-reference/watch-management/get-single-watch /api-reference/openapi.yaml get /watch/{uuid} Retrieve web page change monitor (watch) information and set muted/paused status. Returns the FULL Watch JSON. # List all watches Source: https://docs.sitespy.app/api-reference/watch-management/list-all-watches /api-reference/openapi.yaml get /watch Return concise list of available web page change monitors (watches) and basic info # Update watch Source: https://docs.sitespy.app/api-reference/watch-management/update-watch /api-reference/openapi.yaml put /watch/{uuid} Update an existing web page change monitor (watch) using JSON. Accepts the same structure as returned in [get single watch information](#operation/getWatch). # Get the public VAPID key Source: https://docs.sitespy.app/api-reference/web-push-notifications/get-the-public-vapid-key /api-reference/openapi.yaml get /webpush/vapid-key Returns the server's public VAPID key needed to subscribe to push notifications. # Get web push subscription status Source: https://docs.sitespy.app/api-reference/web-push-notifications/get-web-push-subscription-status /api-reference/openapi.yaml get /webpush/subscription Check whether the current API key has any active push subscriptions. # Remove push subscription(s) Source: https://docs.sitespy.app/api-reference/web-push-notifications/remove-push-subscriptions /api-reference/openapi.yaml delete /webpush/subscription Remove a specific push subscription by endpoint, or remove all subscriptions if no endpoint is provided. # Save a push subscription Source: https://docs.sitespy.app/api-reference/web-push-notifications/save-a-push-subscription /api-reference/openapi.yaml post /webpush/subscription Store a browser push subscription for the current API key. # Send a test push notification Source: https://docs.sitespy.app/api-reference/web-push-notifications/send-a-test-push-notification /api-reference/openapi.yaml post /webpush/test Send a test push notification to all subscribed browsers. # Acknowledgements Source: https://docs.sitespy.app/docs/acknowledgements Open source projects that Site Spy is built on Site Spy's detection engine is built on top of [changedetection.io](https://github.com/dgtlmoon/changedetection.io), an excellent open source website change detection tool. The core functionality — page fetching, diffing, and change detection — comes from their project. What Site Spy adds on top: * Browser extension with a visual element picker * Browser-first workflow (install, connect, click what you want to watch) * Hosted multi-user infrastructure with per-user API keys * Billing and plan management * MCP server for AI agent integrations * Extended notification system (email, Telegram, browser push) changedetection.io is actively maintained and free to self-host. If you prefer running your own instance, check out their project directly. # AI Chat Source: https://docs.sitespy.app/docs/dashboard/ai-chat Manage watches and check changes through natural language The AI Chat at [sitespy.app/chat](https://sitespy.app/chat) is a conversational assistant that can create watches, check changes, adjust their settings, get summaries, and more — all through natural language. One thing it deliberately cannot do is decide what a watch follows. That anchor is set by pointing at the page in the [picker](/docs/dashboard/element-picker), which opens inside the conversation on the watch card. ## What it can do **Watch management** * Create new watches from a URL * Search and find existing watches * Adjust ignore patterns, trigger text and the check interval * Open the picker so you can point at what a watch should follow, without leaving the conversation * Trigger manual rechecks * Generate share links **Change monitoring** * Show what changed across all watches * Get the diff for a specific watch * View snapshot history and timelines * Get the latest page content **Account info** * Check your current plan, usage, and limits * Generate RSS feed URLs for watches ## Usage limits | Plan | Messages per day | | ------------------------- | ---------------- | | Anonymous (not signed in) | 5 | | Free / Pro Trial | 15 | | Starter | 50 | | Pro | 200 | | Business | 500 | ## Example prompts * "Track the price on [https://example.com/product](https://example.com/product) and tell me when it drops" * "What changed on my watches recently?" * "Give me an overview of all my watches" * "Monitor [https://boards.greenhouse.io/anthropic](https://boards.greenhouse.io/anthropic) for new job postings" * "Show the diff for my Amazon watch" * "Recheck my watches" ## How watch creation works When you give the assistant a URL: 1. It searches your existing watches so it doesn't propose a duplicate 2. It checks whether the URL is reachable 3. It shows you a watch card with a button — **the watch is not created until you click it** 4. Once you click it, the picker opens on that card: the page is rendered as it actually looks and you click the part you want watched. Until you do, the watch follows the whole page and will report every timestamp and banner on it If the initial URL check gets blocked (403), the assistant will still offer to create the watch — Site Spy's backend uses a real browser (Playwright) that often succeeds where simple HTTP checks fail. ## Limitations * The assistant cannot choose or write a watch's anchor. Selectors it guesses from page text are what made watches noisy, so the anchor comes from the picker only * Notification setup (email, Telegram, webhooks, push) must be done in the [dashboard settings](https://sitespy.app/dashboard/settings) — the chat cannot configure notifications * The assistant cannot delete or pause watches * Response length is capped for readability — for full snapshot content, use the dashboard ## Conversation history Chats are saved to your account and listed in the sidebar, so you can reopen an earlier conversation or continue it later. Each conversation has its own link. Delete one from the sidebar when you no longer want it stored. # AI Features Source: https://docs.sitespy.app/docs/dashboard/ai-features AI-powered change summaries, smart filters, and chat assistant Site Spy integrates AI throughout the product — from optional noise reduction to a conversational assistant that manages your monitors. Some features use a server-side AI model at no cost to you, while others use your own API key. What a watch follows is not one of them. That is chosen by pointing at the page in the [picker](/docs/dashboard/element-picker), and no AI feature overwrites a choice made that way. ## AI Chat A conversational assistant at [sitespy.app/chat](https://sitespy.app/chat) that can create watches, check changes, adjust their settings, and more — all through natural language. It opens the picker for you rather than choosing an anchor itself. Available to all users with daily message limits based on your plan. See [AI Chat](/docs/dashboard/ai-chat) for the full guide. ## Smart Filters Off by default. When you turn it on, Site Spy analyzes new watches and applies noise-reduction filters — removing timestamps, cookie banners, visitor counters, and other dynamic content that causes false notifications. This uses a server-side AI model at no cost to you. See [Smart Filters](/docs/dashboard/smart-filters) for setup and details. ## AI Change Summaries (BYOK) Bring your own API key to get plain-language summaries of what changed on your watches. Instead of reading raw diffs, you get a short explanation like "The product price dropped from $49 to $39." AI change summaries require the **Pro** or **Business** plan and your own API key. ### Supported providers | Provider | Key format | Console | | ------------------ | ------------ | -------------------------------------------------------------------- | | Anthropic (Claude) | `sk-ant-...` | [console.anthropic.com](https://console.anthropic.com/settings/keys) | | OpenAI (GPT) | `sk-...` | [platform.openai.com](https://platform.openai.com/api-keys) | | Google (Gemini) | `AI...` | [aistudio.google.com](https://aistudio.google.com/apikeys) | ### Setup 1. Go to [Dashboard Settings](https://sitespy.app/dashboard/settings) and open the **API & Monitoring** tab 2. In the **AI Features** section, select your provider from the dropdown 3. Paste your API key and click **Save key** Once saved, the section shows a masked version of your key and an "AI features active" status. ### Cost This is a bring-your-own-key (BYOK) feature — you pay your provider directly for API usage. Costs depend on your number of watches and how frequently they detect changes. ### When your provider runs out of credit If your provider reports an out-of-credit or quota error, Site Spy stops calling your key for 15 minutes and skips summaries for checks in that window. Change detection and notifications are unaffected — only the summary is missing. Top the account up and summaries resume by themselves. ### Removing your key Click **Remove key** in the AI Features section. AI features stop immediately and no further API calls are made with your key. ## Security * Your API key is stored securely on the server and is never exposed in full after saving * The key is only used to make API calls for your watches — it's not shared or used for any other purpose * You can remove the key at any time # Plans and Billing Source: https://docs.sitespy.app/docs/dashboard/billing Site Spy pricing plans, features, and account management ## Plans | Feature | Free | Starter (€4/mo) | Pro (€8/mo) | Business (€99/mo) | | ------------------------ | ----------- | --------------- | ---------------------------------------------- | ----------------- | | Watched URLs | 2 | 25 | 100 | 500 | | Check interval | 1 hour | 10 minutes | 10-minute default; 10 fast watches at 1 minute | 1 minute | | Snapshots per watch | 8 | 25 | 100 | 500 | | Snapshot history | 30 days | 90 days | 1 year | 1 year | | Manual rechecks/day | 3 | 10 | 25 | 100 | | API write requests/day | 100 | 1,000 | 10,000 | 50,000 | | MCP access | Full | Full | Full | Full | | Screenshot capture | No | No | Yes | Yes | | AI change summaries | No | No | Yes (BYOK) | Yes (BYOK) | | Browser steps | No | No | Yes | Yes | | Email notifications | Yes | Yes | Yes | Yes | | Telegram notifications | Yes | Yes | Yes | Yes | | Push notifications | Yes | Yes | Yes | Yes | | 90+ webhook integrations | Yes | Yes | Yes | Yes | | RSS change feeds | Yes | Yes | Yes | Yes | | Import / Export | Export only | Yes | Yes | Yes | | Team seats | No | No | No | 5 | | Shared watches | No | No | No | Yes | | Visual diffs | No | No | Yes | Yes | | Timeline history | Yes | Yes | Yes | Yes | | Cross-device sync | Yes | Yes | Yes | Yes | | Element monitoring | Yes | Yes | Yes | Yes | | Browser extension | Yes | Yes | Yes | Yes | | Web dashboard | Yes | Yes | Yes | Yes | Reading data through the API or MCP does not count against the daily quota — only writes (creating, updating, and deleting watches) do. Bulk import requires Starter or above; exporting your watches is available on every plan. ## Free trial New accounts can start a **5-day Pro trial** from the dashboard sidebar ("Try Pro free"). It requires a verified email address and can be used once per email address, ever. During the trial your plan shows as **Free (Pro features)**, and the billing page counts down the days remaining. The trial unlocks Pro *features* — screenshot capture, visual diffs, AI change summaries — but keeps Free *resource* limits: 10 watches, 1-hour checks, 8 snapshots per watch, 30-day history, 3 manual rechecks a day. It is a way to see what Pro does, not how fast Pro runs. You can end it early with **Cancel trial** on the billing page, which returns you to the Free plan immediately. ## Managing your plan 1. Go to [Dashboard Settings](https://sitespy.app/dashboard/settings) 2. Your current plan is shown in the **Account** tab under your profile 3. Click **Manage plan** to view upgrade options, or go directly to the [Billing page](https://sitespy.app/dashboard/billing) ## Upgrading Select a plan on the billing page and complete payment. Your new limits take effect immediately — existing watches start using the new check intervals on their next scheduled check. ## Downgrading If you downgrade to a plan with fewer watches, watches beyond the limit stop being checked but are not deleted. Your **oldest** watches keep running, so it is the most recently created ones that go quiet. The dashboard shows a banner naming how many watches are over the limit, with a link to a filtered view so you can pick which ones to keep. Delete or pause the ones you don't need and the rest resume on their next check. Manual recheck limits and API rate limits adjust to the new plan immediately. When a paid plan or a Pro trial ends, Site Spy sends one final notification through every channel you had configured and then clears them: per-watch notification URLs, your account-level webhook URLs, and screenshot capture are all switched off. Re-add your webhook and notification destinations after upgrading again — they are not restored automatically. # Browser Steps Source: https://docs.sitespy.app/docs/dashboard/browser-steps Monitor pages that require login or user interactions Browser Steps let you automate interactions before Site Spy captures a snapshot — like logging in, accepting cookie consent, or navigating through a single-page app. This is how you monitor pages that aren't accessible with a simple page load. Browser Steps require the **Pro** or **Business** plan. Dashboard UI for configuring browser steps is **coming soon** — currently available via the [API](/docs/dashboard/mcp-integration) only. ## How it works Site Spy normally fetches pages with a simple HTTP request. When you configure browser steps, it instead uses a full browser (Playwright) that can: 1. Execute your defined steps (click buttons, fill forms, wait for elements) 2. Reach the target content 3. Capture the snapshot This runs on every check, so your watch can continuously monitor login-protected or interaction-dependent content. ## Current status Browser steps are fully supported on the backend and can be configured via the API. A visual editor in the dashboard is planned for a future release. ## Use cases * **Login-protected pages** — Fill in credentials to access dashboard data, account pages, or gated content * **Cookie consent** — Click "Accept" on GDPR/cookie banners before capturing content * **Single-page apps** — Navigate through JavaScript-rendered pages that require clicks to load content * **Multi-step navigation** — Click through menus or tabs to reach the specific content you want to monitor ## Fetch backend For browser steps to work, the watch must use the browser-based fetcher (`html_webdriver`) instead of the default plain HTTP fetcher. This is set automatically when you configure browser steps or enable [screenshot capture](/docs/dashboard/screenshots). ## Limitations * Browser steps run on every check, which takes longer than simple HTTP fetches * Complex multi-step flows may occasionally fail if the target site changes its layout * Two-factor authentication (2FA) requiring dynamic codes cannot be automated # Community Watches Source: https://docs.sitespy.app/docs/dashboard/community Browse public monitoring setups and publish your own The [Community](https://sitespy.app/dashboard/community) page is a public directory of watch configurations. It exists to show you which pages other people find worth monitoring, and how they set them up. Copying a setup across is not part of it — see below. ## Browsing Watches are grouped into categories: Price Monitoring, Job Tracking, Competitor Intel, Restock Alerts, Government & Tenders, Real Estate, News & Media, and Other. Each entry shows the page being watched and its category. Every published watch also has a public page at `sitespy.app/community/`, readable without an account. ## Watching the same page yourself Open an entry to see what somebody watches and how they set it up. To follow the same page, use **Watch This Page Yourself** — it takes you to the dashboard with the address filled in, and the picker opens so you [choose what to follow](/docs/dashboard/element-picker) on your own. Nothing else is carried across. One-click cloning used to copy the whole configuration. It was removed because what a watch follows is the part that decides whether it is useful, and inheriting a stranger's choice — or their lack of one, when the entry was published without filters — meant starting with a monitor that alerted on everything. If you want somebody's exact configuration, ask them for a [share link](/docs/dashboard/share-links) instead. That is a deliberate act by the person who built the watch, rather than a public entry standing in for one. ## Publishing Click **+ Publish**, choose one of your watches, pick a category, and optionally add an author name to be credited. Publishing is public and includes the watch URL, its title, and its filter configuration. Do not publish watches whose URL contains a token, a session ID, a private or unlisted page, or anything else you would not post openly. Your email address and API key are never published. Published watches show a globe marker in your own watch list. The number of publishes per account is capped to keep the directory useful. ## Removing a published watch Unpublish it from the same page. The public entry and its permalink disappear; any watch someone already created from it stays in their account, because it was always an independent watch. # CSS & XPath Filters Source: https://docs.sitespy.app/docs/dashboard/css-xpath-filters Monitor specific page sections using CSS selectors and XPath expressions Filters let you control exactly which parts of a page Site Spy monitors. Instead of tracking the entire page (and getting notifications for every small change), you can focus on specific sections and ignore the rest. You do not have to write any of this by hand. Pointing at the page in the [picker](/docs/dashboard/element-picker) produces the Monitor Only selector for you, and that is how watches are normally created. This page is the reference for reading, editing, or writing one yourself. Filters are available on **all plans**, including Free. ## Filter types Each watch has three filter fields, accessible from the [Watch Settings](/docs/dashboard/watch-settings) gear icon: ### Monitor Only (include filters) CSS or XPath selectors that limit monitoring to specific page sections. Only content matching these selectors is tracked — everything else is ignored. This is the field the [picker](/docs/dashboard/element-picker) fills in. **Pick it on the page instead**, directly below the textarea, opens the stored snapshot of the watch so you can click the element rather than describe it. Use the textarea when you already know the selector, or when you want to tune one the picker produced. **CSS examples:** * `#price` — element with id "price" * `.product-info` — elements with class "product-info" * `table.rates` — a table with class "rates" * `h1, h2, h3` — all headings **XPath examples:** * `//*[@id="price-table"]` — element with id "price-table" * `//div[@class="rates"]` — div with class "rates" * `//table[1]` — the first table on the page You can add multiple selectors — each one on its own line. ### Exclude Elements (subtractive selectors) CSS selectors for elements to remove before checking for changes. Useful for filtering out noisy sections while keeping the rest of the page. **Examples:** * `.cookie-banner` — remove cookie consent banners * `#ads` — remove ad sections * `nav, footer` — remove navigation and footer * `.sidebar` — remove sidebar content ### Text Patterns (ignore text) Text strings or regex patterns to exclude from change detection. Any matching text is stripped before comparing snapshots. **Plain text:** `Last updated` — ignores any line containing this text **Regex:** `/\d{1,2}:\d{2}\s*(AM|PM)?/i` — ignores timestamps like "3:45 PM" Regex patterns must be wrapped in `/pattern/` with optional flags (`i` for case-insensitive). ## Finding selectors The picker is the short way: click the element and Site Spy derives the selector, anchored on an id or a class wherever the page offers one. It opens from **Find What to Watch** on a new watch, from **Pick it on the page instead** on an existing one, and from **Pick an Element on This Page** in the browser extension. See [Choosing What to Watch](/docs/dashboard/element-picker). To work one out yourself with DevTools: 1. Right-click the element you want to monitor in your browser 2. Click **Inspect** (or **Inspect Element**) 3. In the DevTools Elements panel, look for the element's `id` or `class` 4. Use `#id-name` for IDs or `.class-name` for classes Prefer an id or a stable class over a positional path. A selector ending in `:nth-child(3)` follows whatever is third right now, so it stops meaning the same thing the moment the page reorders. ## Common examples | Goal | Filter type | Value | | --------------------------- | ---------------- | --------------------------------- | | Monitor only the price | Monitor Only | `#price` or `.price` | | Ignore the sidebar | Exclude Elements | `.sidebar` | | Ignore timestamps | Text Patterns | `/\d{1,2}:\d{2}/` | | Ignore "Last updated" lines | Text Patterns | `/last\s+(updated\|modified).*/i` | | Monitor a specific table | Monitor Only | `table.rates` | | Ignore cookie banners | Exclude Elements | `.cookie-banner, #consent` | ## Smart Filters [Smart Filters](/docs/dashboard/smart-filters) are a separate, opt-in feature, **off by default**. They do not replace the picker and they are not how you narrow a watch: they add ignore patterns around what you already chose, to strip timestamps, cookie banners and counters. A selector you picked or typed yourself is left alone. ## Invalid filters are dropped, not rejected Site Spy validates every selector and regex before saving. Anything that cannot be compiled — a Tailwind arbitrary-value selector like `w-[calc(100%-1rem)]`, a JavaScript-only regex construct like `\p{Sc}`, malformed XPath — is removed from the watch instead of failing the save. The save reports success and the bad filter is simply gone. This applies to every route into a watch: the picker, the settings dialog, the API, MCP, imports, and share links. The AI chat reaches the ignore and trigger patterns the same way, though it cannot write the Monitor Only selector at all. If a filter you added does not appear after saving, it did not compile — check the syntax above and try a simpler selector. # Choosing What to Watch Source: https://docs.sitespy.app/docs/dashboard/element-picker Point at the part of a page you want watched instead of writing a selector A watch pointed at a whole page alerts on every cookie banner, visitor counter and timestamp on it. The picker is how you avoid that: Site Spy shows you the page and you point at the part you care about. Only changes inside it reach you. Nothing is guessed. What you point at is saved as the watch's **Monitor Only** selector, and you can read it back later in [Watch Settings](/docs/dashboard/watch-settings). ## Where it opens | Where | How | | ----------------- | -------------------------------------------------------------------------------------------------------------- | | Dashboard | Paste an address on the [watches page](https://sitespy.app/dashboard/watches) and press **Find What to Watch** | | AI Chat | It opens by itself on the watch card, as soon as the watch exists | | An existing watch | **Pick it on the page instead**, under Monitor Only in the watch's settings | | Browser extension | **Pick an Element on This Page** in the popup — see [Watching Pages](/docs/extension/watching-pages) | The dashboard and the chat use the same picker: Site Spy loads the page in a real browser, takes a picture of it, and shows it to you as it actually looks. The other two work differently and are described further down. ## Clicking one element Move the pointer over the picture and the element under it is outlined, with a caption naming the tag and the selector that would be saved. Click to lock that choice. The bar below the picture then shows the selector and the text of what you picked. * **Track This Element** saves it, and stays disabled until something is chosen * **Re-select** lets go so you can point somewhere else * **Cancel** closes the picker without creating anything The keyboard does the same job. Click the picture once to focus it, then the up and left arrows widen the selection to the smallest element containing the current one, and the down and right arrows narrow it to the largest element inside it. Enter confirms, Escape lets go of the selection, and Escape again leaves the picker. ### Suggested elements Where a page offers obvious candidates they appear as chips above the picture — **Price**, **Availability**, **Heading** — and clicking one selects that element exactly as a click on the picture would. They come from inspecting the page itself: the price chip from an element carrying a currency amount, the availability chip from wording like "In stock" or "Sold out", the heading chip from the most prominent heading rather than the first one found. No model is involved, and a wrong suggestion costs you a glance, because you see it highlighted before you accept it. ## Dragging a box around an area Some things are not one element — a block of three lines, a row of details, a panel. Press and drag across the picture to draw a box around them instead of clicking. What gets saved is not the box. Every element sitting entirely inside it is collected, the ones already contained by another are dropped, and the smallest element in the page that holds all the rest becomes the watch's anchor. That is a single selector, and it keeps working when the contents inside it are rewritten. A press without movement is still a click, so there is no mode to switch: point for one element, drag for an area. ## "Just this one" or "the whole list" A click inside a feed, a product grid or a slider raises a question that no selector can answer on its own, so the picker asks it in plain words: > That is item 3 of 12 in a list. * **Just this one** follows position 3, so it changes when the list reorders. This is what you want when the slot is the thing you care about — the current top story, the first search result * **The whole list** follows the container, and tells you when any item is added, removed or edited The click itself selects the single item, so leaving the question alone keeps that. Choosing the other option swaps the selection to the list. The question only appears where there really is a list: three or more sibling elements of the same shape. A two-column layout is not a list and is not treated as one. ## You cannot finish without choosing There is deliberately no button that creates a whole-page watch from the dashboard. The one exception is an address that is not a page at all — a JSON or plain-text response has no parts to point at, so the picker says so and offers to watch the whole response instead. If the page cannot be rendered, the picker tells you that too. Some sites block us and some are simply too slow for a render. Try the address again, or a different page. ## Picking on a watch you already have Open a watch's settings and click **Pick it on the page instead** under Monitor Only. This screen works from the snapshot Site Spy already stored rather than from a fresh render, and that is the point: the checker compares exactly those bytes, so anything visible here is something a filter can actually match. Styling and images are not loaded, so the page looks plain. Click an element and press **Watch only this**. Arrow keys walk out to the parent element and in to the first child, and Escape clears the selection. If the watch already follows something, you are asked to confirm before it is replaced. There is no box-drag and no list question on this screen — it is a click picker over the stored page. Two states can stop it being useful: * **No check has run yet** — there is nothing stored to point at. The page fills in once the first check finishes * **The page returned no content** — the site builds itself with JavaScript, so a plain fetch stored nothing. **Use a browser fetch** switches the watch over, and the next check stores something you can pick from The same screen carries the other way of narrowing a watch: name the message shown while you are waiting — "Sold out", "No appointments available" — and nothing is sent while that text is on the page. Tick the box below it to be emailed once, the moment the text disappears. ## The extension picker The browser extension picks on the live page in front of you rather than on a picture of it. Hover to highlight, click to lock, then **Track This Element**, **Re-select** or **Cancel** in the bar that appears. Enter confirms and Escape lets go, then leaves. The watch is created with the selector already filled in. See [Watching Pages](/docs/extension/watching-pages). It does not offer the box-drag or the list question — those belong to the dashboard and chat picker. ## What the choice means afterwards Because you chose the selector rather than a model writing it, Site Spy treats it as yours. [Smart Filters](/docs/dashboard/smart-filters) never replace it, and automatic noise repair leaves it alone. If the element stops appearing on the page, the watch reports a broken filter and emails you about it instead of quietly widening back to the whole page — see [Watch Health](/docs/dashboard/watch-health). You can still edit or replace the selector by hand in the Monitor Only field. See [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) for the syntax. # Email Notifications Source: https://docs.sitespy.app/docs/dashboard/email-notifications Set up email alerts for website changes Email notifications send you a report when your watched pages detect changes. Available on all plans, including Free. ## Setup 1. Go to the [Notifications page](https://sitespy.app/dashboard/notifications) in the dashboard 2. Click **Enable Notifications** 3. Check your inbox for a verification email 4. Click the verification link Once verified, you'll see a green "Verified" status next to your email. Verification is required for more than notifications: until your account email is verified you cannot create watches at all, and the API rejects the attempt. New accounts get a 7-day grace period in which change notifications are delivered to the unverified address, with a reminder to verify. After that window, alerts to an unverified address are dropped. ## How many emails you can get Each watch has a delivery ceiling of **4 notifications per hour and 24 per day**. It applies per watch, not per account. Changes above the ceiling are not lost — they are counted, and the next delivered notification says how many were held back, for example `(+6 more changes this hour)`. A page that changes every few minutes therefore emails you a couple of dozen times a day at most instead of hundreds of times. If a watch is consistently hitting the ceiling, the fix is usually a narrower filter — see [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) and [Smart Filters](/docs/dashboard/smart-filters). ## Other emails Site Spy sends Besides change notifications and address verification, your account may receive: * A welcome email after you verify * Setup tips a few days after signing up * A note when you reach your plan's watch limit * A reminder if your watches have been running unread for a week * Trial-ending and trial-ended notices * Health alerts when one of your watches breaks — see [Watch Health](/docs/dashboard/watch-health) * Team invitations, password resets, and other transactional mail you trigger yourself ## Testing After verification, click **Send Test Email** to confirm delivery. Check your spam folder if the test doesn't arrive within a few minutes. ## Disabling Click **Disable Notifications** to stop receiving emails. You can re-enable at any time — no need to re-verify if your email hasn't changed. ## Troubleshooting * **No verification email?** Click **Resend Verification** and check your spam folder * **Feature not available?** Try refreshing the page or contact support * **Notifications stopped after a while?** Check whether the watch is hitting the hourly or daily ceiling above, and whether the watch itself is failing — a broken watch cannot report changes # Import & Export Source: https://docs.sitespy.app/docs/dashboard/import-export Bulk import URLs and export your watches Site Spy lets you import URLs in bulk and export your watch data for backup or migration. ## Bulk import Bulk import requires the **Starter** plan or above. Export is available on every plan, including Free. 1. Go to [Dashboard Settings](https://sitespy.app/dashboard/settings) 2. Open the **Data** tab 3. In the **Bulk Import** section, paste URLs (one per line) or upload a `.txt` / `.csv` file 4. Click **Import** The import runs in the background. Duplicate URLs are automatically skipped. ### Supported formats * **Plain text** — One URL per line in the textarea * **File upload** — `.txt` or `.csv` files containing URLs URLs must start with `http://` or `https://`. Invalid URLs are skipped during import. ## Export From the same **Data** tab, you have two export options: ### Export as JSON Downloads a `.json` file containing all your watches with full configuration — URLs, titles, and settings. The file includes: ```json theme={null} { "version": "1.0", "exported_at": "2025-01-15T10:30:00Z", "source": "sitespy.app", "watch_count": 12, "watches": { ... } } ``` ### Export as URL list Downloads a plain text file with one URL per line. This format can be directly re-imported using Bulk Import. ## Round-trip workflow You can export your watches as a URL list from one account and import them into another. This is useful for migrating between accounts or sharing a monitoring list with a team member. # MCP Integration Source: https://docs.sitespy.app/docs/dashboard/mcp-integration Connect Site Spy to Claude Code, Codex, OpenCode, Cursor, and other MCP-compatible tools Site Spy provides an [MCP server](https://www.npmjs.com/package/@site-spy/mcp-server) that lets AI assistants monitor websites, compare snapshots, and manage watches through natural language. ## Setup Copy your API key from [Dashboard Settings > API & Monitoring](https://sitespy.app/dashboard/settings?tab=api), then add the server to your client. If your client has a CLI, that is the whole setup: ```bash theme={null} # Claude Code claude mcp add site-spy --env SITE_SPY_API_KEY=your-api-key -- npx -y @site-spy/mcp-server # Codex CLI codex mcp add site-spy --env SITE_SPY_API_KEY=your-api-key -- npx -y @site-spy/mcp-server # Gemini CLI (the -- matters: without it, -y is parsed as a gemini flag) gemini mcp add -s user -e SITE_SPY_API_KEY=your-api-key site-spy npx -- -y @site-spy/mcp-server # OpenClaw openclaw mcp add site-spy --command npx --arg -y --arg @site-spy/mcp-server --env SITE_SPY_API_KEY=your-api-key # VS Code code --add-mcp '{"name":"site-spy","command":"npx","args":["-y","@site-spy/mcp-server"],"env":{"SITE_SPY_API_KEY":"your-api-key"}}' ``` Otherwise add this to the client's config file: ```json theme={null} { "mcpServers": { "site-spy": { "command": "npx", "args": ["-y", "@site-spy/mcp-server"], "env": { "SITE_SPY_API_KEY": "your-api-key" } } } } ``` Restart your AI client — Site Spy tools appear automatically. ## Configuration file locations | Client | Path | Config shape | | ------------------------ | ----------------------------------------------------------------- | ---------------------------------------------------------- | | Claude Code | `.mcp.json` in project root, or `~/.claude.json` | `mcpServers`, as above | | Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` | `mcpServers`, as above | | Claude Desktop (Windows) | `%APPDATA%\Claude\claude_desktop_config.json` | `mcpServers`, as above | | Cursor | `.cursor/mcp.json` in project root, or `~/.cursor/mcp.json` | `mcpServers`, as above | | Windsurf | `~/.codeium/windsurf/mcp_config.json` | `mcpServers`, as above | | Gemini CLI | `.gemini/settings.json` or `~/.gemini/settings.json` | `mcpServers`, as above | | Codex CLI | `~/.codex/config.toml` | TOML table `[mcp_servers.site-spy]` | | OpenCode | `opencode.json`, or `~/.config/opencode/opencode.json` | `mcp` key, `command` is an array, env key is `environment` | | OpenClaw | `~/.openclaw/openclaw.json` | servers nest under `mcp.servers` | | VS Code | `.vscode/mcp.json` | `servers` key, with `type: "stdio"` | | Zed | run the `zed: open settings file` action | `context_servers` key | The five clients whose shape differs have full snippets in the [package README](https://www.npmjs.com/package/@site-spy/mcp-server). ## Available tools Read tools are marked read-only, so most clients let them run without asking for approval each time. Write tools are available on every plan, including Free. ### Read tools | Tool | Description | | -------------------- | ------------------------------------------------- | | `authenticate` | Connect to Site Spy with an API key | | `auth_status` | Check whether the MCP server is authenticated | | `list_watches` | List all monitored websites | | `get_watch` | Get full details of a specific watch | | `get_change_history` | Get timestamps when changes were detected | | `get_snapshot` | Get page content captured at a specific timestamp | | `get_diff` | Compare page content between two timestamps | | `search_watches` | Search watches by URL, title, or content | | `get_rss_settings` | Get RSS feed settings | | `get_notifications` | Get current notification settings | ### Write tools | Tool | Description | | -------------------- | ---------------------------------- | | `create_watch` | Start monitoring a URL for changes | | `update_watch` | Update a watch's configuration | | `delete_watch` | Stop monitoring a URL | | `trigger_recheck` | Force an immediate recheck | | `generate_rss_token` | Generate or regenerate RSS token | | `revoke_rss_token` | Revoke RSS feed token | ### Web tools | Tool | Description | | ------------ | --------------------------------------------------------------------------- | | `fetch_url` | Fetch one URL through Site Spy, with a browser backend for JavaScript pages | | `web_search` | Search the web and return ranked result URLs to fetch | ### AI tools (Pro and above) | Tool | Description | | ---------------- | ---------------------------------------------------------------- | | `get_ai_summary` | Get AI-generated plain-English summary of the most recent change | ## Plan limits MCP access follows the same plan limits as the REST API. Every plan can read and write; what differs is how many watches you can hold and how many requests you get a day. Reading does not count against the daily quota — only writes do: | Plan | Watches | Write requests/day | AI summary | | -------- | ------- | ------------------ | ---------- | | Free | 2 | 100 | — | | Starter | 25 | 1,000 | — | | Pro | 100 | 10,000 | Yes | | Business | 500 | 50,000 | Yes | ## Example usage Once connected, you can ask your AI assistant things like: * "What changed on my watches recently?" * "Start monitoring [https://example.com/pricing](https://example.com/pricing) for price changes" * "Show me the diff for my Amazon watch" * "Summarize the latest change on my competitor's site" * "Recheck all my watches" ## Troubleshooting * **"Not authenticated" errors** — Make sure `SITE_SPY_API_KEY` is set correctly in the config. You can verify by asking the assistant to run `auth_status`. * **"API key is invalid or expired"** — The key was revoked or regenerated. Copy a fresh one from [Settings > API](https://sitespy.app/dashboard/settings?tab=api) and update the config. Nothing is wrong with the server itself. * **Tools not appearing** — Restart your AI client after adding the config. Ensure `npx` is available (requires Node.js 20.19+). * **"Watch limit reached" errors** — You are at your plan's watch cap (2 on Free). Delete a watch or upgrade. * **"Rate limit reached" errors** — You have used the day's write allowance. The error says how long to wait. * **"Pro plan required" errors** — The `get_ai_summary` tool requires Pro or Business plan. # Price & Restock Monitoring Source: https://docs.sitespy.app/docs/dashboard/price-and-restock Track price drops and back-in-stock changes instead of page text Site Spy has a monitoring mode built specifically for shopping pages. Instead of diffing the page text — which fires on every rotating banner and "5 people are viewing this" counter — it extracts the product's **price** and **availability** and alerts on those alone. Use it for price drops, back-in-stock alerts, and competitor pricing. ## How it finds the price On each check Site Spy reads the page's structured product data — LD-JSON, microdata, and OpenGraph product properties — to pull out price, currency, and stock status. Most large shops publish this because search engines require it, so it usually works with no configuration. If a page publishes no structured data, or publishes several conflicting prices for one product, this mode cannot read it. Fall back to ordinary text monitoring with a filter aimed at the price element — see [CSS & XPath Filters](/docs/dashboard/css-xpath-filters). ## Options | Setting | What it does | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | Restock detection | `In stock only` alerts on out-of-stock → in-stock transitions; `Any availability change` alerts in both directions; `Off` ignores availability | | Follow price changes | Whether price movements notify you at all | | Price threshold (%) | Ignore movements smaller than this, so a 1% wobble doesn't wake you | | Below price | Only notify when the price drops under this number | | Above price | Only notify when the price rises over this number | A typical restock watch is availability-only. A typical price watch sets a below-price target and a threshold to filter out noise. ## Turning it on Price and restock monitoring is set through the [API](/api-reference/introduction) by creating a watch with `processor: restock_diff`, along with `in_stock_only`, `follow_price_changes`, and `price_change_threshold_percent`. Bulk import accepts the same processor for a whole list of product URLs at once. The only route without touching the API is a [share link](/docs/dashboard/share-links): the link encodes the processor type, so adding a restock watch somebody shared with you keeps the mode and its settings. The [Community](/docs/dashboard/community) directory does not do this — **Watch This Page Yourself** carries the address across and nothing else. There is no dashboard control for this mode yet — the watch settings dialog covers text monitoring only. Existing price and restock watches keep working and show as "Re-stock detection" on share and community pages. ## Notifications Alerts flow through the same channels as any other watch — see [Email](/docs/dashboard/email-notifications), [Telegram](/docs/dashboard/telegram), [push](/docs/dashboard/push-notifications), and [webhooks](/docs/dashboard/webhooks) — and are subject to the same per-watch limit of 4 an hour and 24 a day. # Browser Push Notifications Source: https://docs.sitespy.app/docs/dashboard/push-notifications Receive instant browser notifications when watched pages change Get real-time browser notifications when your watched pages change — even when the Site Spy tab is closed. ## Enabling 1. Go to the [Notifications page](https://sitespy.app/dashboard/notifications) in the dashboard 2. Click **Enable Push Notifications** 3. Allow the browser permission prompt Once enabled, the section shows "Enabled" and two buttons appear — **Send Test Notification** and **Disable**. ## Testing Click **Send Test Notification** to send a test push to your browser. You should see a notification within a few seconds. ## Disabling Click **Disable** to unsubscribe. Your browser will stop receiving push notifications from Site Spy. ## Notes * Push notifications are tied to this browser on this device. To receive notifications on multiple devices, enable them separately on each one. * Notifications only work while the browser is running (the tab does not need to be open). * If you clear your browser data or reinstall, you will need to re-enable push notifications. # RSS Feeds Source: https://docs.sitespy.app/docs/dashboard/rss Follow website changes in any RSS reader Site Spy generates RSS feeds for your watches. You can subscribe to a single watch or to all of them at once. RSS is available on all plans. ## Finding your RSS feeds RSS links live on the **RSS Feeds** page in the dashboard sidebar, and the same section exists in extension settings. Enable RSS once and Site Spy generates a feed token for your account. Every feed URL carries that token as `?token=…`. The token is the only thing protecting your feed — anyone holding the URL can read your watch diffs — so treat it like a password and avoid posting feed URLs publicly. There are two feed types: ### Per-watch feed Each watch has its own RSS feed. Open a watch and look for the RSS icon or link. The feed publishes a new entry every time that page changes, with the diff content included. ### All-watches feed A single feed that includes changes from all your watches. Use this if you want one subscription in your RSS reader that covers everything. ## Rotating the token **Regenerate Token** issues a new token and invalidates the old one. Every feed URL you have already given out stops working at that moment, so re-subscribe in your reader afterwards. Use it if a feed URL leaks. **Disable RSS** switches the feeds off entirely. Muted watches are left out of your feeds by default. ## Using RSS feeds Paste the feed URL into any RSS reader — Feedly, NetNewsWire, FreshRSS, or any other reader that supports Atom/RSS. Each entry includes: * The page URL that changed * A diff showing what was added and removed * The timestamp of the change ## RSS vs direct alerts RSS is a good fit when you want to browse changes at your own pace, aggregate multiple watches in one place, or pipe updates into other tools. For time-sensitive changes like visa slots or stock alerts, [push notifications](/docs/dashboard/push-notifications), [email](/docs/dashboard/email-notifications), or [Telegram](/docs/dashboard/telegram) are a better choice since they notify you immediately. # Screenshot Capture Source: https://docs.sitespy.app/docs/dashboard/screenshots Capture full-page screenshots alongside text monitoring Screenshot capture is a **Pro plan** feature that saves a PNG screenshot alongside each text snapshot when a watch checks a page. This gives you both text diffs and visual comparisons. ## Enabling screenshots 1. Open the [watches list](https://sitespy.app/dashboard/watches) 2. Click the **gear icon** on a watch to open Watch Settings 3. Toggle **Screenshot Capture** on 4. The watch automatically rechecks to capture its first screenshot When enabled, the watch uses a browser-based fetcher so it can render the page and take a screenshot. Screenshot capture requires the **Pro plan**. Free and Starter users see an upgrade prompt. ## Viewing screenshots ### Preview page The preview page shows a **Text / Screenshot** tab toggle when screenshots are available. Switch to the Screenshot tab to see the most recent capture. ### Diff page The diff page shows a **Text Diff / Visual Diff** tab toggle. The visual diff view offers two modes: * **Before / After** — A slider to compare the two screenshots side by side * **Diff Overlay** — A generated image highlighting changed regions in red The change percentage and sensitivity threshold are shown below the image when available. ## How it works * Screenshots are **additive** — text monitoring always runs, screenshots are captured alongside * Each check saves both a text snapshot and a screenshot (if enabled) * At least 2 screenshots are needed before visual comparison is available * The diff overlay is generated on-demand using image comparison (SSIM) * Screenshot history is capped at 100 images per watch on every plan, including Business — a screenshot is saved on every check, not only when the page changes, so older images are deleted to keep disk use bounded. Your plan's snapshot limit still governs text history. # Dashboard Settings Source: https://docs.sitespy.app/docs/dashboard/settings Configure your Site Spy dashboard preferences The [dashboard settings](https://sitespy.app/dashboard/settings) are organized into five tabs: Account, API & Monitoring, Appearance, Integrations, and Data. ## Account ### Profile Shows your name, email, and current plan. Click **Manage plan** to view upgrade options. ### Password Change your password (only available for email/password accounts, not social logins). ### Delete account Permanently delete your account, all watches, and all data. This cannot be undone. A confirmation dialog requires explicit confirmation before proceeding. ## API & Monitoring ### API connection Your API key connects the dashboard to the backend. Copy it to use in the browser extension or other integrations. See [Connecting to the Dashboard](/docs/getting-started/connecting) for setup details. ### Check frequency Set the default check interval for all watches. Individual watches can override this in their own settings. The allowed range depends on your plan: | Plan | Minimum | Maximum | | -------- | ---------- | ------- | | Free | 1 hour | 7 days | | Starter | 10 minutes | 7 days | | Pro | 10 minutes | 7 days | | Business | 1 minute | 7 days | Pro also includes 10 fast slots that can be assigned to individual watches at intervals down to 1 minute from each watch's settings. ### AI features Bring your own API key (Anthropic Claude, OpenAI GPT, or Google Gemini) for AI-powered change summaries. See [AI Features](/docs/dashboard/ai-features) for details. ### Smart Filters **Let AI configure filters for new watches** is **off by default**, and it stays off until you turn it on. With it on, Site Spy reads each new watch after its first snapshot and applies filters that remove timestamps, cookie banners, and other dynamic content; automatic repair of a noisy existing watch rides on the same switch. It never touches the element you pointed at in the [picker](/docs/dashboard/element-picker). See [Smart Filters](/docs/dashboard/smart-filters) for details. ### Noise reduction Two account-wide switches, both on by default, that apply to **every** watch rather than only new ones: * **Ignore timestamps and counters** — strips relative timestamps ("3 minutes ago"), view counts ("1.2k views"), and similar dynamic text * **Ignore ads and cookie banners** — strips advertising and consent blocks using public blocklists Turn them off if a page you monitor legitimately reports counts or timestamps you need to be alerted on. ## Appearance ### Theme Choose between three modes: * **Auto** — Follows your system dark/light preference * **Dark** — Always dark * **Light** — Always light The theme applies to the web dashboard. The browser extension has its own theme setting. ### Watch list actions Customize which action buttons appear on each watch in your list. Core actions (Recheck, Preview, Diff, Timeline, Settings, Delete) are always visible. Optional actions can be toggled on or off: * **Screenshots** — Quick access to screenshot capture * **RSS feed** — Link to the watch's RSS feed * **Share link** — Generate a shareable link for the watch configuration * **Open site** — Open the watched URL in a new tab Changes are saved automatically and apply immediately. ## Integrations ### Browser extension Links to install the extension from the Chrome Web Store and Firefox Add-ons. After installing, copy your API key from the API & Monitoring tab to connect. ### AI Integration (MCP) Configure the Site Spy MCP server to connect AI assistants. See [MCP Integration](/docs/dashboard/mcp-integration) for the full setup guide. ## Data ### Team management Invite and manage team members (Business plan only). See [Team Management](/docs/dashboard/team-management). ### Bulk import Import URLs in bulk by pasting them or uploading a file. See [Import & Export](/docs/dashboard/import-export). ### Data export Export your watches as JSON (full configuration) or as a plain URL list. See [Import & Export](/docs/dashboard/import-export). # Share Links Source: https://docs.sitespy.app/docs/dashboard/share-links Share watch configurations with others via a link Share links let you send a watch configuration to someone so they can add it to their own Site Spy account with one click. The recipient gets the same URL, filters, and monitoring settings — no manual setup needed. ## Sharing a watch 1. Open the [watches list](https://sitespy.app/dashboard/watches) 2. Click the **share icon** on any watch 3. A shareable link is copied to your clipboard The link encodes the watch configuration (URL, CSS/XPath filters, processor type, and other settings) into a URL parameter. No snapshot data or history is shared — only the monitoring setup. ## What recipients see When someone opens a share link, they see a preview card showing: * The website URL and favicon * The monitoring type (Text/HTML, Re-stock detection, or Visual/screenshot) * Any CSS or XPath filters applied If the recipient is signed in, they can click **Add to My Watches** to create the watch in their account. The first snapshot is taken automatically. ## Authentication flow * **Signed in** — The "Add to My Watches" button creates the watch immediately * **Not signed in** — The button says "Sign in & Add Watch" and redirects to the login page. After signing in, the user is redirected back to the share page automatically ## Duplicate detection If the recipient already monitors the same URL, a notice appears: "You're already monitoring this site." Instead of the add button, they see a link to go to their dashboard. ## Visibility The share link button can be toggled on or off in [Appearance settings](/docs/dashboard/settings#watch-list-actions). It's enabled by default. # Smart Filters Source: https://docs.sitespy.app/docs/dashboard/smart-filters AI-powered noise reduction for new watches Smart Filters are **off by default** and optional. By default you tell Site Spy what to watch directly: you [point at the element](/docs/dashboard/element-picker) on a picture of your page, or you name a phrase you are waiting to see clear. Nothing is guessed. Turning Smart Filters on adds a second thing on top — a server-side model reads each new page and writes noise-reduction filters itself. This feature uses a server-side AI model — no API key or paid plan is required. Smart Filters never replace an anchor you chose. If you picked an element by hand, that selector is left alone; the model only adds noise patterns around it. ## Enabling Smart Filters 1. Go to [Dashboard Settings](https://sitespy.app/dashboard/settings) and open the **API & Monitoring** tab 2. Toggle **Let AI configure filters for new watches** on Once enabled, every new watch you create will also be analyzed after its first snapshot. ## How it works 1. You add a new watch (from the dashboard, extension, or [AI Chat](/docs/dashboard/ai-chat)) 2. Site Spy captures the first snapshot 3. The AI analyzes the page content and applies optimal filters: * **Monitor Only** — CSS selectors to focus on the relevant section of the page * **Ignore Text** — Regex patterns to exclude noisy text (timestamps, counters, etc.) * **Trigger Text** — Patterns that must be present on the page for a notification to be sent at all (only when you specified a condition) ## Describing what you want The dashboard no longer asks you to describe what to track in words — you point at it instead, which is both faster and unambiguous. A description can still reach the model through [AI Chat](/docs/dashboard/ai-chat), where you are asking for something explicitly. Deriving filters from a sentence of English turned out to need the model to understand the page, which it does not reliably do; the result was either notifications about everything or about nothing. Pointing removes the guess. ## What gets filtered The AI checks the page for these common noise patterns: * Timestamps and times (`3:45 PM`, `14:30:00`) * Dates in various formats (`03/26/2026`, `2026-03-26`) * "Last updated" / "Last modified" lines * Copyright years (`© 2026`) * Cookie consent and GDPR text * Visitor and view counters (`1,234 views`) * Dynamic ad text and sponsored content * CSRF tokens and session IDs ## Limitations * Smart Filters configure **new watches** at creation time * Existing watches are not re-analyzed on a schedule, but a noisy one can be repaired automatically — see below * The AI needs the first snapshot before it can analyze — there's a brief delay after watch creation * Filters are applied automatically but you can always edit them manually in [Watch Settings](/docs/dashboard/watch-settings) * The feature works best on text-heavy pages; purely visual pages benefit more from [Screenshot Capture](/docs/dashboard/screenshots) ## Re-tuning a watch yourself Click the **sparkle** button on any watch row — or **Re-tune filters** in the watch's settings — to have Site Spy analyze it and rewrite its filters on the spot. This works on any watch, at any time; you don't have to wait for Site Spy to decide the watch is noisy. The button is highlighted on watches whose measured noise makes re-tuning worth doing. While it runs, the watch shows a **Tuning filters…** status. That status lives on the watch itself, so you can close the page or reload and it will still be there when you come back. Saving the new filters also queues one immediate check, so the change takes effect straight away rather than at the next scheduled check. If the watch has filters you wrote yourself, Site Spy asks for confirmation first, because re-tuning adds AI-generated filters alongside your own. ## Automatic noise repair on existing watches If a watch keeps notifying you about changes you don't care about, Site Spy can add ignore rules to it after the fact. This runs on the same **Smart Filters** account setting — so it is off until you switch that on — and then only on watches whose measured noise justifies it. What it does: * Adds up to 5 ignore patterns per repair, and never more than 20 automatic patterns on one watch * Backtests each proposed pattern against your stored snapshots first, and applies nothing if the patterns would have suppressed real changes * Leaves your own manual filters untouched — automatic rules are kept in a separate list * Skips paused watches and watches that are currently failing Turn it off for your whole account with the **Smart Filters** toggle in [Settings](https://sitespy.app/dashboard/settings), or per watch in the watch's settings. # Getting Support Source: https://docs.sitespy.app/docs/dashboard/support Send a support request with the context needed to answer it The [Support page](https://sitespy.app/dashboard/support) is the fastest way to reach a person. A failing watch also links straight to it — **Get help with this watch** opens the form with that watch already selected. ## What the form asks * **What's this about?** — one of: a watch isn't detecting changes, too many or irrelevant alerts, notifications aren't arriving, a watch shows an error, filters or selectors aren't working, billing or refunds, account and API keys, a feature request, or something else * **Which watch?** — pick the affected watch, so we can look at its actual history rather than guessing * **Email, subject, and message** — your reply address and the description * **How urgent is it?** — Question, Something's broken, or I'm blocked * **Attachments** — up to 3 files, screenshots included ## Diagnostics The form offers to attach technical diagnostics, and this is **on by default**. Expand the section to read exactly what would be sent before submitting. It covers the selected watch's recent behaviour: fetch backend and timing, content length, the last error with credentials redacted, the failure category and how long it has been failing, retry state, and how many filters of each type are configured. It does not include your API key or your password. Turning it off is fine — it usually means we have to ask follow-up questions before we can help. ## Faster answers Two things resolve most tickets before they are written: * If a watch shows an error, read its [health state](/docs/dashboard/watch-health) first — it names the cause and the fix * If alerts are too noisy, check [Smart Filters](/docs/dashboard/smart-filters) and [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) Pro and Business plans get priority handling. # Team Management Source: https://docs.sitespy.app/docs/dashboard/team-management Invite team members to share watches and collaborate Team management lets you invite others to share your Site Spy watches and dashboard. This is a **Business plan** feature. ## Getting started 1. Go to [Dashboard Settings](https://sitespy.app/dashboard/settings) 2. Open the **Data** tab 3. The **Team Management** section appears if you're on the Business plan 4. Click **Load Team Members** to view your current team ## Seats The Business plan includes 5 team seats, and 5 is the hard limit — there is no self-service way to buy more. If you need a larger team, contact support and we'll work something out. The team stats display shows how many seats are used and available. ## Inviting members 1. Enter the team member's email address 2. Select a role: **Member** or **Admin** 3. Click **Invite** The invited person receives an email to join your team. Their status shows as "Pending" until they accept. ## Roles | Role | Access | | ------ | ------------------------------------- | | Member | View and manage shared watches | | Admin | Full access including team management | ## Removing members Click **Remove** next to any team member to revoke their access. A confirmation dialog appears before the removal is processed. The freed seat becomes available for a new invite immediately. # Telegram Notifications Source: https://docs.sitespy.app/docs/dashboard/telegram Receive change alerts via Telegram Connect the Site Spy Telegram bot to receive instant messages when your watched pages change. ## Connecting 1. Go to the [Notifications page](https://sitespy.app/dashboard/notifications) in the dashboard 2. Click **Connect Telegram** 3. Click **Open in Telegram** — this opens the Site Spy bot 4. Tap **Start** in the Telegram chat 5. The dashboard shows "Connected" once the link is established The connection process times out after 2 minutes. If it expires, click **Connect Telegram** again to start fresh. ## Testing Once connected, click **Send Test Message** to verify the bot can reach you. ## Disconnecting Click **Disconnect** in the Telegram section to unlink the bot. You can reconnect at any time. ## If the bot is blocked or removed If Telegram permanently rejects delivery — you blocked the bot, or removed it from a group — Site Spy stops using that destination after 5 consecutive permanent failures and emails you to say so. Reconnect from the Notifications page to start receiving messages again. # Watch Health & Failure Alerts Source: https://docs.sitespy.app/docs/dashboard/watch-health How Site Spy detects a broken watch, tells you about it, and retries A monitor that quietly stops monitoring is worse than no monitor at all. If a site adds bot protection, a page moves, or a filter stops matching, Site Spy does not leave the watch to fail in silence: it classifies the failure, shows a health badge on the watch, and emails the owner. Health alerts are **operational messages about your own watches, not a paid feature**. They are sent on every plan, including Free, and are never gated behind a plan tier. ## Health states Every watch returned by the dashboard, the extension, and the API carries a `health` object with a state, a plain-language reason, and a suggested action. | State | What it means | What to do | | ------------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------- | | `healthy` | The last check completed normally | Nothing | | `never_checked` | The watch has not run yet | Wait for the first check | | `recovering` | A temporary problem — network, browser, or an error on our side | Nothing; retries continue automatically | | `blocked` | The site refused automated access or served a challenge page | Look for a feed, mobile, print, or API version of the page | | `rate_limited` | The site asked us to slow down | Nothing, or widen the check interval if it repeats | | `authentication_required` | The page is behind a login | Add credentials or [Browser Steps](/docs/dashboard/browser-steps) | | `target_unavailable` | The page returned an error or is gone | Open the URL yourself and update the watch | | `empty_content` | The page loaded with no readable text, usually JavaScript-rendered | Switch the watch to browser mode | | `filter_broken` | Your CSS/XPath filter no longer matches anything | Re-pick the element in the watch editor | | `notification_failure` | The check worked, but the alert could not be delivered | Fix the notification channel — see below | | `auto_paused` | We stopped checking after a long, unrecoverable failure | Resume the watch after fixing the cause | The dashboard watch list and the extension popup both show this state. The API exposes it on `GET /api/v1/watch/{uuid}` and in the watch list response. ## When you get an email Site Spy counts consecutive failed checks per watch and emails the owner once per failure episode. | Plan | Alert sent after | | ------------------------------------------------------- | --------------------------- | | Free | 5 consecutive failed checks | | Starter, Pro, Business | 3 consecutive failed checks | | Starter, Pro, Business — site blocking or broken filter | 2 consecutive failed checks | A single episode produces one email, not one per check. If the watch recovers and later breaks again, or breaks in a different way, you are alerted again. Repeat alerts for the same unresolved problem are suppressed for 7 days. Each email says what went wrong, what to do about it, and reminds you that change notifications from that watch are paused until it recovers. Broken CSS/XPath filters have a second, separate alert that fires after the filter misses 3 times in a row. ## Retries and auto-pause A failing watch is not dropped. It is retried on a widening schedule that depends on what went wrong — minutes for a rate limit, hours for a bot wall, a day for a missing page — and the next retry time is visible on the watch. Some failures never lead to a pause, because pausing would not help: * **Rate limits** always resolve on their own. * **Network errors, browser failures, and internal errors** mean the check did not complete, not that the page is unmonitorable — often the fault is ours, not the site's. Failures that do not resolve are eventually paused so we stop hammering a page that cannot be read: | Failure | Paused after | | ------------------------------------------- | -------------------------------- | | Login required, page not found, invalid URL | 3 failures over at least 1 day | | Site blocking, empty content, broken filter | 7 failures over at least 7 days | | Anything else | 10 failures over at least 7 days | An auto-pause always sends its own email — it is the end of the episode, and you should never discover it by noticing the silence. Resuming or editing the watch from the dashboard clears the error and queues an immediate check. ## Where alerts are delivered Health alerts go to the watch owner's own channels, in this order: verified email, Telegram, then webhooks. They are never sent to a shared or operator-wide address. Brand-new accounts receive alerts at their unverified address for the first 7 days, with a prompt to verify. Alerts cannot be delivered if the watch has no owner channel — for example an anonymous extension user with no account, an address that was never verified after the grace period, or muted email with no Telegram or webhook connected. In those cases the health badge on the watch is the only signal, so if you rely on a watch, [connect an account](/docs/getting-started/connecting) and [verify your email](/docs/dashboard/email-notifications). ## Related * [Email Notifications](/docs/dashboard/email-notifications) * [Managing Watches](/docs/dashboard/watches) * [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) # Watch Settings Source: https://docs.sitespy.app/docs/dashboard/watch-settings Configure individual watch options Each watch has its own settings, opened with the gear icon on the watch row in your [watches list](https://sitespy.app/dashboard/watches). The settings dialog holds four things: **Monitoring Mode**, **Screenshot Capture**, **Check Interval**, and **Ignore Rules**. Pausing and renaming a watch happen on the row itself, not in this dialog — see below. ## Check interval Override the global check frequency for this specific watch. Pro includes 10 fast slots for watches below its 10-minute default: | Plan | Default | Minimum | Fast slots | Maximum | | -------- | ---------- | ---------- | ----------- | ------- | | Free | 1 hour | 1 hour | 0 | 7 days | | Starter | 10 minutes | 10 minutes | 0 | 7 days | | Pro | 10 minutes | 1 minute | 10 | 7 days | | Business | 1 minute | 1 minute | All watches | 7 days | The interval is a target, not a guarantee. Site Spy fetches any single site at most once a minute across all your watches, so a fast interval on many pages of the same domain is spread out rather than run in parallel. After a server restart, watches are also queued gradually for the first couple of minutes. ## Screenshot capture Toggle screenshot capture on or off for this watch. When enabled, Site Spy saves a PNG screenshot alongside each text snapshot, allowing [visual diff comparisons](/docs/dashboard/screenshots). Screenshot capture requires the **Pro** plan or above. Enabling screenshots switches the watch to a browser-based fetcher that renders the page with JavaScript before capturing. ## Browser Controls how the page is rendered before Site Spy compares it. The panel appears wherever you set a watch up: beside the element picker when you create one, in the chat picker, and in the watch's settings. **Check from** — which proxy the check goes through. Most accounts have only **Default**; the list fills in when proxies are configured. **Wait time** — how long to wait after the page loads before reading it. Use it for pages that fill themselves in after load. Applies to browser checks only, and is capped at 60 seconds so a slow watch cannot tie up a worker. **Disable JavaScript** — renders the page in the browser with its scripts turned off. Useful when a script rewrites the part you care about on every visit. The watch is pinned to a browser, since the option means nothing without one. **Block ads and cookie banners** — blocks ad and tracker requests, and strips ad elements, cookie consent banners and newsletter popups from the page, using the EasyList and Fanboy filter lists. This is usually what to reach for when a watch keeps reporting changes you did not ask about. Defaults to your account setting in [Noise Reduction](/docs/dashboard/settings); switch it per watch to override, or use **Reset** to follow the account default again. **Mobile view** — checks the phone version of the page: a phone-sized viewport, mobile pixel ratio, touch support and an iPhone User-Agent. Also pins the watch to a browser. Turning on **Disable JavaScript** or **Mobile view** switches the watch to a browser-based fetcher, which is slower than a plain HTTP check. ## Ignore Rules Three filter fields let you control what gets monitored. See [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) for syntax and examples. * **Monitor Only** — CSS/XPath selectors to limit monitoring to specific sections * **Exclude Elements** — CSS selectors for elements to remove before checking * **Text Patterns** — Text or regex patterns to ignore ### Pick it on the page instead Below the Monitor Only textarea, **Pick it on the page instead** opens the watch's stored snapshot and lets you click the element you want followed. You get the selector without writing one, and it is checked against the page Site Spy actually stored, so it cannot silently match nothing. That screen also asks to replace an anchor before overwriting it, and it carries the other way of narrowing a watch — naming the message shown while you are waiting, so nothing is sent until that text disappears. See [Choosing What to Watch](/docs/dashboard/element-picker#picking-on-a-watch-you-already-have). ### Re-tune filters Below the filter fields, **Re-tune filters** asks Site Spy to analyze the watch and write filters for noise specific to that page — live counters, rotating promos, and other churn no generic rule can predict. The sparkle button on the watch row does the same thing without opening settings. You do not need it for the two most common cases: relative timestamps and view counts are stripped by [Noise Reduction](/docs/dashboard/settings), and ads and cookie banners by the **Block ads and cookie banners** toggle in a watch's [Browser settings](/docs/dashboard/watch-settings#browser). Both are deterministic and cost nothing. See [Smart Filters](/docs/dashboard/smart-filters). ## Pause and resume Click the **pause** button on the watch row to stop checking it. The watch stays in your list but no snapshots are taken until you resume it. Useful for temporarily disabling a watch without losing its configuration. Site Spy also pauses watches on its own — after repeated unrecoverable failures, or when a watch is over your plan's limit. A watch paused by the plan limit cannot be resumed until you upgrade or remove another watch. See [Watch Health](/docs/dashboard/watch-health) and [Billing](/docs/dashboard/billing#downgrading). ## Title Double-click the title on the watch row to rename it. The title appears in your watch list, notifications, and RSS feeds. # Managing Watches Source: https://docs.sitespy.app/docs/dashboard/watches View, recheck, and manage your watches from the web dashboard The [web dashboard](https://sitespy.app/dashboard/watches) provides a central view of all your watched pages. ## Watch list The dashboard shows all your watches with: * Page URL and favicon — the address is a link, so clicking it opens the page in a new tab * Last checked time * Change status indicator * Health state when a check is failing ### Status indicators | Status | Meaning | | -------------- | ----------------------------------------------------------------------------------------- | | Changed | New changes detected since you last viewed | | No changes | Page content is the same as the previous snapshot | | Pending | Watch was just created and hasn't been checked yet | | Viewing | Currently being checked by the server | | Error | The last check failed (network error, timeout, etc.) | | Paused | Checking is stopped, either by you or automatically after repeated failures | | Tuning filters | AI is rewriting this watch's filters — see [Smart Filters](/docs/dashboard/smart-filters) | A failing watch also carries a health badge saying *why* it failed and what to do about it, and its owner is emailed after a few consecutive failures. See [Watch Health & Failure Alerts](/docs/dashboard/watch-health). ## Adding watches Paste the address into the dashboard and press **Find What to Watch**. Site Spy loads the page and shows it to you as a picture, and you click the part you care about — the price, the availability line, the heading. Only changes inside that element email you. You cannot finish without choosing something, and that is deliberate: a watch pointed at a whole page alerts on every visitor counter, cookie banner and timestamp on it, which is noise rather than news. Where a page offers obvious candidates, they appear as chips above the picture (Price, Availability, Heading) — clicking one selects that element. They are found by inspecting the page itself, not by a model guessing at intent. You can also drag a box around an area rather than clicking one thing, and a click inside a list is answered with a question about whether you meant that one item or the whole list. See [Choosing What to Watch](/docs/dashboard/element-picker) for all of it. You can also add watches from the [browser extension](/docs/extension/watching-pages) or [AI Chat](/docs/dashboard/ai-chat). ## Rechecking Click the **recheck** button on any watch to trigger an immediate server-side check. The check runs in the background — if it takes longer than 90 seconds, you'll see a notification that it may still be processing. ## Viewing changes From the dashboard, you can access three views for each watch: * **Preview** — See the latest snapshot rendered as a page * **Timeline** — Browse all snapshots and compare any two * **Diff** — Compare the latest two snapshots side by side ## Pausing and resuming Click the pause button on a watch to temporarily stop checking it. The watch stays in your list with all its settings and history intact. Click resume to start checking again. Site Spy also pauses a watch by itself after a long run of failures it cannot recover from, and emails you when that happens. Resuming clears the error and queues an immediate check. See [Watch Health & Failure Alerts](/docs/dashboard/watch-health). ## Watch settings Click the gear icon on any watch to open its settings — check interval, screenshot capture, filters, and more. See [Watch Settings](/docs/dashboard/watch-settings) for details. ## Deleting watches Click the delete button on any watch to remove it. A confirmation dialog appears before deletion. If deletion fails, the error persists until you dismiss it or retry. ## Filtering, sorting, and search The toolbar above the list gives you: * **Search** — filters by URL and title * **Status** — show only watches in a given state, such as errored or paused * **Last changed** — narrow to watches that changed within a time window * **Sortable columns** — click Site, Checked, or Changed to sort by that column Active filters appear as chips, and **Clear all filters** resets them in one click. ## Marking changes as seen A watch that has changed since you last looked is flagged in the list. **Mark all viewed** clears those flags across every watch at once, rather than opening each one. ## Getting help with a failing watch A failing watch offers a **Get help with this watch** link, which opens the [support form](/docs/dashboard/support) with that watch already selected. # Webhook Notifications Source: https://docs.sitespy.app/docs/dashboard/webhooks Send change alerts to Discord, Slack, and 90+ services Webhook notifications let you send change alerts to external services. Site Spy supports **90+ notification services** through [Apprise](https://github.com/caronc/apprise/wiki#supported-notifications), including Discord, Slack, Microsoft Teams, and custom HTTP endpoints. Webhooks are available on all plans, including Free. ## Setting up webhooks 1. Go to the [Notifications page](https://sitespy.app/dashboard/notifications) in the dashboard 2. In the **Webhook Notifications** section, paste a webhook URL 3. Click **Add** You can add multiple webhook URLs. Each one receives notifications when any of your watches detect a change. ## Testing webhooks After adding a URL, click **Test** next to it. A test notification is sent immediately so you can verify the connection works. ## Supported services Webhook URLs use Apprise syntax. Some common examples: | Service | URL format | | ---------------- | --------------------------------- | | Discord | `discord://webhook_id/token` | | Slack | `slack://tokenA/tokenB/tokenC` | | Microsoft Teams | `msteams://token` | | Custom JSON | `json://your-server.com/endpoint` | | Custom form data | `form://your-server.com/endpoint` | See the full list of [90+ supported services](https://github.com/caronc/apprise/wiki#supported-notifications). ## Per-watch overrides By default, webhooks apply to all your watches. You can also set notification URLs on individual watches through the API, which override the global webhooks for that watch. ## Removing webhooks Click **Remove** next to any webhook URL to delete it. The change takes effect immediately. ## Dead webhooks are switched off automatically If a destination fails permanently — the Discord webhook was deleted, the endpoint returns 401, 404, or 410 — Site Spy disables that URL after 5 consecutive permanent failures and emails you. Temporary failures and timeouts do not count; they are retried. Re-add the URL once the destination works again. Ending a paid plan or a Pro trial clears your webhook destinations. Site Spy sends one final message through them first, then removes both the account-level webhook URLs and any per-watch notification URLs. They are not restored when you upgrade again — re-add them. # Notifications Source: https://docs.sitespy.app/docs/extension/notifications Get notified when your watched pages change Site Spy can notify you through multiple channels when changes are detected. ## Browser notifications Desktop push notifications appear even when the extension popup is closed. They are **off by default** — nothing is shown until you turn them on. 1. Open the extension popup and go to **Settings** 2. Expand the **Browser Notifications** section 3. Enable notifications using the toggle 4. Click **Send Test Notification** to verify they work **Show badge count** is a separate toggle in the same section, also off by default. Turn it on if you want the unviewed-change count on the extension icon. The extension only polls for changes in the background while notifications or the badge are enabled. **Background check interval** in the same section controls how often it does so — 1 to 60 minutes, 5 by default. This is local polling; the server checks your pages on its own schedule regardless. ### Was that change useful? Every change notification carries two buttons, **Useful** and **Noise**. They tell Site Spy whether that kind of change is worth alerting you about. The same pair appears on the diff page. Marking a change as noise offers to retune the watch's filters so similar changes stop notifying you. It is the fastest way to quieten a noisy watch without writing selectors by hand. ### Troubleshooting If test notifications don't appear: * **Chrome**: Check `chrome://settings/content/notifications` — make sure the browser is allowed to send notifications * **Firefox**: Check `about:preferences#privacy` under Permissions > Notifications * **macOS**: Go to System Settings > Notifications and ensure your browser is allowed * **Windows**: Go to Settings > System > Notifications and check your browser ## Email notifications Email notifications are available on all plans, including Free. 1. Go to the [web dashboard notifications page](https://sitespy.app/dashboard/notifications) 2. Click **Enable Notifications** in the Email section 3. A verification email is sent to your account email 4. Click the verification link in the email 5. Once verified, you'll receive emails when watched pages change You can send a test email to confirm delivery after verification. ## Telegram notifications Connect a Telegram bot to receive change alerts in Telegram. 1. Go to the [web dashboard notifications page](https://sitespy.app/dashboard/notifications) 2. Find the Telegram section 3. Click **Connect Telegram** 4. Click **Open in Telegram** to start the bot 5. Tap **Start** in the Telegram chat Once connected, you can send a test message and disconnect at any time. ## How often notifications can arrive Each watch is limited to 4 notifications per hour and 24 per day, across all channels. Changes above that are counted rather than sent, and the next notification tells you how many were held back. See [Email Notifications](/docs/dashboard/email-notifications#how-many-emails-you-can-get). ## Alerts when a watch breaks The same channels also carry health alerts: if a watched page starts blocking our checks, disappears, or your filter stops matching, Site Spy emails the watch owner instead of failing silently. These alerts are sent on every plan, including Free. See [Watch Health & Failure Alerts](/docs/dashboard/watch-health). # Extension Settings Source: https://docs.sitespy.app/docs/extension/settings Configure the extension to your preferences Open the extension popup and click the gear icon to access settings. ## Timing ### Notification speed (server recheck interval) Controls how quickly you'll be notified when a tracked page changes. Shorter intervals mean faster notifications but use more server resources. Default interval minimums vary by plan: | Plan | Minimum | | -------- | ---------- | | Free | 1 hour | | Starter | 10 minutes | | Pro | 10 minutes | | Business | 1 minute | Pro includes 10 fast slots at 1-minute intervals. Assign those to individual watches from the web dashboard. ### Background check interval How often the extension polls the server for changes while your browser is running. Range 1–60 minutes, default 5. It lives in the **Browser Notifications** section and only runs while notifications or the badge count are enabled. ### Popup refresh rate How often the watch list refreshes while the popup is open. This only affects the local display, not server-side checking. * Range: 30–300 seconds * Default: 30 seconds ## Theme Three modes are available: * **Auto** — Follows your system dark/light preference * **Dark** — Always dark * **Light** — Always light There is also a style variant: **Neon** (the default cyan-on-navy look) or **Classic** (muted). Mode and variant are set independently. The extension theme is separate from the [dashboard theme](/docs/dashboard/settings#theme). Changing one does not affect the other. ## API key management Your API key connects the extension to the backend. You can: * **Copy** the key to use in the web dashboard or other integrations * **Regenerate** the key if it's compromised ### Regenerating your key When you regenerate, a new API key is created and the old key stops working immediately. If you use the web dashboard, sign out and back in there to sync the new key. > Your watches belong to your account, not to the key, so regenerating is safe — reconnect the extension with the new key to carry on. ## Webhook notifications The **Webhook Notifications** section lets you add webhook destinations without opening the dashboard. See [Webhooks](/docs/dashboard/webhooks) for supported services and payload details. ## RSS feeds The **RSS Feeds** section enables feeds, shows your feed URL, and offers **Copy Feed URL**, **Regenerate Token**, and **Disable RSS**. Regenerating the token invalidates every feed URL you have already shared, so subscribers must re-add the new URL. See [RSS Feeds](/docs/dashboard/rss). ## Account If signed in, this section shows your email and a **Sign Out** button. Signing out doesn't delete your watches — sign back in to access them again. # Timeline and Diff Source: https://docs.sitespy.app/docs/extension/timeline-and-diff View change history and compare snapshots Site Spy captures snapshots of your watched pages every time it checks for changes. You can view these snapshots and compare them in two ways. ## Diff Diff compares the **two most recent snapshots** of a watched page. 1. Click the **diff icon** (split-screen icon) on any watch in the extension popup 2. Site Spy triggers a fresh recheck on the server and waits a few seconds 3. The diff view opens showing what changed between the last two snapshots That recheck counts against your daily manual-recheck allowance — 3 a day on Free, up to 100 on Business. Once it's used up the popup says **Recheck Limit Reached**; the diff still opens from the timeline without forcing a new check. **Best for:** Seeing what changed since the previous check. ### Reading the diff * **Green highlights** = content that was added * **Red highlights** = content that was removed Toggle between **Split** and **Unified** layouts at the top of the diff view. The diff page also carries the **Useful** / **Noise** buttons. Marking a change as noise offers to retune the watch's filters so that kind of change stops alerting you. ## Timeline Timeline lets you browse **all historical snapshots** and compare any two. 1. Click the **timeline icon** (clock icon) on any watch (requires at least 2 snapshots) 2. Browse snapshots with timestamps 3. Select any two snapshots to compare side by side **Best for:** Tracking changes over time and comparing specific points in history. > Snapshots are created each time the server checks the site. Wait for the next scheduled check or trigger a manual recheck to create more snapshots. ## Preview Preview shows the most recent snapshot as a rendered page, so you can see what the page looked like at the time of capture. ## Tips * Use **Diff** for "what changed since last check" comparisons * Use **Timeline** for historical analysis across multiple snapshots * All content checking happens on the monitoring server for accuracy * Use element monitoring to ignore dynamic content like ads or timestamps # Watching Pages Source: https://docs.sitespy.app/docs/extension/watching-pages Add websites to your watchlist and monitor specific elements ## Adding a watch 1. Navigate to the page you want to track 2. Click the Site Spy icon in your toolbar 3. Click **Track Current Page** — the current page URL is added automatically You can also type a URL into the field and click **Track Entered URL**. Or skip the popup entirely: right-click anywhere on a page and choose **Track This Page**. Right-clicking a link tracks the link's target, so you can add a page without opening it. **Track an Element on This Page** starts the element picker directly from the same menu. ### Watching one thing instead of the whole page Tracking a whole page means being alerted on every timestamp, banner and visitor counter on it. To watch one thing instead, use **Pick an Element on This Page** below, or open the watch in your dashboard and [point at the element](/docs/dashboard/element-picker) on a picture of the page. The popup also has a field asking what changes matter. It is optional, and it only does something when [Smart Filters](/docs/dashboard/smart-filters) are switched on — that setting is off by default. The first snapshot is taken automatically. You'll see a "Pending" status while the initial check runs (usually takes about a minute). ## Monitoring specific elements Instead of tracking the entire page, you can monitor a specific section: 1. Click **Pick an Element on This Page** in the extension popup 2. The popup closes and elements are highlighted as you hover over them 3. Click the element you want to monitor (a price, a headline, a stock line) 4. A bar appears with the selector and three buttons — **Track This Element**, **Re-select**, **Cancel** 5. Confirm, and the watch is created with the CSS selector already filled in Enter confirms and Escape lets go of the selection; Escape again leaves the picker. The button only appears when the URL field is empty, because this picker works on the tab in front of you. Type an address into the field and you get **Track Entered URL** instead — pick on that page from the [dashboard](/docs/dashboard/element-picker) once the watch exists. The extension picks on the live page, so it is click-only: drawing a box around an area and the "just this one or the whole list" question belong to the dashboard and chat picker. See [Choosing What to Watch](/docs/dashboard/element-picker). > The element inspector doesn't work on browser internal pages (`chrome://`, `about:`, extension pages). Navigate to a regular website first. ## Finding a watch The search box at the top of the popup filters your list by URL and title as you type. ## Pausing a watch Each watch row has a pause button. Paused watches show a **PAUSED** tag and are not checked until you resume them. Site Spy pauses watches on its own in two cases, both shown in the button's tooltip: * **After repeated failures** — resume it once you've fixed the cause. See [Watch Health](/docs/dashboard/watch-health). * **Over your plan limit** — the resume button stays disabled until you upgrade or remove another watch. ## Check intervals The server checks your watches on a schedule. Defaults and per-watch minimums depend on your plan: | Plan | Default interval | Per-watch minimum | | -------- | ---------------- | ---------------------------------- | | Free | 1 hour | 1 hour | | Starter | 10 minutes | 10 minutes | | Pro | 10 minutes | 1 minute for up to 10 fast watches | | Business | 1 minute | 1 minute for every watch | You can also trigger an immediate recheck from the [web dashboard](/docs/dashboard/watches) by clicking the recheck button on any watch. # FAQ Source: https://docs.sitespy.app/docs/faq Frequently asked questions about Site Spy ## How does change detection work? Site Spy takes snapshots of your watched pages at the interval you set (from minutes to weekly). When changes are detected, a visual diff highlights exactly what changed — green for additions, red for removals. You can browse the full snapshot timeline to compare any two versions. ## Is Site Spy free? Yes. The free plan lets you track up to 2 websites with hourly checks. All notification channels (email, Telegram, push, webhooks) are included free. For more watches, faster check intervals, and features like screenshots, upgrade to the [Starter, Pro, or Business plan](/docs/dashboard/billing). ## How can I access Site Spy? The web dashboard works in any browser, including mobile. The browser extension is available for Chrome and Firefox. When signed in, your watches sync across all devices automatically. ## Can I track prices or get back-in-stock alerts? Yes — Site Spy has a monitoring mode that reads a product's price and availability from the page's structured data rather than diffing its text, with options for a target price, a percentage threshold, and in-stock-only alerts. See [Price & Restock Monitoring](/docs/dashboard/price-and-restock). ## Can I track specific parts of a page? That is the normal way to use Site Spy, and it is how a watch gets created. Paste the address, press **Find What to Watch**, and the page is shown to you as a picture — click the price, the stock line, the heading, or drag a box around an area. Only changes inside it reach you, and you cannot finish creating the watch without choosing. The same picker opens inside the [AI Chat](/docs/dashboard/ai-chat), on the live page from the browser extension, and on a watch you already have. See [Choosing What to Watch](/docs/dashboard/element-picker). If you would rather write the selector yourself, the **Monitor Only** field in [Watch Settings](/docs/dashboard/watch-settings) takes CSS and XPath — see [CSS & XPath Filters](/docs/dashboard/css-xpath-filters) for syntax and examples. ## What are Smart Filters? Smart Filters use AI to reduce noise on new watches. They are **off by default** — nothing is analyzed until you turn them on in [settings](https://sitespy.app/dashboard/settings). Once on, Site Spy reads each new watch after its first snapshot and applies filters that remove timestamps, cookie banners, visitor counters, and other dynamic content, and it can repair a noisy existing watch later on the same switch. This is free and uses a server-side AI model. It never replaces the element you pointed at. See [Smart Filters](/docs/dashboard/smart-filters). ## What is the AI Chat? The [AI Chat](https://sitespy.app/chat) is a conversational assistant that can create watches, check changes, adjust ignore text, trigger text and the check interval, and manage your monitors through natural language. It cannot decide what a watch follows — it opens the [picker](/docs/dashboard/element-picker) on the watch card so you point at that yourself. It's available to all users with daily message limits based on your plan (5/day for anonymous, up to 500/day for Business). See [AI Chat](/docs/dashboard/ai-chat). ## What are AI change summaries? Pro and Business plans can enable AI-powered change summaries by adding your own API key (Anthropic Claude, OpenAI GPT, or Google Gemini) in [Dashboard Settings > API & Monitoring](https://sitespy.app/dashboard/settings?tab=api). Site Spy uses your key to generate plain-language summaries of detected changes. See [AI Features](/docs/dashboard/ai-features). ## Can I share a watch with someone? Yes. Every watch has a share button that generates a link. When someone opens the link, they see the watch configuration and can add it to their own account with one click. See [Share Links](/docs/dashboard/share-links) for details. ## What is the MCP integration? Site Spy provides an [MCP server](https://www.npmjs.com/package/@site-spy/mcp-server) that integrates with AI assistants like Claude Code, Claude Desktop, Codex, OpenCode, Cursor, and other MCP-compatible tools. Your AI assistant can monitor websites, compare snapshots, fetch pages, and summarize changes through Site Spy. The quickest setup, if you use Claude Code: ```bash theme={null} claude mcp add site-spy --env SITE_SPY_API_KEY=your-api-key -- npx -y @site-spy/mcp-server ``` See the [MCP Integration guide](/docs/dashboard/mcp-integration) for every other client, the full tool list, and plan limits. ## What happens if I lose my API key? If you're signed in with an account, you can regenerate your API key from the dashboard or extension settings. Your watches are tied to your account and will be migrated to the new key. Site Spy has no anonymous mode — every watch belongs to an account, so a lost key is never a lost watchlist. Regenerate the key and reconnect the extension. ## How do I get faster notifications? All notification channels (email, Telegram, push, webhooks) are available on every plan including Free. To get notified faster, upgrade to Starter for 10-minute checks, or Pro for a 10-minute default plus up to 10 fast watches at 1-minute intervals. Set up your preferred channels on the [Notifications page](https://sitespy.app/dashboard/notifications). ## What happens if one of my watches stops working? Site Spy classifies the failure — bot protection, a missing page, a broken filter, a login wall — and shows it as a health badge on the watch. If the failure persists, the owner gets an email explaining what went wrong and what to do about it: after 5 consecutive failed checks on Free, 3 on paid plans, and 2 for site blocking or a broken filter on paid plans. Failures that cannot recover eventually pause the watch, and that pause is emailed too, so a watch never goes quiet without telling you. Health alerts are available on every plan, including Free. See [Watch Health & Failure Alerts](/docs/dashboard/watch-health). ## Why can't I create a watch? Watch creation requires a verified email address. If you signed up and haven't clicked the verification link yet, the request is rejected. Resend the link from [Settings](https://sitespy.app/dashboard/settings), then try again. Two other rules can block a URL: the address must be a public `http://` or `https://` page — LAN addresses, `localhost`, and internal hostnames are refused — and signups from throwaway email providers are rejected (privacy relays like Proton, SimpleLogin, and DuckDuckGo are fine). ## What happens if I don't verify my email? Change notifications go to the unverified address for the first 7 days, then stop. An account that is never verified, owns no watches, and has no subscription is deleted after 14 days. ## Can I monitor pages that require login? Yes, with [Browser Steps](/docs/dashboard/browser-steps) (Pro/Business). Browser Steps automate interactions like filling in login credentials, clicking cookie consent buttons, or navigating through single-page apps before capturing a snapshot. ## Can I customize what buttons appear on my watch list? Yes. Go to [Dashboard Settings > Appearance](https://sitespy.app/dashboard/settings?tab=appearance) and toggle optional action buttons (Screenshots, RSS feed, Share link, Open site) on or off. Core actions like Recheck, Preview, and Diff are always visible. See [Dashboard Settings](/docs/dashboard/settings#watch-list-actions). ## Does Site Spy work on all websites? Site Spy works on most publicly accessible websites. It cannot monitor: * Browser internal pages (`chrome://`, `about:`) * Content loaded only via JavaScript interactions (e.g., infinite scroll) — unless you use [Browser Steps](/docs/dashboard/browser-steps) Pages behind login walls can be monitored with [Browser Steps](/docs/dashboard/browser-steps) (Pro/Business). ## Can I collaborate with my team? Yes, the Business plan (€99/mo) includes 5 team seats with shared watches and dashboards. You can invite members with Member or Admin roles. Five seats is the maximum — contact support if you need a larger team. See [Team Management](/docs/dashboard/team-management). ## How do I delete my account? Go to [Dashboard Settings > Account](https://sitespy.app/dashboard/settings?tab=account) and scroll to **Delete Account**. This permanently removes your account, all watches, and all data. The action cannot be undone. # Connecting to the Dashboard Source: https://docs.sitespy.app/docs/getting-started/connecting Sign in to Site Spy and connect the browser extension Site Spy requires an account. The web dashboard at [sitespy.app/dashboard](https://sitespy.app/dashboard) is where you manage watches, notifications, and billing; the extension signs in to the same account. ## Sign in from the extension The fastest route — no copying keys: 1. Open the extension popup 2. Click **Continue with Google** 3. Approve the permission prompt The popup signs in and your watches appear immediately. ## Connect with an API key Use this if you signed up with email and password, or you want the extension pointed at an existing account: 1. Go to [sitespy.app/login](https://sitespy.app/login) and sign in or create an account 2. Navigate to **Settings** in the dashboard sidebar 3. In the **API & Monitoring** tab, click **Copy Key** 4. In the extension popup, open the connect dialog from the header 5. Paste the API key and click **Connect** Your watches sync across every browser signed in to the same account. ## Verify your email Verification is not optional. Until your address is verified you cannot create watches — the API rejects the request — and change notifications have nowhere to go. Check your inbox after signing up and click the verification link. If it hasn't arrived, resend it from [Settings](https://sitespy.app/dashboard/settings). Two consequences worth knowing: * New accounts receive change notifications at the unverified address for the first 7 days as a grace period. After that, alerts to an unverified address are dropped. * An account that is never verified, owns no watches, and has no subscription is deleted after 14 days. ## Disposable email addresses Signups from throwaway inbox providers are rejected. Privacy relays that forward to a real mailbox — Proton, SimpleLogin, DuckDuckGo, and similar — are accepted, because Site Spy needs a working address to tell you when a watch breaks. ## Verify the connection Once connected, the account section in extension settings shows a green "Connected" status with your email, and your watch list displays existing watches from the dashboard. # Installation Source: https://docs.sitespy.app/docs/getting-started/installation Install the Site Spy browser extension (optional) > **Note:** You don't need the extension to use Site Spy. The [web dashboard](https://sitespy.app/dashboard) works in any browser, including mobile. The extension adds one-click tracking from any page you visit. ## Chrome 1. Visit the [Chrome Web Store listing](https://chromewebstore.google.com/detail/site-spy/jeapcpanagdgipcfnncmogeojgfofige) 2. Click **Add to Chrome** 3. The Site Spy icon appears in your toolbar ## Firefox 1. Visit the [Firefox Add-ons listing](https://addons.mozilla.org/en-GB/firefox/addon/site-spy/) 2. Click **Add to Firefox** 3. The Site Spy icon appears in your toolbar ## After installation Click the Site Spy icon in your toolbar to open the popup. On a fresh install the popup asks you to sign in — click **Continue with Google**, or paste an API key from the dashboard. Site Spy has no anonymous mode: watches belong to an account so they can be recovered, synced, and notified on. Once signed in you can start tracking pages on the free plan (up to 2 watches, hourly checks). See [Connecting to the Dashboard](/docs/getting-started/connecting). # Welcome to Site Spy Source: https://docs.sitespy.app/docs/index Monitor website changes with ease Site Spy is a website monitoring tool that tracks pages for changes automatically. Use the web dashboard on any device, or install the browser extension for Chrome and Firefox. It checks pages on a schedule you set, detects updates, and notifies you instantly. ## What can you do with Site Spy? * **Track any website** — Add pages to your watchlist and get notified when they change * **Point at what you want watched** — [The picker](/docs/dashboard/element-picker) shows the page and you click the price, the stock line, the heading — or drag a box around an area. Only changes inside it reach you * **Pick it anywhere** — the same choice is made from the dashboard, inside the [AI Chat](/docs/dashboard/ai-chat), or on the live page from the [browser extension](/docs/extension/watching-pages) * **Price & restock alerts** — [A dedicated mode](/docs/dashboard/price-and-restock) that reads a product's price and stock status instead of diffing page text * **Visual diffs** — See exactly what changed with green (added) and red (removed) highlights * **Screenshot capture** — Capture full-page screenshots and compare them visually with before/after sliders and diff overlays (Pro) * **Snapshot timeline** — Browse every captured version and compare any two snapshots * **Get notified** — Browser alerts, email, Telegram, or [90+ webhook integrations](/docs/dashboard/webhooks) (Discord, Slack, Teams, and more) * **Told when a watch breaks** — [Health alerts](/docs/dashboard/watch-health) email you when a page starts blocking us or a filter stops matching, on every plan including Free * **AI Chat** — [Manage watches through conversation](/docs/dashboard/ai-chat) — create monitors, check changes, adjust ignore rules and check intervals. It opens the picker rather than deciding what a watch follows * **Smart Filters** — [optional AI noise reduction](/docs/dashboard/smart-filters), off by default, that strips timestamps, cookie banners and other dynamic content from new watches * **AI change summaries** — Bring your own API key (Claude, GPT, or Gemini) for plain-language change summaries (Pro/Business) * **MCP integration** — Connect AI assistants like Claude and Cursor to monitor websites through Site Spy * **CSS & XPath filters** — [Write the selector by hand](/docs/dashboard/css-xpath-filters) when you would rather not point, and ignore noisy text by regex * **Browser steps** — [Monitor login-protected pages](/docs/dashboard/browser-steps) with automated interactions (Pro/Business) * **Share watches** — Send a [share link](/docs/dashboard/share-links) so others can add your watch configuration in one click * **Community watches** — [Browse public monitoring setups](/docs/dashboard/community) to find pages worth following, or publish your own * **Team collaboration** — Invite team members to share watches and dashboards (Business) * **RSS feeds** — Subscribe to change feeds in any RSS reader * **Import & Export** — Bulk import URLs and export your watches as JSON or plain text * **Customize your view** — Toggle action buttons, choose dark/light/auto theme * **Sync across devices** — Sign in once, access all watches from any browser ## Get started # AI-Readable Documentation Source: https://docs.sitespy.app/llms Access Site Spy documentation in formats optimized for AI assistants and coding agents Site Spy publishes its documentation in machine-readable formats so AI assistants can find product guidance and API details without parsing the rendered website. Browse a compact index of every documentation page and API endpoint. Load the full documentation site as a single plain-text file. ## Available formats * [`llms.txt`](https://docs.sitespy.app/llms.txt) provides a concise index with links and descriptions. Use it to discover the pages relevant to a question. * [`llms-full.txt`](https://docs.sitespy.app/llms-full.txt) combines the complete documentation into one file for tools that need all available context. * Add `.md` to any documentation URL to retrieve that page as Markdown. For example, [`/docs/getting-started/installation.md`](/docs/getting-started/installation.md). * The [OpenAPI specification](/api-reference/openapi.yaml) provides a machine-readable description of the Site Spy API. ## Use with an AI assistant Give your assistant the documentation index and ask it to open only the pages it needs: ```text theme={null} Read https://docs.sitespy.app/llms.txt, then use the relevant linked pages to answer my question about Site Spy. ``` For offline analysis or tools that cannot follow links, provide [`llms-full.txt`](https://docs.sitespy.app/llms-full.txt) instead.