Skip to main content
aifinhub

Worked example

Running the shipped data-vendor-tco engine on the input below produces exactly this output. Continuous integration recomputes it against the engine bundle on every build, so these numbers cannot drift from the code.

Input

{
  "tool": "data-vendor-tco",
  "needs_live": false,
  "needs_options": false,
  "needs_futures": false
}

Output

{
  "scenario": {
    "universe": "medium",
    "resolution": "minute",
    "history": "5-year",
    "needsLive": false,
    "needsOptions": false,
    "needsFutures": false
  },
  "ranked": [
    {
      "vendor": {
        "id": "alpaca",
        "name": "Alpaca Markets",
        "url": "https://alpaca.markets",
        "shortPitch": "Broker-bundled market data. Generous free tier via IEX feed; SIP feed requires paid plan.",
        "hasOverage": false,
        "lastChecked": "2026-05-25",
        "tiers": [
          {
            "name": "Free (IEX feed)",
            "monthly": 0,
            "includesLive": true,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "IEX feed only (subset of volume)",
              "Free with Alpaca brokerage account"
            ]
          },
          {
            "name": "Algo Trader Plus (SIP feed)",
            "monthly": 99,
            "includesLive": true,
            "includesOptions": true,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute",
              "second",
              "tick"
            ],
            "notes": [
              "Full SIP consolidated tape",
              "Options chains included"
            ]
          }
        ]
      },
      "tier": {
        "name": "Free (IEX feed)",
        "monthly": 0,
        "includesLive": true,
        "includesOptions": false,
        "includesFutures": false,
        "resolutions": [
          "daily",
          "minute"
        ],
        "notes": [
          "IEX feed only (subset of volume)",
          "Free with Alpaca brokerage account"
        ]
      },
      "monthly": 0,
      "oneTime": 0,
      "annualTotal": 0,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    },
    {
      "vendor": {
        "id": "polygon",
        "name": "Polygon.io (Massive)",
        "url": "https://massive.com",
        "shortPitch": "Flat-rate subscription. Real-time + historical for US equities, with a separate Futures product line. Popular retail default.",
        "hasOverage": false,
        "lastChecked": "2026-06-12",
        "tiers": [
          {
            "name": "Stocks Starter",
            "monthly": 29,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "assetClass": "stocks",
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "15-min delayed market data",
              "Unlimited API calls"
            ]
          },
          {
            "name": "Stocks Developer",
            "monthly": 79,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "assetClass": "stocks",
            "resolutions": [
              "daily",
              "minute",
              "second"
            ],
            "notes": [
              "15-min delayed",
              "Unlimited API calls"
            ]
          },
          {
            "name": "Stocks Advanced",
            "monthly": 199,
            "includesLive": true,
            "includesOptions": false,
            "includesFutures": false,
            "assetClass": "stocks",
            "resolutions": [
              "daily",
              "minute",
              "second",
              "tick"
            ],
            "notes": [
              "Full real-time",
              "Unlimited API calls"
            ]
          },
          {
            "name": "Futures Basic",
            "monthly": 0,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": true,
            "assetClass": "futures",
            "resolutions": [
              "daily"
            ],
            "notes": [
              "Historical only",
              "5 API calls/min",
              "Separate Futures product (CME, CBOT, NYMEX, COMEX)"
            ]
          },
          {
            "name": "Futures Starter",
            "monthly": 29,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": true,
            "assetClass": "futures",
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "10-min delayed",
              "Unlimited API calls",
              "Separate Futures product"
            ]
          },
          {
            "name": "Futures Developer",
            "monthly": 79,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": true,
            "assetClass": "futures",
            "resolutions": [
              "daily",
              "minute",
              "second"
            ],
            "notes": [
              "10-min delayed",
              "Unlimited API calls",
              "Separate Futures product"
            ]
          },
          {
            "name": "Futures Advanced",
            "monthly": 199,
            "includesLive": true,
            "includesOptions": false,
            "includesFutures": true,
            "assetClass": "futures",
            "resolutions": [
              "daily",
              "minute",
              "second",
              "tick"
            ],
            "notes": [
              "Real-time CME-group futures",
              "Unlimited API calls",
              "Separate Futures product"
            ]
          }
        ]
      },
      "tier": {
        "name": "Stocks Starter",
        "monthly": 29,
        "includesLive": false,
        "includesOptions": false,
        "includesFutures": false,
        "assetClass": "stocks",
        "resolutions": [
          "daily",
          "minute"
        ],
        "notes": [
          "15-min delayed market data",
          "Unlimited API calls"
        ]
      },
      "monthly": 29,
      "oneTime": 0,
      "annualTotal": 348,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    },
    {
      "vendor": {
        "id": "fmp",
        "name": "Financial Modeling Prep",
        "url": "https://site.financialmodelingprep.com",
        "shortPitch": "Fundamentals-heavy. Earnings, filings, transcripts. Price data is a secondary offer.",
        "hasOverage": false,
        "lastChecked": "2026-04-20",
        "tiers": [
          {
            "name": "Starter",
            "monthly": 14,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily"
            ],
            "notes": [
              "5 years history",
              "250 API calls/day",
              "Price unconfirmed 2026-05-25 — FMP list prices not consistently published"
            ]
          },
          {
            "name": "Premium",
            "monthly": 29,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "Full history",
              "750 calls/day"
            ]
          },
          {
            "name": "Ultimate",
            "monthly": 79,
            "includesLive": true,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute",
              "second"
            ],
            "notes": [
              "Real-time",
              "Unlimited calls"
            ]
          }
        ]
      },
      "tier": {
        "name": "Premium",
        "monthly": 29,
        "includesLive": false,
        "includesOptions": false,
        "includesFutures": false,
        "resolutions": [
          "daily",
          "minute"
        ],
        "notes": [
          "Full history",
          "750 calls/day"
        ]
      },
      "monthly": 29,
      "oneTime": 0,
      "annualTotal": 348,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    },
    {
      "vendor": {
        "id": "tiingo",
        "name": "Tiingo",
        "url": "https://www.tiingo.com",
        "shortPitch": "Strong fundamentals + EOD pricing at low cost. Limited intraday. Favorite for long-horizon research.",
        "hasOverage": false,
        "lastChecked": "2026-04-20",
        "tiers": [
          {
            "name": "Tiingo Starter",
            "monthly": 10,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily"
            ],
            "notes": [
              "EOD equities",
              "News API included",
              "Price unconfirmed 2026-05-25 — official pricing page not machine-readable"
            ]
          },
          {
            "name": "Tiingo Power",
            "monthly": 50,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "Intraday bars",
              "Crypto data",
              "Fundamentals included"
            ]
          }
        ]
      },
      "tier": {
        "name": "Tiingo Power",
        "monthly": 50,
        "includesLive": false,
        "includesOptions": false,
        "includesFutures": false,
        "resolutions": [
          "daily",
          "minute"
        ],
        "notes": [
          "Intraday bars",
          "Crypto data",
          "Fundamentals included"
        ]
      },
      "monthly": 50,
      "oneTime": 0,
      "annualTotal": 600,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    },
    {
      "vendor": {
        "id": "alpha-vantage",
        "name": "Alpha Vantage",
        "url": "https://www.alphavantage.co",
        "shortPitch": "Budget tier with broad coverage. Rate limits tight. Workable for low-frequency research.",
        "hasOverage": false,
        "lastChecked": "2026-05-25",
        "tiers": [
          {
            "name": "Premium 75",
            "monthly": 49.99,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute"
            ],
            "notes": [
              "75 calls/min, no daily limit",
              "Free key capped at 25 calls/day, 5/min"
            ]
          },
          {
            "name": "Premium 1200",
            "monthly": 249.99,
            "includesLive": false,
            "includesOptions": false,
            "includesFutures": false,
            "resolutions": [
              "daily",
              "minute",
              "second"
            ],
            "notes": [
              "1,200 calls/min, no daily limit",
              "Rate-tiered ladder: $99.99/150, $149.99/300, $199.99/600, $249.99/1200"
            ]
          }
        ]
      },
      "tier": {
        "name": "Premium 75",
        "monthly": 49.99,
        "includesLive": false,
        "includesOptions": false,
        "includesFutures": false,
        "resolutions": [
          "daily",
          "minute"
        ],
        "notes": [
          "75 calls/min, no daily limit",
          "Free key capped at 25 calls/day, 5/min"
        ]
      },
      "monthly": 50,
      "oneTime": 0,
      "annualTotal": 600,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    },
    {
      "vendor": {
        "id": "databento",
        "name": "Databento",
        "url": "https://databento.com",
        "shortPitch": "Per-unit metered pricing. Strong for institutional-quality tick + L2 data. No subscriptions on base offer.",
        "hasOverage": true,
        "lastChecked": "2026-05-25",
        "tiers": [
          {
            "name": "Databento metered (typical retail)",
            "monthly": 125,
            "includesLive": true,
            "includesOptions": false,
            "includesFutures": true,
            "resolutions": [
              "daily",
              "minute",
              "second",
              "tick",
              "level2"
            ],
            "notes": [
              "Usage-metered: historical is pay-as-you-go priced per GB (uncompressed binary), no subscription required; $125 free credits on signup",
              "Subscription option: Standard $199/mo (historical core schemas + 1yr L1 / 1mo L2-L3); $125/mo modeled typical retail metered spend",
              "Live data + dedicated support on Plus ($1,399/mo, annual); Unlimited $3,500/mo (verified 2026-05-25)",
              "Per-GB cost scales aggressively with universe and resolution"
            ]
          }
        ]
      },
      "tier": {
        "name": "Databento metered (typical retail)",
        "monthly": 125,
        "includesLive": true,
        "includesOptions": false,
        "includesFutures": true,
        "resolutions": [
          "daily",
          "minute",
          "second",
          "tick",
          "level2"
        ],
        "notes": [
          "Usage-metered: historical is pay-as-you-go priced per GB (uncompressed binary), no subscription required; $125 free credits on signup",
          "Subscription option: Standard $199/mo (historical core schemas + 1yr L1 / 1mo L2-L3); $125/mo modeled typical retail metered spend",
          "Live data + dedicated support on Plus ($1,399/mo, annual); Unlimited $3,500/mo (verified 2026-05-25)",
          "Per-GB cost scales aggressively with universe and resolution"
        ]
      },
      "monthly": 125,
      "oneTime": 0,
      "annualTotal": 1500,
      "meetsResolution": true,
      "meetsLive": true,
      "meetsOptions": true,
      "meetsFutures": true,
      "meetsAll": true
    }
  ]
}

