Put the Hodlometer Index on your own site
Two widgets, both free, both server-rendered, neither one loads a framework or drops a cookie on your readers. Copy a snippet, paste it, done — the numbers keep themselves current. Right now they read 27.0 — Cool.
The gauge
iframe · 250px tallA card with the dial, today's number, its zone and the reading date. Good for a sidebar, a market page or the top of a weekly note. The caption inside it is the attribution — leave it where it is and you have met the terms in full.
<iframe src="https://hodlometer.com/embed/gauge"
title="Hodlometer Index"
width="320" height="250" loading="lazy"
style="border:0;max-width:100%"></iframe>
| Parameter | Values | What it does |
|---|---|---|
theme | auto · light · dark |
Default auto: the widget follows the reader's own light/dark setting, so it
matches their system rather than guessing at your page. |
w | 200–640 | Maximum width of the card inside the frame, in pixels. Default 320. Set the iframe to
width="100%" and the card stays centred at this width. |
Height is fixed at 250 pixels for every theme and width — the frame never scrolls and never jumps. The corners are transparent, so the card sits on your background, not on a white rectangle.
The badge
SVG · 20px tallFor a README, a forum signature or a docs header. It is a real SVG rendered on our side, so the value and the zone colour are current every time it is fetched — nothing to update by hand.
Markdown
[](https://hodlometer.com/)
HTML
<a href="https://hodlometer.com/"><img src="https://hodlometer.com/embed/badge.svg"
alt="Hodlometer Index" height="20"></a>
The colour is the zone colour from the same scale the gauge uses — indigo when the market is cold, tomato when it is overheated. Width follows the text, so Deep Freeze makes a wider badge than Warm; the height never changes.
The rules, in full
- Use it anywhere, including commercially. Personal blog, company site, paid newsletter, app — no permission, no fee, no registration.
- Keep one visible link to hodlometer.com. In the gauge that is the caption at the
bottom; with the badge it is the link you wrap it in. Do not hide it, cover it or set it to
rel="nofollow". - Do not present the number as your own, and do not rename it. It is the Hodlometer Index, calculated by an openly documented method — that is exactly why it is worth showing.
- Do not modify the widget's contents. Restyling the space around it is fine; editing the value, the zone or the date inside it is not.
- It is data and education, not advice. Do not wrap it in a claim that we recommend buying or selling anything — we do not.
That is the whole licence. We do not need to hear about it in advance, though we like knowing where the index shows up — the contact address is on the about page.
Rather build your own?
Everything the widgets show comes from one open endpoint: GET /api/index. No key,
no rate limit worth the name, Access-Control-Allow-Origin: *, fifteen-minute cache
and an ETag. It returns the current value, its zone and zone boundaries, each of the four components with
its raw input and score, and — with ?history=365 — up to ten years of daily
values.
curl https://hodlometer.com/api/index?history=30
Same attribution rule: if the number reaches an audience, a visible link to hodlometer.com reaches it too. See the raw response · how the number is built.
Frequently asked questions
Is it really free, including on a commercial site?
Yes. Blogs, newsletters, exchanges, paid newsletters, apps — all fine, no permission needed and no fee. The one condition is the link back: keep the caption inside the gauge, or wrap the badge in a link to hodlometer.com. That link is the entire price of the widget.
Does the widget track my readers?
No. The gauge is a plain server-rendered page: no cookies, no JavaScript, no analytics script, no third-party requests, no fingerprinting. We see the same thing any web server sees when it serves an image — a request line in a log. The badge is a static SVG with a fifteen-minute cache, so most of your readers will not reach us at all.
How often do the numbers change?
Once a day. The index is recomputed after the daily candle closes at 00:00 UTC, and both widgets carry a fifteen-minute cache header, so a busy page hits us at most four times an hour per edge cache. The badge also sends an ETag: unchanged readings come back as an empty 304.
Can I change the size or force a theme?
The gauge takes ?theme=light, ?theme=dark or the default
?theme=auto, which follows the reader's own system setting, and ?w= between
200 and 640 for the card width. Height stays 250 pixels in every combination — the card
is centred inside the frame, so a wider iframe simply gives it more room. The badge has no options: its
colour is the zone colour and its width follows the text.
What happens if your index stops updating?
The widgets keep showing the last computed reading with its own date, so a stale number is visibly stale rather than silently wrong. If the index has never been computed, the gauge says so in words and the badge reads "no data" instead of inventing a value.
I want to render it myself. Is there raw data?
Yes — GET /api/index returns the current value, its zone, every component and up to ten years of history as JSON. No key, CORS open, same attribution rule. The methodology documents exactly how the number is built.