Skip to main content

Sub Goal Thermometer Auto-sync

A live sub-goal thermometer you can drop into OBS as a browser source. Set goal, current count, theme — copy the embed URL and the bar updates as your share link does.

Manual mode is fully client-side. Auto-sync uses our public Helix relay. No Twitch sign-in, no OAuth, no account.

What this is

A sub-goal thermometer that drops into OBS as a Browser Source and updates by itself, without asking for your Twitch login. Three goal sources cover the actual jobs streamers run: manual for traditional sub goals (the only mode that works for sub count, since Twitch gates that number behind user OAuth), Twitch followers for anonymous auto-sync via the Helix public relay, and live viewers for raid- and charity-event goals during a single broadcast. The whole bar's state (goal, current, theme, colours, OBS preset) lives in the share URL, so a copied link recreates the same overlay anywhere.

Manual update vs auto-sync: why we ship both

Twitch's Helix API treats follower count and subscriber count very differently. Follower totals are public: any client_credentials app token can read /channels/followers?broadcaster_id=X&first=1 and pull the channel's total field. No broadcaster permission, no scope, no user OAuth. We use that to ship anonymous follower auto-sync. Subscriber totals are not public: /subscriptions requires a user OAuth token from the broadcaster with the channel:read:subscriptions scope. App token is not enough. Streamlabs, StreamElements, OWN3D, and GoalForgeX all solve this the same way: they make you sign in.

We chose not to. Manual mode for sub goals is a deliberate trade: you give up the auto-update, you get back zero account creation, zero rate-limit ceilings, zero "Streamlabs is down" failure mode, and a tool that cannot be locked behind an OAuth flow that breaks every time Twitch rotates its consent screen. In practice most streamers update sub counts at most once per session anyway. A phone bookmark of the share URL with the new ?q= values takes about three seconds.

Choosing a goal that converts

A good sub goal sits at 1.5–2× your current monthly sub count. Higher than 3× and the bar barely moves; lower than 1.2× and the goal hits in the first hour and the thermometer becomes irrelevant. For a subathon the goal can be more aggressive. Viewers respond to progress bars during a single big event, and a 4× sub goal during a 12-hour subathon usually clears. Charity events behave similarly: the visual progress is the social proof, the proof drives more contributions, the bar moves faster than your spreadsheet predicts. Return-from-break streams should sit at 1×; clearing it cleanly is the signal you wanted.

OBS browser-source setup: three preset sizes

The share-bar exposes three OBS preset sizes. Pick one before copying the embed snippet, and the embed iframe's width and height update to match.

  • Compact 480×140. Corner placements, low-clutter scenes, mobile-portrait viewer demos.
  • Default 600×200. Standard 1080p scenes; the goal fits inside a sidebar overlay.
  • Wide banner 1480×160. Full-width lower thirds, marathon-style scrolling overlays.

In OBS Studio: Sources → + → Browser → New, paste the embed URL, set Width / Height to the preset values, FPS 30, Custom CSS empty, transparent background. Check "Shutdown source when not visible" to save CPU between scenes. The bar's backdrop-filter: blur(8px) survives over busy scene backgrounds without looking pasted on.

How URL-state beats a dashboard

Every input on the panel writes back to the URL's ?q= param. That sounds like an implementation detail; in practice it changes the workflow. To raise a goal mid-stream, edit the value in the share URL on your phone, hit Bookmark, and reload OBS: three taps, no second tab on the streaming PC. To recreate the same overlay across multiple scenes, paste the same URL into multiple Browser Sources. To sanity-check someone's overlay over a Discord call, paste the URL; they see exactly what you see. There's no Streamrise account holding the goal, no dashboard tab to keep open, and no OAuth refresh that could fail at the worst possible moment. For live viewer counts and "is X live right now" badges, the companion tool is the Live Status Tracker: same architecture, different signal.

Customization: themes, colours, goal-reached state

Three built-in themes ship in the bar: Twitch purple, Kick green, and minimal white-on-dark. The fourth option, Custom, exposes two colour pickers for a 2-stop gradient. The values serialize into the share URL as colorFrom and colorTo, so a shared Custom-themed URL drops into anyone else's OBS with the same gradient. Hex strings are validated server-side too, so a hostile share URL can't inject CSS through the colour params.

