{
  "openapi": "3.0.1",
  "info": {
    "title": "SEC Insider Trading Alerts: Form 4 Buys & Sells",
    "description": "Get every insider buy or sell (SEC Form 4) for a list of tickers or the whole market, filtered by role (CEO and CFO insider buys), type and size (purchases over $100k), with cluster detection. Alerts to Slack, Discord or Telegram when filed. Export insider transactions to Google Sheets or n8n.",
    "version": "1.0",
    "x-build-id": "wGmmU3zwXLR3vfUQK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~sec-insider-trading-alerts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-sec-insider-trading-alerts",
        "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~sec-insider-trading-alerts/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-sec-insider-trading-alerts",
        "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~sec-insider-trading-alerts/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-sec-insider-trading-alerts",
        "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": {
          "tickers": {
            "title": "Only these company tickers (optional)",
            "type": "array",
            "description": "Optional. One stock ticker per line (e.g. AAPL, NVDA). Leave empty to get insider transactions from the whole market in the date window below. Each ticker is matched to its SEC filer and only Form 4 filings for that company are searched. Accepted formats: AAPL, NVDA, TSLA. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "sinceDays": {
            "title": "Transactions in the last N days",
            "type": "integer",
            "description": "How far back to search for Form 4 filings, in days (up to 30). A Form 4 is due within two business days of the trade, so 2 covers the most recent filing day. The date window is a search bound; \"Stop after this many transactions\" is what caps how many you get and pay for.",
            "default": 2
          },
          "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 transactions",
            "type": "integer",
            "description": "Up to 1,000. The real cost control: each returned transaction is billed. A run stops fetching filings once this many transactions match.",
            "default": 100
          },
          "transactionCodes": {
            "title": "Which transactions",
            "enum": [
              "P",
              "S",
              "PS",
              "all"
            ],
            "type": "string",
            "description": "P is an open-market purchase with the insider's own money, the signal most people want. S is an open-market sale. \"all\" also returns grants, option exercises, tax withholding and gifts, which are routine and not a market signal.",
            "default": "P"
          },
          "roles": {
            "title": "Whose transactions",
            "enum": [
              "any",
              "officer",
              "director",
              "tenPercentOwner",
              "cSuite"
            ],
            "type": "string",
            "description": "Filters by the role the insider reported on the filing. C-suite matches the officer title: CEO, CFO, COO, President, or any \"Chief …\" title.",
            "default": "any"
          },
          "minValueUsd": {
            "title": "Minimum value (USD)",
            "type": "integer",
            "description": "Optional. Only keep transactions worth at least this much (shares × price). A transaction with no reported price can't be shown to meet a minimum, so it is dropped whenever this is set.",
            "default": 0
          },
          "clusterMinInsiders": {
            "title": "Cluster: minimum number of different insiders buying",
            "type": "integer",
            "description": "0 (off) returns every matching transaction. Set to 3, for example, to return only companies where at least 3 DIFFERENT insiders made open-market buys within the cluster window below. The count is this run's buys plus the buys the monitoring watchlist already saw. Cluster mode needs the transaction code to include P.",
            "default": 0
          },
          "clusterDays": {
            "title": "Cluster window (days)",
            "type": "integer",
            "description": "Only used with the cluster minimum above. Up to 90.",
            "default": 14
          },
          "onlyNewSinceLastRun": {
            "title": "Only return transactions that are new since the last run",
            "type": "boolean",
            "description": "Turns this into an alert: a transaction counts as new when this watchlist has not returned it before. Transactions already seen are dropped before you are billed, so a quiet run returns one summary row and costs only the start fee. A transaction is forgotten 90 days after its filing date.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty to use the one shared watchlist for this account — changing your tickers or filters between runs still narrows the SAME watchlist. Type a name to keep two separate schedules (e.g. one for buys, one for sales) from marking each other's transactions as seen.",
            "default": ""
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After the transactions are billed, each NEW transaction is posted here as one message: who, what, how many shares, price, value, the filing date and a link to the SEC filing. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, and a message that fails never fails the run (the row's notifyErrors says why). Stored encrypted, never logged or written to the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on \"Detect from the link\": discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON. Pick one only to override that.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. Above this, one \"+N more\" message says how many more transactions are in the run's dataset, so a busy run never floods the channel. 0 sends only that one summary message.",
            "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": [
                "transactionCount",
                "issuerName",
                "issuerCik",
                "ticker",
                "insiderName",
                "insiderCik",
                "role",
                "officerTitle",
                "transactionDate",
                "filedAt",
                "transactionCode",
                "transactionType",
                "shares",
                "pricePerShare",
                "valueUsd",
                "sharesOwnedAfter",
                "directOrIndirect",
                "accessionNumber",
                "filingUrl",
                "isAmendment",
                "isNew",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Transactions returned",
                "Company (issuer)",
                "Issuer SEC CIK",
                "Ticker",
                "Insider (reporting owner)",
                "Insider SEC CIK",
                "Role",
                "Officer title",
                "Transaction date",
                "Filed on",
                "Transaction code",
                "Transaction type",
                "Shares",
                "Price per share (USD)",
                "Value (USD)",
                "Shares owned after this transaction",
                "Direct (D) or indirect (I) ownership",
                "Accession number",
                "SEC filing page",
                "Is this an amended Form 4 (4/A)?",
                "Is this new since the last run?",
                "First seen by this watchlist"
              ]
            },
            "default": [
              "transactionCount",
              "issuerName",
              "issuerCik",
              "ticker",
              "insiderName",
              "insiderCik",
              "role",
              "officerTitle",
              "transactionDate",
              "filedAt",
              "transactionCode",
              "transactionType",
              "shares",
              "pricePerShare",
              "valueUsd",
              "sharesOwnedAfter",
              "directOrIndirect",
              "accessionNumber",
              "filingUrl",
              "isAmendment",
              "isNew",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per transaction (recommended) — turn off for one row per transaction instead",
            "type": "boolean",
            "description": "When on, each transaction found gets its own row instead of being grouped under its transaction. You're still only charged once per transaction, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 5
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}