Frequently asked questions

What does the Data-Vendor TCO Calculator methodology page document?
How AI Fin Hub's Data-Vendor TCO Calculator scores market-data vendors. Pricing sources, tier-selection algorithm, metered-pricing model, limitations. It states the formulas, assumptions, data sources, limitations, and reproducibility steps behind the Data-Vendor TCO Calculator, in the Finance category.
When was the Data-Vendor TCO Calculator methodology last reviewed?
This methodology was last reviewed on 2026-04-20. The matching tool is at https://aifinhub.io/data-vendor-tco/.
Are the Data-Vendor TCO Calculator numbers reproducible?
Yes. This page embeds a worked example whose output is the verbatim result of running the shipped data-vendor-tco engine on a fixed input; the embedded JSON is recomputed and diffed against the engine in CI, so the numbers cannot drift from the code.

Methodology · Tool · Last updated 2026-04-20

How Data-Vendor TCO Calculator works

How the Data-Vendor TCO Calculator scores vendors and where the numbers come from.

Scope

The tool estimates annualized US-dollar total cost of ownership for retail + small-team use of the six most-referenced market data APIs in retail algo communities (2026). It is optimized for the question: "given my universe, resolution, and asset-class needs, which vendor is cheapest that actually fits?"

It does not:

  • model enterprise / negotiated rates;
  • include broker commissions, execution fees, or data redistribution licenses;
  • account for region-specific data feeds (Europe, APAC) beyond US equities;
  • predict future vendor pricing (tiers drift; see limitations).

