Portfolio Research · Format version 1
A company list, ready for research.
Enter tickers, review the matches, and collect source-backed SEC research in one workspace. Company identifiers are enough. Add optional allocation information only when you want to analyze a weighted portfolio.
Start with a template or a short list
In Portfolio Research, upload a file, paste tickers separated by commas, spaces or newlines, or use your existing watchlist. Review and correct individual rows before starting research. Importing creates a separate saved universe and does not replace your watchlist.
The example uses sample allocations for demonstrating the format. It is not a recommended portfolio or a record of your holdings. The Excel template includes a separate Instructions sheet.
Try the prefilled 100-company demo
Download a ready-to-import list of 100 tickers, then preview the research captured for those companies. The demo shows company metrics, reporting periods, SEC filing links, and coverage so you can see what to expect before running your own research.
This is a company research universe with no supplied or assumed allocations. It demonstrates the workflow, not an investment recommendation. Results are a dated capture of public SEC evidence; each company retains its reporting and retrieval dates. Refreshing later may produce different figures, filings, or coverage. The preview can be opened as a separate saved example in your workspace.
The supported workflow contains up to 100 rows. File-size limits are shown in the importer. Research runs in smaller issuer batches, with partial results, cancellation and retries. Unsupported or unresolved entries remain visible so you can correct or exclude them while researching valid companies.
The same fields in every format
| Column | Meaning |
|---|---|
ticker | Company/security ticker. Tickers alone are sufficient. |
company_name | Issuer name. Ambiguous names remain available for review; they are not guessed. |
cik | Exact SEC issuer identifier. Use text to preserve leading zeroes. |
exchange | Optional identification context; conflicting identifiers require review. |
weight_pct | Optional percentage points: 12.5 means 12.5%. |
market_value | Optional total position value, not a single share price. |
shares | Optional quantity. Shares alone do not imply weights. |
currency | Currency of the supplied position value, for example USD. |
as_of_date | Date represented by the holding or allocation, YYYY-MM-DD. |
notes | Optional user text. Private notes stay local in the browser workflow and are excluded from research exports by default. |
JSON for an AI-prepared file
An AI can prepare this format, and the upload follows the same validation as a human-created file. Check the identifiers and remove private information you do not want to share with that AI.
{
"schema_version": "edgar.portfolio.v1",
"name": "Example company research universe",
"holdings": [
{
"ticker": "AAPL"
},
{
"ticker": "MSFT"
}
],
"allocation": {
"basis": "none",
"normalize": false
},
"research": {
"basis": "annual"
}
}schema_version must be edgar.portfolio.v1. The holdings array uses the fields above. Exact CIKs identify issuers; share classes remain separate positions even when they retrieve the same issuer data. Duplicates, conflicting identifiers and uncertain name matches require explicit review.
Choose what the list represents
- Research universe: company counts, evidence and coverage. No economic exposure is invented.
- Supplied weights: use percentage points and show the supplied total. Normalization is an explicit choice; original weights are preserved. An unspecified balance is not called cash.
- Position values: derive weights only from comparable values in one common currency. Mixed currencies or incompatible dates require review; there is no automatic currency conversion.
- Equal-weight model: available only when explicitly selected and labeled as an assumption. Shares alone stay as metadata because this workflow does not price them.
The initial model is long-only. Negative values and quantities require correction. Multiple share classes retain their own position rows and combine at issuer level for concentration. SEC SIC-derived industry classifications are labeled accurately. Missing research does not cause the covered subset to be silently reweighted.
Annual and supported trailing-twelve-month research can have different company period ends. Values retain their units, periods, reported/calculated status and source inputs. Funds are directed to fund research instead of receiving ordinary operating-company ratios. No returns, Sharpe ratio, volatility or investment recommendations are generated from a ticker list.
Understand the list as a whole
Open Portfolio analytics in your saved portfolio, or explore the 100-company example. Every chart uses your included rows and the captured SEC evidence. Company links open the financial measures, reporting periods and source filings.
- Portfolio briefing: start with the largest known exposures, financial conditions and evidence gaps. Each finding leads to a relevant view or company. Counts describe identified issuers; a ticker list does not imply invested weights.
- Concentration: see combined issuer exposure across share classes and the SEC industry mix. Top-issuer percentages use known original weights. Complete, reviewed allocations totaling 100% also show an effective issuer count: 1 divided by the sum of squared issuer weight fractions. Ten equally weighted issuers produce 10; one issuer produces 1. This measures allocation concentration and does not account for correlations or fund holdings. Set your own issuer and industry limits, inspect breaches, and trace cumulative allocation across the largest holdings. Limit settings are research assumptions. Incomplete weights cannot establish that exposure is within a limit. HHI contributions use squared issuer weights only when allocation is complete.
- Financial profile: compare company medians, the middle 50% of observations and distributions for growth, margins, leverage and selected banking measures. Each issuer counts once. Medians describe companies with supported evidence, rather than an investment return or an ownership share of company earnings. Missing and not-applicable observations stay separate.
- Peer benchmarks and relationships: choose a SEC industry and reporting dates to compare a relevant group. Percentile ranks describe position within the measured group; a higher rank is not necessarily better. Two-metric charts use only issuers with both measures, show their reporting dates, and can require matching period ends. These are financial relationships, not return correlations or forecasts.
- Company comparisons: select up to four issuers and compare supported measures, reporting periods and SEC sources side by side. Missing values remain visible. Industry filters do not change the saved portfolio or its weight denominator.
- Company screener: combine up to four financial rules and inspect companies meeting all of them. A company needs supported evidence for every rule to qualify. Presets are editable research questions. Download the matching observations with their coverage and sources.
- Scenario lab:apply hypothetical price changes to all holdings, an issuer or a SEC industry. A 60% holding falling 20%, with the remaining 40% unchanged, contributes −12 percentage points to modeled portfolio value. Scenarios require complete reviewed allocations, or your explicit choice to try a temporary equal-weight model. The temporary model does not edit saved weights. Sensitivity tables vary the target and other holdings' price changes. The loss-target tool solves the target price change needed to produce your specified portfolio loss, holding the other assumptions fixed; it reports when that change is outside the supported range. Compare up to four named sets of assumptions and download the comparison. Cases remain available while you switch research tabs. Reloading, editing rows or opening another portfolio clears them; download the comparison to keep it.
- Evidence coverage: inspect metric coverage, reporting-date differences and the companies that need attention. Missing financial evidence never becomes a zero value. Reported periods can differ across issuers, including in the same chart. The company-by-metric matrix makes every supported, missing and not-applicable measure visible, with inspection and CSV download.
Scenario price changes are your assumptions. The calculation does not estimate their likelihood, correlations, spillovers, trading costs or liquidity. It is separate from historical SEC fundamentals. Download a scenario CSV to retain its inputs and contributions.
A bounded API for connected research tools
POST /api/v1/portfolio-research accepts the documented JSON object with Content-Type: application/json. Add action: "resolve" for identification and validation, or action: "research" for financial evidence. Research is the default.
curl --request POST \
'https://secedgarterminal.com/api/v1/portfolio-research' \
--header 'Content-Type: application/json' \
--data '{"schema_version":"edgar.portfolio.v1","action":"research","holdings":[{"ticker":"AAPL"}],"allocation":{"basis":"none","normalize":false},"research":{"basis":"annual"}}'| Limit | Supported request |
|---|---|
| Resolve | Up to 100 input rows |
| Research | Up to 5 distinct resolved issuers per request; up to 100 position rows |
| Body and cells | 256 KiB JSON body; 2,000 characters per cell |
| Rate | 60 requests per minute per IP using the existing limiter; respect Retry-After on HTTP 429 |
| Execution | Synchronous bounded requests; server maximum duration 120 seconds; no background job IDs |
| Filing feed | Up to 30 relevant filings per issuer from recent SEC submissions; older archive files are not scanned |
Combine batches carefully
Resolve the full input, then retrieve batches of at most five distinct issuers serially. Use basis: "none" for retrieval batches. Combine company results by CIK and calculate allocation and coverage once over the full original position list. Never combine batch percentages or silently reweight companies with missing research. Share-class rows remain separate from deduplicated issuer evidence.
Responses include schema_version, generated_at, basis, rows, companies, coverage and allocation. Each company reports ready, partial, failed or unsupported status. Metric points include value or null, units, period, classification, sources and calculation details. Source records identify filing accessions, SEC URLs, input values and reporting dates.
This abbreviated response illustrates an unresolved input. It is a format example, not live research. Successful company entries include their metrics and source records.
{
"schema_version": "edgar.portfolio.v1",
"generated_at": "2026-09-07T16:00:00.000Z",
"basis": "annual",
"action": "research",
"rows": [
{
"id": "example-row",
"input": {
"ticker": "UNKNOWN_EXAMPLE"
},
"resolution": {
"status": "unresolved",
"ticker": null,
"cik": null
}
}
],
"companies": [],
"coverage": {
"inputRows": 1,
"resolvedRows": 0,
"uniqueIssuers": 0,
"researchedIssuers": 0
},
"allocation": {
"mode": "universe",
"basis": "none"
}
}Invalid requests return HTTP 400; oversized bodies 413; wrong content types 415; rate limits 429; and unavailable required upstream services 502. Individual unresolved or failed companies can appear in HTTP 200 responses: inspect their statuses and coverage before using results.
An AI application needs an appropriate tool connection to call this endpoint. This feature does not make every LLM discover or use the site automatically.
Keep sources and assumptions with the result
Export the selected issuer table to CSV, or a captured research package to XLSX, JSON or Markdown. The workbook separates Holdings, Company research, Portfolio summary, Sources, Coverage & methodology, Analytics, and Metric observations. The last sheet keeps each issuer's supported values, reporting dates and source links alongside explicit missing and not-applicable states. An analytics CSV summarizes the full portfolio; full JSON and Markdown packages include those calculations too. Selected-row exports omit portfolio-wide analytics to keep the selected scope and original weights clear. Copy research context produces the same source-backed brief for another research tool without calling a model.
Research packages use edgar.portfolio.research.v1, distinct from the input format. They preserve generation time, retrieval times, basis, company evidence, calculation inputs, exclusions and coverage. Exporting a subset keeps weights from the full saved document. It does not recalculate the subset to 100%. Downloaded snapshots do not update themselves.
Private notes are excluded by default. Enable them only if you intend to share them. The export controls state when sensitive allocations are included; turn that option off to share company research without supplied weights, position values, quantities, currencies or holding dates.
Saved portfolios remain in this browser and can be included in Research Hub backup/restore. They do not synchronize automatically across devices. The interactive research client sends only company identifiers needed for public-data retrieval; notes and allocation calculations stay local. Programmatic clients transmit whatever fields they send, but request-specific allocations and notes are not put in shared caches or routine application logs.
Shared caches contain public company data. Results identify fresh, cached or stale evidence and its retrieval time; cached data can be used for five minutes, with a labeled snapshot up to 24 hours old available if refresh fails. Filings appear "new since your last check" only when a previous check exists. Checks run on request, with no unattended emails or notifications.
Open Portfolio Research →