{
  "openapi": "3.0.1",
  "info": {
    "title": "SEC Form 4 Insider Trades by Ticker: Shares, Price, Holdings",
    "description": "Corporate insider buys and sells parsed out of SEC EDGAR Form 4 filings, one row per transaction: insider name and role, transaction code, date, shares, price per share, dollar value, shares held afterwards, option and RSU detail and Rule 10b5-1 flag. By ticker, issuer CIK or insider CIK.",
    "version": "0.1",
    "x-build-id": "htowtcyE1oPXcqoMj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yadroo~sec-form4-insider-trades/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yadroo-sec-form4-insider-trades",
        "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/yadroo~sec-form4-insider-trades/runs": {
      "post": {
        "operationId": "runs-sync-yadroo-sec-form4-insider-trades",
        "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/yadroo~sec-form4-insider-trades/run-sync": {
      "post": {
        "operationId": "run-sync-yadroo-sec-form4-insider-trades",
        "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": {
          "mode": {
            "title": "What to pull",
            "enum": [
              "issuer",
              "insider",
              "market"
            ],
            "type": "string",
            "description": "Three different questions, one per run. `issuer` is the usual one: name tickers and get every officer, director and 10% holder who bought or sold that stock. `insider` follows one person or fund across all the companies they report on, which is how you watch a serial buyer or a venture fund's board seats. `market` ignores companies altogether and returns everything filed in the window - with `transactionCodes: [\"P\"]` that is the classic open-market-buying screen across the whole US market.",
            "default": "issuer"
          },
          "tickers": {
            "title": "Companies (tickers or issuer CIKs)",
            "type": "array",
            "description": "Exchange tickers or issuer CIKs, used by `issuer` mode, at most 25 per run. Free text: `NVDA`, `BRK-B` or `BRK.B` (either spelling), or a CIK with or without leading zeros (`1045810`, `0001045810`). Tickers are resolved against the SEC's own ticker-to-CIK file, so case and spacing do not matter; an unknown symbol is refused with the closest known ones named in the error, never silently swapped for another company. Which issuers have no ticker and must be given as a CIK: see README, Reference.",
            "items": {
              "type": "string"
            }
          },
          "insiderCiks": {
            "title": "Insiders (reporting-owner CIKs)",
            "type": "array",
            "description": "Used by `insider` mode, at most 25 per run. A reporting owner - a person, a trust or a fund - has its own EDGAR CIK, and that number is what identifies them across every company they file for. You get the number from the `insiderCik` column of any `issuer` run, which is the normal way to use this actor: find the person in a company run, then follow them. Names are not accepted here, because two officers can share a name and the wrong CIK is a wrong person.",
            "items": {
              "type": "string"
            }
          },
          "since": {
            "title": "Filed on or after",
            "type": "string",
            "description": "Earliest filing date to look at, as `YYYY-MM-DD` (UTC). This is the date the Form 4 reached EDGAR, not the trade date - an insider has two business days to report, so a window that ends on a Friday usually still misses that week's last trades. Leave both dates empty and the run covers the last 90 days."
          },
          "until": {
            "title": "Filed on or before",
            "type": "string",
            "description": "Latest filing date to look at, `YYYY-MM-DD` (UTC), the day itself included. Electronic Form 4 filings begin in June 2003; an earlier date returns nothing and says so in the status message instead of failing."
          },
          "sinceHours": {
            "title": "Only filings of the last N hours",
            "minimum": 1,
            "maximum": 8760,
            "type": "number",
            "description": "A moving window for a schedule: `24` for yesterday's filings, `168` for the past week. While it is set it replaces `Filed on or after`, so a scheduled run always asks for the fresh end of the record instead of re-reading the whole year. The SEC accepts Form 4 submissions on business days until 22:00 ET, so an overnight run on a Sunday legitimately finds nothing and ends with a status that says so."
          },
          "onlyNew": {
            "title": "Skip transactions written by earlier runs",
            "type": "boolean",
            "description": "Write only transactions no earlier run has delivered, remembered by accession number plus the position of the line inside the filing. Made for a schedule: with `sinceHours` it turns the actor into an insider-trade feed that never repeats itself. The memory is kept per mode and per list of companies or insiders named, so two watchlists keep separate memories, while the same list in two tasks shares one. An amended Form 4 (`4/A`) is a new accession number, so it arrives as a new row.",
            "default": false
          },
          "transactionCodes": {
            "title": "Keep these transaction codes",
            "type": "array",
            "description": "The SEC's one-letter codes for the kind of transaction; free text, and an empty list keeps every code. Plain words are accepted too - `buy` reads as `P` (purchase), `sell` as `S` (sale), `grant` as `A` (award), `exercise` as `M`, `tax` as `F` - and so is lower case; anything else is refused with the closest codes named, never guessed. All 19 codes and their words are in README, Reference. Screening tip: `P` alone is the signal most people want, because `A` and `F` are routine compensation.",
            "items": {
              "type": "string"
            }
          },
          "includeDerivative": {
            "title": "Include option, RSU and warrant lines",
            "type": "boolean",
            "description": "Form 4 has two tables: ordinary shares and derivatives - stock options, restricted stock units, warrants, phantom units. Keep this on and both become rows, with the derivative ones carrying `strikePrice`, `exerciseDate`, `expirationDate` and the underlying security; they are marked `isDerivative: true` so you can split them later. Switch it off for a clean picture of actual share movements, which is what a buy/sell screen usually wants, since an option grant moves no stock.",
            "default": true
          },
          "includeHoldings": {
            "title": "Include holding lines (no transaction)",
            "type": "boolean",
            "description": "A Form 4 may also restate positions that did not move - unvested RSUs, shares in a family trust. Those lines carry no date, code or price, only a share count, and arrive as rows with `rowType: \"holding\"`. Off by default because they double the row count of some filings while answering a different question; switch them on when you need the full reported position rather than the trades.",
            "default": false
          },
          "includeAmendments": {
            "title": "Include amended filings (4/A)",
            "type": "boolean",
            "description": "An amendment corrects an earlier Form 4 - a mistyped share count, an omitted holding. Keeping them on is the safer default for research: the amendment carries the numbers that now stand. Every row says which it came from in `formType` and `isAmendment`, and the original filing stays in the data too, so a correction never silently overwrites history. Switch this off for a feed where only first reports matter.",
            "default": true
          },
          "minTransactionValueUsd": {
            "title": "Only transactions worth at least this much",
            "minimum": 0,
            "type": "number",
            "description": "Drops the small routine lines: `1000000` keeps only million-dollar trades, `50000` filters out odd-lot grants and tax withholding. The value compared is `shares` times `pricePerShare` as reported in the filing. Gifts, most grants and many derivative awards are filed with a price of `0` or with no price at all, so their value is `0` or missing and any floor above zero drops them - leave this empty when you are studying grants or gifts."
          },
          "maxFilingsPerEntity": {
            "title": "At most this many filings per company or insider",
            "minimum": 1,
            "maximum": 500,
            "type": "number",
            "description": "Newest first. Keeps one heavily traded company in a watchlist of twenty from eating the whole run, and bounds the request count: one filing is one request to EDGAR. A large-cap company files a few hundred Form 4s a year, so 25 covers roughly the last month for the busiest of them.",
            "default": 25
          },
          "maxItems": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 2000,
            "type": "number",
            "description": "Hard cap on the rows this run writes, and therefore on what it costs. One filing yields one to about ten rows, so 50 rows is roughly 15 filings. The run stops as soon as the cap is reached and the status message names how many rows were saved and from how many filings; to read the rest, set `Filed on or before` to the day before the oldest `filedAt` you received and run again.",
            "default": 50
          },
          "fields": {
            "title": "Only these columns",
            "type": "array",
            "description": "Keep only the named columns, in the order given - for example `ticker, insiderName, transactionDate, shares, pricePerShare`. Empty = every column. `rowType`, `ticker`, `issuerName`, `insiderName`, `transactionDate`, `transactionCode`, `shares`, `url` and `fetchedAt` are always present; name one of them here and it moves to the position you gave it. Unknown names are reported in the status message instead of being dropped in silence.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}