Write a scheduled status row to Google Sheets

Use Schedule Trigger → JSON Operations (JQ) → Append Rows to add a timestamp, workflow name and the literal status ok to Google Sheets each day. This template uses no AI model and no paid third-party API. Production checks passed for the diagnostic harness, a manual graph run and one real one-minute interval firing. Daily wall-clock timing was not tested.

Status: production-tested on 9 October 2026 on AI Flowi Workflow 1.9.2 (15 of 15 cases passed)

By Ai Flowi · Published · Updated

Task

Write one row per successful execution. The timestamp is the trigger’s actual execution time, including its timezone offset. The workflow name is a configured constant. The last cell is always ok. A row confirms that this heartbeat reached the sheet; it does not check the health of another service.

Who it is for

Operations teams and workflow administrators who want a simple daily activity record in a sheet they can inspect. Use a private sheet and synthetic data for the first run.

Sample input

The daily flow needs no incoming HTTP request. Schedule Trigger supplies runtime data. This shortened example shows the fields relevant to the row; identifiers have been omitted.

{
  "trigger": "schedule",
  "scheduled_at": "2026-10-10T08:00:00+08:00",
  "triggered_at": "2026-10-10T08:00:01+08:00",
  "timezone": "Asia/Kuala_Lumpur"
}

Illustrative row, not a recorded test result:

["2026-10-10T08:00:01+08:00", "Scheduled status heartbeat", "ok"]

Setup

  1. Connect your Google account in AI Flowi Workflow. Confirm that the account can edit the selected private spreadsheet.
  2. Create a dedicated tab, for example Heartbeat. Put timestamp, workflow_name and status in A1:C1, in that order.
  3. Save a flow named Scheduled status heartbeat. Add Schedule Trigger, JSON Operations and Append Rows.
  4. In Schedule Trigger, select Daily, timezone Asia/Kuala_Lumpur and one time, for example Hour 08, Minute 00. Leave Enabled off while preparing and testing.
  5. In JSON Operations, choose JQ Expression and paste the row query below. Keep the JQ field visible. Set its constant to the exact saved workflow name.
  6. In Append Rows, select your Google account, set your Spreadsheet ID, set Range to 'Heartbeat'!A:C, select RAW and leave Include Object Headers off. Replace the range if you choose another tab name.
  7. Connect the ports below. Run the saved flow manually and confirm exactly one new three-cell row. Then test one short interval firing before enabling your daily schedule.

Node connections and field mappings

Three nodes, two connections
Source outputTarget inputPurpose
Schedule Trigger: schedule_dataJSON Operations: dataSupply the trigger timestamp
JSON Operations: data_outputAppend Rows: valuesSupply one row in a values wrapper
{values: [[.triggered_at, "Scheduled status heartbeat", "ok"]]}

Column A takes triggered_at; column B takes the configured workflow name; column C takes ok. The scheduled flow has no webhook, model, router or response node. Renaming the flow requires changing the name constant in the query.

Sanitized request and response examples

The actual scheduled flow returns execution events in the authenticated builder, with no synchronous webhook response. The separate diagnostic webhook harness tests row mapping and invalid requests. It is not part of the three-node scheduled template and does not prove the scheduler fired.

POST https://workflow.aiflowi.com/api/v1/webhook/YOUR_TEST_HARNESS_FLOW_ID
Content-Type: application/json
x-api-key: YOUR_PLATFORM_API_KEY

{"triggered_at":"2026-10-10T08:00:01+08:00"}

Observed harness success response after one appended row:

HTTP 200
{"status":"appended"}

Observed harness rejection for a missing timestamp:

HTTP 422
{"verified":false,"error":"triggered_at is required and must be text"}

The request above is illustrative; the response bodies are recorded production results. Missing and invalid API keys returned HTTP 403; their response bodies were omitted from the evidence. Private sheet, account, connection and execution identifiers are not shown.

Validation and failure behaviour

The scheduled path uses the native trigger timestamp and fixed configuration. It accepts no caller-supplied workflow name or status. The diagnostic harness requires an object body and a text timestamp with an ISO 8601 shape and timezone. It rejects missing or wrong-type timestamps, non-object bodies and malformed JSON with an observed HTTP 422 response. Missing or invalid Platform API Keys returned HTTP 403. Read-back checks confirmed that every rejected case left all sheet rows unchanged.

The harness checks timestamp syntax only; an impossible calendar date can match its pattern. Keep this diagnostic endpoint private. Extra input fields are ignored. Repeating a valid request appends another row.

A Google Sheets error stops the flow. The reviewed reference platform has no supported in-flow exception branch for this component; a private webhook caller can receive a raw platform error, including Google API details. A controlled error response is not provided by this design. Check permissions, tab name and Spreadsheet ID, then inspect execution history and read the sheet before retrying.

Test results

Production evidence records 15 of 15 cases passed on 9 October 2026. Twelve cases used a separate companion webhook harness. The actual three-node scheduled graph was run manually through the authenticated build endpoint, with NDJSON completion events, trigger: manual, three node completions and one matching row. It was then temporarily enabled at Interval = 1 Minute. No manual calls to the main graph occurred during that window; sheet read-back and a fresh scheduler transaction with trigger: schedule correlated the appended timestamp. The real firing added one row during a recorded observation window of 69,811 ms, including restoration, read-back and log inspection. This was a real timed interval firing, not a daily wall-clock test.

