> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kadoa.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Cloud Storage

> Deliver data from completed runs to a Cloud Storage bucket

Kadoa configures the integration for you through the [Support Center](/docs/support-center).

## Before you begin

* A Google Cloud project with permission to create a bucket and edit its IAM policy.
* Kadoa's service account email, provided by Support. Your bucket IAM policy grants access without sharing keys.
* An authenticated Google Cloud CLI (`gcloud`).

## Prepare the bucket

<Steps>
  <Step title="Create a private bucket">
    Create a dedicated bucket and keep it private.
  </Step>

  <Step title="Grant Kadoa access">
    Replace both placeholders, then run this command.

    ```bash theme={null}
    gcloud storage buckets add-iam-policy-binding "gs://<YOUR_BUCKET>" \
      --member="serviceAccount:<KADOA_SERVICE_ACCOUNT_EMAIL>" \
      --role="roles/storage.objectUser"
    ```

    Kadoa needs `roles/storage.objectUser` to create, list, overwrite, and delete objects. `roles/storage.objectCreator` is not enough.
  </Step>
</Steps>

## Request the integration

Send these details through the [Support Center](/docs/support-center):

Use a prefix with no leading or trailing slash, for example `kadoa`.

| Detail                | Example                   |
| --------------------- | ------------------------- |
| Bucket name           | `<YOUR_BUCKET>`           |
| Prefix                | `kadoa`                   |
| Formats               | Parquet, JSONL, JSON, CSV |
| Workflow health files | On (default) or off       |

## Verify the first delivery

After a workflow run completes, list the delivered files with your authenticated `gcloud` account:

```bash theme={null}
gcloud storage ls "gs://<YOUR_BUCKET>/<PREFIX>/" --recursive
```

* Confirm one file per selected format exists for that run.
* Confirm each data file's row count matches the same run in the dashboard.
* Run the workflow again. With the [default path template](/docs/integrations/data-integrations#file-layout-and-path-template), confirm that the new run has a new folder.

## What's next

<CardGroup cols={2}>
  <Card title="Load into Snowflake with Snowpipe" icon="snowflake" href="/docs/integrations/snowflake#load-cloud-storage-exports-with-snowpipe">
    Load files from your bucket with a Snowpipe that you manage.
  </Card>

  <Card title="How data integrations work" icon="arrows-rotate" href="/docs/integrations/data-integrations">
    See delivery timing, formats, file paths, and workflow health files.
  </Card>

  <Card title="Amazon S3" icon="aws" href="/docs/integrations/amazon-s3">
    Deliver completed-run data to an S3 bucket.
  </Card>
</CardGroup>
