Dynamic OBS overlays with variables and Google Sheets
Scores, donation goals, team names or the next match: values like these change during a stream. Keep them in variables and every overlay that uses them updates on its own.
Vision account required. You build the overlay in the editor. · Updated
How it works
What you need for a dynamic overlay
Open an overlay in Vision and choose Overlay → Variables. Create a variable and pick where its value comes from: set by hand, a counter, Twitch or Kick stats, Google Sheets, an API or a webhook. Insert it into a text layer, bind a layer's visibility to it and change it from chat, an automation or the Stream Deck. The browser source in OBS updates without a reload.
- A Vision overlay added to OBS as a browser source
- The Basic plan or higher for variables
- The Pro plan for Google Sheets, HTTP APIs and webhooks
Step by step
Build a donation goal overlay from Google Sheets
Open the variables
Open your overlay in the Vision editor and choose Overlay → Variables. Click New and, under Pick a source, choose Google Sheets.
Connect the sheet
Click Connect Google and allow read-only access. Paste the spreadsheet URL and set the range to the cell with your total, for example Sheet1!B2. Name the variable Donation total, use the key donations and the value type number. Click Test now to see the current value.
Add the goal and a percentage
Create a second variable with the Manual source, the key goal and the value 1000. Then create a third with the Expression source and enter ({donations} / {goal}) * 100. It always holds the current percentage.
Show the values in your overlay
Select a text layer and click Insert Variable in its control bar. Pick donations and type around it, for example € raised. The chip shows the live value in the editor and in OBS. Bind a score layer's points to the percentage if you want a number that counts up.
Show a banner when the goal is reached
Add a text layer that says Goal reached. In the layer list, click its visibility binding button, choose Add condition and set donations is at least. Switch to Compare to another variable and pick goal. The preview tells you whether the layer is visible right now.
Where a variable gets its value
Every variable has a source. Manual values are set by hand, Counters go up and down in steps. Time / Clock shows the time, the stream uptime, a countdown or the time since a date. Channel stats offer 40 Twitch and Kick values such as latest follower, top tipper or subs this stream. Vision Companion brings heart rate, speed and health stats from the mobile app, and Logo Rotation follows a running rotation.
These sources come with Basic. Pro adds Google Sheets, HTTP API and Webhook, data from quiz shows and tournaments, and live football scores with a stream delay, so the overlay doesn't spoil a goal before your viewers see it.
Each variable is either local to one overlay or available across all your overlays. Choose this with Scope when you create it; it can't be changed afterwards.
Connect Google Sheets, APIs and webhooks
Google Sheets reads one cell per variable, with read-only access to your Google account. Use one variable per cell you want to show. Vision checks the cell as often as every 15 seconds.
HTTP API polls a URL with GET or POST as often as every 5 seconds. Pick a value out of JSON with a path like data.items[0].value and add a bearer token, basic auth or your own headers. Requests run on Vision's servers, so tokens never reach the browser source.
Webhook gives the variable a private URL. Send JSON or text to it from any tool, script or service and the value changes immediately. The editor shows a ready-made curl example to test it.
Make layers adapt to the values
Text layers show variables as chips. Score layers can take their points from a variable, countdown layers their start or end time.
Any layer can bind its visibility to rules. Combine them with ALL or ANY, check numbers, text, regular expressions or dates, and compare against a fixed value or another variable. Hide a sponsor slot while its value is empty or show a layer only on match day.
Expression variables calculate a value from others with arithmetic, comparisons, conditions written as ? : and functions like round, min, max and clamp. They recalculate whenever one of their inputs changes.
Change values from chat, automations and the Stream Deck
Manual and Counter variables can be changed while you're live. In the Chatbot, add a Variable action to a command or timer to set, increase, decrease or reset a variable, on Twitch and Kick. The value is fixed in the command.
Automations, currently in beta, can start when a variable changes and set variables as a step in a flow, for example adding one to subs_today for every new sub. A Chat command trigger also passes on what was typed after the command: set a variable to {{trigger.arg1}} and !score 5 sets it to 5.
The Vision Stream Deck plugin has a Variable action to add, subtract, set or reset. Hotkeys for counters work while the overlay editor is open.
Troubleshooting
If something is not working
- No Variables entry in the Overlay menu? Variables need the Basic plan or higher.
- The Sheets value doesn't change? Check the range and click Reload now. If it reports Last poll failed, make sure the connected Google account can open the sheet.
- A chat command or Stream Deck button does nothing? Only Manual and Counter variables can be changed this way.
- A layer stays hidden? Open its visibility rules. The preview says Waiting for values… until every variable in the rules has a value.
FAQ
Dynamic overlays: common questions
Do I need to reload the browser source when a value changes?
No. New values are pushed to the overlay in real time. Clocks and expressions recalculate directly in the overlay.
Can Vision write to my Google Sheet?
No. Vision only reads, one cell per variable, with read-only access to your Google account.
Can viewers set a value from chat, like !score 5?
Yes, with an automation. Add a Chat command trigger for !score, limit it to mods if you like, and connect a Variable action that sets score to {{trigger.arg1}}. Commands in the Chatbot itself only run fixed values.
What happens to my variables if I downgrade?
Your overlays keep showing them, but on the Free plan you can no longer edit them.