{"slug":"how-to-read-a-form-4","qid":"direct_vs_indirect","label":"Share of Form 4 lines booked as indirect ownership, by transaction code","post_title":"How to Read a Form 4 Insider Trading Filing","post_url":"/blog/how-to-read-a-form-4#q-direct_vs_indirect","columns":["code","line_count","indirect_pct"],"rows":[{"code":"P: purchase","line_count":82658,"indirect_pct":50.4},{"code":"S: sale","line_count":361035,"indirect_pct":44.7},{"code":"A: grant","line_count":307972,"indirect_pct":4.7},{"code":"M: exercise","line_count":263095,"indirect_pct":5.9},{"code":"F: tax withholding","line_count":148738,"indirect_pct":1.2},{"code":"G: gift","line_count":21078,"indirect_pct":45.5}],"shape":"ranking","sql":"SELECT\n    multiIf(\n        transaction_code = 'P', 'P: purchase',\n        transaction_code = 'S', 'S: sale',\n        transaction_code = 'A', 'A: grant',\n        transaction_code = 'M', 'M: exercise',\n        transaction_code = 'F', 'F: tax withholding',\n        'G: gift')                                                             AS code,\n    count()                                                                    AS line_count,\n    round(100 * countIf(upper(direct_or_indirect) LIKE 'I%') / count(), 1)     AS indirect_pct\nFROM global_markets.stocks_form4\nWHERE filing_date >= toDate('2025-08-01')\n  AND filing_date <  toDate('2026-08-01')\n  AND form_type = '4'\n  AND transaction_code IN ('P', 'S', 'A', 'M', 'F', 'G')\n  AND (upper(direct_or_indirect) LIKE 'D%' OR upper(direct_or_indirect) LIKE 'I%')\nGROUP BY code\nORDER BY multiIf(\n    code LIKE 'P%', 1,\n    code LIKE 'S%', 2,\n    code LIKE 'A%', 3,\n    code LIKE 'M%', 4,\n    code LIKE 'F%', 5,\n    6)","computed_at":"2026-08-08T15:31:35.966051+00:00","elapsed":0.002965507}