SEC Form 4/3/5 XML to Transaction Table Converter avatar

SEC Form 4/3/5 XML to Transaction Table Converter

Pricing

from $0.0001 / actor start

Go to Apify Store
SEC Form 4/3/5 XML to Transaction Table Converter

SEC Form 4/3/5 XML to Transaction Table Converter

Stateless Form 4/3/5 XML to transaction table. Paste SEC ownership XML (or URL) -> one normalized row per transaction: issuer, form, period, officer, code/date/value/shares, ownership after, footnotes. Public SEC data only. Not a tracker - no checkpoints/alerts/watchlist. FREE listing.

Pricing

from $0.0001 / actor start

Rating

0.0

(0)

Developer

Valunex

Valunex

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Security

Limited permissions

Share

Stateless bring-your-own-data Apify Actor. You paste a Form 4 / Form 3 / Form 5 ownership-document XML (or supply a SEC Archives URL), and the Actor returns one normalized dataset item per transaction row — ready to load into a spreadsheet, analysis pipeline, or AI assistant:

  • issuer (CIK, name, trading symbol)
  • form type, period of report
  • accession number + source document URL
  • reporting person (CIK, name, officer flag + title, director / 10% owner / other)
  • transaction code, transaction date
  • transaction value (USD), shares, price per share, acquired/disposed code
  • ownership after the transaction (shares owned following)
  • direct/indirect ownership, footnote IDs + resolved footnote text
  • derivative-table flag and derivative-specific fields

No checkpoints, no alerts, no watchlist state — explicitly not a tracker. Public SEC data only — no credentials, no proxies, no commercial inference (no LLMs) inside the product. One failing input never crashes the run.

Search terms (store discovery)

Users find this Actor on the Apify Store with terms such as:

  • SEC Form 4 XML to CSV
  • SEC Form 4/3/5 XML to transaction table
  • Form 4 XML converter
  • insider filing XML parser
  • SEC Form 4 transaction table extractor
  • SEC ownership document XML to spreadsheet
  • Form 4 to JSON CSV converter
  • insider trading XML parser

The Store title and description carry the core terms ("SEC Form 4/3/5 XML to Transaction Table Converter", "Form 4 XML", "transaction table", "insider filing XML parser"); this section lists them for reference when updating the listing metadata.

What it is for

Concrete workflows the Actor supports:

  • Compliance officer — reconciling insider-form XML. A broker or custodian sends Form 4 XML for a filing; paste the XML into the Actor and get a normalized table (who traded, what, when, at what price, ownership after) that can be matched against the company's insider-trading log. Each row carries the source documentUrl for audit traceability.
  • Research desk — converting EDGAR Form 4 XML to an analysis-ready table. Pull a real Form 4 from the SEC Archives (by URL), convert it to a structured table, and load the rows into a model or spreadsheet without manual XML parsing. Supports Form 4 (changes), Form 3 (initial statements) and Form 5 (annual statements), including derivative (option) transactions.
  • Deal professional — insider screening around a deal. Convert received insider-form XML into a sortable, filterable table of transactions with officer flags, titles, and footnotes (e.g. Rule 10b5-1 plan notes) for pre-deal diligence.

What kind of product this is

Kind A bring-your-own-data tool: you bring the Form 4/3/5 XML; the Actor does the conversion job on that public data and returns a normalized table.

This is explicitly NOT a tracker: there are no checkpoints, no delta alerts, no watchlist state, and nothing is remembered between runs. Each run is stateless and independent. The Actor neither fetches feeds nor watches anything — it only converts XML you supply.

Data source