When current ≥ goal the bar flips into a celebration state automatically: a gold-and-green gradient takes over, a "GOAL HIT 🎉" pill appears, and a soft glow plus shimmer plays. To reset, raise the goal; the celebration clears the moment current drops below the new goal. No JavaScript animation library; the whole effect is two CSS keyframes.

How we compare

Streamlabs, StreamElements, OWN3D, and GoalForgeX all auto-sync subs; we don't, because we won't make you sign in. They all auto-sync followers; we do too, anonymously. Their dashboards offer more themes, fonts, and animation options out of the gate. The trade-off is an account, an OAuth flow, and a SaaS dependency that can rate-limit, expire, or go dark. Honest summary: if Twitch sub auto-sync is the single feature you can't live without, use Streamlabs. If you want a goal widget that "just works" with no sign-in, no configuration tab, and a URL you can pin to your phone, that's this tool. Once your follower goal is set, also try the Twitch Growth Calculator for a weeks-to-Affiliate horizon at your current cadence.

Frequently asked

How do I add this to OBS?
Add a Browser Source. Paste the embed URL (the "Copy embed" button gives you an iframe; for OBS use just the URL inside src=""). Pick one of the three preset sizes (compact 480×140, default 600×200, wide-banner 1480×160) and the embed snippet matches whatever you select. Transparent background is on by default; the bar will render with whatever current/goal values are in the URL.
How do I update the count during the stream?
Three options. (1) Manual mode: open the share URL in another tab, change goal/current, copy the new URL, paste it into the OBS Browser Source URL field, click Refresh. (2) Twitch followers mode: type your channel handle once and the bar auto-updates every 30 seconds with no sign-in. (3) Live viewers mode: the bar tracks your concurrent viewer count during a stream, useful for raid / charity event goals.
Why no auto-update for sub goals specifically?
Twitch sub count is auth-walled: pulling subscriber totals requires a Twitch OAuth token bound to your account with the channel:read:subscriptions scope. We deliberately ship sign-in-free, so sub-goal mode stays manual. Follower auto-sync works because Twitch lets any client_credentials app token read the public follower total: no scope, no broadcaster permission needed (Twitch dev forum thread 48066 confirms this). For Twitch sub auto-sync specifically, Streamlabs and StreamElements both work after you connect your account.
What sizes work best in OBS?
Three preset sizes are baked into the share-bar: compact 480×140 for corner placements, default 600×200 for standard scenes, and wide-banner 1480×160 for full-width "lower-third" overlays. Pick a preset before copying the embed URL; the iframe dimensions surfaced in the snippet update to match. Set the OBS source to "Match content size" if you want it to auto-fit your URL dimensions.
Can I customize the gradient colors?
Yes. Switch the theme to Custom and the two gradient stops appear as colour pickers (start and end). The values persist in the share URL as colorFrom and colorTo, so a copied URL recreates the same look in OBS without extra setup. The three preset themes (Twitch purple, Kick green, minimal white) stay available too.
Does the auto-sync need my Twitch login?
No. Follower auto-sync uses our public Helix relay with a server-side app token: no user OAuth, no sign-up, no permission prompt. The viewers mode is identical: it reads the public stream metadata. Streamlabs, StreamElements, OWN3D, and GoalForgeX all force OAuth before any auto-sync; this tool is the only widget that delivers the same auto-update behaviour anonymously.
What happens when the goal is hit?
The bar flips into a celebration state automatically: a gold/green gradient takes over, a "GOAL HIT 🎉" pill appears, and a soft glow / shimmer effect plays so the moment is unmistakable on stream. The bar stays at 100% width. To keep raising the bar mid-stream, edit the goal in the share URL or the panel; the celebration state clears as soon as current drops below the new goal.
Does this work on Kick?
Manual mode works on any platform; the bar is a visual progress widget tied to URL state. The Kick theme is built in (green gradient). Auto-sync is currently Twitch-only because we run a Twitch Helix relay server-side; Kick auto-sync will land alongside the rest of the Kick free-tool work. Until then, type the values manually for Kick streams.