← All posts
advancedapiwebhooksgoogle-sheetsautomation

How to automate your stream overlays with live match data (APIs, webhooks & Sheets)

Stop typing scores by hand. Feed live data from an API, a webhook, or a Google Sheet and let your scoreboard and overlays update themselves — on air, in real time.

TQ

Team Quadraviz

April 8, 2026 · 6 min read

Automate your overlays with live match data

Manual updates are fine until the action speeds up. A close map, a sudden round flip — by the time you've typed the new score, the moment's gone. The fix isn't faster typing. It's letting your data drive the graphics, so the overlay stays ahead of you instead of behind.

A Quadraviz channel can read live data and push it straight into your scene's Smart Inputs. Connect the source once, map the fields, and every score, name and stat updates itself the instant the data changes.

Pick your method

You can feed a scene from any of these — or mix them on the same channel.

| Method | Best for | How updates arrive | |---|---|---| | Webhooks | Game servers or scorekeepers that push events | Instantly, when the event fires | | APIs | Tournaments or leagues with a data endpoint to pull | On a poll interval you set | | Google Sheets | A non-technical operator updating cells by hand | Every few seconds |

Rule of thumb: if your source can push, use a webhook (it's the most responsive). If it can only be read, poll the API. If a human keeps score, give them a Sheet.

Webhooks: react the instant something happens

Most game integrations and scorekeeping tools fire a POST when something changes — a round ends, a goal lands, a timeout starts. Create a webhook on your channel, hand the URL to your source, and map the JSON fields to your scene inputs.

A typical payload:

json
{
  "event": "round_end",
  "scoreA": 12,
  "scoreB": 9,
  "mvp": "ace.player"
}

Map scoreA to your team A scoreboard input, scoreB to team B, mvp to a nameplate — and the overlay reflects it the second your server fires.

Secure the endpoint. Your webhook URL includes a per-channel token, so treat it like a password: keep it out of public repos and stream scenes. If your source supports signed requests, turn signing on and Quadraviz will reject anything unsigned — so a leaked URL can't be used to spoof your scoreboard mid-broadcast.

What happens to bad data. If a field is missing or malformed, the scene keeps its last good value instead of blanking out on air. Send well-formed JSON and you'll never see a flicker.

APIs: poll a bracket or league feed

For tournaments without webhook support, point Quadraviz at the match or bracket endpoint and set how often to check it.

ts
const channel = quadraviz.channels.update(channelId, {
  dataSource: {
    type: 'api',
    url: 'https://api.tournament.gg/matches/123',
    pollMs: 2000,
    map: {
      scoreA: 'match.teamA.score',
      scoreB: 'match.teamB.score',
      mvp: 'match.mvp.handle',
    },
  },
});

Pick the interval deliberately: 2–3 seconds feels live without hammering the API. If the endpoint rate-limits you, back off rather than push harder — a scoreboard that's two seconds behind is fine; one that gets your key blocked mid-final is not.

Google Sheets: hand scorekeeping to a human

The no-code path, and the one most events actually run on. Link a sheet, map each graphic element to a cell, and your scorekeeper just edits the sheet — from a laptop, in another room, while you focus on the stream.

ts
quadraviz.channels.update(channelId, {
  dataSource: {
    type: 'sheet',
    sheetId: '1AbCdEf…xyz',
    range: 'Live!A2:D2',
    refreshMs: 3000,
    map: { scoreA: 'B2', scoreB: 'C2', mvp: 'D2' },
  },
});

Prefer no code? Do the same mapping in the dashboard's data panel — no snippet required. Either way, the sheet becomes your single source of truth: point multiple channels at it (different languages, different sponsors) and one edit updates every feed at once.

Test it before you go live

Don't discover a broken mapping on air. Fire a sample event and watch the scene react first:

bash
curl -X POST https://hooks.quadraviz.com/c/CHANNEL_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"event":"round_end","scoreA":12,"scoreB":9,"mvp":"ace.player"}'

If the scoreboard moves, you're ready. If it doesn't, check your field mapping — that's the usual culprit.

Keep a human on the drama

Data feeds are perfect for scores and stats. For the dramatic beats — a hype graphic, a sponsor takeover, a clutch replay — you still want a person in the dashboard choosing the moment. The two work together: data fills the scoreboard automatically, you fire the highlights by hand.

That split is the whole game. Automate the busywork so your attention is free for the calls that actually need a human.


Try it on your next event. Connect a webhook or a Sheet, run a test payload, and you'll wonder how you produced without it. New here? Start free — no card needed. For the full setup, see Control overlays with Google Sheets & webhooks and the Smart Inputs docs.