Point-in-time US fundamentals. A source-checked API.

Company financials pulled from SEC filings, daily price data, and a research score for each stock — every number comes with a note on where it came from. The API is built for a repeatable research pipeline, not an ordered buy list. This is a separate research product from the rankings used in our videos and emails.

Pull it, screen it, verify it.

Build a dependable daily research workflow in your own spreadsheet, script, or dashboard.

1 · PULL

Start with dated facts

Pull company financials exactly as they were filed with the SEC, plus a checked trailing-12-month summary, for whatever stocks you're tracking.

2 · SCREEN

Build your own view

Use the research score, how it ranks against other stocks, and what drove it, in your own dashboard, screener, or report.

3 · VERIFY

Know where each number came from

Every row shows the filing date and data source. Restricted or unverified vendor fields are omitted rather than substituted, with source attribution and terms links in its provenance metadata.

Want to see the exact response shape first? See a sample response or read the full technical spec.

Free

$0/mo

No signup, no key, real live data

5-row teaser of today's ranked stock & crypto picks

Full live track record (win rate, avg return vs. S&P 500)

Docs explaining how the data is scored and sourced

SEC signals: fails-to-deliver spikes, 8-K material weakness flags, congressional trading

100 calls/day, no key required

Starter

$19/mo

7-day free trial

500 calls / day · cancel anytime

Everything in Free, plus

Company financials exactly as filed with the SEC

Quarterly numbers plus a checked trailing-12-month summary

Look up up to 25 stocks in one request

Filing dates and a note on where each number came from

Daily price history

500 calls / day

Ultra

$49/mo

7-day free trial

10,000 calls / day · cancel anytime

Everything in Pro, plus

Higher daily call limit across the whole API

New research fields as we add them

Historical archive and export access, once those are live

10,000 calls / day

Want the full details? See every endpoint by tier and a real sample response below.

Every paid plan includes a 7-day free trial \— your card is not charged until day 8. Cancel anytime from your Stripe receipt or email top5stocksdaily@gmail.com. No long-term contract.

Endpoints, fields, and limits may change over time. Some paid endpoints are new and may not have much history yet.

This is a separate research product from the site's rankings. Full technical spec: /api/v1/openapi.json (OpenAPI 3.1, importable into Postman/codegen)

Free — no key, no signup (100 calls/day, 10/min)

GET Free /api/v1/stocks/public.json 5-row teaser of today's ranked stock picks
GET Free /api/v1/undervalued/public.json 5-row teaser of the value-screen picks
GET Free /api/v1/generational/public.json 5-row teaser of the long-hold quality screen
GET Free /api/v1/performance/cumulative.json Full live track record: win rate and avg return vs. the S&P 500
GET Free /api/v1/performance.json Win rates, avg returns, and S&P 500 comparison for every strategy
GET Free /api/v1/performance/history.json Full pick-by-pick history with entry/exit returns
GET Free /api/v1/performance/symbols.json Per-symbol win rates and average returns
GET Free /api/v1/metadata.json Coverage universe, field list, and update schedule

Stock scores & research data

GET Pro /api/v1/research/stocks/today.json Every stock's research score, how it ranks, the financials behind it, and where the data came from
GET Pro /api/v1/research/stocks/{symbol}.json One stock's research score and a breakdown of its data sources
GET Pro /api/v1/research/stocks/batch.json?symbols=AAPL,MSFT Research data for a list of stocks you choose, up to 25 at once
GET Starter /api/v1/fundamentals/{symbol} A company's financials exactly as filed with the SEC, with filing dates
GET Starter /api/v1/fundamentals/{symbol}/ttm A checked trailing-12-month summary built from actual filings
GET Starter /api/v1/fundamentals/batch?symbols=AAPL,MSFT SEC financials for up to 25 stocks in one request
GET Starter /api/v1/fundamentals/ttm/batch?symbols=AAPL,MSFT TTM summaries for multiple stocks, with any missing ones flagged
GET Starter /api/v1/fundamentals/coverage How current and complete our SEC data is right now
GET Starter /api/v1/bars/{symbol}/daily Daily closing price history, with a note on where it's licensed from

Rows we can't fully verify against SEC and price sources are left out. This is research data, not a ranked buy list, trade instruction, or real-time feed.

Website and membership data stay separate

The main website, videos, emails, and member tools run on their own separate data feeds. Those aren't part of this Developer API and can't be accessed with a Developer API key.

This feed is built to stay stable and is always sorted alphabetically by ticker. It gives you a research score, how that score ranks, what drove it, and where the numbers came from — it doesn't give you a ranked buy/sell list or trade levels.

GET /api/v1/research/stocks/today.json
GET /api/v1/research/stocks/NVDA.json
GET /api/v1/research/stocks/batch.json?symbols=AAPL,MSFT,NVDA
scoreThe overall research score — not a buy or sell signal
score_percentile_bandHow this score compares to other stocks we cover
factor_attributionA breakdown of what drove the score: quality, value, momentum, and where each piece came from
source_provenanceWhich licensed sources fed into this row
price_source_capabilitiesDetails on the price data's licensing terms and how current it is

