> For the complete documentation index, see [llms.txt](https://docs.finout.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.finout.io/billing-integrations/data-and-engineering-platforms/connect-to-snowflake.md).

# Connect to Snowflake

Snowflake's organization-level integration connects your entire Snowflake organization through a single setup. Cost data pulls directly from Snowflake's billing schema in invoice currency - no credit-rate configuration needed, and costs match your invoice exactly."

With this integration you can:

* Track Snowflake spend alongside your other cloud and SaaS costs in a single view
* Break down costs by account, region, service type, user, role, and query type
* Use Snowflake tags for cost allocation and chargeback in Finout
* Include Snowflake cost data in custom dashboards, [Anomalies](https://docs.finout.io/user-guide/optimize/anomalies), and financial plans

{% hint style="info" %}
Finout uses read-only access to Snowflake's organization-level usage schema and does not modify or delete any of your data. Queries run against the schema using `finout_warehouse` and consume Snowflake compute credits.
{% endhint %}

***

### Prerequisites

Before starting, make sure you have:

* A Snowflake account with access to the Snowflake Console
* The `ORGADMIN` role in Snowflake, required to grant organization-level permissions

***

### 1. Create Permissions in Snowflake

1. **Log in** to your Snowflake account.
2. **Open a new worksheet** in your Snowflake console.
3. **Paste and run** the following commands as a user with the `ORGADMIN` role:

```sql
USE ROLE orgadmin;

CREATE WAREHOUSE IF NOT EXISTS finout_warehouse
  WITH WAREHOUSE_SIZE = 'MEDIUM'
  AUTO_SUSPEND = 30
  INITIALLY_SUSPENDED = TRUE;

CREATE ROLE IF NOT EXISTS finout_role;

CREATE USER IF NOT EXISTS finout_user
  PASSWORD = '<YOUR_PASSWORD_HERE>'
  DEFAULT_ROLE = finout_role;

GRANT USAGE ON WAREHOUSE finout_warehouse TO ROLE finout_role;
GRANT ROLE finout_role TO USER finout_user;

-- Organization-level grants required for invoice-accurate cost data
GRANT DATABASE ROLE SNOWFLAKE.ORGANIZATION_USAGE_VIEWER TO ROLE finout_role;
GRANT DATABASE ROLE SNOWFLAKE.ORGANIZATION_BILLING_VIEWER TO ROLE finout_role;
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE finout_role;

CREATE OR REPLACE NETWORK POLICY FINOUT_NETWORK_POLICY
  ALLOWED_IP_LIST = (
    '34.196.241.137',
    '54.163.113.82',
    '44.196.75.137',
    '212.59.64.84'
  );

ALTER USER finout_user SET NETWORK_POLICY = FINOUT_NETWORK_POLICY;
```

<figure><img src="/files/M7CUotV3ejyaYZyhe36v" alt=""><figcaption><p>Run the setup commands in a new Snowflake worksheet using the ORGADMIN role</p></figcaption></figure>

***

### 2. Connect Snowflake to Finout

#### Step 1 — Connect Organization

1. In Finout, **navigate to** **Settings > Cost Centers**.
2. Under the Snowflake tile, **click** **Connect Now**. The **Snowflake integration** wizard opens on the **Connect Organization** step.

<figure><img src="/files/OIRQ6QNXpIXC5uE9jNCc" alt=""><figcaption><p>Click Connect Now on the Snowflake tile to open the setup wizard.</p></figcaption></figure>

3. **Enter** the following details:

| Field                         | Description                                                            |
| ----------------------------- | ---------------------------------------------------------------------- |
| Cost Center Name              | A name for this Cost Center in Finout                                  |
| Organization Account Username | `finout_user` (the user created by running the script above)           |
| Organization Account URL      | Your Snowflake organization account URL                                |
| Role                          | `finout_role` (the role created by running the script above)           |
| Database                      | `SNOWFLAKE`                                                            |
| Warehouse                     | `finout_warehouse` (the warehouse created by running the script above) |

4. **Click** **Next**.<br>

   <figure><img src="/files/2wTPz6an6N2WOMfoIBgV" alt="" width="563"><figcaption><p>Verify your organization account details - they should match the pre-filled values.</p></figcaption></figure>

***

#### Step 2 — Authenticate Organization

Finout generates a key pair for you. The private key is stored securely by Finout; you apply the public key to your Snowflake user.

1. **Open** a new worksheet in your Snowflake console.
2. **Run** the following command using the public key displayed in Finout:

```sql
ALTER USER <your_username> SET RSA_PUBLIC_KEY='<public_key>';
```

Replace `<your_username>` with your Snowflake username and `<public_key>` with the key shown in Finout.

3. **Return** to the Finout wizard.
4. **Check** *I ran these commands in Snowflake*.
5. **Click** **Next**.<br>

   <figure><img src="/files/qb0JdRIJhtzsJAZo3UCL" alt="" width="563"><figcaption><p>Copy the public key, run the ALTER USER command in Snowflake, then check the confirmation box.</p></figcaption></figure>

***

#### Step 3 — Connect Accounts

Finout automatically detects all child accounts under your Snowflake organization and displays them in a table.

| Column       | Description                |
| ------------ | -------------------------- |
| Account Name | Name of the child account  |
| Account URL  | Account URL in Snowflake   |
| Status       | Connected or Not connected |

1. **Review** the list of detected accounts.
2. **Deselect** any accounts you do not want to connect.
3. **Click** **Next**.

{% hint style="info" %}
Use the search bar to filter accounts by name if your organization has many child accounts.
{% endhint %}

<figure><img src="/files/aZBtmLEBzR2NjSjdQjAf" alt="" width="563"><figcaption><p>Finout detects all child accounts automatically. Deselect any you want to exclude.</p></figcaption></figure>

***

#### Step 4 — Authenticate Accounts

For each account selected in the previous step, run the SQL commands that Finout provides to grant the required permissions.

1. **Expand** an account row by clicking the arrow next to the account name.
2. **Open** a new worksheet in your Snowflake console for that account.
3. **Copy and run** the SQL commands displayed in Finout for that account.
4. **Check** *I ran these commands in Snowflake* for the account.
5. **Repeat** steps 1-4 for each account.

**If an account uses different credentials from the organization account:**

* **Check** *Connection values differ from parent account*.
* **Enter** the account-specific **Snowflake Account Username**, **Role**, and **Warehouse** in the fields that appear.

<figure><img src="/files/0Pzaby9nTL0gghh5n41Y" alt="" width="563"><figcaption><p>Copy the SQL commands for each account, run them in Snowflake, then check the confirmation box.</p></figcaption></figure>

6. Once all accounts are confirmed, **click** **Complete setup**.

**Result:** A "Cost center created successfully!" confirmation appears.

{% hint style="info" %}
&#x20;A single [Cost Center](https://docs.finout.io/billing-integrations/cost-centers) covers your entire Snowflake organization and all child accounts. You will receive an email notification once Finout has retrieved your data and set up your Cost Center. Organization-level cost data appears in Finout within 24 hours.
{% endhint %}

### FAQs

**Which Snowflake services does Finout support?**

The org-level integration sources costs from Snowflake's `USAGE_IN_CURRENCY_DAILY` view, which captures all services Snowflake charges for — past and future.

**Does Finout support granting nested roles in Snowflake?**

No. Finout only supports roles with permissions directly assigned to them. Nested roles are not supported.

Still need help? Reach out to our team at <support@finout.io>.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.finout.io/billing-integrations/data-and-engineering-platforms/connect-to-snowflake.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
