{
  "openapi": "3.0.1",
  "info": {
    "title": "Sitemap Scraper - Find the Sitemap and Watch for New URLs",
    "description": "Give it a domain. It reads robots.txt to find where that site really keeps its sitemap, follows nested indexes, unpacks gzip, and returns one row per URL with lastmod, change frequency and priority. Monitoring mode returns only the URLs that are new since the last run.",
    "version": "0.1",
    "x-build-id": "cKiNyQgK17XFZDh51"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~sitemap-finder-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-sitemap-finder-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/neverempty~sitemap-finder-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-sitemap-finder-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/neverempty~sitemap-finder-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-sitemap-finder-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",
        "properties": {
          "sites": {
            "title": "Sites",
            "type": "array",
            "description": "Domains or URLs. A bare domain such as stripe.com is enough: the Actor reads robots.txt to find where that site actually keeps its sitemap, and only falls back to guessing common locations if robots.txt declares none.",
            "default": [
              "stripe.com",
              "vercel.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "sitesText": {
            "title": "Sites (paste, one per line)",
            "type": "string",
            "description": "The same list as a block you can paste. Both fields are merged and duplicates are dropped.",
            "default": ""
          },
          "sitemapUrls": {
            "title": "Sitemap URLs (skip the search)",
            "type": "array",
            "description": "Give sitemap files directly when you already know them. These are read in addition to whatever the sites above turn up.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "useCommonPaths": {
            "title": "Try common locations when robots.txt declares none",
            "type": "boolean",
            "description": "Tries /sitemap.xml, /sitemap_index.xml, /sitemap/sitemap.xml and six more. Turn this off to report only what a site officially declares.",
            "default": true
          },
          "maxUrls": {
            "title": "Maximum URLs",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Stop after this many URLs across all sites in this run.",
            "default": 1000
          },
          "maxUrlsPerSite": {
            "title": "Maximum URLs per site",
            "minimum": 0,
            "maximum": 200000,
            "type": "integer",
            "description": "Cap each site separately so one large site cannot use up the whole run. 0 = no per-site cap.",
            "default": 0
          },
          "maxSitemaps": {
            "title": "Maximum sitemap files",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Large sites split their sitemap into many files. This caps how many files are opened.",
            "default": 50
          },
          "maxSitemapDepth": {
            "title": "Maximum index depth",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "A sitemap index can point at other indexes. This is how many levels down to follow.",
            "default": 3
          },
          "timeoutSecs": {
            "title": "Timeout per request (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Give up on a single sitemap file after this long. The other files are still returned.",
            "default": 20
          },
          "pathIncludes": {
            "title": "Path contains",
            "type": "array",
            "description": "Keep only URLs whose address contains one of these, for example /blog/ or /docs/. Empty keeps everything.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "pathExcludes": {
            "title": "Path does not contain",
            "type": "array",
            "description": "Drop URLs whose address contains any of these, for example /tag/ or ?page=.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "extensions": {
            "title": "File extensions",
            "type": "array",
            "description": "Keep only URLs ending in these, for example pdf or html. A URL with no extension is dropped when this is set.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "lastmodAfter": {
            "title": "Changed on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Keep URLs the sitemap says were changed on or after this date. A URL with no date is kept, because unknown is not the same as old.",
            "default": ""
          },
          "lastmodBefore": {
            "title": "Changed on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Keep URLs the sitemap says were changed on or before this date. A URL with no date is kept.",
            "default": ""
          },
          "minPriority": {
            "title": "Minimum priority",
            "minimum": 0,
            "maximum": 1,
            "type": "integer",
            "description": "Sitemaps may carry a priority from 0 to 1. This keeps only URLs at or above it. A URL with no priority is kept.",
            "default": 0
          },
          "changefreqIn": {
            "title": "Change frequency",
            "type": "array",
            "description": "Keep only URLs the sitemap marks with these frequencies, such as daily or weekly.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only URLs containing these words. Matched against the whole address.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any = contains at least one. all = contains every one.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop URLs containing any of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "monitoringMode": {
            "title": "Monitoring mode: return only URLs that are new",
            "type": "boolean",
            "description": "Reads the same sites again and returns only the URLs that were not there last time. The first run returns everything and remembers it. Nothing new means nothing returned and nothing charged, so watching a competitor for new pages costs nothing on quiet days.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget what was already returned",
            "type": "boolean",
            "description": "Clears the memory so the next monitoring run treats every URL as new.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}