Copy of Public release of my fundamentals sheet
marcus_fundamentals ·
ID 1Nwb6PdSA-sojVcpsAOwLi-0oVbhF3i6MO4Juo6G-wDg ·
Effort to rehab: medium
Purpose
Infrastructure shape
Tabs (10)
| Tab | Status | Purpose | Notes |
|---|---|---|---|
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
External dependencies
| URL / endpoint | Status | Purpose | Replacement |
|---|---|---|---|
| fmpcloud.io/api/v3/balance-sheet-statement/ | dead_paid | bs | secfsdstools BalanceSheetStandardizer |
| fmpcloud.io/api/v3/cash-flow-statement/ | dead_paid | cf | secfsdstools CashFlowStandardizer |
| fmpcloud.io/api/v3/income-statement/ | dead_paid | pl | secfsdstools IncomeStatementStandardizer |
| fmpcloud.io/api/v3/profile/ | dead_paid | profile | EDGAR submissions/CIK{cik}.json |
| fmpcloud.io/api/v3/ratios/ | dead_paid | derived | compute locally from three standardizers |
| financialmodelingprep.com/api/v3/income-statement/ | 401 | is | secfsdstools IncomeStatementStandardizer |
| sec.gov/cgi-bin/browse-edgar?CIK= | alive_200 | fundamentals | |
| google.com/search?q= | alive | fundamentals | |
| GOOGLEFINANCE | alive | fundamentals |
Rehab strategy
Approach: VPS Python writer pushes standardizer DataFrames directly into bs/pl/cf/derived/profile data tabs via Sheets API, replacing the dead IMPORTDATA chain. Existing lookup-key cell topology is preserved verbatim.
Full markdown analysis (click to expand)
Marcus Fundamentals — Analysis
Sheet: Copy of Public release of my fundamentals sheet
ID: 1Nwb6PdSA-sojVcpsAOwLi-0oVbhF3i6MO4Juo6G-wDg
Slug: marcus_fundamentals
10 tabs, 1826 formulas, 211 errors, 0 named ranges, 0 IMPORTRANGE edges.
Purpose
A single-ticker deep fundamentals workbench. Operator types a ticker into screener!B3 (or implicitly via fundamentals!B5), and a 20-year matrix of revenues, margins, balance-sheet line items, cash flows, and DCF/quality ratios fans out across the fundamentals summary tab. Setup boilerplate identifies it as a recreation of the Roaring Kitty Universe idea narrowed to per-ticker fundamentals: this is the rare DFV-era sheet natively shaped like SEC EDGAR primary statements (IS/BS/CF/derived ratios), not a Yahoo summary screen. The fundamentals tab itself is a 49-row × ~30-column dashboard with a frozenRowCount=8 ticker header band, 235 conditional formats, and dense red-shaded cells that visually grade the company. Tabs is, bs, pl, cf, derived, profile, diamondMining are all hidden — they exist purely as data-feed staging tables that fundamentals and screener look up against by HLOOKUP/VLOOKUP on canonical field names.
Infrastructure shape
The data-acquisition pattern is identical across all hidden data tabs (bs, cf, pl, is, profile, derived, diamondMining):
- A1 = base API URL stem
- C1 = =UPPER(fundamentals!B5) (the ticker)
- E1 = =Setup!B23 (the API key cell, empty)
- H1 = =CONCATENATE(A1,C1,D1,E1) (full URL)
- A2 = =IMPORTDATA(H1) — the actual fetch
Several tabs have a second fetch starting at row ~48–124 (bs!A64, bs!A124, pl!A42, cf!A50, diamondMining!A49, derived!A118) for annual + quarterly slices. bs also has six IMPORTHTML(..., "table", 12) blocks at row 124 cols Q/AG/AX/BO/CF/CW for peer comps.
What works
- Summary
fundamentalslayout is well thought out: row 7=shares, row 8=revenue, rows 9–20 are AVERAGE-3yr smoothed metrics, rows 21–28 balance-sheet quality (Net Excess Cash, Net Common Overhang, Book/sh, Tang Book/sh), rows 31–48 cash-flow & DCF inputs. GOOGLEFINANCE(B5,"changepct")andGOOGLEFINANCE(B5,"name")(9 calls) still work.- Link tiles in
fundamentalsrows 1–3 (SeekingAlpha, TradingView, Nasdaq, OpenInsider, Yahoo options, SEC EDGAR by CIK) all build via CONCATENATE — URL probe confirms SEC EDGARcgi-bin/browse-edgar?CIK=alive (200), Google search alive. - 1311 IFERROR wrappers cause graceful empty-string degradation.
- HLOOKUP/VLOOKUP keys (
revenue,totalAssets,bookValuePerShare,dividendsPaid,operatingCashFlow,simpleFreeCashFlow,EBITDA,EPS,Weightedaverageshsout,roic,grossProfitMargin,netCashFlow,acquisitionsNet,cashAndCashEquivalents,shortTermDebt,shortTermInvestments,totalCurrentAssets,totalCurrentLiabilities,totalNonCurrentLiabilities,tangibleBookValuePerShare) map ~1:1 to secfsdstools standardizer columns.
What's broken
- Every IMPORTDATA call to fmpcloud.io and financialmodelingprep.com is dead.
bs!A2,cf!A2,pl!A2,is!A2,profile!A2,derived!A2,diamondMining!A2all#REF!/#ERROR!. URL probe confirms FMP returns 401.Setup!B23empty. - 211 error cells, all downstream.
fundamentals!AE/AF(3yr AVERAGE/STDEV) uniformly#DIV/0!. - 1359 empty-string formulas — starved, not broken.
is!A2uses=ImportJSON(H1)— custom Apps Script not present.
External dependencies
| Endpoint | Status | Replacement |
|---|---|---|
fmpcloud.io/api/v3/balance-sheet-statement/ |
dead 401 | secfsdstools BalanceSheetStandardizer |
fmpcloud.io/api/v3/cash-flow-statement/ |
dead 401 | secfsdstools CashFlowStandardizer |
fmpcloud.io/api/v3/income-statement/ |
dead 401 | secfsdstools IncomeStatementStandardizer |
fmpcloud.io/api/v3/profile/ |
dead 401 | EDGAR submissions JSON |
fmpcloud.io/api/v3/ratios/ |
dead 401 | derive locally |
financialmodelingprep.com/api/v3/income-statement/ (is) |
401 | same |
sec.gov/cgi-bin/browse-edgar?CIK= |
alive 200 | keep |
google.com/search?q= |
alive | keep |
| GOOGLEFINANCE | alive | keep for live price/mktcap |
Cross-sheet dependencies
Internal only — no IMPORTRANGE.
- fundamentals!B5 → bs!C1, cf!C1, pl!C1, is!C1, profile!C1, derived!C1/BH1 (14×)
- Setup!B23 → all 7 data tabs' E1 (15×)
- screener!B3 → diamondMining!C1
- profile!K3 (CIK) → fundamentals!N1, N3 (SEC EDGAR deep links)
Rehab strategy — secfsdstools mapping
Stop populating data tabs via IMPORTDATA, have VPS Python writer push standardizer DataFrames straight into existing column layout (rows unchanged; col 20 ≈ most recent annual, col 3 ≈ oldest of 20-year window).
bs ← BalanceSheetStandardizer
totalAssets→fundamentals!E22:X22totalCurrentAssets→ E23 (current ratio)totalCurrentLiabilities→ E23totalNonCurrentLiabilities→ E24 (Net Common Overhang)shortTermDebt,shortTermInvestments,cashAndCashEquivalents→ E23/E24
pl ← IncomeStatementStandardizer
date→ row 1, drivesfundamentals!E5:X5revenue→fundamentals!E8:X8grossProfit,grossProfitMargin→ fundamentals row 11/15EBITDA→fundamentals!E33EPS→fundamentals!E36Weightedaverageshsout→fundamentals!E7:X7(drop theLEFT(...LEN-6)peel — standardizer outputs numeric)
cf ← CashFlowStandardizer
date→ headeroperatingCashFlow→ row 40 (CFO Avg3 atfundamentals!E12)dividendsPaid→ drives E31 (keep*-1sign flip)netCashFlow→ E47simpleFreeCashFlow→ E43 — not native; compute asoperatingCashFlow + capitalExpenditurewriter-sideacquisitionsNet→ E46
derived ← computed locally
bookValuePerShare,tangibleBookValuePerShare(E25/E26) → equity/shares; (equity−intangibles)/sharesroic(E13) → NOPAT/invested capital- per-share metrics → divide by
Weightedaverageshsout
profile ← EDGAR submissions JSON
Critically populate profile!K3 (CIK) so EDGAR deep links at fundamentals!N1/N3 keep working.
is
Vestigial — only 4 formulas, dead ImportJSON. Either repoint fundamentals!E7 to pl or feed is from same writer.
diamondMining
Peer/screener feed via screener!B3. Same fix, lower priority — only 134 formulas.
Setup
Wipe API-key prompt UI; leave Setup!B23 empty; writer pushes via Sheets API and ignores H1 chain.
Effort rating
Medium — 2 to 3 writer days. Cell topology clean, lookup keys already match secfsdstools vocabulary, no IMPORTRANGE entanglements, all live external endpoints probe green. Work: per-ticker writer fetches three standardizers + EDGAR submissions JSON, reshapes to wide year-across-columns format, pushes via Sheets API. Delete dead IMPORTDATA/ImportJSON formulas after first push so refresh doesn't overwrite. simpleFreeCashFlow needs one-line computed override.
Raw analysis.json
{
"author_attribution": "Marcus (anonymous, \u0027Public release of my fundamentals sheet\u0027, 2021)",
"cross_sheet_dependencies": {
"importrange_edges": [],
"internal": [
{
"from": "fundamentals!B5",
"occurrences": 14,
"to": [
"bs!C1",
"cf!C1",
"pl!C1",
"is!C1",
"profile!C1",
"derived!C1",
"derived!BH1"
],
"via": "=UPPER(fundamentals!B5)"
},
{
"from": "Setup!B23",
"occurrences": 15,
"to": [
"bs!E1",
"cf!E1",
"pl!E1",
"is!E1",
"profile!E1",
"derived!E1",
"derived!BJ1",
"diamondMining!E1"
],
"via": "=Setup!B23"
},
{
"from": "screener!B3",
"to": [
"diamondMining!C1"
],
"via": "=UPPER(screener!B3)"
},
{
"from": "profile!K3",
"purpose": "CIK for SEC EDGAR deep links",
"to": [
"fundamentals!N1",
"fundamentals!N3"
]
}
]
},
"effort_rating": {
"blockers": [],
"estimated_writer_days": "2-3",
"level": "medium",
"rationale": "Clean cell topology, no IMPORTRANGE entanglements, lookup keys already match standardizer vocabulary, all live external endpoints (GOOGLEFINANCE, EDGAR, Google search) probe green. Work concentrated in one writer that pushes three standardizer DataFrames to a known cell grid.",
"risks": [
"secfsdstools field-name drift vs the FMP-style keys hard-coded in 514 VLOOKUPs - some may need a translation layer",
"20-year history depth may exceed EDGAR coverage for some tickers (XBRL roughly 2009+)"
]
},
"error_count": 211,
"external_dependencies": [
{
"endpoint": "fmpcloud.io/api/v3/balance-sheet-statement/",
"replacement": "secfsdstools BalanceSheetStandardizer",
"status": "dead_paid",
"tab": "bs"
},
{
"endpoint": "fmpcloud.io/api/v3/cash-flow-statement/",
"replacement": "secfsdstools CashFlowStandardizer",
"status": "dead_paid",
"tab": "cf"
},
{
"endpoint": "fmpcloud.io/api/v3/income-statement/",
"replacement": "secfsdstools IncomeStatementStandardizer",
"status": "dead_paid",
"tab": "pl"
},
{
"endpoint": "fmpcloud.io/api/v3/profile/",
"replacement": "EDGAR submissions/CIK{cik}.json",
"status": "dead_paid",
"tab": "profile"
},
{
"endpoint": "fmpcloud.io/api/v3/ratios/",
"replacement": "compute locally from three standardizers",
"status": "dead_paid",
"tab": "derived"
},
{
"endpoint": "financialmodelingprep.com/api/v3/income-statement/",
"replacement": "secfsdstools IncomeStatementStandardizer",
"status": "401",
"tab": "is"
},
{
"action": "keep",
"endpoint": "sec.gov/cgi-bin/browse-edgar?CIK=",
"status": "alive_200",
"tab": "fundamentals"
},
{
"action": "keep",
"endpoint": "google.com/search?q=",
"status": "alive",
"tab": "fundamentals"
},
{
"action": "keep_for_live_price_and_mktcap",
"endpoint": "GOOGLEFINANCE",
"status": "alive",
"tab": "fundamentals"
}
],
"formula_count": 1826,
"importrange_edges": 0,
"name": "Copy of Public release of my fundamentals sheet",
"named_ranges": 0,
"purpose": "Single-ticker deep-fundamentals workbench: 20-year matrix of revenues, margins, balance-sheet quality, cash flows, DCF inputs, and ratio averages on a frozen-header summary tab, fed by hidden per-statement data tabs that fetch FMP endpoints.",
"rehab_strategy": {
"approach": "VPS Python writer pushes standardizer DataFrames directly into bs/pl/cf/derived/profile data tabs via Sheets API, replacing the dead IMPORTDATA chain. Existing lookup-key cell topology is preserved verbatim.",
"edge_cases": [
"is tab uses ImportJSON custom function; either feed it from same writer or repoint fundamentals!E7 lookup to pl (which also has weighted shares)",
"diamondMining is screener-driven (screener!B3, separate ticker) - same fix, lower priority",
"bs has six IMPORTHTML peer-comp tables at row 124 (cols Q/AG/AX/BO/CF/CW) - separate, optional",
"dividendsPaid sign convention: FMP returns negative, sheet flips with *-1; secfsdstools also negative - keep the flip"
],
"tabs_to_keep_live": [
"GOOGLEFINANCE quote/name in fundamentals!B1:C3",
"SEC EDGAR deep links fundamentals!N1/N3",
"OpenInsider/SeekingAlpha/Nasdaq/TradingView link tiles"
],
"tabs_to_rewrite_writer_side": [
"bs",
"pl",
"cf",
"is",
"profile",
"derived",
"diamondMining"
],
"writer_steps": [
"Read fundamentals!B5 ticker, resolve to CIK via EDGAR ticker.txt",
"Pull BalanceSheet, IncomeStatement, CashFlow standardizer DataFrames (annual + quarter)",
"Compute simpleFreeCashFlow = operatingCashFlow + capitalExpenditure",
"Compute derived ratios (bookValuePerShare, tangibleBookValuePerShare, roic, per-share metrics)",
"Pull EDGAR submissions JSON for profile (CIK, sector via SIC code, description)",
"Reshape each into wide year-across-columns layout matching the row-keyed VLOOKUP/HLOOKUP expectations",
"Push to bs!A2:, pl!A2:, cf!A2:, derived!A2:, profile!A2: via Sheets API",
"Delete the dead IMPORTDATA/ImportJSON formulas in row 2 of each data tab so refresh doesn\u0027t overwrite",
"Leave Setup!B23 empty; remove API-key UI prompt"
]
},
"secfsdstools_mapping": {
"BalanceSheetStandardizer": {
"fields": {
"cashAndCashEquivalents": "fundamentals!E23/E24",
"shortTermDebt": "fundamentals!E24",
"shortTermInvestments": "fundamentals!E23/E24",
"totalAssets": "fundamentals!E22:X22",
"totalCurrentAssets": "fundamentals!E23 (current-ratio test)",
"totalCurrentLiabilities": "fundamentals!E23",
"totalNonCurrentLiabilities": "fundamentals!E24 (Net Common Overhang)"
},
"target_tab": "bs"
},
"CashFlowStandardizer": {
"fields": {
"acquisitionsNet": "fundamentals!E46",
"date": "header",
"dividendsPaid": "fundamentals!E31 (sign-flipped *-1 in cell)",
"netCashFlow": "fundamentals!E47",
"operatingCashFlow": "fundamentals!E12 (CFO Avg3)",
"simpleFreeCashFlow": "fundamentals!E43 - NOT NATIVE; compute writer-side as operatingCashFlow + capitalExpenditure"
},
"target_tab": "cf"
},
"IncomeStatementStandardizer": {
"fields": {
"EBITDA": "fundamentals!E33",
"EPS": "fundamentals!E36",
"Weightedaverageshsout": "fundamentals!E7:X7 (drop the LEFT/LEN-6 peel since standardizer outputs numeric)",
"date": "fundamentals!E5:X5 (year header)",
"grossProfit": "fundamentals!row 11/15",
"grossProfitMargin": "fundamentals row 11",
"revenue": "fundamentals!E8:X8"
},
"target_tab": "pl"
},
"computed_locally": {
"fields": {
"bookValuePerShare": "fundamentals!E25 - equity/shares",
"per_share_metrics": "Revs/sh, Assets/sh, etc - divide by Weightedaverageshsout",
"roic": "fundamentals!E13 - NOPAT/invested_capital",
"tangibleBookValuePerShare": "fundamentals!E26 - (equity - intangibles)/shares"
},
"target_tab": "derived"
},
"edgar_submissions_json": {
"fields": {
"CIK": "profile!K3 (drives SEC EDGAR deep links at fundamentals!N1/N3)",
"description": "fundamentals!D4",
"sector": "fundamentals!B7"
},
"target_tab": "profile"
}
},
"sheet_id": "1Nwb6PdSA-sojVcpsAOwLi-0oVbhF3i6MO4Juo6G-wDg",
"slug": "marcus_fundamentals",
"tab_count": 10,
"tabs": {
"Setup": {
"errors": 0,
"formulas": 0,
"notes": "API key slot at B23 wired into every data tab via Setup!B23. Empty in this copy.",
"role": "config",
"rows": 26
},
"bs": {
"errors": 9,
"formulas": 409,
"hidden": true,
"role": "data_feed_balance_sheet",
"rows": 200,
"source": "fmpcloud.io/api/v3/balance-sheet-statement; also IMPORTHTML peer tables at row 124"
},
"cf": {
"errors": 74,
"formulas": 227,
"hidden": true,
"role": "data_feed_cash_flow",
"rows": 94,
"source": "fmpcloud.io/api/v3/cash-flow-statement"
},
"derived": {
"errors": 7,
"formulas": 22,
"hidden": true,
"role": "data_feed_ratios",
"rows": 621,
"source": "fmpcloud.io/api/v3/ratios"
},
"diamondMining": {
"errors": 4,
"formulas": 134,
"hidden": true,
"role": "data_feed_peer",
"rows": 355,
"source": "fmpcloud.io/api/v3/cash-flow-statement quarter"
},
"fundamentals": {
"conditional_formats": 235,
"errors": 78,
"formulas": 964,
"frozen_cols": 3,
"frozen_rows": 8,
"notes": "User-facing tab. B5 = ticker. Columns E:X = 20 historical years. Rows 7-48 = lookup-driven metrics.",
"role": "summary_dashboard",
"rows": 49
},
"is": {
"errors": 1,
"formulas": 4,
"hidden": true,
"role": "data_feed_income_statement_v2",
"rows": 53,
"source": "financialmodelingprep.com/api/v3/income-statement via ImportJSON (custom Apps Script, missing)"
},
"pl": {
"errors": 34,
"formulas": 55,
"hidden": true,
"role": "data_feed_income_statement",
"rows": 87,
"source": "fmpcloud.io/api/v3/income-statement"
},
"profile": {
"errors": 1,
"formulas": 4,
"hidden": true,
"role": "data_feed_company_profile",
"rows": 3,
"source": "fmpcloud.io/api/v3/profile; populates K3=CIK used by SEC EDGAR deep links"
},
"screener": {
"errors": 3,
"formulas": 7,
"notes": "B3 = ticker for diamondMining peer feed.",
"role": "secondary_input",
"rows": 3
}
},
"what_broken": [
"All fmpcloud.io and financialmodelingprep.com IMPORTDATA calls dead - confirmed 401 Unauthorized in url_probe (paid-only since 2023)",
"Setup!B23 API key slot empty in this copy",
"is!A2 uses =ImportJSON which is a custom Apps Script not present in this copy",
"211 error cells, all downstream of dead source feeds",
"fundamentals!AE7:AF20 (3yr AVERAGE/STDEV columns) all #DIV/0! due to empty source rows",
"1359 formulas evaluate to empty string - data-starved, not logic-broken"
],
"what_works": [
"GOOGLEFINANCE quote/name calls (9 occurrences) - alive",
"Link tiles in fundamentals!1:3 - SEC EDGAR endpoint probed alive (200), Google search alive",
"Formula discipline: 1311 IFERROR wrappers cause graceful degradation",
"Lookup keys (revenue, totalAssets, bookValuePerShare, operatingCashFlow, EBITDA, EPS, etc.) already match GAAP/standardizer vocabulary",
"Cell topology and 20-year column layout are clean and consistent across data tabs"
]
}