File size: 16,236 Bytes
741c673
c980a9f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03740b2
 
 
 
 
 
 
 
 
 
c980a9f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03740b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c980a9f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bfb55b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c980a9f
 
 
 
 
 
 
144ae63
c980a9f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03740b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c980a9f
 
 
 
 
741c673
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FinzData for Open Models</title>
<meta name="description" content="Give Qwen, Kimi, GLM, DeepSeek, Llama, gpt-oss, Gemma, MiniMax and Mistral point-in-time market data, macro and backtests through function calling and MCP. No API key needed to start.">
<style>
:root{--navy:#1f3a5f;--navy-2:#2c5282;--slate:#64748b;--ink:#0f172a;--muted:#475569;--line:#e2e8f0;--bg:#ffffff;--soft:#f5f8fc;--code:#0b1726;--code-ink:#e6edf6;--accent:#0e7c66}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif}
a{color:var(--navy-2)}
.wrap{max-width:980px;margin:0 auto;padding:0 20px}
header{padding:40px 0 8px}
.mark{font-size:30px;font-weight:800;letter-spacing:-.5px}
.mark .f{color:var(--navy)} .mark .d{color:var(--slate);font-weight:600}
.tag{color:var(--muted);margin:4px 0 0}
h1{font-size:clamp(28px,4.4vw,42px);line-height:1.15;margin:28px 0 12px;letter-spacing:-.6px}
.lead{font-size:18px;color:var(--muted);max-width:760px}
.pill{display:inline-block;background:#e8f5f1;color:var(--accent);border:1px solid #b8e2d6;border-radius:999px;padding:6px 14px;font-weight:700;font-size:14px;margin:18px 0 6px}
section{padding:26px 0;border-top:1px solid var(--line)}
h2{font-size:22px;margin:0 0 12px}
.tabs{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 14px}
.tabs button{border:1px solid var(--line);background:var(--soft);color:var(--ink);padding:8px 14px;border-radius:8px;font:600 14px/1 inherit;cursor:pointer}
.tabs button[aria-selected=true]{background:var(--navy);border-color:var(--navy);color:#fff}
pre{background:var(--code);color:var(--code-ink);padding:16px 18px;border-radius:10px;overflow-x:auto;font:13.5px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;margin:0}
.code{position:relative}
.copy{position:absolute;top:8px;right:8px;background:#22344d;color:#dbe7f5;border:0;border-radius:6px;padding:5px 10px;font:600 12px/1 inherit;cursor:pointer}
.note{color:var(--muted);font-size:14px;margin:10px 0 0}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.card{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:#fff}
.card b{display:block;margin-bottom:4px}
ul.q{padding-left:20px;margin:0} ul.q li{margin:4px 0}
.ds{display:flex;flex-wrap:wrap;gap:8px}
.ds a{font-size:13px;border:1px solid var(--line);border-radius:999px;padding:4px 10px;text-decoration:none;background:var(--soft)}
.try{border:1px solid var(--line);border-radius:12px;padding:18px;background:var(--soft)}
.row{display:flex;gap:10px;flex-wrap:wrap}
.row select,.row input{font:15px/1.3 inherit;padding:10px 12px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;color:var(--ink)}
.row input{flex:1 1 320px;min-width:0}
.row button{font:700 15px/1 inherit;padding:10px 18px;border:0;border-radius:8px;background:var(--navy);color:#fff;cursor:pointer}
.row button:disabled{opacity:.6;cursor:wait}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0}
.chips button{font:13px/1.2 inherit;border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 10px;cursor:pointer;color:var(--muted)}
#log{font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);margin:14px 0 0;white-space:pre-wrap;word-break:break-word}
#answer{margin:12px 0 0;white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;display:none;overflow-x:auto}
footer{border-top:1px solid var(--line);padding:24px 0 40px;color:var(--muted);font-size:14px}
@media (max-width:560px){h1{margin-top:20px}.lead{font-size:16px}}
</style>
</head>
<body>
<div class="wrap">
<header>
  <div class="mark"><span class="f">Finz</span><span class="d">Data</span></div>
  <p class="tag">Built for AI, quants, data scientists and financial analysts who backtest. Clean data. Real insights. Real alpha.</p>
</header>

<h1>Market data for every open model</h1>
<p class="lead">Give Qwen, Kimi, GLM, DeepSeek, Llama, gpt-oss, Gemma, MiniMax and Mistral point-in-time market data, macro vintages and server-side backtests through plain function calling. Your model fetches real numbers, cites the dataset, and never has to guess.</p>
<span class="pill">No API key needed to start</span>
<p class="note">Install and ask: your model gets FinzData's free AI preview (the last 6 months of data) with no account and no FinzData key. For more, a free API key (email only) at <a href="https://finzdata.com/account">finzdata.com/account</a> gives 12 months; full history is at <a href="https://finzdata.com/shop">finzdata.com/shop</a>. Then set <code>FINZDATA_API_KEY</code>. Nothing else changes.</p>

<section>
  <h2>Try it live</h2>
  <div class="try">
    <div class="row">
      <select id="model" aria-label="Model"><option value="glm">GLM 5.3 Flash</option></select>
      <input id="q" placeholder="Ask a market question" maxlength="600" value="How did managed money net positioning in WTI crude oil change over the last 3 months?">
      <button id="ask">Ask</button>
    </div>
    <div class="chips" id="chips"></div>
    <div id="log"></div>
    <div id="answer"></div>
    <p class="note">Runs on open models with FinzData's free AI preview: no sign-up, no key. Answers are research, not investment advice.</p>
  </div>
</section>

<section>
  <h2>Pick your model</h2>
  <div class="tabs" role="tablist" id="tabs"></div>
  <div class="code"><button class="copy" id="copy">Copy</button><pre id="snippet"></pre></div>
  <p class="note" id="snote"></p>
</section>

<section>
  <h2>Any MCP-capable agent</h2>
  <div class="code"><button class="copy" data-for="mcp">Copy</button><pre id="mcp">{
  "mcpServers": {
    "finzdata": { "url": "https://api.finzdata.com/mcp", "type": "streamable-http" }
  }
}</pre></div>
  <p class="note">Works with Qwen-Agent, the Kimi CLI, Tiny Agents, smolagents and any client that speaks MCP. No key needed for the free preview.</p>
</section>

<section>
  <h2>Free strategies</h2>
  <p>Every strategy on the <a href="https://data.finzdata.com/strategies" target="_blank" rel="noopener">FinzData strategies page</a> re-runs free on its full history, since 2000 with delisted stocks included, on our servers. No key needed. Ask any model above to list the strategies and re-run one.</p>
</section>

<section>
  <h2>FinzData Workspace on Cloudflare</h2>
  <p>A persistent workspace for your agent: it keeps files between sessions, runs code next to the data, and saves any strategy re-run into <code>/workspace/strategies/</code> for analysis. Add it to any MCP client with a free FinzData key (email only, <a href="https://finzdata.com/account" target="_blank" rel="noopener">finzdata.com/account</a>).</p>
  <div class="code"><button class="copy" data-for="wsmcp">Copy</button><pre id="wsmcp">{
  "mcpServers": {
    "finzdata-workspace": { "url": "https://workspace.finzdata.com/mcp", "type": "streamable-http",
                            "headers": { "Authorization": "Bearer YOUR_FINZDATA_KEY" } }
  }
}</pre></div>
</section>

<section>
  <h2>What to ask</h2>
  <ul class="q">
    <li>How are speculators positioned in crude oil futures by the latest COT report?</li>
    <li>Show SPY's dealer gamma, call wall and put wall for the last 30 sessions.</li>
    <li>What did the first-published CPI print say last month, before revisions?</li>
    <li>Backtest a 12-month momentum strategy on US stocks, delisted names included.</li>
    <li>Which FinzData strategies beat their benchmark? Re-run the top one through today.</li>
    <li>How many ships transited the Strait of Hormuz each day last month?</li>
    <li>Who are the largest 13F holders of NVDA, and who added the most last quarter?</li>
  </ul>
</section>

<section>
  <h2>Coverage</h2>
  <div class="grid">
    <div class="card"><b>US equities</b>16,000+ US stocks that have traded on NYSE and Nasdaq since January 2000, delisted included, point in time. 5,100+ ETFs.</div>
    <div class="card"><b>Futures and options</b>139 futures markets with every contract since 2007. Point-in-time options gamma (GEX) for single stocks, ETFs and the major indexes. End-of-day options chains.</div>
    <div class="card"><b>Positioning and filings</b>CFTC COT since 1986, 13F holdings, insider transactions, SEC fundamentals as filed.</div>
    <div class="card"><b>Macro</b>22,700+ macro series with every vintage kept, plus FinzData Global Macro Pulse: ship transits through 28 chokepoints, port calls, flights and toll traffic.</div>
    <div class="card"><b>Crypto, FX, indexes</b>512 crypto pairs (Bitcoin since 2013), 79 FX pairs, 123 indexes incl. the VIX term structure.</div>
    <div class="card"><b>Every bar size</b>Tick trades for 1,100+ US stocks and ETFs; 1, 5, 15, 30-minute, hourly and daily bars; server-side backtests.</div>
  </div>
</section>

<section>
  <h2>FinzData datasets on Hugging Face</h2>
  <div class="ds" id="ds"></div>
</section>

<footer>
  <a href="https://finzdata.com">finzdata.com</a> 路 <a href="https://finzdata.com/docs">Docs</a> 路 <a href="https://finzdata.com/agents">For AI agents</a> 路 <a href="https://finzdata.com/shop">Full history</a> 路 MCP: <code>https://api.finzdata.com/mcp</code><br>
  The FinzData team 路 info@finzdata.com
</footer>
</div>
<script>
const Q = "How did managed money positioning in crude oil change over the last 3 months?";
const M = [
 {k:"Hugging Face", pkg:"finzdata-huggingface", note:"One HF token reaches every top open model through Inference Providers. Also: smolagents (smolagents_agent) and Tiny Agents (finzdata-huggingface --write-tiny-agent).",
  code:`pip install finzdata-huggingface\nexport HF_TOKEN=hf_...            # your Hugging Face token\n\nfrom finzdata_huggingface import ask\n# model: "glm", "kimi", "qwen", "deepseek", "llama", "gpt-oss", "gemma", "minimax" or any Hub id\nprint(ask("${Q}", model="glm"))`},
 {k:"Qwen", pkg:"finzdata-qwen", note:"DashScope by default (Singapore; FINZDATA_QWEN_REGION=us or cn). Qwen-Agent: pip install \"finzdata-qwen[qwen-agent]\" then qwen_assistant(). Local Qwen: local(question).",
  code:`pip install finzdata-qwen\nexport DASHSCOPE_API_KEY=sk-...\n\nfrom finzdata_qwen import ask\nprint(ask("${Q}"))`},
 {k:"Kimi", pkg:"finzdata-kimi", note:"Moonshot API, default model kimi-k3. Kimi CLI: finzdata-kimi --install-cli-config adds FinzData to ~/.kimi/mcp.json.",
  code:`pip install finzdata-kimi\nexport MOONSHOT_API_KEY=sk-...\n\nfrom finzdata_kimi import ask\nprint(ask("${Q}"))`},
 {k:"GLM", pkg:"finzdata-glm", note:"Z.ai API, default model glm-5.3 (FINZDATA_GLM_REGION=cn for the mainland endpoint).",
  code:`pip install finzdata-glm\nexport ZAI_API_KEY=...\n\nfrom finzdata_glm import ask\nprint(ask("${Q}"))`},
 {k:"DeepSeek", pkg:"finzdata-deepseek", note:"Default deepseek-flash; PRO_MODEL (deepseek-v4-pro) for deeper multi-step research.",
  code:`pip install finzdata-deepseek\nexport DEEPSEEK_API_KEY=sk-...\n\nfrom finzdata_deepseek import ask\nprint(ask("${Q}"))`},
 {k:"Local (Ollama, vLLM)", pkg:"finzdata-ollama", note:"Any open model on your own machine: Ollama by default, or server=\"vllm\" / \"lmstudio\" / \"llamacpp\". No keys at all.",
  code:`pip install finzdata-ollama\nollama pull qwen3:8b\n\nfrom finzdata_ollama import ask\nprint(ask("${Q}"))`},
];
const tabs=document.getElementById('tabs'), sn=document.getElementById('snippet'), note=document.getElementById('snote');
function pick(i){ [...tabs.children].forEach((b,j)=>b.setAttribute('aria-selected', j===i)); sn.textContent=M[i].code;
  note.innerHTML = M[i].note + ' <a href="https://pypi.org/project/'+M[i].pkg+'/">'+M[i].pkg+' on PyPI</a>'; }
M.forEach((m,i)=>{const b=document.createElement('button'); b.textContent=m.k; b.setAttribute('role','tab'); b.onclick=()=>pick(i); tabs.appendChild(b);});
pick(0);
function copyText(t,btn){ try{ navigator.clipboard.writeText(t); btn.textContent='Copied'; setTimeout(()=>btn.textContent='Copy',1500);}catch(e){} }
document.getElementById('copy').onclick=e=>copyText(sn.textContent,e.target);
document.querySelectorAll('[data-for]').forEach(b=>b.onclick=()=>copyText(document.getElementById(b.dataset.for).textContent,b));

const ENDPOINTS=["https://ask.finzdata.com","https://finzdata-ask.morning-forest-ac67.workers.dev"];
let API=null;
const sel=document.getElementById('model'), q=document.getElementById('q'), go=document.getElementById('ask'), log=document.getElementById('log'), ans=document.getElementById('answer');
const EX=["Where is SPY's call wall and put wall right now?","How many ships transited the Strait of Hormuz each day last week?","Who are the largest 13F holders of NVDA?","What was the latest US CPI print, first release vs revised?"];
EX.forEach(e=>{const b=document.createElement('button');b.textContent=e;b.onclick=()=>{q.value=e;q.focus();};document.getElementById('chips').appendChild(b);});
(async()=>{for(const e of ENDPOINTS){try{const r=await fetch(e+'/models');if(r.ok){const m=await r.json();API=e;sel.innerHTML='';Object.entries(m).forEach(([k,v])=>{const o=document.createElement('option');o.value=k;o.textContent=v;sel.appendChild(o);});return;}}catch(_){}}
  log.textContent='The live demo is starting up - meanwhile, copy a snippet below and ask from your own machine.';})();
function md(s){const esc=s.replace(/[&<>]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;'}[c]));return esc.replace(/\*\*(.+?)\*\*/g,'<b>$1</b>').replace(/(https:\/\/finzdata\.com\/[\w\/-]*)/g,'<a href="$1">$1</a>');}
async function ask(){
  if(!API){log.textContent='The live demo is not reachable right now. Try again shortly.';return;}
  const question=q.value.trim(); if(!question) return;
  go.disabled=true; log.textContent='Thinking...'; ans.style.display='none'; ans.innerHTML='';
  const lines=[];
  try{
    const r=await fetch(API+'/ask',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({question,model:sel.value})});
    if(!r.ok){const j=await r.json().catch(()=>({}));log.textContent=j.error||('Error '+r.status);return;}
    const rd=r.body.getReader(), dec=new TextDecoder(); let buf='';
    for(;;){const {done,value}=await rd.read(); if(done) break; buf+=dec.decode(value,{stream:true});
      let i; while((i=buf.indexOf('\n\n'))>=0){const chunk=buf.slice(0,i); buf=buf.slice(i+2); if(!chunk.startsWith('data: ')) continue;
        const ev=JSON.parse(chunk.slice(6));
        if(ev.type==='tool'){lines.push('\u2192 FinzData '+ev.name+'('+JSON.stringify(ev.args)+')'); log.textContent=lines.join('\n')+'\nWorking...';}
        else {log.textContent=lines.join('\n'); ans.style.display='block'; ans.innerHTML=md(ev.text||'');}
      }}
  }catch(e){log.textContent='Connection dropped. Please try again.';}
  finally{go.disabled=false;}
}
go.onclick=ask; q.addEventListener('keydown',e=>{if(e.key==='Enter') ask();});
const DS = ["FinzData/cftc-commitments-of-traders", "FinzData/sec-13f-institutional-ownership", "FinzData/sec-insider-transactions", "FinzData/finra-short-interest", "FinzData/sec-financial-statements", "FinzData/forecast-bench", "FinzData/sec-earnings-release-dates", "FinzData/political-spending-2026", "FinzData/macro-commodities", "FinzData/macro-consumer-credit", "FinzData/macro-consumption", "FinzData/macro-consumption-international", "FinzData/macro-electricity", "FinzData/macro-financial-conditions", "FinzData/macro-fx", "FinzData/macro-growth", "FinzData/macro-housing", "FinzData/macro-income-spending", "FinzData/macro-inflation", "FinzData/macro-labor", "FinzData/macro-liquidity", "FinzData/macro-money-credit", "FinzData/macro-orders-trade", "FinzData/macro-other", "FinzData/macro-other-indicators", "FinzData/macro-population", "FinzData/macro-production", "FinzData/macro-productivity", "FinzData/macro-rates", "FinzData/macro-recession", "FinzData/macro-trade", "FinzData/macro-energy"];
const ds=document.getElementById('ds');
DS.forEach(id=>{const a=document.createElement('a'); a.href='https://huggingface.co/datasets/'+id; a.textContent=id.split('/')[1]; ds.appendChild(a);});
</script>
</body>
</html>