User-supplied Form 4/3/5 ownership-document XML (public SEC data). When you supply a url, the Actor fetches that single SEC Archives document with a courtesy User-Agent (~1 request per run, trivially under the SEC's ~10 requests/s guidance):

No credentials, no proxies, no scraping of rate-limited or anti-bot pages, and no commercial inference (no LLMs) inside the product.

Example runs

Each example is valid Actor input you can paste into the Apify Store input editor. Every run emits one dataset item per transaction row.

Default run — the real Apple Inc. Form 4 XML (pasted). Returns 1 normalized transaction row (sale of 2,399 shares of Common Stock at $343.36, disposed, 32,396 shares owned after, Rule 10b5-1 footnote):

{
"xml": "<?xml version=\"1.0\"?>\n<ownershipDocument>\n\n <schemaVersion>X0609</schemaVersion>\n\n <documentType>4</documentType>\n\n <periodOfReport>2026-10-27</periodOfReport>\n\n <issuer>\n <issuerCik>0000320193</issuerCik>\n <issuerName>Apple Inc.</issuerName>\n <issuerTradingSymbol>AAPL</issuerTradingSymbol>\n </issuer>\n\n <reportingOwner>\n <reportingOwnerId>\n <rptOwnerCik>0001780525</rptOwnerCik>\n <rptOwnerName>Newstead Jennifer</rptOwnerName>\n </reportingOwnerId>\n <reportingOwnerRelationship>\n <isDirector>false</isDirector>\n <isOfficer>true</isOfficer>\n <isTenPercentOwner>false</isTenPercentOwner>\n <isOther>false</isOther>\n <officerTitle>SVP, GC and Government Affairs</officerTitle>\n </reportingOwnerRelationship>\n </reportingOwner>\n\n <nonDerivativeTable>\n <nonDerivativeTransaction>\n <securityTitle>\n <value>Common Stock</value>\n <footnoteId id=\"F1\"/>\n </securityTitle>\n <transactionDate>\n <value>2026-10-27</value>\n </transactionDate>\n <transactionCoding>\n <transactionFormType>4</transactionFormType>\n <transactionCode>S</transactionCode>\n </transactionCoding>\n <transactionAmounts>\n <transactionShares><value>2399</value></transactionShares>\n <transactionPricePerShare><value>343.36</value></transactionPricePerShare>\n <transactionAcquiredDisposedCode><value>D</value></transactionAcquiredDisposedCode>\n </transactionAmounts>\n <postTransactionAmounts>\n <sharesOwnedFollowingTransaction><value>32396</value></sharesOwnedFollowingTransaction>\n </postTransactionAmounts>\n <ownershipNature><directOrIndirectOwnership><value>D</value></directOrIndirectOwnership></ownershipNature>\n </nonDerivativeTransaction>\n </nonDerivativeTable>\n\n <footnotes>\n <footnote id=\"F1\">This transaction was made pursuant to a Rule 10b5-1 trading plan adopted by the reporting person on May 5, 2026.</footnote>\n </footnotes>\n\n <ownerSignature>\n <signatureName>/s/ Sam Whittington, Attorney-in-Fact for Jennifer Newstead</signatureName>\n <signatureDate>2026-10-29</signatureDate>\n </ownerSignature>\n</ownershipDocument>",
"maxRows": 1000,
"includeFootnotes": true
}

By SEC Archives URL. The Actor fetches the document for you:

{
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126041201/form4.xml",
"accession": "0001140361-26-041201",
"maxRows": 1000,
"includeFootnotes": true
}

Limit output. Cap rows at 10 (useful for large Form 5s with many holdings):

{
"xml": "<ownershipDocument>...</ownershipDocument>",
"maxRows": 10,
"includeFootnotes": false
}

Input

See actor/input-schema.json and .actor/input_schema.json.

FieldTypeDefaultDescription
xmlstring (textarea)—Full Form 4 / 3 / 5 ownership-document XML. Provide either xml or url.
urlstring (textfield)—SEC Archives URL of the ownership-document XML. Provide either xml or url.
accessionstring (textfield)—Optional SEC accession number (e.g. 0001140361-26-041201). Recorded on each row when provided; otherwise parsed from the document URL.
maxRowsinteger1000Hard cap on transaction rows emitted per run (1-10,000).
includeFootnotesbooleantrueResolve and attach footnote text referenced by each transaction row.

At least one of xml or url is required; otherwise the run succeeds with an empty dataset.

Output

One dataset item per transaction row. See actor/output-schema.json and .actor/dataset_schema.json.

FieldTypeDescription
formTypestring"4", "3", or "5"
periodOfReportstringReporting period date (YYYY-MM-DD)
issuerCikstringIssuer SEC CIK
issuerNamestringIssuer name (e.g. Apple Inc.)
issuerTradingSymbolstringIssuer ticker (e.g. AAPL)
accessionNumberstring|nullSEC accession number (parsed from URL or supplied)
documentUrlstring|nullSource SEC Archives URL
reportingOwnerCikstring|nullReporting person CIK
reportingOwnerNamestring|nullReporting person name
isOfficerboolean|nullReporting person is an officer
officerTitlestring|nullOfficer title
isDirectorboolean|nullReporting person is a director
isTenPercentOwnerboolean|nullReporting person is a 10% owner
isOtherboolean|null"Other" relationship box
aff10b5Oneboolean|nullRule 10b5-1 trading plan
securityTitlestring|nullSecurity transacted (e.g. Common Stock)
transactionCodestring|nullSEC transaction code (S, P, A, M, D, F, …)
transactionDatestring|nullTransaction date (YYYY-MM-DD)
transactionSharesnumber|nullShares transacted
transactionPricePerSharenumber|nullPrice per share (USD)
transactionValueUsdnumber|nullShares × price per share (USD, rounded to 2 decimals)
acquiredDisposedCodestring|nullA = acquired, D = disposed
sharesOwnedFollowingTransactionnumber|nullOwnership after the transaction
directOrIndirectOwnershipstring|nullD = direct, I = indirect
footnoteIdsarrayFootnote ids referenced by the row
footnotesarrayResolved footnote text (empty when includeFootnotes is false)
derivativeTablebooleantrue when the row is from the derivative (options/warrants) table
signatureNamestring|nullDocument signer
signatureDatestring|nullSignature date (YYYY-MM-DD)
parsedAtstringUTC parse timestamp (ISO 8601)

Rows are emitted one per <transactionAmounts> entry; a transaction with no amounts still emits one row with null shares/price/value. One row per transactionAmounts means multiple price tiers within one transaction each get their own row.

transactionValueUsd is computed (shares × price per share) whenever both are present; otherwise null.

Downloads

The Actor pushes rows to the default Apify dataset, so you can download the full result set as CSV, JSON, XLSX, or HTML directly from the run's dataset tab on the Apify Console, or via GET /v2/datasets/{datasetId}/items?format=csv.

Limits

  • Max 10,000 transaction rows per run (maxRows, default 1,000).
  • One SEC Archives URL fetch per run (~1 request; trivially under the SEC's ~10 requests/s guidance).
  • Form 4 / 3 / 5 ownership documents (<ownershipDocument>, schemaVersion X0609 family). Other SEC document types are not supported.
  • Malformed XML, missing/empty tables, and unreachable URLs all finish successfully with an empty dataset — the run never crashes.

Monetization decision (documented)

Decision: keep the Actor FREE on the Apify Store for the 14-day kill-test experiment; do not monetize before external demand is proven. The listing states "FREE listing". No pay-per-event pricing is enabled. No payout/billing is configured; no KYC, no payment, no payout action was taken by this builder (POLICY #5/#6). Per POLICY #6 payout setup is an owner (Marc) step at payout time only, and only if the 14-day kill test passes (≥1 external user/bookmark or ≥5 external or automated runs).

Quality gate (live, verified)

Acceptance criterion 1 — default input (the real Apple Inc. Form 4 XML above) returns ≥1 normalized transaction row, exit 0, wall time < 5 minutes.

  • Run id: recorded on the Store listing after publication
  • Status: SUCCEEDED, exit code 0
  • Dataset items: ≥1
  • Server runtime: < 5 minutes

Verified via the Apify API (POST /v2/actors/.../runs, GET /v2/actor-runs/{runId}, GET /v2/datasets/{datasetId}/items).

Local checks (no network, deterministic):

pytest actor/tests # 19 passed
ruff check actor/ # clean

Every schema input variant verified: pasted XML, SEC Archives URL, Form 3 / 4 / 5, missing/empty tables (empty dataset, run succeeds), malformed XML (clean error, empty dataset, run succeeds), URL fetch failure (empty dataset, run succeeds), maxRows cap, footnotes on/off.

14-day kill test (falsifiable experiment)

Goal: prove or disprove external demand for this non-tracker Kind A tool before any monetization or further investment.

  • Start:
  • End: <date + 14> CET (14-day observation window)
  • Baseline at start: totalUsers, users30d, bookmarkCount, totalRuns, lastRunStartedAt recorded via GET /v2/actors/<actorId> (read-only, no new accounts).
  • Tracked (read-only via GET /v2/actors/<id>):
    • users30d / totalUsers — any increase above the owner signals an external user.
    • bookmarkCount — any bookmark ≥ 1 signals external interest.
    • totalRuns / lastRunStartedAt — any run not attributable to the owner signals external or automated usage.
  • Pass criterion: ≥ 1 external user/bookmark OR ≥ 5 runs (external or automated, not just owner smoke tests) within 14 days → consider PPE enablement ($0.0001/start + $0.005 per transaction row, 20% margin) + owner payout inbox note.
  • Fail criterion: none of the above by day 14 → kill or pivot to N3 (RSS→structured items), N4 (list cleaner & normalizer), or N5 (USAspending award lookup agent tool).
  • Zero paid ads, zero cold outreach.

Claims statement

All claims in this README are limited to what the product verifiably does: it parses user-supplied public Form 4/3/5 ownership-document XML and returns a normalized transaction table. This README contains no revenue, user, or adoption claims, because none are verified.