ETF Holdings Diff Monitor avatar

ETF Holdings Diff Monitor

Pricing

from $6.50 / 1,000 record checkeds

Go to Apify Store
ETF Holdings Diff Monitor

ETF Holdings Diff Monitor

Monitor public ETF holdings files for adds, removals, weight changes, and exposure shifts.

Pricing

from $6.50 / 1,000 record checkeds

Rating

0.0

(0)

Developer

junipr

junipr

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Compare two ETF holdings files and return security-level additions, removals, allocation moves, share changes, market-value changes, and rank shifts.

What It Does

The actor accepts prior and current holdings as delimited text or structured records. It normalizes common issuer headers such as Ticker, Symbol, CUSIP, ISIN, Weight, Shares, and Market Value, then joins both files by the strongest available security identifier.

Each dataset row represents one holding check. By default, unchanged rows are omitted so the dataset is a focused change feed. Set includeUnchanged to true when you need a complete reconciliation.

Input

  • targets: Up to 50 fund comparisons in one run.
  • previousSnapshot / currentSnapshot: CSV, TSV, semicolon-delimited, or pipe-delimited holdings text.
  • previousRecords / currentRecords: Structured alternatives to text snapshots.
  • sourceUrl: Public current-file URL. The actor fetches it only when fetchUrls is true and currentSnapshot is empty.
  • fundTicker: Fund ticker copied to every result row.
  • maxHoldingsPerTarget: Per-side row cap, from 1 to 5,000.
  • minWeightChange: Percentage-point threshold for increased or decreased positions. Additions and removals are never filtered by this threshold.
  • includeUnchanged: Include securities whose comparable values did not change.
  • includeReport: Write JSON and Markdown report artifacts.

Example Input

{
"targets": [
{
"sourceId": "jgrw-holdings",
"sourceUrl": "https://example.com/funds/jgrw-holdings.csv",
"fundTicker": "JGRW",
"previousSnapshot": "Ticker,Name,CUSIP,Weight,Shares,Market Value\nACME,\"Acme Cloud, Inc.\",001122334,4.20%,1000,\"$42,000\"\nBRIO,Brio Retail,009988776,3.10%,800,\"$31,000\"",
"currentSnapshot": "Ticker,Name,CUSIP,Weight,Shares,Market Value\nACME,\"Acme Cloud, Inc.\",001122334,5.80%,1200,\"$58,000\"\nNOVA,Nova AI,555666777,2.40%,600,\"$24,000\""
}
],
"maxTargets": 1,
"maxHoldingsPerTarget": 500,
"includeUnchanged": false,
"includeReport": true
}

Dataset Fields

Identity and source fields:

  • rowId, sourceId, sourceUrl, sourceType, checkedAt
  • fundTicker, holdingTicker, holdingName, cusip, isin

Comparison fields:

  • oldWeight, newWeight, weightDelta
  • oldShares, newShares, sharesDelta
  • oldMarketValue, newMarketValue, marketValueDelta
  • oldRank, newRank, rankDelta, changeType
  • status, severity, score, summary, recommendation

changeType is one of added, removed, increased, decreased, or unchanged.

If a fetch fails or neither snapshot contains a valid security, the actor emits a blocked or attention diagnostic row with diagnosticCode and sourceError instead of silently returning an empty dataset.

Example Output

{
"fundTicker": "JGRW",
"holdingTicker": "ACME",
"holdingName": "Acme Cloud, Inc.",
"cusip": "001122334",
"oldWeight": 4.2,
"newWeight": 5.8,
"weightDelta": 1.6,
"oldShares": 1000,
"newShares": 1200,
"sharesDelta": 200,
"oldMarketValue": 42000,
"newMarketValue": 58000,
"marketValueDelta": 16000,
"oldRank": 1,
"newRank": 1,
"rankDelta": 0,
"changeType": "increased"
}

PPE Pricing

Event prices include Apify platform usage for the configured fixed-inclusive model.

  • actor-start: $0.02000 once per paid run
  • record-checked: $0.00908 per emitted holding row
  • event-detected: $0.01300 per emitted changed holding
  • report-generated: $0.05000 when report artifacts are written

The actor stops before additional output when the run charge limit cannot cover the next paid event.

Limitations

  • Header normalization covers common issuer names but cannot infer undocumented columns reliably.
  • Percentage weights are returned as percentage points: 4.20% becomes 4.2.
  • A current URL fetch still requires a supplied prior snapshot or prior records for comparison.
  • The actor does not provide investment advice or validate an issuer's published data.