Google Sheets
Use a spreadsheet as the input list and the output log, so one process handles different rows on every run.
Google Sheets
The Google Sheet action reads a sheet into a variable, writes rows back, or clears a range — so a process can pull its input data from a spreadsheet and log its results to one. Combined with For Loop Data, that's the usual "run this once per row" pattern.
Public sheets need no setup at all
If the sheet is shared as Anyone with the link → Viewer, a Read works straight away — paste the spreadsheet ID and worksheet name and press Test. No key, no service account, nothing to configure.
Writing is different. Link sharing only ever grants read access, so Write and Clear always need the service-account setup below, even on a sheet that is public.
One-time setup (private sheets, and any write)
Access uses a Google service account — a robot Google account you create and share sheets with.
- In the Google Cloud console, create (or pick) a project and enable the Google Sheets API.
- Go to Credentials → Create credentials → Service account and create one.
- Open the new service account → Keys → Add key → Create new key → JSON. A
.jsonfile downloads. - In Parallel, open ⚙ Settings → Google Sheets, paste the entire contents of that file, and click Connect. Parallel verifies the key immediately.
- Settings then shows the service account's email address. Open any spreadsheet you want to use, click Share, and share it with that address — Viewer is enough to read, Editor is required to write or clear.
The Test button
Each Google Sheet step has its own Test button. It checks something Settings' Test can't: that this specific spreadsheet ID, worksheet, and range are reachable — which is where the usual mistake shows up, forgetting to share the sheet with the service account. A pass reports how many rows it found.
Fields
| Field | What it does |
|---|---|
| Operation type | Read, Write, or Clear. |
| Spreadsheet ID | From the sheet's URL — the part between /d/ and /edit. |
| Worksheet name | The tab's name, e.g. Sheet1. Names containing spaces are handled for you. |
| Scope | Optional A1 range within that tab, e.g. A1:B10. Blank means the whole sheet. |
| The first line is set to key Read only | Reshapes the result into objects keyed by the header row instead of a raw grid of rows. |
| Save to Read only | Variable the result is stored in, as a JSON string. |
| Values Write only | One row per line, cells separated by commas. Every cell goes through ${...} interpolation. |
| Append Write only | Adds rows after the last existing row instead of overwriting the range — the right choice for logging results. |
Test
The step has its own Test button. It checks the things that are usually wrong: the spreadsheet ID, the worksheet name, the range — and above all, whether you actually shared the sheet with the service account. Settings has a Test too, but that only proves the key works, not that any particular sheet is reachable.
Example: run a process once per row
Read a sheet of accounts, loop over the rows, and append a result line for each — the shape most Sheets-driven automations take.
1. Google Sheet — Read
Spreadsheet ID: 1AbC… Worksheet: Accounts
☑ The first line is set to key Save to: rows
2. Run JavaScript
Script: JSON.parse(vars).map(r => r.email).join('\n')
(turn the JSON into one email per line for the loop below)
3. For Loop Data — items: the emails, itemVariable: email
└─ Go to URL: https://example.com/login
└─ Type: selector #email, text ${email}
└─ Google Sheet — Write
Worksheet: Results ☑ Append
Values: ${email},done
Run JavaScript step first (as above) — For Loop Data takes a plain list, not JSON.