Destinations
Google Cloud Storage
Send files into a GCS bucket using a service-account JSON key.
Last updated 2026-05-25
On this page
ZenTransfer writes to a Google Cloud Storage bucket using a service-account JSON key. Use when your downstream pipeline runs on Google Cloud, or when GCS is your archive of choice.
What you need¶
- A Google Cloud project
- A GCS bucket in that project
- A service account with
roles/storage.objectCreator(or stricter custom role) on the bucket - A JSON key file for the service account
Setup¶
Step 1: Create the bucket¶
In the Google Cloud Console:
- Open Cloud Storage → Buckets → Create
- Pick a region (single-region for cost; multi-region for resilience)
- Choose a storage class (Standard for active workflows; Nearline/Coldline for archival)
- Create the bucket
Step 2: Create a service account¶
- IAM & Admin → Service accounts → Create
- Name it (e.g.
zentransfer-uploads) - Grant Storage Object Creator on the target bucket (use bucket-level binding rather than project-wide)
- Create a JSON key and download it
Step 3: Configure in ZenTransfer¶
- Log in to your Dashboard
- Under Cloud Storage, find Google Cloud
- Enter: - Bucket name - Optional prefix - Paste the contents of the service-account JSON key
- Save and enable the destination
Step 4: Test¶
Upload one file and verify it lands in the bucket at prefix/filename.ext.
Object naming¶
The processed filename (after rename, if configured) becomes the object name. The optional prefix is prepended.
Storage classes and lifecycle¶
Set storage class on the bucket. ZenTransfer writes objects at the bucket's default class. For automatic transition to colder storage, configure GCS lifecycle rules in the Cloud Console — not in ZenTransfer.
Permissions checklist¶
If uploads fail:
- Service account key is current (not deleted or expired)
- Service account has Object Creator (or equivalent) on the bucket
- Bucket name is correct (case-sensitive, no
gs://prefix in the field) - Bucket exists in a region you can reach from ZenTransfer's infrastructure
Common mistakes¶
- Project-wide vs bucket-scoped binding — use bucket-scoped for least privilege
- JSON key not pasted in full — partial paste truncates and fails authentication
- Wrong service account — multiple service accounts in the project, easy to copy the wrong key