This feed only shows current data — missing or outdated records are left out rather than filled in from another source. For batch requests, add a comma-separated symbols list (up to 25 tickers); results keep your requested order and flag anything missing.

Start with the public contract preview below. It shows what /research/stocks/today.json returns; you'll see real data once you're authenticated with an API key.

Loading...

Every endpoint returns JSON, with your actual data inside the data field — for example response.data.stocks[0].symbol

To authenticate, send Authorization: Bearer YOUR_API_KEY. Docs/discovery endpoints don't need a key. Data endpoints follow your plan's daily limit: Starter 500/day, Pro 2,000/day, Ultra 10,000/day.

import requests

# Source-checked research feed (Pro)
headers = {"Authorization": "Bearer YOUR_API_KEY"}
payload = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/research/stocks/today.json",
  headers=headers, timeout=15
).json()

for stock in (payload.get("data") or {}).get("stocks", []):
    print(stock["symbol"], stock["score"], stock["score_percentile_band"])
    print(stock["factor_attribution"])

# Point-in-time SEC lookup (Starter)
fundamentals = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/fundamentals/NVDA",
  headers=headers, timeout=15
).json()
print(fundamentals.get("data"))

For a watchlist or dashboard, use one batch request instead of one request per symbol:

batch = requests.get(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/fundamentals/batch?symbols=AAPL,MSFT,NVDA",
  headers=headers, timeout=15
).json()
for row in (batch.get("data") or {}).get("records", []):
    print(row["symbol"], row.get("latest_filed"))
const headers = { Authorization: "Bearer YOUR_API_KEY" };
const response = await fetch(
  "https://top5stocks-api.top5stocks.workers.dev/api/v1/research/stocks/today.json",
  { headers }
);
const payload = await response.json();
const stocks = payload.data?.stocks ?? [];
stocks.forEach(stock => {
  console.log(stock.symbol, stock.score, stock.score_percentile_band);
  console.log(stock.factor_attribution);
});
This Developer API is REST-only.
Use /api/v1/research/stocks/today.json for the Pro research feed and
/api/v1/fundamentals/{symbol} for Starter SEC lookups.

Website and membership features run on a separate system from this Developer API and aren't covered by this documentation.

Errors return JSON with an error code:

Status Error code Meaning
401invalid_or_missing_api_keyNo key, or the key doesn't exist. Send Authorization: Bearer YOUR_API_KEY.
401api_key_revokedKey was revoked (usually a cancelled subscription).
403insufficient_planEndpoint needs a higher plan. The response includes current_plan and required_plan.
429rate_limit_exceededPer-minute burst limit hit. Honor the Retry-After header (60s).
429daily_limit_exceededDaily call quota used up — resets at midnight UTC.

Rate limits (daily limit / per-minute limit): Starter 500 & 30/min, Pro 2,000 & 60/min, Ultra 10,000 & 200/min. Free endpoints are open for reasonable use; unusually heavy traffic may get throttled.

Successful authenticated data responses include X-DailyLimit-Limit and X-DailyLimit-Remaining headers so you can track usage without extra calls.

Lost your key? Your API key is emailed at purchase. To confirm which keys exist for your email:

curl -X POST https://top5stocks-api.top5stocks.workers.dev/api/v1/key/lookup \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'

Returns masked keys (never the full key) for the checkout email. Limited to 5 attempts per 15 minutes. Need the full key resent? Reply to your welcome email.

7-day first-charge refund. Request a full refund of an eligible first API charge within seven days by replying to your API-key email or contacting top5stocksdaily@gmail.com. Include the checkout email and the last four characters of the API key. One refund per customer; an issued refund cancels that API subscription and revokes its key.

This Developer API is a separate research product from the site. It pulls company financials straight from SEC filings and licensed daily price data, then turns that into research scores — with a note on where every number came from. It's not connected to the rankings used in our videos and emails.

  • No uptime guarantee. Data refreshes daily on a best-effort basis. If a data source goes down, we leave that field out rather than guess at a value.
  • Field availability: If we can't verify a number against a licensed source, we leave it out rather than substitute something else. Each endpoint only returns fields cleared for its plan. Where price data is included, the response notes exactly where it's licensed from.
  • This isn't an alert or trading-execution feed. It's latest-only research data. Telegram alerts and real-time model events are a separate beta feature with their own availability.
  • Scoring changes: The scoring formula and fields may change over time. Significant changes will be noted in the API changelog; build your integration to check the schema version and handle unexpected fields gracefully.
  • Cancel anytime using the manage-subscription link in your Stripe receipt, or email top5stocksdaily@gmail.com. No long-term contract.

Disclaimer: This API provides source-checked factor research for educational and informational purposes only. It is not an ordered recommendation, financial advice, a recommendation to buy, sell, or hold any security, or personalized investment guidance. We are not a registered investment advisor. Past model performance does not guarantee future results. Use this data at your own risk. Full disclaimer →