{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Signals Monitor: Hiring, Ads, Tech and News Changes",
    "description": "Turn company domains into an account watchlist: one row per company with what changed since the last run. Buying signals from hiring and ads changes, tech stack moves and news. Alerts to Slack, Discord or Telegram, or to Google Sheets or Clay. Only companies a signal answered for are billed.",
    "version": "1.0",
    "x-build-id": "RTcSbtFkSpNuVgDAr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~company-signals-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-company-signals-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/accountable_eel~company-signals-monitor/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-company-signals-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/accountable_eel~company-signals-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-company-signals-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": {
          "domains": {
            "title": "Company domains to watch",
            "type": "array",
            "description": "One company domain per line. A careers-page URL or a job-board URL works too. Run the same list on a schedule and every row tells you what changed since the run before. Accepted formats: notion.com, https://www.hubspot.com, https://stripe.com/jobs. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names (optional, one per domain)",
            "type": "array",
            "description": "Optional, in the same order as the domains above. LinkedIn and Meta match ads by brand name rather than by domain, and Google News searches better with a real name, so filling this in makes those two signals more accurate. Leave it empty and we derive a name from the domain and from the company's own site.",
            "items": {
              "type": "string"
            }
          },
          "signals": {
            "title": "Which signals to check (and pay for)",
            "type": "array",
            "description": "All four by default. Dropping a signal is what makes a run cheaper and faster; hiding a column is not. The price per company is the same whichever signals you keep.",
            "items": {
              "type": "string",
              "enum": [
                "hiring",
                "ads",
                "tech",
                "news"
              ],
              "enumTitles": [
                "Hiring: open roles across 10 job systems",
                "Ads: Google, LinkedIn and Meta ad presence",
                "Tech: the stack on the company's homepage",
                "News: articles since the last check"
              ]
            },
            "default": [
              "hiring",
              "ads",
              "tech",
              "news"
            ]
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "deltaName": {
            "title": "Watchlist name",
            "type": "string",
            "description": "Name your watchlist, e.g. \"target-accounts\" or \"competitors\". The name is what keeps two schedules apart: two lists with the same name share one memory, so each would tell the other's companies that everything changed. Leave it empty only if you run a single list.",
            "default": ""
          },
          "alertOnChangeOnly": {
            "title": "Only return companies where something changed",
            "type": "boolean",
            "description": "Turn this on and a quiet company is left out of the results. The first run for a company is always returned, so you can see what got recorded. This hides rows, it does not make the run cheaper: a quiet company costs the same to check as a busy one.",
            "default": false
          },
          "checkGoogleAds": {
            "title": "Check Google Ads",
            "type": "boolean",
            "description": "Reads Google's own Ads Transparency Center for this company. On by default.",
            "default": true
          },
          "checkLinkedinAds": {
            "title": "Check LinkedIn Ads",
            "type": "boolean",
            "description": "Reads the LinkedIn Ad Library for this company. On by default. LinkedIn matches by brand name, so filling in the company names above helps.",
            "default": true
          },
          "checkMetaAds": {
            "title": "Check Meta Ads",
            "type": "boolean",
            "description": "Reads Meta's Ad Library API. Needs your own access token below. Without one this stays empty and the other platforms are unaffected.",
            "default": true
          },
          "metaAccessToken": {
            "title": "Your Meta Ad Library API access token (optional)",
            "type": "string",
            "description": "Optional. Meta's Ad Library API only answers to a caller's own token, so bring yours if you want the Meta column filled. It is stored encrypted, never written into your results, and stripped out of every message this actor writes. Outside the EU and UK, Meta's official API only covers political and issue ads."
          },
          "newsLanguage": {
            "title": "News language",
            "type": "string",
            "description": "Which Google News edition to search, e.g. en-US, de-DE or fr-FR. Leave it as it is for English.",
            "default": "en-US"
          },
          "newsCountry": {
            "title": "News country",
            "type": "string",
            "description": "Two-letter country for the Google News edition, e.g. US, DE or GB. Leave it as it is for the United States.",
            "default": "US"
          },
          "notifyUrl": {
            "title": "Send an alert to this link (optional)",
            "type": "string",
            "description": "Optional. Paste a Discord or Slack webhook, a Telegram bot link (https://api.telegram.org/bot<token>/sendMessage?chat_id=<id>), or any https link of your own, and every company whose signals moved is posted there as it is found. Alerts are free and never change what a run costs. The link is stored encrypted and never written into your results."
          },
          "notifyFormat": {
            "title": "Alert format",
            "enum": [
              "",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave this on detect and we read the format from the link you pasted. Pick Plain JSON to post a documented JSON body to your own service instead.",
            "default": ""
          },
          "maxNotificationsPerRun": {
            "title": "Max alerts per run",
            "type": "integer",
            "description": "How many company alerts to send before the rest are folded into one summary message. 0 to 100. Every company is still in your results either way.",
            "default": 20
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "domain",
                "companyName",
                "openRoles",
                "rolesAddedSinceLast",
                "rolesRemovedSinceLast",
                "hiringGrowthPct",
                "topHiringDepartments",
                "careersUrl",
                "atsName",
                "adsGoogle",
                "adsLinkedin",
                "adsMeta",
                "adsStarted",
                "adsStopped",
                "adsCounts",
                "sampleAdUrls",
                "techStack",
                "techAdded",
                "techRemoved",
                "newsCountSinceLast",
                "latestHeadlines",
                "newsWindowHours",
                "signalScore",
                "changedSignals",
                "firstRun",
                "hiringStatus",
                "adsStatus",
                "techStatus",
                "newsStatus",
                "lastCheckedAt",
                "note",
                "notifyErrors"
              ],
              "enumTitles": [
                "Company domain",
                "Company name",
                "Open roles now",
                "New roles since last run",
                "Roles closed since last run",
                "Change in open roles (%)",
                "Top hiring departments",
                "Job board",
                "Job system",
                "Running Google Ads?",
                "Running LinkedIn Ads?",
                "Running Meta Ads?",
                "Started advertising on",
                "Stopped advertising on",
                "Ads live per platform",
                "Sample ad links",
                "Tech stack now",
                "Tech added since last run",
                "Tech removed since last run",
                "News articles since last run",
                "Latest headlines",
                "News window (hours)",
                "Signal score (0 to 100)",
                "What changed",
                "First run for this company?",
                "Hiring check result",
                "Ads check result",
                "Tech check result",
                "News check result",
                "Previously checked",
                "Note",
                "Alert delivery problems"
              ]
            },
            "default": [
              "domain",
              "companyName",
              "openRoles",
              "rolesAddedSinceLast",
              "rolesRemovedSinceLast",
              "hiringGrowthPct",
              "topHiringDepartments",
              "careersUrl",
              "atsName",
              "adsGoogle",
              "adsLinkedin",
              "adsMeta",
              "adsStarted",
              "adsStopped",
              "adsCounts",
              "sampleAdUrls",
              "techStack",
              "techAdded",
              "techRemoved",
              "newsCountSinceLast",
              "latestHeadlines",
              "newsWindowHours",
              "signalScore",
              "changedSignals",
              "firstRun",
              "hiringStatus",
              "adsStatus",
              "techStatus",
              "newsStatus",
              "lastCheckedAt",
              "note",
              "notifyErrors"
            ]
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}