Skip to content

Google Sheets

Google Sheets is great for non-technical teams who want a familiar spreadsheet UI for managing subscribers.

Terminal window
export SUBSCRIBER_STORE=google-sheets
VariableDescription
GOOGLE_SHEETS_SPREADSHEET_IDThe ID from your spreadsheet URL
GOOGLE_SERVICE_ACCOUNT_EMAILService account email
GOOGLE_PRIVATE_KEYService account private key (PEM format)

Cryyer looks for a sheet tab named after the product ID (e.g. my-app), falling back to the first sheet. Expected columns: email, name (optional), active (optional — defaults to active; set to false to exclude).

Email send logging is a no-op with this backend (read-only).

  • Go to console.cloud.google.com (create a project if you don’t have one)
  • Navigate to APIs & Services > Library
  • Search for “Google Sheets API” and click Enable
  • Go to APIs & Services > Credentials
  • Click Create Credentials > Service account
  • Name it (e.g. cryyer-sheets-reader) and click Done
  • Click the service account you just created
  • Go to the Keys tab
  • Click Add Key > Create new key > JSON
  • Save the downloaded file

From the downloaded JSON file, grab client_email and private_key:

Terminal window
GOOGLE_SERVICE_ACCOUNT_EMAIL=cryyer-sheets-reader@your-project.iam.gserviceaccount.com
GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----\n"

From the spreadsheet URL:

https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit
^^^^^^^^^^^^^^^^^^^^
Terminal window
GOOGLE_SHEETS_SPREADSHEET_ID=1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms

Share the spreadsheet with your service account email (from step 4) as an Editor (required for add/remove subscriber support; Viewer is sufficient for read-only use).

Row 1 should have these headers:

emailnameactive
alice@example.comAlicetrue
bob@example.comBobtrue
charlie@example.comfalse

Name the sheet tab after your product ID (e.g. my-app), or just use the default first sheet if you have one product.

When using audiences, name the sheet tab with the compound key (e.g. my-app:beta).