▮ DFV TERMINAL
10Y 2Y CPI FEDFUNDS VIX SPX
--:--:-- UTC

Copy of flowerys metrics

flowery_metrics_fmp · ID 1IQzunGw82rDageg_R1iD6k6hlc7NCCkgjW1WImzlIDo · Effort to rehab: ?

Tabs
10
Formulas
22,809
Error cells
43
External URLs
10

Purpose

Emergency post-Yahoo-break replacement plumbing for the Roaring Kitty / DFV community fundamentals stack. Pulls TTM income/balance/cash-flow/key-metrics/ratios from FMP per ticker, exposes them under a `yahoo`-named tab so existing downstream Tracker/Universe sheets work unchanged. Support sheet, not a viewer.

Infrastructure shape

_(not analyzed)_

Tabs (0)

TabStatusPurposeNotes

External dependencies

URL / endpointStatusPurposeReplacement
?
?

Rehab strategy

Approach: Replace every FMP endpoint with VPS Python writer reading SEC EDGAR via secfsdstools; preserve isTTM/bsTTM/cfsTTM/keymetricsTTM/ratiosTTM tab schemas exactly so yahoo shim and downstream Tracker keep working untouched.

Raw analysis.json
{
  "author": "flowery",
  "cross_sheet_dependencies": {
    "downstream": [
      "Tracker (1fIGJcy...) consumes the yahoo!B2:AD schema as its fundamentals input"
    ],
    "shim_design": "yahoo tab is a 28-column FILTER passthrough that mimics old Yahoo Finance schema so downstream sheets need no changes when the data source moves",
    "upstream": [
      "Universe template (1hwnvKYv...) supplies tickers",
      "Tracker (1fIGJcy...) supplies extra tickers"
    ]
  },
  "effort": {
    "blocking_dependencies": [
      "secfsdstools wrapper for is/bs/cfs standardizers must exist and be tested against ~5000 filers",
      "VPS publish target (CSV-per-ticker or master sheet) must be decided",
      "ratio compute library (57 ratios) needs unit tests vs FMP outputs as ground truth before deprecating FMP"
    ],
    "rating_sheet_side": "4/10",
    "rating_writer_side": "7/10",
    "summary": "Medium. Sheet structure is clean \u2014 only 5 endpoint families, 5 receiving tabs, well-documented column schemas. No formula logic to rewrite. Heavy lift is on SEC writer: implement ~57 ratio computations + TTM rollup with field names byte-matching FMP\u0027s. Once writer publishes, sheet swap is half-day."
  },
  "external_dependencies": {
    "fmp_paid_api_trap": {
      "calls_per_ticker_per_recalc": 5,
      "estimated_breakage": "50-ticker universe burns free quota in minutes given Sheets recalc-on-edit",
      "free_tier_limit": "250 calls/day",
      "leak_risk": "leaked Discord key 76194d00cde20e858167dfb370efc6eb still works but FMP can revoke any time; also visible in ratiosTTM!B1 cell content of THIS spreadsheet copy",
      "paid_floor_usd_month": 19,
      "verdict": "shipping this sheet free-to-community requires either signup, payment, or a revocable leaked key \u2014 exactly what SEC-direct path eliminates"
    },
    "importrange_targets": [
      {
        "from_cell": "keymetricsTTM!B2",
        "purpose": "Universe ticker list",
        "range": "setup!AE5:AE",
        "target": "1hwnvKYv2nxkXqfSmPsgcYd4ezxaOfK1fHldgUn8zwXs"
      },
      {
        "from_cell": "receive!C1",
        "purpose": "Tracker (downstream)",
        "range": "send!A:A",
        "target": "1fIGJcyKWO86xYwUaxR057Sg_dxPH_K8fL5T92dioeqQ"
      },
      {
        "from_cell": "receive!D1",
        "purpose": "third sheet",
        "range": "admin!A17:A",
        "target": "17qpbneXwh4O57Y--qSUWH07YlJdSSVA6f5d7gBVPQWU"
      }
    ]
  },
  "infrastructure": {
    "custom_apps_script": "IMPORTJSON (not built-in); apikey!A3 hints script body has hard-coded key in Row 17 of is/bs/cfs script files separate from user-entered key in apikey!B1",
    "empty_value_formulas": 22763,
    "errors": 43,
    "row_pattern": "=IF(B\u003crow\u003e=\"\",, IF(REGEXMATCH(receive!$A$2, \";\"\u0026A\u003crow\u003e\u0026\";\"), INDEX(IMPORTJSON(\"\u003cFMP_URL\u003e\"\u0026A\u003crow\u003e\u0026\"?apikey=\"\u0026apikey!$B$1), 2, ),))",
    "tab_list": [
      "start",
      "apikey",
      "yahoo",
      "isTTM",
      "bsTTM",
      "cfsTTM",
      "keymetricsTTM",
      "ratiosTTM",
      "receive",
      "admin"
    ],
    "tabs": 10,
    "top_functions": {
      "ARRAYFORMULA": 35,
      "FILTER": 33,
      "IMPORTJSON": 22765,
      "IMPORTRANGE": 10,
      "INDEX": 22762,
      "REGEXMATCH": 22759
    },
    "total_formulas": 22809,
    "unique_formulas": 22805
  },
  "name": "Copy of flowerys metrics",
  "purpose": "Emergency post-Yahoo-break replacement plumbing for the Roaring Kitty / DFV community fundamentals stack. Pulls TTM income/balance/cash-flow/key-metrics/ratios from FMP per ticker, exposes them under a `yahoo`-named tab so existing downstream Tracker/Universe sheets work unchanged. Support sheet, not a viewer.",
  "rehab_strategy": {
    "approach": "Replace every FMP endpoint with VPS Python writer reading SEC EDGAR via secfsdstools; preserve isTTM/bsTTM/cfsTTM/keymetricsTTM/ratiosTTM tab schemas exactly so yahoo shim and downstream Tracker keep working untouched.",
    "delivery_mechanism": "VPS writer publishes per-ticker static CSVs (or master Google Sheet kept current) consumed via IMPORTDATA or IMPORTRANGE; replace IMPORTJSON Apps Script entirely; strip apikey tab",
    "endpoint_replacements": [
      {
        "downstream_fields_used": [
          "revenue",
          "Ebitda",
          "Eps",
          "incomebeforetax",
          "incometaxexpense",
          "interestexpense",
          "Depreciationandamortization"
        ],
        "drives_tab": "isTTM",
        "fmp_endpoint": "/api/v3/income-statement/{T}?period=quarter\u0026limit=4",
        "fmp_occurrences": 2,
        "sec_replacement": "secfsdstools IncomeStatementStandardizer over last 4 10-Q filings, sum to TTM",
        "yahoo_columns": [
          "B (revenue)",
          "E (Ebitda)",
          "J (Eps)",
          "Q (incomebeforetax)",
          "R (incometaxexpense)",
          "S (interestexpense)",
          "T (ebitda - D\u0026A)"
        ]
      },
      {
        "downstream_fields_used": [
          "Cashandshortterminvestments",
          "Totaldebt",
          "totalstockholdersequity",
          "Goodwillandintangibleassets",
          "totalcurrentassets",
          "Cashandcashequivalents",
          "Shortterminvestments",
          "inventory",
          "Totalcurrentliabilities",
          "Netreceivables",
          "totalassets",
          "Totalliabilities",
          "retainedearnings"
        ],
        "drives_tab": "bsTTM",
        "fmp_endpoint": "/api/v3/balance-sheet-statement/{T}?period=quarter\u0026limit=4",
        "fmp_occurrences": 2,
        "sec_replacement": "secfsdstools BalanceSheetStandardizer, latest 10-Q snapshot",
        "yahoo_columns": [
          "H,I,K,P,V,W,X,Y,Z,AA,AB,AC,AD"
        ]
      },
      {
        "downstream_fields_used": [
          "Freecashflow",
          "Operatingcashflow",
          "Netcashusedforinvestingactivites",
          "Netcashusedprovidedbyfinancingactivities",
          "capitalexpenditure"
        ],
        "drives_tab": "cfsTTM",
        "fmp_endpoint": "/api/v3/cash-flow-statement/{T}?period=quarter\u0026limit=4",
        "fmp_occurrences": 2,
        "sec_replacement": "secfsdstools CashFlowStandardizer, sum 4 quarters to TTM",
        "yahoo_columns": [
          "L,M,N,O,U"
        ]
      },
      {
        "drives_tab": "keymetricsTTM",
        "fmp_endpoint": "/api/v3/key-metrics-ttm/{T}",
        "fmp_occurrences": 11409,
        "key_derivations": {
          "dividendyieldttm": "cash_dividends_paid_TTM / market_cap",
          "enterprisevaluettm": "market_cap + Totaldebt - Cashandshortterminvestments",
          "sharesout": "dei:EntityCommonStockSharesOutstanding (cover-page XBRL fact)"
        },
        "sec_replacement": "Compute server-side from is/bs/cfs standardizers + price (FRED for yields, equity-price feed for market cap) + cover-page XBRL dei:EntityCommonStockSharesOutstanding for sharesout"
      },
      {
        "all_57_headers": [
          "Dividendyielttm",
          "Dividendyielpercentagettm",
          "Peratiottm",
          "Pegratiottm",
          "Payoutratiottm",
          "Currentratiottm",
          "Quickratiottm",
          "Cashratiottm",
          "Daysofsalesoutstandingttm",
          "Daysofinventoryoutstandingttm",
          "Operatingcyclettm",
          "Daysofpayablesoutstandingttm",
          "Cashconversioncyclettm",
          "Grossprofitmarginttm",
          "Operatingprofitmarginttm",
          "Pretaxprofitmarginttm",
          "Netprofitmarginttm",
          "Effectivetaxratettm",
          "Returnonassetsttm",
          "Returnonequityttm",
          "Returnoncapitalemployedttm",
          "Netincomeperebtttm",
          "Ebtperebitttm",
          "Ebitperrevenuettm",
          "Debtratiottm",
          "Debtequityratiottm",
          "Longtermdebttocapitalizationttm",
          "Totaldebttocapitalizationttm",
          "Interestcoveragettm",
          "Cashflowtodebtratiottm",
          "Companyequitymultiplierttm",
          "Receivablesturnoverttm",
          "Payablesturnoverttm",
          "Inventoryturnoverttm",
          "Fixedassetturnoverttm",
          "Assetturnoverttm",
          "Operatingcashflowpersharettm",
          "Freecashflowpersharettm",
          "Cashpersharettm",
          "Operatingcashflowsalesratiottm",
          "Freecashflowoperatingcashflowratiottm",
          "Cashflowcoverageratiosttm",
          "Shorttermcoverageratiosttm",
          "Capitalexpenditurecoverageratiottm",
          "Dividendpaidandcapexcoverageratiottm",
          "Pricebookvalueratiottm",
          "Pricetobookratiottm",
          "Pricetosalesratiottm",
          "Priceearningsratiottm",
          "Pricetofreecashflowsratiottm",
          "Pricetooperatingcashflowsratiottm",
          "Pricecashflowratiottm",
          "Priceearningstogrowthratiottm",
          "Pricesalesratiottm",
          "Enterprisevaluemultiplettm",
          "Pricefairvaluettm",
          "Dividendpersharettm"
        ],
        "drives_tab": "ratiosTTM",
        "fmp_endpoint": "/api/v3/ratios-ttm/{T}",
        "fmp_occurrences": 11348,
        "key_insight": "FMP\u0027s ratios-ttm is pure arithmetic on the three SEC statements + price; nothing requires a third-party data source",
        "sec_replacement": "Compute server-side, all 57 ratios derivable from is/bs/cfs + price"
      }
    ],
    "schema_preservation": "Critical: keep tab names (isTTM/bsTTM/cfsTTM/keymetricsTTM/ratiosTTM) and column header strings (e.g. \u0027Returnonassetsttm\u0027, \u0027Currentratiottm\u0027) byte-identical so existing FILTER predicates in yahoo tab keep matching"
  },
  "sheet_id": "1IQzunGw82rDageg_R1iD6k6hlc7NCCkgjW1WImzlIDo",
  "slug": "flowery_metrics_fmp",
  "vintage": "Feb 2024",
  "what_broken": {
    "broken_cells_concrete": [
      {
        "cause": "apikey!B1 blank \u2192 IMPORTJSON fails",
        "cell": "isTTM!B1",
        "value": "#ERROR!"
      },
      {
        "cause": "apikey!B1 blank",
        "cell": "bsTTM!B1",
        "value": "#ERROR!"
      },
      {
        "cause": "apikey!B1 blank",
        "cell": "cfsTTM!B1",
        "value": "#ERROR!"
      },
      {
        "cause": "apikey!B1 blank",
        "cell": "keymetricsTTM!C1",
        "value": "#ERROR!"
      },
      {
        "cause": "IMPORTRANGE to 1hwnvKYv2nxkXqfSmPsgcYd4ezxaOfK1fHldgUn8zwXs not granted",
        "cell": "keymetricsTTM!B2",
        "value": "#REF!"
      },
      {
        "cause": "depends on B2 chain",
        "cell": "keymetricsTTM!C2",
        "value": "#REF!"
      },
      {
        "cause": "FILTER predicates match against header rows that are #ERROR!",
        "cell": "yahoo!B2..AD2 (28 cells)",
        "value": "#N/A"
      },
      {
        "cause": "yahoo!A2:A is #N/A \u2192 cascades",
        "cell": "ratiosTTM!A2,B2",
        "value": "#N/A"
      },
      {
        "cause": "trackerSheet IMPORTRANGE not granted",
        "cell": "receive!B1,A2",
        "value": "#N/A"
      },
      {
        "cause": "admin!universe named range empty",
        "cell": "admin!E4",
        "value": "#N/A"
      }
    ],
    "endpoints_dead_without_key": [
      "https://financialmodelingprep.com/api/v3/key-metrics-ttm/ (401)",
      "https://financialmodelingprep.com/api/v3/ratios-ttm/ (401)",
      "https://financialmodelingprep.com/api/v3/income-statement/ (401)",
      "https://financialmodelingprep.com/api/v3/balance-sheet-statement/ (401)",
      "https://financialmodelingprep.com/api/v3/cash-flow-statement/ (401)"
    ]
  },
  "what_works": {
    "endpoints_alive_with_key": {
      "/api/v3/balance-sheet-statement/{T}?period=quarter\u0026limit=4": 200,
      "/api/v3/cash-flow-statement/{T}?period=quarter\u0026limit=4": 200,
      "/api/v3/income-statement/{T}?period=quarter\u0026limit=4": 200,
      "/api/v3/key-metrics-ttm/{T}": 200,
      "/api/v3/ratios-ttm/{T}": 200
    },
    "fmp_key_alive": true,
    "leaked_key": "76194d00cde20e858167dfb370efc6eb",
    "note": "All 5 FMP endpoint families return HTTP 200 with the leaked Discord key. Sheet is mechanically functional today IF the key is supplied AND IMPORTRANGE links to Universe/Tracker are granted."
  }
}