{
  "openapi": "3.0.1",
  "info": {
    "title": "Sitemap Extractor: Every Page URL, with Change Alerts",
    "description": "Get every page URL from any website's sitemaps (robots.txt, sitemap indexes, gzip), or schedule it to get only pages added, updated or removed since the last run. Built for SEO audits and competitor monitoring.",
    "version": "0.2",
    "x-build-id": "UQXVckOHjnyCVtFpQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rookdev~sitemap-change-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rookdev-sitemap-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/rookdev~sitemap-change-monitor/runs": {
      "post": {
        "operationId": "runs-sync-rookdev-sitemap-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/rookdev~sitemap-change-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-rookdev-sitemap-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": [
          "websites"
        ],
        "properties": {
          "websites": {
            "title": "Websites or sitemap URLs",
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "description": "One per line. A website (https://docs.apify.com or just docs.apify.com) finds its sitemaps through robots.txt, then /sitemap.xml and /sitemap_index.xml. A sitemap URL (https://example.com/sitemap-products.xml, .xml.gz or .txt) reads just that sitemap and any sitemaps it lists. At most 1,000 per run; addresses on private or local networks are refused.",
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new and removed pages since the last run",
            "type": "boolean",
            "description": "Turn on, save as a task and schedule it to get only changes: pages added (new) and pages removed (gone), plus updated pages if you turn that on below. The first run returns every page as new. Normal runs never touch this memory.",
            "default": false
          },
          "skipExistingOnFirstRun": {
            "title": "Start quietly: skip existing pages on the first run",
            "type": "boolean",
            "description": "Monitoring only: the first run records the pages that exist today without returning or charging for them (you pay only the site check), so you get only real changes from the second run on.",
            "default": false
          },
          "reportUpdatedPages": {
            "title": "Also report updated pages (last-modified date moved)",
            "type": "boolean",
            "description": "When monitoring, also return pages whose <lastmod> date in the sitemap moved (status changed, with the previous date). Off by default: many shops, Shopify stores among them, re-date most pages all the time, which would be paid noise. When it is on, a sitemap file in which half or more of its pages (at least 50) move at once is treated as a re-stamp and reported as nothing. Turning it on starts a separate monitoring memory, so its first run is a first run again.",
            "default": false
          },
          "urlContains": {
            "title": "URL must contain",
            "maxItems": 100,
            "type": "array",
            "description": "Keep only page URLs that contain any of these texts (case-insensitive), for example /blog/ or /products/. Leave empty for all pages. At most 100 entries of up to 200 characters.",
            "items": {
              "type": "string"
            }
          },
          "urlExcludes": {
            "title": "URL must not contain",
            "maxItems": 100,
            "type": "array",
            "description": "Drop page URLs that contain any of these texts (case-insensitive), for example /tag/ or ?lang=. At most 100 entries of up to 200 characters.",
            "items": {
              "type": "string"
            }
          },
          "maxUrlsPerSite": {
            "title": "Max URLs per site",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop reading a site's sitemaps after this many matching URLs, to cap costs. With a URL filter, a site scans at most 10 times this many URLs. When a site is cut short, no pages are reported as removed in that run, and pages seen for the first time are reported as new only when their last-modified date is after the previous run.",
            "default": 10000
          },
          "stateStoreName": {
            "title": "Monitoring memory name",
            "pattern": "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$",
            "maxLength": 63,
            "type": "string",
            "description": "Key-value store that remembers which pages you have already seen (lowercase letters, digits and hyphens). Each saved task and each combination of filters keeps its own memory inside it, so the default works for most people.",
            "default": "sitemap-change-monitor-state"
          },
          "maxConcurrency": {
            "title": "Sites checked in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many websites to read at the same time. Sitemaps of one site are always read one after another, to be gentle with it.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}