Tools

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 tall

A 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.

?theme=light
?theme=dark
<iframe src="https://hodlometer.com/embed/gauge"
        title="Hodlometer Index"
        width="320" height="250" loading="lazy"
        style="border:0;max-width:100%"></iframe>
ParameterValuesWhat it does
themeauto · 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.
w200–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 tall

For 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.

Hodlometer Index badge

Markdown

[![Hodlometer Index](https://hodlometer.com/embed/badge.svg)](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.