This guide walks you through configuring Google BigQuery as a destination for your Webflow Analyze and Optimize data export.
datasync-webflow@prql-prod.iam.gserviceaccount.com.Two service accounts involved
In the GCP console, navigate to the IAM & Admin menu, click into the Service Accounts tab, and click Create service account at the top of the menu.

In the first step, name the new Destination service account and click Create and Continue.

In the second step, grant the new Destination service account the BigQuery User role. This allows creating datasets, submitting load/query jobs, and accessing required metadata during setup.

Alternative: Dataset Already Exists — Why: use least-privilege when your dataset is pre-provisioned.
bigquery.jobs.create to the Destination service account.bigquery.tables.create, bigquery.tables.delete, bigquery.tables.get, bigquery.tables.getData, bigquery.tables.list, bigquery.tables.update, bigquery.tables.updateData, bigquery.routines.get, bigquery.routines.list.Click Done to finish creating the account.
In the service accounts list, click the newly created Destination service account to open its details and make a note of the email (this is different from the Webflow Data Sync Service Account from the prerequisites).
Navigate to the Principals with access tab, click Grant Access, and add the following principal and roles:
Principal: the provided Webflow Data Sync Service Account (see prerequisites)
Roles to grant: Service Account Token Creator, Service Account User
Alternative: Key-based Authentication — Why: only when policy requires, not recommended and presents higher security risk than impersonation.

Log into the Google Cloud Console and navigate to Cloud Storage. Click Create to create a new bucket.

Choose a name for the bucket. Click Continue. Select a location for the staging bucket. Make a note of both the name and the location (region).
Choosing a location (region)
The location you choose for your staging bucket must match the location of your destination dataset in BigQuery. When creating your bucket, be sure to choose a region in which BigQuery is supported (see BigQuery regions)
Click Continue and select the following options according to your preferences. Once the options have been filled out, click Create.
Ensure the bucket is not public. We recommend enabling Uniform bucket-level access and keeping all Public access blocked.
On the Bucket details page that appears, click the Permissions tab, and then click Add.

In the New principals field, add the Destination service account created in Step 1, select the Storage Admin role, and click Save.

Alternative: Understanding GCS Bucket Scope — Why: reduce privileges while preserving required functionality.
However, if policy requires tighter scope than Storage Admin, you can grant only the following minimum actions to the Destination service account: storage.buckets.get, storage.objects.list, storage.objects.get, storage.objects.create, storage.objects.delete.
Optional: Add a short retention lifecycle policy
You may configure a lifecycle rule on the staging bucket to automatically delete objects older than 2 days as the bucket is not used to persist data. In the bucket Lifecycle tab, add a rule with action “Delete object” and condition “Age: 2 days”. Note that transfer logic automatically cleans up files after transfer completion, so this is an optional step.
Log into the Google Cloud Console and select the projects list dropdown.
Make note of the BigQuery Project ID.

Domain-restricted sharing supported
This connection supports Google Cloud organization policies that restrict identities by domain. If your organization enforces domain-restricted sharing, you can allowlist our principal according to Google’s guidance on restricting identities by domain. See the Google Cloud documentation: Restricting identities by domain. Contact support to receive the customer ID to add to your allow list.
Use the following details to complete the connection setup: Project ID, Bucket Name, Bucket Location, Destination Dataset Name, and Destination service account name.
bigquery.jobs.create + dataset-level Data Owner (or custom role with the minimum table/routine permissions listed above).We use staging-assisted load to use BigQuery’s native bulk-upload path, maximizing throughput to your destination.
Data is not persisted in the staging bucket and is deleted after each transfer. You may optionally add a lifecycle rule to auto-delete objects after ~2 days.
Yes. BigQuery is supported across all GCP-supported regions. Ensure your BigQuery dataset and staging bucket are located in the same region.
GCP IAM services can often take up to 10 minutes to propagate. Please wait a few minutes and try again.
You create one service account in your project with BigQuery/Storage permissions, and we use our service account to impersonate yours. This means we never handle your private keys, all operations appear in your audit logs, and you can revoke access anytime through your own IAM permissions.