Pricing sources

All pricing reflects published list rates on vendor sites as of 2026-04-20.

Tier-selection algorithm

For each vendor the algorithm runs this sequence:

  1. Filter tiers to those whose resolutions[] array includes the requested bar resolution.
  2. Filter further: if the scenario requires real-time, the tier must have includesLive=true.
  3. Same for options (includesOptions) and futures (includesFutures).
  4. If one or more tiers remain, pick the tier with lowest annualTotal = monthly·12 + oneTime.
  5. If no tier remains, the vendor is displayed dimmed with "Fits: no."

Metered pricing model (Databento)

Databento uses per-byte + per-symbol-day metered pricing rather than flat subscriptions. Exact quotes require live meter estimation with known symbol lists and schema selections. For the TCO calculator we use a deliberately coarse modeled estimate:

monthly_estimate = base · universe_mult · resolution_mult · 0.1

With these multipliers:

UniverseMultiplier
Small (≤50 symbols)1
Medium (~500 symbols)5
Large (~2,000 symbols)15
All US equities (~10,000)40
ResolutionMultiplier
Daily bars1
1-min bars2
1-sec bars4
Tick data8
Level-2 order book16

The multipliers are anchored to publicly-reported retail monthly spend in r/algotrading and r/quant threads ($100–$500/month range for medium-universe minute-bar research). They are calibration estimates, not quotes. For production decisions, always verify via Databento's quoting tool.

Ranking + presentation

Qualifying vendors (Fits: yes) sort cheapest-first by annual total. Non-qualifying vendors appear below, dimmed, so the reader sees both what's available and what's not. There are no sponsored placements or affiliate-tagged vendor rows; see sponsor-disclosure.

Refresh

Pricing is refreshed when a vendor announces a material pricing change. The most-recent refresh date is shown at the top of each vendor row. Corrections are logged at /corrections/.

Limitations

  1. List pricing only. Enterprise and volume-negotiated rates are not modeled.
  2. US equities bias. European, APAC, and crypto-native feeds are partially or not covered.
  3. Metered estimates are coarse. Databento actual spend can vary ±50% from the estimate depending on schema, delivery mode, and query patterns.
  4. Asset-class toggles are binary. "Options" means "some options coverage"; the tool does not distinguish between all-exchange options feeds vs a subset. For rigorous options research, consult the vendor's options-coverage docs directly.
  5. No regional pricing. All prices in USD; non-US customers may face FX or tax implications not modeled.
  6. Historical downloads are captured in oneTime where the vendor sells them as one-off; not all vendors distinguish historical from live in their pricing, which can distort comparisons.

Editorial independence

As of today there are no affiliate or sponsor relationships between AI Fin Hub and any vendor referenced here. The tiered selection algorithm is deterministic and applied uniformly. If that changes, any commercial relationship will be disclosed at the row level and at /sponsor-disclosure/.

Changelog

  • 2026-04-20 — Initial release with 6 vendors (Databento, Polygon, Alpaca, Tiingo, FMP, Alpha Vantage). Metered pricing model calibrated against r/algotrading retail spend reports.
Planning estimates only — not financial, tax, or investment advice.