pnclFEED Free key

Quickstart notes

Chart a price history in Google Sheets

The Sheets quickstart refreshes the board every 15 minutes. An append-only History tab turns it into a chartable price record.

The Sheets quickstart refreshes the prematch board into an Odds tab every 15 minutes, one row per match. That tells you where prices are, never where they have been. A second tab that only ever grows turns the same script into a price history, and a history is what a chart needs.

Add a tab that never gets cleared

The quickstart's script rewrites the Odds tab on every run. The history lives elsewhere: a History tab where each run appends rows instead of replacing them. One extra function, called right after the refresh, does the appending:

function appendHistory() {
  const ss = SpreadsheetApp.getActive();
  const odds = ss.getSheetByName('Odds');
  let hist = ss.getSheetByName('History');
  if (!hist) {
    hist = ss.insertSheet('History');
    hist.appendRow(['Time', 'Match', 'Home', 'Draw', 'Away']);
  }
  const rows = odds.getDataRange().getValues();
  const now = new Date();
  const out = [];
  for (let i = 1; i < rows.length; i++) {
    const r = rows[i];
    out.push([now, r[2] + ' v ' + r[3], r[4], r[5], r[6]]);
  }
  if (out.length) {
    hist.getRange(hist.getLastRow() + 1, 1, out.length, 5)
        .setValues(out);
  }
}

Call appendHistory() at the end of refreshOdds, or give it the same 15-minute time trigger. The quickstart's cadence is 96 calls a day, which fits inside a free key's daily budget, as the Sheets page states, checked 2026-10-25; appending rows costs no extra calls at all, because it reads the tab the refresh already wrote.

Keep the history small enough to chart

Every run adds one row per match on the board, and a whole sport board is far more than you will ever chart. Filter inside the loop: one league, or a shortlist of matches you actually follow. Ten watched matches at 96 runs a day is about 29,000 rows a month, comfortable for a spreadsheet; the full board every 15 minutes is not.

A match key column is what makes the rows usable. The quickstart row already carries home and away names; joining them, as the sketch does, gives the chart's filter something stable to match.

From tab to chart

The chart itself needs no script. Filter the History tab to one match (Data, then Create a filter, then pick from the Match column), select the Time column and the price column you want, and insert a line chart. The chart follows the filter, so switching matches redraws the series.

Three columns of prices give you three series on one chart, and the movement between runs becomes visible at a glance: a quiet drift, a sudden step, the shape of a price approaching kick-off. That shape is the thing a single snapshot can never show.

What the history is for

A price chart answers the questions a board cannot: when did this move start, how fast did it travel, did it hold. The Odds tab stays the present tense, refreshed every 15 minutes. The History tab is the record, and the chart is just the record read aloud.