Nightly Airtable view to a Google Sheet
Copy an Airtable view into a Google Sheet every night so anyone can pivot it without an Airtable seat.
Drag to pan, pinch to zoom. This is the real graph the template installs.
Purpose
Copy an Airtable view into a Google Sheet every night so anyone can pivot it without an Airtable seat.
How it works
What it does
- Runs at 02:00 every night.
- Reads up to 500 records from one Airtable view.
- Appends a dated snapshot row to a Google Sheet.
Validation
This template is contract-validated: the unit suite checks every node type, every config key and the whole graph against the same rules a saved workflow passes. It has not been run against the live provider — the ids, names and columns below are placeholders to replace with your own.
Nodes 3
- 01Every night 02:00trigger.scheduleTrigger
- 02Read the viewairtable.list_recordsApp
- 03Append the snapshotgoogle_sheets.appendApp
View template JSON
{
"format": "mantle-workflow/v1",
"id": "airtable-nightly-sheet-sync",
"name": "Nightly Airtable view to a Google Sheet",
"graph": {
"nodes": [
{
"id": "cron",
"type": "trigger.schedule",
"label": "Every night 02:00",
"config": {
"cron_expr": "0 2 * * *",
"timezone": "UTC"
},
"worker_type": "generic-worker",
"position": {
"x": 60,
"y": 220
}
},
{
"id": "records",
"type": "airtable.list_records",
"label": "Read the view",
"config": {
"base_id": "appXXXXXXXXXXXXXX",
"table": "Projects",
"view": "Active",
"max_records": 500
},
"worker_type": "generic-worker",
"position": {
"x": 380,
"y": 220
}
},
{
"id": "append",
"type": "google_sheets.append",
"label": "Append the snapshot",
"config": {
"spreadsheet_id": "1AbCdEfGhIjKlMnOpQrStUvWxYz0123456789",
"range": "Snapshots!A:C",
"values": [
[
"{{ $today }}",
"Active",
"{{ steps.records.count }}"
]
]
},
"worker_type": "generic-worker",
"position": {
"x": 700,
"y": 220
}
}
],
"edges": [
{
"from": "cron",
"to": "records"
},
{
"from": "records",
"to": "append"
}
]
}
}Requirements
The connections and permissions each step needs, from the node contracts in the catalog.
- AirtableBearer token
Used by Read the view.
Credential: the Airtable access token
- Google SheetsOAuth 2.0
Used by Append the snapshot.
Credential: {"client_id", "client_secret", "refresh_token"}
- The refresh token must have the spreadsheets scope.
Setup
- Set
base_id,tableandview;filter_formulais there if you want a narrower slice. - To write one sheet row per record rather than a summary, put a For Each node between the two steps and move the append inside it.
- Pick Airtable and Google Sheets connections.
Sample input and output
Synthetic examples: node-contract samples or placeholders, never customer data.
Input
Runs on the cron schedule 0 2 * * * (UTC). There is no incoming payload: the first step fetches the data.
Output
Append the snapshot google_sheets.append
{
"updated_cells": 0,
"updated_range": "",
"updated_rows": 1
}Failure handling
What the graph does when a step fails, read from its retry settings, error branches and error policies.
- A step that fails, after any retries, fails the run. The failed step is kept with its input and error.
See it run, then make it yours.
Templates install as drafts. Edit any step, and Workflow Health re-checks the graph on every save.