{
  "openapi": "3.0.1",
  "info": {
    "title": "Broken Link Checker & Sitemap Checker: Status & Redirects",
    "description": "Broken link checker for a sitemap, URL list or page: $0.20 per 1,000 URLs + $0.01 per run, all-in. HTTP status codes, full redirect chains, soft 404s, timeouts and noindex, with an Excel report. Runs that check nothing are free.",
    "version": "0.1",
    "x-build-id": "7chzpXCli3qeTkSHK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowsmithhq~sitemap-broken-link-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowsmithhq-sitemap-broken-link-checker",
        "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/rowsmithhq~sitemap-broken-link-checker/runs": {
      "post": {
        "operationId": "runs-sync-rowsmithhq-sitemap-broken-link-checker",
        "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/rowsmithhq~sitemap-broken-link-checker/run-sync": {
      "post": {
        "operationId": "run-sync-rowsmithhq-sitemap-broken-link-checker",
        "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": {
          "sitemapUrls": {
            "title": "Sitemap URLs",
            "type": "array",
            "description": "Links to sitemaps, for example https://www.example.com/sitemap.xml. Sitemap index files, .xml.gz files, text sitemaps and RSS feeds work too. A website's home page also works: its sitemap is found through robots.txt or the usual addresses. Every URL listed is checked.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs to check",
            "type": "array",
            "description": "Any web addresses to check as given, one per line (paste them, or upload a text or CSV file). Good for bulk status checks and for checking the redirects of an old site after a migration.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "startUrls": {
            "title": "Pages whose links to check",
            "type": "array",
            "description": "Every link and image on these pages is checked (one level deep: the links are not followed further). Each broken link is reported with the page it is on and its anchor text.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxUrls": {
            "title": "Maximum URLs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most URLs to check in this run (pages scanned, URLs from your list and sitemap, and links found all count). You pay only for URLs that were checked.",
            "default": 10000
          },
          "checkLinksOnSitemapPages": {
            "title": "Also check links on sitemap pages",
            "type": "boolean",
            "description": "Read every page listed in the sitemap and check all of its links and images too: a broken link check of the whole site. Each link is checked once, however many pages use it.",
            "default": false
          },
          "checkExternalLinks": {
            "title": "Check links to other websites",
            "type": "boolean",
            "description": "Check links found on pages that point to other websites. Switch off to check only links within the same site.",
            "default": true
          },
          "checkImages": {
            "title": "Check images",
            "type": "boolean",
            "description": "Check that every image on the scanned pages loads (with HEAD, without downloading it).",
            "default": true
          },
          "checkIndexability": {
            "title": "Check indexability and soft 404s",
            "type": "boolean",
            "description": "Read the start of each web page (its head and first heading, at most 256 KB) to find noindex tags, canonical tags that point elsewhere, and pages that say 'not found' while answering 200 (compared with the site's own 'not found' page, so pages about 404 errors are not flagged). Switch off for the fastest pure status check: then pages are checked with HEAD only.",
            "default": true
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Links found on pages are checked only when the linked site's robots.txt allows it; the rest are listed as 'Not checked' (free). URLs you give (sitemaps, lists, pages) are always checked as given.",
            "default": true
          },
          "excludeUrlPatterns": {
            "title": "Skip addresses containing",
            "type": "array",
            "description": "URLs from sitemaps and links whose address contains any of these are not checked. Use * as a wildcard, for example /tag/ or ?replytocom= or /page/*/.",
            "items": {
              "type": "string"
            }
          },
          "maxRedirects": {
            "title": "Maximum redirects to follow",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "A URL that redirects more times than this is reported as broken (browsers give up after about 20; search engines after about 10).",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "How long to wait for each answer. A URL that does not answer in time is tried once more, then reported as 'No answer'.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Requests at the same time",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many URLs are checked at once, across all websites.",
            "default": 20
          },
          "maxRequestsPerHost": {
            "title": "Requests per website at the same time",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "At most this many requests go to any one website at once. A site that answers 'too many requests' is slowed down automatically, and a Crawl-delay in robots.txt is honoured for links to other websites.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}