The convention
- Column A = email (required, used as upsert key)
- Column B = name (optional, populates first_name on insert)
- Row 1 = header (skipped)
That's it. Fixed convention so there's no column-mapping wizard — operators rearrange the sheet to match instead of fighting a UI.
Setup
- Google Cloud Console → IAM → Service Accounts → create one. Enable the Sheets API on the project.
- Create a key for the service account (JSON). Downloads a credentials file.
- Brand → Integrations → Connect Google Sheets. Paste the JSON (or upload). Maillayer surfaces the
client_emailfrom the JSON. - In the Google Sheet you want to sync: Share → paste the service-account email → role Viewer is enough.
- Back in Maillayer, paste the Sheet URL (any URL from that sheet works — we extract the ID). Optional tab name.
- Pick actions (add to contacts with tags, welcome new rows), interval, save.
How welcome-email-on-first-sight works
Each row's email is upserted. Maillayer checks whether the upsert created a new contact (vs updated an existing one) — only fires the welcome email on creates. Re-polling the same sheet won't re-greet returning rows.
What's read
Range:
<tab>!A:B. Only columns A and B. Other columns are ignored. No write access — Maillayer never modifies your sheet.