Observed production acceptance cases: 15 of 15 passed
CaseExpected behaviourObserved HTTP / executionObserved row changeVerdict
Valid harness request200; one exact rowHTTP 200+1; exact three-cell row checkedPASS
Missing timestamp422; no writeHTTP 4220; existing rows unchangedPASS
Wrong timestamp type422; no writeHTTP 4220; existing rows unchangedPASS
Malformed JSON422; no writeHTTP 4220; existing rows unchangedPASS
Missing API key403; no writeHTTP 403; body omitted0; existing rows unchangedPASS
Invalid API key403; no writeHTTP 403; body omitted0; existing rows unchangedPASS
Invalid timestamp shape422; no writeHTTP 4220; existing rows unchangedPASS
Non-object JSON422; no writeHTTP 4220; existing rows unchangedPASS
Forged status and name200; configured name and okHTTP 200+1; configured harness name and literal ok checkedPASS
Identical retry200; another rowHTTP 200+1; identical retry appended another rowPASS
Timezone offset200; timestamp preservedHTTP 200+1; +08:00 timestamp preservedPASS
Null timestamp422; no writeHTTP 4220; existing rows unchangedPASS
Manual scheduled-graph runManual trigger; one rowCompleted manual build; trigger: manual; 3 node completions+1; timestamp matched trigger; name and ok checkedPASS
One-minute real firingFresh scheduler record and matching rowReal timed firing; scheduler correlation confirmed; 69,811 ms observation window+1; timestamp matched fresh scheduler record; name and ok checkedPASS
Restore disabled DailySaved enabled=falseSaved-flow read-back; disabled Daily 08:00, Asia/Kuala_Lumpur confirmedNot recorded; configuration checkPASS

Manual run performed: Yes: authenticated build of the actual scheduled graph. Real firing performed: Yes: one-minute interval, one correlated row. Schedule cleanup: Confirmed disabled; Daily 08:00, Asia/Kuala_Lumpur restored. Temporary-key cleanup: Deletion confirmed. Imported-copy retest: Not recorded in supplied evidence. The suite started with 0 data rows and finished with 6, excluding the header. Exact stored row literals and runtime timestamps were not retained in the sanitized evidence; row deltas and mapping checks were recorded.

Download

Download availability: Not available in the supplied materials. No sanitized export or imported-copy production retest is evidenced. The setup and field mapping above describe the tested graph. A shareable export must have private configuration removed, remain disabled on import and be tested after reconnection.

Required configuration

  • An AI Flowi Workflow account with usable plan allowance.
  • An authorized Google connection with edit permission on the selected spreadsheet.
  • A dedicated tab with the three headers and its exact range.
  • A saved workflow name matching the JQ constant, plus daily time and IANA timezone.
  • Enabled turned on only after checking a manual run and the automatic firing test.
  • For the optional private harness only: POST, Platform API Key authentication and From Flow response mode.

Tested version and date

Template platform version: AI Flowi Workflow 1.9.2, as identified by the supplied live catalogue. Production test date: 9 October 2026. The recorded suite ran from 2026-10-09T01:37:10.178Z to 2026-10-09T01:38:44.750Z. The runtime evidence does not separately capture a deployed-version response; version attribution comes from the catalogue, while execution results come from the production record. Check schedule component fields in your workspace before enabling the flow.

Usage and cost assumptions

Plans: Go from USD8/month billed yearly (USD10 monthly), Plus from USD16 (USD20 monthly), Pro 100 from USD80 (USD100 monthly), Pro 200 from USD160 (USD200 monthly) and Pro 500 from USD400 (USD500 monthly), with 5,000 to 250,000 Flowi Tokens/month and top-ups; 1 token per node run; third-party API and model usage is not included.

The daily path runs three nodes on success, so it targets 3 Flowi Tokens per execution. One execution each day for 30 days targets 90 Flowi Tokens. No AI/model call or paid third-party API is included. The existing Google connection and Google account quotas still apply.

Successful scheduled runs, with no retries
ExecutionsNode calculationFlowi Tokens
100100 × 3300
1,0001,000 × 33,000
10,00010,000 × 330,000

These are usage calculations, not measured charges or additional plan prices. The main path has no branch and assumes one row per run. Retries and manual runs add executions. The optional harness targets seven node runs on a valid request and four on rejected input; each read-back adds one more node run. Failed builds can consume tokens for nodes that ran before failure.

Limitations

  • A successful row is an activity record, not a service-health check or uptime guarantee.
  • Append has no duplicate protection. Retrying after an uncertain outcome can add another row.
  • One real one-minute interval firing was observed. Daily wall-clock firing, downtime recovery, clock drift, daylight-saving changes and long-term schedule reliability were not tested.
  • Disabling a schedule may leave already queued or in-flight work that can still complete.
  • No automatic retry, alert, backfill, spreadsheet-error recovery or row retention policy is implemented here. Google Sheets failure injection was not part of the recorded 15 cases; the recovery limitation comes from the reviewed design.
  • No sanitized export or imported-copy retest is recorded. Complete stored rows and raw scheduler payloads are omitted from the sanitized evidence.
  • Workflow-name changes require an updated JQ constant. Changing headers, tab names or sharing can break the configured write.

Next steps

Configure your own private sheet and confirm its headers. Run a manual check and a short-interval firing in your workspace, then verify daily wall-clock timing before relying on the daily schedule. Import and re-test a sanitized copy before offering a download. Choose your daily time and enable the configured deployment after these checks.

Related: Component catalog · Connections · Webhook to Google Sheets tutorial · Google Sheets integration.