{
  "openapi": "3.0.1",
  "info": {
    "title": "Smart Website Change Monitor",
    "description": "Monitor any public webpage for price, stock, text, and job listing changes. Get meaningful change detection without manually checking websites. Includes persistent baselines, noise filtering, automatic browser fallback, webhooks, CSS selector monitoring, and optional AI summaries.",
    "version": "1.0",
    "x-build-id": "FGY393QfQ78YgyGNb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hightower06~smart-website-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hightower06-smart-website-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/hightower06~smart-website-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-hightower06-smart-website-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/hightower06~smart-website-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-hightower06-smart-website-change-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Pages to monitor",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "Add one or more public webpage URLs. For a quick first test, leave the default URL and run the Actor.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "mode": {
            "title": "Monitoring mode",
            "enum": [
              "auto",
              "text",
              "price",
              "stock",
              "jobs"
            ],
            "type": "string",
            "description": "Choose what matters. Auto detects price, stock, job links, and meaningful text changes.",
            "default": "auto"
          },
          "selector": {
            "title": "CSS selector to monitor (optional)",
            "type": "string",
            "description": "Optional. Monitor only a stable section such as #price, .product-info, or main to reduce false alerts."
          },
          "renderMode": {
            "title": "Page rendering",
            "enum": [
              "auto",
              "http",
              "browser"
            ],
            "type": "string",
            "description": "Auto first tries a cheap HTTP request and falls back to a real browser when the page appears blocked or empty.",
            "default": "auto"
          },
          "ignoreSelectors": {
            "title": "CSS selectors to ignore",
            "type": "array",
            "description": "Dynamic elements that should not trigger changes, such as cookie banners or live counters.",
            "default": [
              "script",
              "style",
              "noscript",
              "template",
              "svg",
              "canvas",
              "[aria-live='polite']"
            ],
            "items": {
              "type": "string"
            }
          },
          "minTextChangePercent": {
            "title": "Minimum text change",
            "minimum": 0,
            "maximum": 100,
            "type": "number",
            "description": "Text changes below this percentage are treated as noise unless price/stock/jobs changed.",
            "default": 5
          },
          "minimumSignificance": {
            "title": "Minimum significance score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only changes at or above this 0-100 score are emitted as meaningful changes.",
            "default": 15
          },
          "emitBaseline": {
            "title": "Emit first-run baseline",
            "type": "boolean",
            "description": "If enabled, the first successful observation is written to the dataset as an initialized result.",
            "default": true
          },
          "emitUnchanged": {
            "title": "Emit unchanged pages",
            "type": "boolean",
            "description": "Write an output row even when nothing changed. Recommended for monitoring history and Apify Store health checks.",
            "default": true
          },
          "resetBaseline": {
            "title": "Reset baseline",
            "type": "boolean",
            "description": "Overwrite the saved baseline on this run instead of reporting changes.",
            "default": false
          },
          "stateStoreName": {
            "title": "Persistent state store name",
            "type": "string",
            "description": "Named key-value stores are retained indefinitely on Apify. Keep this value stable for scheduled monitoring.",
            "default": "smart-change-monitor-state"
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time to wait for each HTTP or browser page request before treating it as an error.",
            "default": 35
          },
          "browserWaitSecs": {
            "title": "Extra browser wait",
            "minimum": 0,
            "maximum": 15,
            "type": "number",
            "description": "Extra time after DOMContentLoaded for JavaScript-heavy pages.",
            "default": 1.5
          },
          "maxTextChars": {
            "title": "Maximum stored text",
            "minimum": 1000,
            "maximum": 200000,
            "type": "integer",
            "description": "Caps normalized text stored per page to keep persistent state compact.",
            "default": 50000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional Apify Proxy settings for public pages that need a proxy. Start without proxy unless required."
          },
          "notificationWebhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "POST all meaningful changes to this endpoint after the run. Useful with Make, Zapier, Slack bridges, or your own API."
          },
          "webhookBearerToken": {
            "title": "Webhook bearer token (optional)",
            "type": "string",
            "description": "Stored encrypted by Apify."
          },
          "enableAiSummary": {
            "title": "Generate optional AI summary",
            "type": "boolean",
            "description": "Requires your own OpenAI API key. The Actor still works fully without AI.",
            "default": false
          },
          "openaiApiKey": {
            "title": "OpenAI API key (optional)",
            "type": "string",
            "description": "Only used when AI summaries are enabled. Stored encrypted by Apify."
          },
          "openaiModel": {
            "title": "OpenAI model",
            "type": "string",
            "description": "A low-cost text model is recommended because the deterministic change detector already does the core work.",
            "default": "gpt-5.6-luna"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}