{
  "openapi": "3.0.1",
  "info": {
    "title": "Leadership Change Tracker — New Exec Hires & Job Changes",
    "description": "New executive hires and job changes as buying signals: who just took which role at which company, where they came from, when it happened, and who to sell to. One row per change, merged across every outlet that reported it, with what is new since your last run. Dataset-only, MCP-ready.",
    "version": "0.1",
    "x-build-id": "yAbjT5rSNjOmkMdE7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/inovaflow~leadership-change-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-inovaflow-leadership-change-tracker",
        "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/inovaflow~leadership-change-tracker/runs": {
      "post": {
        "operationId": "runs-sync-inovaflow-leadership-change-tracker",
        "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/inovaflow~leadership-change-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-inovaflow-leadership-change-tracker",
        "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": {
          "companies": {
            "title": "Company watchlist (optional)",
            "maxItems": 500,
            "type": "array",
            "description": "One per line: a domain (`gong.io`) or a company name (`Gong`). With a domain the company's own leadership page is read as well, which catches moves that never made the news.",
            "items": {
              "type": "string"
            }
          },
          "titles": {
            "title": "Titles that matter to you",
            "maxItems": 20,
            "type": "array",
            "description": "Roles whose new holder is a buyer for you, one per line — `Chief Revenue Officer`, `VP of Marketing`, `Head of Data`. Leave empty to cover the whole executive bench.",
            "items": {
              "type": "string"
            }
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only changes at these levels. Empty = C-level, VP, Director and Head (the levels with budget).",
            "items": {
              "type": "string",
              "enum": [
                "c-level",
                "founder",
                "vp",
                "director",
                "head",
                "manager"
              ],
              "enumTitles": [
                "C-level (CEO, CRO, CMO, CTO…)",
                "Founder / owner",
                "VP / SVP / EVP",
                "Director",
                "Head of",
                "Manager"
              ]
            },
            "default": []
          },
          "departments": {
            "title": "Departments",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only changes in these functions. Empty = every function.",
            "items": {
              "type": "string",
              "enum": [
                "executive",
                "sales",
                "marketing",
                "engineering",
                "product",
                "data",
                "design",
                "finance",
                "operations",
                "hr",
                "customer-success",
                "it",
                "legal"
              ],
              "enumTitles": [
                "Executive / general management",
                "Sales & revenue",
                "Marketing & growth",
                "Engineering",
                "Product",
                "Data & analytics",
                "Design",
                "Finance",
                "Operations",
                "People / HR",
                "Customer success",
                "IT & security",
                "Legal"
              ]
            },
            "default": []
          },
          "daysBack": {
            "title": "Changed within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "How far back to look. The outbound playbooks say a new VP should hear from you inside 30 days, so 30 is the default; widen it for a backfill.",
            "default": 30
          },
          "keywords": {
            "title": "Sectors or keywords (discovery)",
            "maxItems": 10,
            "type": "array",
            "description": "Used in discovery mode only: words that must appear in the announcement — `fintech`, `healthcare`, `SaaS`. Leave empty for every sector.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Countries or regions (discovery)",
            "maxItems": 10,
            "type": "array",
            "description": "Used in discovery mode only: narrow to announcements that mention these places — `United Kingdom`, `Germany`, `New York`.",
            "items": {
              "type": "string"
            }
          },
          "useAppointmentNews": {
            "title": "Appointment announcements",
            "type": "boolean",
            "description": "Searches public appointment announcements — company press releases, trade press and wire services — bounded to your date window. This is the broad source; keep it on.",
            "default": true
          },
          "useLeadershipPages": {
            "title": "Company leadership pages (watchlist only)",
            "type": "boolean",
            "description": "Reads each watched company's own leadership / team page and compares it with the previous run. Most VP hires never get a press release, but the page changes — so this is where the quiet moves come from. Free, a few requests per company.",
            "default": true
          },
          "includeDepartures": {
            "title": "Include departures",
            "type": "boolean",
            "description": "Also report people leaving a senior seat. An empty chair is its own signal: the interim owner is deciding now and the successor will re-evaluate every vendor.",
            "default": true
          },
          "onlyNewSinceLastRun": {
            "title": "Only changes that are new since my last run",
            "type": "boolean",
            "description": "Deliver only people this watch had not already seen in that role. Ideal for a schedule. The first run of a watch always returns everything as the baseline.",
            "default": false
          },
          "requirePerson": {
            "title": "Only changes where the person is named",
            "type": "boolean",
            "description": "Drop announcements that name the role but not the person (\"Acme names new CFO\"). Off by default — an unnamed seat change is still worth knowing about.",
            "default": false
          },
          "maxChanges": {
            "title": "Maximum changes to report",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Cap on delivered rows (highest signal score first). Also caps what you pay.",
            "default": 200
          },
          "watchId": {
            "title": "Watch ID (for the new-since-last-run delta)",
            "type": "string",
            "description": "Optional name for this watch, e.g. `target-accounts-emea`. Runs sharing a Watch ID share the memory of who held which role. Leave empty to derive it from the companies and filters."
          },
          "maxQueries": {
            "title": "Announcement queries per run",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "How many announcement queries to send. Each returns up to 100 headlines. In watchlist mode this also caps how many companies get their own query.",
            "default": 12
          },
          "maxPagesPerSite": {
            "title": "Pages to read per company site",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How deep to go on each watched company's website when looking for its leadership page.",
            "default": 5
          },
          "maxDomainLookups": {
            "title": "Company domains to resolve",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Announcements name the company but never link it, so the top rows get their domain confirmed from the company homepage (free, a few fast requests each). Set to 0 to skip it.",
            "default": 60
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Concurrent requests to announcement sources and company sites. Lower it if a site starts rate-limiting.",
            "default": 6
          },
          "newsLanguage": {
            "title": "Announcement language",
            "type": "string",
            "description": "Language edition of the announcement search, e.g. `en-US`, `de-DE`, `fr-FR`. Changes which outlets are covered.",
            "default": "en-US"
          },
          "newsCountry": {
            "title": "Announcement country edition",
            "type": "string",
            "description": "Two-letter country edition of the announcement search, e.g. `US`, `GB`, `DE`, `IN`. Pair it with the matching language for strong local coverage.",
            "default": "US"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Everything here is a public page, so no proxy is needed — the Actor already falls back to Apify Proxy if a source rate-limits the run.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}