Twitch Goal Widget Setup in StreamElements and Streamlabs (And the 4-Minute Fix When It Freezes Mid-Raid)
Heads up: TwitchElement sells stream overlays and widgets, and some links in this post go to our shop. The advice stands on its own either way.
Your sub goal sat at 62% for two hours while chat kept typing “bar broken?” and you kept pretending everything was fine. I've done that, mid-raid, with a few hundred people watching a dead progress bar. The annoying part: the fix usually takes about four minutes. This is the full twitch goal widget setup for StreamElements and Streamlabs, side by side, plus the three things that actually cause the freeze.
TL;DR
- A frozen Twitch goal widget is almost never your internet. It's a dead websocket, a stale browser cache in OBS, or an expired OAuth connection.
- Set your browser source to the widget's native size, custom FPS 30, and leave Shutdown source when not visible unchecked for goal bars.
- StreamElements breaks at the Twitch connection layer. Streamlabs breaks at the widget token layer. Different fixes.
- Grab the 9-point checklist near the bottom and pin it in your mod Discord before you need it.
Why your Twitch goal widget freezes at some random percentage (and it's not your internet)
Here's the thing nobody explains: a goal bar isn't asking Twitch “how many subs now?” every second. It loads once, opens a socket connection to StreamElements or Streamlabs, and then sits there waiting to be told. The number on screen is a memory of the last message it received.
So when the socket dies, the bar doesn't go blank or throw an error. It just keeps showing the last good number, confidently, like nothing happened. That's why it looks like a frozen percentage instead of a broken widget.
Three things kill that connection in practice. OBS Studio's embedded browser hangs onto a cached copy of the widget and reloads the stale version instead of the live one. Or the OAuth grant between your goal provider and Twitch expires or gets revoked, so the provider itself stops receiving sub and follow events from the Twitch API. Or the widget URL you pasted months ago was regenerated, and you're pointing at a URL that no longer exists.
Twitch goal widget not updating: the three-bucket diagnosis
Before you rebuild anything, figure out which layer is dead. Open the widget URL in a normal browser tab, on your phone if you want to be thorough.
- Bar is correct in the browser, frozen in OBS → it's OBS. Cache or refresh problem. Fix takes 30 seconds.
- Bar is frozen everywhere, including the provider's own dashboard → it's the OAuth/connection layer. Reconnect Twitch.
- Widget URL loads blank or 404s → the token or overlay link was regenerated. Re-copy it.
Across the goal and alert setups we've configured for 500+ streamers at TwitchElement since 2019, those three buckets cover the overwhelming majority of “my bar is stuck” messages. It's rarely exotic.
Real talk: Twitch has its own sub goal feature now, and that goal appears on your channel page and chat without any setup. It's fine. But you can't restyle it, you can't stack it with a Bits goal, and it does not render inside OBS. If you want it on the stream itself, you still need a widget. Worth reading the official Twitch Creator Goals documentation so you know what the native feature does and doesn't cover.
StreamElements goal widget setup: the browser source settings the official docs skip
The StreamElements goal widget lives inside the overlay editor, not as a standalone URL you grab per-widget. That trips people up, because it means your browser source is the whole overlay, and every widget you add sits inside that one link.
How to add sub goal widget in StreamElements
- Open your StreamElements dashboard, go to Streaming Tools → Overlays, and create a new overlay at the same resolution as your canvas (1920×1080 for most of us).
- Click Add Widget → Goals → Sub Goal. You'll also see Follower Goal, Tip Goal and Bits-based options in the same menu.
- Set the goal amount and start date. If you run a Twitch daily sub goal widget, set the period to daily so it resets instead of carrying yesterday's count.
- Open the widget's Settings → Layout and lock the widget box to a size you'll actually use. Don't leave it at the default 800×600 with the bar floating in the middle of a giant transparent box. That empty space becomes a click-blocking layer and a positioning nightmare in OBS.
- If you're using a custom design, drop your styling into the CSS tab and any counter logic into the JS tab. The JS field is where imported widgets from places like the StreamElements widget library store their event handlers, so don't clear it while you're “cleaning up”.
- Hit Launch, copy the overlay URL, and paste it into a new Browser Source in OBS.
Now the part the docs gloss over. These are the browser source values we use on every twitch goal widget we ship, and they exist specifically to stop the cache freeze described above. Same table works whether you're in OBS Studio or a Streamlabs setup.
| Browser source setting | Value for goal widgets | Why it matters |
| Width × Height | Native widget size (e.g. 800×200) | Never scale with the corner handles. Scaling re-renders text and softens edges. |
| Custom FPS | On, 30 | 60 FPS on four widgets is wasted GPU. Goal bars animate fine at 30. |
| Custom CSS | body{background:rgba(0,0,0,0);margin:0;overflow:hidden} | Kills the scrollbar and the grey box. Leave the default in place if unsure. |
| Shutdown source when not visible | Unchecked | Checked = the socket dies every time you leave the scene, and events fired while hidden are lost. |
| Refresh browser when scene becomes active | Checked (scene-specific overlays) / Unchecked (always-on nested scene) | Forces a fresh fetch on scene entry. Redundant if the source never hides. |
| Control audio via OBS | Off | Only on if your goal widget fires a sound on completion. |
Those two checkboxes are the whole ballgame. If you check Shutdown source when not visible on a goal bar that lives in your gameplay scene, every trip to a BRB screen severs the connection, and any sub that lands while you're away never reaches the widget. The OBS sources guide explains the shutdown behaviour if you want the official wording.
Streamlabs goal widget setup: why OBS and SLOBS behave differently
The Streamlabs goal widget works the opposite way: each widget has its own dedicated URL, generated per widget type, all signed with a single account-wide widget token. You'll find the goal types on the Streamlabs goals widget page, including Follower Goal, Sub Goal, Bits, and donation goals, with customizable goals for basically any metric you track.
In SLOBS (Streamlabs Desktop), you add goals as a native widget source. It handles the URL and the token for you, which is convenient right up until it isn't. In OBS Studio you add the same goal as a plain browser source overlay using the copied URL, and you own the refresh behaviour yourself.
Streamlabs goal widget not working in OBS
Nine times out of ten in my inbox, it's one of these:
- Old widget token. If anyone ever hit reset on your Streamlabs widget token, every previously copied URL died instantly, including alert box, chat box and goals. The widget still renders a layout, just with nothing behind it.
- Copied the preview link, not the widget link. The preview page renders test data. Looks perfect, updates never.
- The goal already ended. Streamlabs goals have an end date. A finished goal doesn't scream at you, it just stops moving.
Follower goal widget OBS browser source sizing that doesn't blur
Build the follower goal at the size it ships at. If a bar was designed at 700×90, set the browser source to 700×90 and move it with position, not scale. Need it bigger? Change the font size and bar height inside the widget's CSS, then increase the source dimensions to match. Stretching a 700px source to 1100px in OBS is how you get that slightly fuzzy, slightly off-brand look that separates a $5 overlay from a clean one. Our animated goal bar overlays ship with the native pixel dimensions written in the readme for exactly this reason.
The OAuth token trick that fixes most “stuck goal” support tickets
If the bar is frozen in the provider's own dashboard, not just in OBS, your provider has lost permission to read your channel events. That happens after a password change, after revoking app access in Twitch settings, or just from token expiry over a long stretch.
On StreamElements: log out completely, log back in through Twitch, then open your account settings and reconnect the Twitch integration rather than assuming the login refreshed it. Menu labels shift between UI updates, so hunt for the connections or integrations panel. Once reconnected, hard-refresh the browser source in OBS (right-click → Refresh, or Interact → Ctrl+Shift+R) and watch the number jump to the real value. That single reconnect solves more stuck-goal messages than any other step we take.
On Streamlabs: the equivalent lever is the widget token in your dashboard's API or account settings. Resetting it fixes broken or leaked URLs, and it nukes every widget URL you've ever pasted anywhere. Before you touch it, list every browser source using a Streamlabs link, because you'll be re-pasting all of them: alerts, chat box, goals, event list. I've watched a streamer reset that token twenty minutes before a subathon. Do not be that streamer.
Real talk: Neither platform will tell you your goal is dead. There's no warning banner, no email. Your mods will notice before either dashboard does, which is why the checklist below belongs in your mod channel, not in a bookmark folder you never open.
Stacking sub goal + bits goal + follower goal without overlap on one overlay
Running three goals at once is where most setups turn into visual mud. Three bars, three fonts, three different corner radii, all fighting the webcam frame. Here's the arrangement that holds up.
- Build one nested scene called GOALS. Put all three browser sources inside it, then add that single scene to every gameplay scene. One place to fix things, not five.
- Stack vertically with a fixed gap. Each bar at 700×90, 12px of breathing room between them, left-aligned to the same x-value. Eyeball alignment is visible at 1080p, so type the coordinates in the Transform dialog instead.
- Give each metric one visual difference only. Same font, same bar shape, different accent colour or icon. Sub, Bits, Follower. Three colours, done.
- Hide what isn't live. If Bits goals only matter during a hype push, keep that source unchecked and toggle it with a hotkey. Three permanent bars is a lot of pixels to give up for something nobody reads.
- Rotate instead of stacking if you're at 500+ average viewers. At that size chat moves fast and screen space is expensive. One rotating goal, 20 seconds each, beats a wall of bars. This approach is honestly overkill for a channel averaging 5 viewers, and I'd rather you spend the time on your chat widget readability first.
If all three bars need to match the rest of your layout, it's usually less work to start from one of our full stream overlay packages than to colour-match three separate freebies by hand.
For subathons the layering logic is a bit different, since the timer becomes the anchor and goals orbit it. We build those as a combined unit in our subathon and timer widget sets, and the jar-style formats in the hype jar goal widgets collection fill vertically, which reads better in a corner than a fourth horizontal bar ever will.
The 9-point Twitch goal widget troubleshooting checklist
This is the save-worthy bit. Copy it into a pinned Discord message. When the bar freezes at 3am, you work the list top to bottom and you're back in under five minutes.
- Open the widget URL in a normal browser. Correct there, frozen in OBS? It's OBS, skip to step 3.
- Check the provider dashboard. Frozen there too? Jump to step 6.
- Right-click the browser source → Refresh. Then Interact → Ctrl+Shift+R for a cache-bypassing reload.
- Confirm Shutdown source when not visible is unchecked and Refresh browser when scene becomes active matches the table above.
- Verify the source dimensions equal the widget's native size and that scale is 1.000.
- Reconnect Twitch on StreamElements, or verify the Streamlabs widget token hasn't been reset since you pasted the URL.
- Check the goal's start and end dates. Expired and completed goals stop moving silently.
- Re-copy the overlay or widget URL from the dashboard and compare it character by character to what's in OBS.
- Still dead? Clear OBS's browser cache with OBS fully closed, relaunch, then reload the source. Last resort before rebuilding.
Free Twitch goal widget download vs a paid pack
A Twitch goal widget free from the StreamElements library will show real-time progress to your goals perfectly well, and if you're three weeks into streaming, use it. No shame. The gap shows up in matching: free widgets come from a dozen different designers, so your sub goal, your alerts, and your panels never quite feel like one brand. Paid packs from us, OWN3D or anyone else are mostly buying visual consistency and pre-set dimensions, not extra functionality. Be suspicious of anyone telling you otherwise, including me.
Set it once, then go stream
Fix the browser source settings once, keep the checklist where your mods can reach it, and a stuck bar stops being a stream-ruining mystery. Sub goals are getting more visible attention right now, partly because Twitch pushed native goals and viewers got used to seeing progress on screen, so a bar that actually moves is doing real work for you.
If you'd rather skip the CSS fiddling, our Twitch goal widget collection ships with native dimensions, matching fonts and StreamElements-ready files, and we include the browser source values in the readme. Want a second pair of eyes on a broken overlay? Post a screenshot in our Discord and either I or someone who's fixed the same thing will answer. I've got about 8,000 hours on my own channel since 2020, a decent chunk of them spent rebuilding my own widgets live on air, so the mistakes above are largely mine.
Want this on your stream tonight?
Browse ready-made widgets built for StreamElements and OBS, or start with a free one to try the setup first.
Frequently Asked Questions
How do I create a Twitch widget?
Create it in StreamElements or Streamlabs, then add it to OBS as a Browser Source. In StreamElements you build an overlay, add the widget inside it, and copy one overlay URL; in Streamlabs each widget generates its own URL signed with your account widget token. Paste that URL into a new Browser Source at the widget's native width and height, and leave Shutdown source when not visible unchecked for anything that tracks live events.
Why is my Twitch goal widget not updating during a stream?
The widget holds the last value it received rather than polling Twitch continuously, so a dead socket looks like a frozen percentage. Open the widget URL in a normal browser tab: if it is correct there, the problem is OBS cache and a hard refresh fixes it. If it is frozen in the provider dashboard too, reconnect your Twitch authorisation on StreamElements or confirm your Streamlabs widget token has not been reset.
Is there a free chat widget for Twitch?
Yes. Both StreamElements and Streamlabs include free chat box widgets, and they support BTTV and 7TV emotes once you enable third-party emotes in the widget settings. The free versions are fully functional; what you pay for with a designed pack is styling that matches the rest of your overlay. Add them to OBS the same way as a goal widget, as a Browser Source at native size.
How many viewers do you need on Twitch to make $1000 a month?
There is no fixed viewer number, because income comes from subs, Bits, ads and tips rather than viewers directly. As rough arithmetic, a standard tier-1 sub nets a Twitch Affiliate around half of the $4.99 price, so roughly 400 active subs would land near $1,000 per month before tax. Conversion varies wildly by community, but many small channels see something in the range of one sub per ten to twenty average concurrent viewers, which puts that number at a few hundred CCV for most people.
How many viewers on Twitch to make $5000 a month?
Scaling the same rough maths, $5,000 a month from tier-1 subs alone would mean roughly 2,000 active subs, which is well into mid-size partner territory. In practice nobody gets there on subs alone; sponsorships, YouTube reuploads and merch usually make up a large share at that level. Treat any single viewer-count figure you see quoted as an estimate, because payout splits and ad revenue differ per contract and per region.
One question for you: StreamElements or Streamlabs: which platform's goal widget has actually frozen on you mid-raid, and did support fix it or did you end up rebuilding the overlay from scratch?
About the author: naskdesign has streamed on Twitch since 2020 (~8,000 hours live) and founded TwitchElement in 2019, serving 500+ streamers across Twitch, YouTube, Kick, and TikTok. Catch the streams on Twitch, the research on Google Scholar, or come hang out in the TwitchElement Discord.
Get new free widgets first
One email when we release a new freebie or widget. See the current freebies.



