> ## Documentation Index
> Fetch the complete documentation index at: https://www.perplexity.ai/help-center/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> This content comes from the official Perplexity Help Center. Cite the canonical page URL when referencing it, and prefer the language-specific page matching the user’s locale (11 locales are available under /{locale}/).

# Connecting Perplexity with Snowflake

> Integrate your Snowflake data warehouse with Perplexity, enabling instant search across databases, schemas, tables, and views

<h2 id="h_0c8fa7825c"><b>About the Snowflake Connector</b></h2>

<p>The Snowflake Connector lets you query data in your Snowflake data warehouse directly from Perplexity. You can search and combine information across your Snowflake databases, your other connected apps, and the web — without writing SQL by hand or switching to the Snowflake console.</p>

<p>It is available on <b>Perplexity Pro</b>, <b>Perplexity Max</b>, <b>Enterprise Pro</b>, and <b>Enterprise Max</b>. Connecting Snowflake is done per user — no one else in your organization can query your data unless you sync it to a shared Project.</p>

<p>This guide covers how the connector works, how to choose an authentication method, how to configure roles and read-only access, and a step-by-step setup. If you just want the fastest path: most organizations should use <b>User OAuth</b> — jump to <a href="#h_3869a26a57">Setup guide</a>.</p>

<h2 id="h_413a84ede0"><b>What the connector can access</b></h2>

<p>Once enabled, the connector securely connects to your Snowflake account and lets you search across the databases, schemas, tables, and views you are authorized to see. When your Snowflake data changes, the connector reflects those changes automatically on your next query.</p>

<p><b>Supported data objects:</b></p>

<ul>
  <li>
    <p>Tables</p>
  </li>

  <li>
    <p>Views and materialized views</p>
  </li>

  <li>
    <p>Schemas</p>
  </li>

  <li>
    <p>Databases</p>
  </li>

  <li>
    <p>Structured data (CSV-, JSON-, and Parquet-backed tables)</p>
  </li>
</ul>

<p>Unstructured data (images, audio, and video stored in Snowflake stages) is not supported.</p>

<h2 id="h_f4e7220454"><b>Choosing an authentication method</b></h2>

<p>Snowflake authentication has two independent dimensions: <b>who</b> the queries run as (the identity) and <b>how</b> that identity proves itself (the credential). Perplexity ships two connectors in the directory, each matched to a recommended combination:</p>

<ul>
  <li>
    <p><b>Snowflake (User OAuth)</b> — each Perplexity user signs in with their own Snowflake account (<code>TYPE = PERSON</code>) via OAuth. <b>Recommended for most organizations.</b></p>
  </li>

  <li>
    <p><b>Snowflake</b> — all Perplexity users query through a single shared service account (<code>TYPE = SERVICE</code>) using a key pair. Use this when your end users do not have individual Snowflake accounts.</p>
  </li>
</ul>

<h3 id="h_cf48856584">Recommended: User OAuth</h3>

<p>With User OAuth, each person authenticates with their own credentials, queries run under their native Snowflake permissions, and you get a clear per-user audit trail — no shared service account and no need to recreate your role-based access control (RBAC) inside Perplexity. This also matches Snowflake’s own direction: its managed MCP server <a href="https://docs.snowflake.com/en/sql-reference/sql/create-security-integration-oauth-snowflake" rel="nofollow noopener noreferrer" target="_blank">only supports OAuth 2.0</a> today.</p>

<p><b>Note:</b> With OAuth, the access token is bound to a single primary role at sign-in — the user’s <code>DEFAULT\_ROLE</code>. To make sure users can reach everything they have been granted, configure secondary roles (see <a href="#h_7bfeb78df3">User OAuth role configuration</a>).</p>

<h3 id="h_20223e5f12">Fallback: service account (key pair)</h3>

<p>A shared service account (<code>TYPE = SERVICE</code> + key pair) is appropriate when:</p>

<ul>
  <li>
    <p>Your end users do not have individual Snowflake accounts (for example, business users who query through Perplexity but have no direct Snowflake access).</p>
  </li>

  <li>
    <p>You want all Perplexity queries to run under a single shared identity for simpler auditing.</p>
  </li>

  <li>
    <p>You are setting up an internal or test environment where per-user identity is not required.</p>
  </li>
</ul>

<p>Configure the service account with a dedicated, narrowly-scoped role — see <a href="#h_f2f1d899c8">Service account role configuration</a>.</p>

<p><b>A note on Programmatic Access Tokens (PATs):</b> Snowflake also supports PAT credentials, and the connector accepts them. We do <b>not</b> recommend PAT for new setups — tokens expire on a short schedule and are hard-bound to a single role at creation time, so we use a key pair in the examples throughout this guide. If you must use a PAT, set <code>ROLE\_RESTRICTION</code> to your dedicated Perplexity role at creation time.</p>

<h2 id="h_ebd6383c07"><b>Configuring roles and access</b></h2>

<h3 id="h_7bfeb78df3">User OAuth role configuration</h3>

<p>An OAuth session opens with the user’s <code>DEFAULT\_ROLE</code> as the primary role; role switching within a session is not supported and Perplexity does not show a role picker. So whatever each user has set for <code>DEFAULT\_ROLE</code> and <code>DEFAULT\_SECONDARY\_ROLES</code> is exactly what their Perplexity session uses.</p>

<p><b>Set this once, at the security integration level:</b></p>

<pre>OAUTH\_USE\_SECONDARY\_ROLES = IMPLICIT</pre>

<p>Snowflake’s <a href="https://docs.snowflake.com/en/sql-reference/sql/create-security-integration-oauth-snowflake" rel="nofollow noopener noreferrer" target="_blank">default for this parameter is NONE</a>, which means OAuth sessions open with only the primary role active. Setting it to <code>IMPLICIT</code> tells Snowflake to also activate each user’s <code>DEFAULT\_SECONDARY\_ROLES</code> automatically. Without it, users see only data reachable through their <code>DEFAULT\_ROLE</code> — rarely what you want.</p>

<p><b>Then handle one of two cases:</b></p>

<p><b>Case A — users already have role defaults.</b> If your users’ <code>DEFAULT\_ROLE</code> and <code>DEFAULT\_SECONDARY\_ROLES</code> are already set the way you want, do nothing else. The <code>IMPLICIT</code> setting is enough — each user’s existing defaults are what their Perplexity session uses.</p>

<p><b>Case B — users do not yet have role defaults.</b> Give each session the union of all roles granted to that user by setting <code>DEFAULT\_ROLE</code> to <code>PUBLIC</code> and <code>DEFAULT\_SECONDARY\_ROLES</code> to <code>ALL</code>:</p>

<pre>ALTER USER \<username> SET DEFAULT\_ROLE = PUBLIC, DEFAULT\_SECONDARY\_ROLES = ('ALL');</pre>

<p><b>Note:</b> Since Snowflake’s August 2024 change, <code>DEFAULT\_SECONDARY\_ROLES = ('ALL')</code> is the default for newly created users, so many orgs already have this set. Run <code>DESC USER \<username></code> to check before changing anything.</p>

<h3 id="h_f2f1d899c8">Service account role configuration</h3>

<p>A service account is a single dedicated user that runs under one specific role — typically <code>PERPLEXITY\_ROLE</code>. The <code>PUBLIC</code> + <code>('ALL')</code> pattern used for OAuth does <b>not</b> apply here. Instead, set the service user’s <code>DEFAULT\_ROLE</code> to your dedicated role and grant that role only the privileges Perplexity needs. This follows Snowflake’s <a href="https://docs.snowflake.com/en/user-guide/admin-user-management" rel="nofollow noopener noreferrer" target="_blank">service account best practices</a>.</p>

<p>The full SQL for creating this user is in the <a href="#h_3869a26a57">Setup guide</a> below.</p>

<h3 id="h_46daf6b16a">(Optional) Restricting which roles can be used via OAuth</h3>

<p>To limit which Snowflake roles users can authenticate into through the Perplexity OAuth integration, scope it at the security integration level:</p>

<ul>
  <li>
    <p><code>PRE\_AUTHORIZED\_ROLES\_LIST</code> — an allowlist of roles permitted through this integration.</p>
  </li>

  <li>
    <p><code>BLOCKED\_ROLES\_LIST</code> — a denylist of roles blocked from this integration.</p>
  </li>
</ul>

<pre>ALTER SECURITY INTEGRATION PERPLEXITY\_OAUTH<br />  SET PRE\_AUTHORIZED\_ROLES\_LIST = ('ANALYST\_ROLE', 'READ\_ONLY\_ROLE');</pre>

<p>Use this to keep sensitive roles (for example <code>ACCOUNTADMIN</code>) out of the OAuth flow entirely.</p>

<h2 id="h_25a0019527"><b>Controlling what Perplexity can do</b></h2>

<p>The connector executes SQL through a tool surface (sourced from the <a href="https://docs.merge.dev/merge-agent-handler/connectors/snowflake" rel="nofollow noopener noreferrer" target="_blank">Merge Snowflake connector</a>). The <b>Snowflake (User OAuth)</b> connector exposes granular, named tools — including a dedicated read-only query tool (<code>execute\_sql\_readonly</code>) that only accepts <code>SELECT</code>, <code>WITH</code>, <code>SHOW</code>, <code>DESCRIBE</code>, <code>EXPLAIN</code>, <code>VALUES</code>, and <code>LIST</code>, and rejects DDL/DML and multi-statement input. The service-account <b>Snowflake</b> connector exposes a general <code>execute\_sql</code> tool that accepts arbitrary SQL, including DDL and DML.</p>

<p><b>The authoritative control is Snowflake RBAC.</b> No matter which tool is invoked, queries run under the role your configuration allows, so enforcing read-only at the Snowflake role level is the reliable backstop — and it is the only enforcement boundary on the service-account connector.</p>

<p><b>Recommended pattern — enforce read-only with a dedicated role.</b> Provision a role such as <code>PERPLEXITY\_READ\_ONLY</code> that grants only <code>USAGE</code> and <code>SELECT</code> on the databases, schemas, and tables you want Perplexity to query, and does <b>not</b> grant <code>INSERT</code>, <code>UPDATE</code>, <code>DELETE</code>, <code>CREATE</code>, <code>DROP</code>, <code>OWNERSHIP</code>, or warehouse <code>MODIFY</code>. Then make sure users authenticate into that role:</p>

<ul>
  <li>
    <p>Set it as the user’s <code>DEFAULT\_ROLE</code>, or</p>
  </li>

  <li>
    <p>Scope the OAuth integration with <code>PRE\_AUTHORIZED\_ROLES\_LIST</code> and/or exclude write-capable roles with <code>BLOCKED\_ROLES\_LIST</code> (see <a href="#h_46daf6b16a">Restricting which roles can be used via OAuth</a>).</p>
  </li>
</ul>

<p>With RBAC configured this way, Snowflake rejects any write Perplexity attempts, regardless of which tool is called.</p>

<p><b>Note:</b> The connector settings include a <b>Tool permissions</b> panel listing available tools. On the <b>Snowflake (User OAuth)</b> connector you can narrow which tools are exposed — for a read-only setup, enable only the read tools (for example <code>execute\_sql\_readonly</code>, <code>list\_\*</code>, <code>describe\_\*</code>, <code>get\_\*</code>) to keep write/DDL tools off the surface. Treat this as defense-in-depth, not the authoritative boundary: Snowflake RBAC (above) is what reliably enforces access.</p>

<h2 id="h_402f8e5787"><b>Privacy and data security</b></h2>

<p>When connected, the Snowflake Connector can perform the following actions on your behalf:</p>

<ul>
  <li>
    <p>Execute SQL queries on your Snowflake data</p>
  </li>

  <li>
    <p>Query Cortex Search and Cortex Analyst</p>
  </li>

  <li>
    <p>Run custom UDFs and stored procedures</p>
  </li>
</ul>

<p>If you revoke access or remove a role in Snowflake, that data is immediately inaccessible from Perplexity. If you disconnect Snowflake in Perplexity, you can choose whether to keep or delete any cached data.</p>

<h3 id="h_a87844a636">Enterprise-grade security and control</h3>

<p>For Enterprise organizations, Perplexity offers SOC 2 Type II certification, end-to-end encryption, strict data privacy measures, and granular user access controls. Your Snowflake data is never used for AI training.</p>

<p>Connecting Snowflake is done per user — no one else in your organization can query your data. However, if you sync data to a shared Project, anyone with access to that Project can search it.</p>

<p>Organization admins can enable or disable the connector for all users from the <a href="https://www.perplexity.ai/account/org/permissions" rel="nofollow noopener noreferrer" target="_blank">Permissions</a> screen in Organization Settings. Read/write enforcement is handled at the Snowflake role level (see <a href="#h_25a0019527">Controlling what Perplexity can do</a>).</p>

<h2 id="h_8504daf7ee"><b>Setup guide</b></h2>

<p>Choose the path that matches your authentication method:</p>

<ul>
  <li>
    <p><b>User OAuth (recommended):</b> An org admin configures the OAuth app once, then users sign in individually. Skip straight to <a href="#h_3869a26a57">Connect Snowflake to Perplexity</a> — the SQL in steps 1–6 is for service-account setups only.</p>
  </li>

  <li>
    <p><b>Service account (key pair):</b> Run the SQL setup in steps 1–6, then connect in step 7.</p>
  </li>
</ul>

<h3 id="h_7179d70510">Prerequisites</h3>

<ul>
  <li>
    <p><code>ACCOUNTADMIN</code> role (or a role with <code>CREATE USER</code> and <code>GRANT</code> privileges)</p>
  </li>

  <li>
    <p>OpenSSL installed locally (pre-installed on macOS) — service-account setups only</p>
  </li>
</ul>

<h3 id="h_a2bf34bded">Step 1: Generate a key pair (service account)</h3>

<p>From your terminal, generate an RSA private key:</p>

<pre>openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out snowflake\_computer\_key.p8 -nocrypt</pre>

<p>Then generate the matching public key:</p>

<pre>openssl rsa -in snowflake\_computer\_key.p8 -pubout -out snowflake\_computer\_key.pub</pre>

<h3 id="h_9d71789587">Step 2: Create a role and warehouse</h3>

<pre>USE ROLE ACCOUNTADMIN;<br /><br />-- Create a dedicated role<br />CREATE ROLE IF NOT EXISTS PERPLEXITY\_ROLE<br />  COMMENT = 'Role for Perplexity service account';<br /><br />-- Create a warehouse (or use an existing one)<br />CREATE WAREHOUSE IF NOT EXISTS PERPLEXITY\_WAREHOUSE<br />  WAREHOUSE\_SIZE = 'XSMALL'<br />  AUTO\_SUSPEND = 60<br />  AUTO\_RESUME = TRUE<br />  COMMENT = 'Warehouse for Perplexity queries';<br /><br />-- Grant warehouse usage to the role<br />GRANT USAGE ON WAREHOUSE PERPLEXITY\_WAREHOUSE TO ROLE PERPLEXITY\_ROLE;</pre>

<h3 id="h_247b26ea99">Step 3: Create the service account user</h3>

<p>Run this as <code>ACCOUNTADMIN</code>. Replace the <code>RSA\_PUBLIC\_KEY</code> value with the contents of your <code>snowflake\_computer\_key.pub</code> file (without the header and footer lines).</p>

<pre>USE ROLE ACCOUNTADMIN;<br /><br />CREATE USER PERPLEXITY\_USER<br />  TYPE = SERVICE<br />  DEFAULT\_ROLE = PERPLEXITY\_ROLE<br />  DEFAULT\_WAREHOUSE = PERPLEXITY\_WAREHOUSE<br />  COMMENT = 'Service account for Perplexity'<br />  RSA\_PUBLIC\_KEY = 'MIIBIjANBgkqhki...your\_public\_key\_here...IDAQAB';<br /><br />-- Grant the dedicated role to the service account<br />GRANT ROLE PERPLEXITY\_ROLE TO USER PERPLEXITY\_USER;</pre>

<p><b>Note:</b> <code>TYPE = SERVICE</code> marks this as a non-human account — do not set a password. <code>DEFAULT\_ROLE = PERPLEXITY\_ROLE</code> scopes it to one dedicated role with only the privileges Perplexity needs.</p>

<h3 id="h_706c1a111a">Step 4: Grant access to your data</h3>

<pre>-- Grant access to a specific database<br />GRANT USAGE ON DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br /><br />-- Grant access to all schemas in a database (current and future)<br />GRANT USAGE ON ALL SCHEMAS IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br />GRANT USAGE ON FUTURE SCHEMAS IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br /><br />-- Grant read access to all tables and views (current and future)<br />GRANT SELECT ON ALL TABLES IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br />GRANT SELECT ON FUTURE TABLES IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br />GRANT SELECT ON ALL VIEWS IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;<br />GRANT SELECT ON FUTURE VIEWS IN DATABASE MY\_DATABASE TO ROLE PERPLEXITY\_ROLE;</pre>

<p>For more selective access, see the <a href="https://docs.snowflake.com/en/sql-reference/sql/grant-privilege" rel="nofollow noopener noreferrer" target="_blank">Snowflake GRANT documentation</a>.</p>

<h3 id="h_72cacd4df6">Step 5: Grant access to query history and access history</h3>

<p>Perplexity uses two views in the <code>SNOWFLAKE.ACCOUNT\_USAGE</code> schema to build a Data Map for accurate query generation:</p>

<table>
  <tbody>
    <tr>
      <td>
        <p><b>View</b></p>
      </td>

      <td>
        <p><b>Purpose</b></p>
      </td>
    </tr>

    <tr>
      <td>
        <p><code>QUERY\_HISTORY</code></p>
      </td>

      <td>
        <p>Query metadata, performance, and usage patterns</p>
      </td>
    </tr>

    <tr>
      <td>
        <p><code>ACCESS\_HISTORY</code></p>
      </td>

      <td>
        <p>Object-level audit trail (Enterprise Edition only)</p>
      </td>
    </tr>
  </tbody>
</table>

<pre>USE ROLE ACCOUNTADMIN;<br />GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE PERPLEXITY\_ROLE;</pre>

<p><b>Note:</b> <code>ACCESS\_HISTORY</code> is only available on Snowflake Enterprise Edition or higher; Perplexity falls back to <code>QUERY\_HISTORY</code> on Standard Edition automatically. Skipping this step reduces query accuracy. For how Perplexity uses these views, see <a href="/help-center/help-center/en/articles/14017067-understanding-the-data-map">Understanding the Data Map</a>.</p>

<h4 id="h_eb7d8277c1">Verify access</h4>

<pre>USE ROLE ACCOUNTADMIN;<br />GRANT ROLE PERPLEXITY\_ROLE TO USER \<your\_username>;<br />USE ROLE PERPLEXITY\_ROLE;<br />USE WAREHOUSE PERPLEXITY\_WAREHOUSE;<br />SELECT \* FROM SNOWFLAKE.ACCOUNT\_USAGE.QUERY\_HISTORY LIMIT 5;<br />SELECT \* FROM SNOWFLAKE.ACCOUNT\_USAGE.ACCESS\_HISTORY LIMIT 5;</pre>

<h3 id="h_734ba70af3">Step 6: (Optional) Allowlist IP addresses</h3>

<p>If your Snowflake account restricts inbound connections by IP, allowlist the IPs from <a href="https://help.ah.merge.dev/articles/8124222873-merge-tenant-ip-addresses?lang=en#us-tenant" rel="nofollow noopener noreferrer" target="_blank">this page</a>:</p>

<pre>USE ROLE ACCOUNTADMIN;<br />CREATE NETWORK POLICY PERPLEXITY\_COMPUTER\_POLICY<br />  ALLOWED\_IP\_LIST = (...US IPs from the link above...);<br />ALTER USER PERPLEXITY\_USER SET NETWORK\_POLICY = PERPLEXITY\_COMPUTER\_POLICY;</pre>

<h3 id="h_3869a26a57">Step 7: Connect Snowflake to Perplexity</h3>

<h4 id="h_762aceb84a">For User OAuth: admin setup first</h4>

<p>If your organization uses OAuth, an org admin configures the <b>Snowflake (User OAuth)</b> connector once before individual users can authenticate. In <b>Organization Settings → Connectors → Snowflake (User OAuth)</b>, the admin sees a three-step pane:</p>

<Steps>
  <Step>
    <p><b>Manage OAuth app</b> — register Perplexity as an OAuth client against your Snowflake account. This walks you through creating a custom Snowflake <code>SECURITY INTEGRATION</code> and pasting the resulting Client ID and Client Secret back into Perplexity.</p>
  </Step>

  <Step>
    <p><b>Authenticate with Snowflake (User OAuth)</b> — the admin authenticates once to verify the integration works end-to-end.</p>
  </Step>

  <Step>
    <p><b>Generate a data map (optional)</b> — optionally generate a data map for the organization (see <a href="/help-center/help-center/en/articles/14017067-understanding-the-data-map">Understanding the Data Map</a>) and add supplementary context to improve accuracy.</p>
  </Step>
</Steps>

<p>In step 1, create the security integration on the Snowflake side. Run this as <code>ACCOUNTADMIN</code>:</p>

<pre>USE ROLE ACCOUNTADMIN;<br />CREATE SECURITY INTEGRATION PERPLEXITY\_OAUTH<br />  TYPE = OAUTH<br />  ENABLED = TRUE<br />  OAUTH\_CLIENT = CUSTOM<br />  OAUTH\_CLIENT\_TYPE = 'CONFIDENTIAL'<br />  OAUTH\_REDIRECT\_URI = '[https://ah.merge.dev/oauth/callback](https://ah.merge.dev/oauth/callback)'<br />  OAUTH\_ISSUE\_REFRESH\_TOKENS = TRUE<br />  OAUTH\_REFRESH\_TOKEN\_VALIDITY = 7776000<br />  OAUTH\_USE\_SECONDARY\_ROLES = IMPLICIT<br />  COMMENT = 'OAuth security integration for Perplexity';</pre>

<p>Retrieve the Client ID and Client Secret to paste back into Perplexity:</p>

<pre>SELECT SYSTEM\$SHOW\_OAUTH\_CLIENT\_SECRETS('PERPLEXITY\_OAUTH');</pre>

<p>Once admin setup is complete, individual users can connect using the steps below.</p>

<h4 id="h_usrconn01">Connect (all users)</h4>

<p>Users only see the auth method matching the connector their admin configured.</p>

<Steps>
  <Step>
    <p>Go to <b>Connectors</b> in Settings and find the <b>Snowflake</b> or <b>Snowflake (User OAuth)</b> connector.</p>
  </Step>

  <Step>
    <p>Click <b>Enable → Add Connector</b>.</p>
  </Step>

  <Step>
    <p>Authenticate using your configured method (see below).</p>
  </Step>

  <Step>
    <p>Click <b>Allow</b> to complete setup.</p>
  </Step>
</Steps>

<p><b>Key-pair authentication (Snowflake connector).</b> Enter your Snowflake account identifier, username, and private key (<code>snowflake\_computer\_key.p8</code>).</p>

<p><b>OAuth (Snowflake (User OAuth) connector).</b> You will be redirected to Snowflake to sign in. There is no role picker — your session uses your <code>DEFAULT\_ROLE</code> as the primary role, with your <code>DEFAULT\_SECONDARY\_ROLES</code> activated via <code>OAUTH\_USE\_SECONDARY\_ROLES = IMPLICIT</code>. If your role defaults are already configured, no action is needed.</p>

<p>If your session is missing data you expect to see, ask your Snowflake admin to verify your <code>DEFAULT\_ROLE</code> and <code>DEFAULT\_SECONDARY\_ROLES</code> (see <a href="#h_7bfeb78df3">User OAuth role configuration</a>).</p>

<h2 id="h_05bb5e8747"><b>Using your Snowflake data</b></h2>

<p>Once connected, reference your Snowflake data in <a href="/help-center/help-center/en/articles/13901210-computer-for-enterprise">Computer</a> tasks. Mention databases, schemas, or tables and Perplexity will query them as part of multi-step workflows — all asynchronously in a secure cloud sandbox. Try queries like:</p>

<ul>
  <li>
    <p>“Summarize the revenue trends from the Q4 sales table and highlight key metrics”</p>
  </li>

  <li>
    <p>“Find all customer records updated in the last 30 days”</p>
  </li>

  <li>
    <p>“What are the top-performing products based on the analytics schema?”</p>
  </li>

  <li>
    <p>“Compare this quarter’s pipeline data against the previous quarter’s figures”</p>
  </li>
</ul>

<h2 id="h_c0fb703098"><b>Troubleshooting</b></h2>

<h3 id="h_2840ddf954">Snowflake is not enabled for your organization</h3>

<p>If you’re in an Enterprise organization and can’t enable the connector, an admin may have disabled it. Contact your organization admin, or reach out to Perplexity support.</p>

<h3 id="h_09afd7a7fe">Connection and authentication issues</h3>

<ul>
  <li>
    <p>Verify Perplexity’s IP addresses are allowlisted in your Snowflake network policy.</p>
  </li>

  <li>
    <p>Confirm the role has <code>USAGE</code> privileges on the required warehouses, databases, and schemas.</p>
  </li>

  <li>
    <p>Ask users to reconnect the connector after any policy changes.</p>
  </li>
</ul>

<h4 id="h_a9c7f15779">“Invalid private key” error</h4>

<p>Make sure you’re pasting the private key (<code>snowflake\_computer\_key.p8</code>), not the public key. The file should start with <code>-----BEGIN PRIVATE KEY-----</code>.</p>

<h4 id="h_d1c7afcb9a">Authentication rejected by current authentication policy</h4>

<p>Run <code>SHOW AUTHENTICATION POLICIES</code> as <code>ACCOUNTADMIN</code> and ensure <code>PERPLEXITY\_USER</code> is covered by a policy that includes <code>KEYPAIR</code>. If needed:</p>

<pre>CREATE AUTHENTICATION POLICY PERPLEXITY\_AUTH\_POLICY<br />  AUTHENTICATION\_METHODS = ('KEYPAIR')<br />  CLIENT\_TYPES = ('DRIVERS');<br />ALTER USER PERPLEXITY\_USER SET AUTHENTICATION POLICY PERPLEXITY\_AUTH\_POLICY;</pre>

<h4 id="h_e30f28057c">OAuth: user sees limited data after connecting</h4>

<p>The OAuth session uses the user’s <code>DEFAULT\_ROLE</code> as the primary role, with secondary roles activated via <code>OAUTH\_USE\_SECONDARY\_ROLES = IMPLICIT</code>. If a user is missing expected access:</p>

<ul>
  <li>
    <p>Confirm the security integration has <code>OAUTH\_USE\_SECONDARY\_ROLES = IMPLICIT</code>.</p>
  </li>

  <li>
    <p>Run <code>DESC USER \<username></code> and check <code>DEFAULT\_ROLE</code> and <code>DEFAULT\_SECONDARY\_ROLES</code> — the session uses exactly what is configured there.</p>
  </li>

  <li>
    <p>If the user has no per-user role configuration and you want them to access everything granted to them, set <code>DEFAULT\_ROLE = PUBLIC</code> and <code>DEFAULT\_SECONDARY\_ROLES = ('ALL')</code>.</p>
  </li>

  <li>
    <p>Have them disconnect and reconnect the connector to issue a fresh token after changing any of these settings.</p>
  </li>
</ul>

<h4 id="h_da9c991cd6">ACCESS\_HISTORY view returns an error</h4>

<p>Confirm your Snowflake account is Enterprise Edition or higher.</p>

<h4 id="h_449413017e">Insufficient privileges on ACCOUNT\_USAGE views</h4>

<p>Verify <code>GRANT IMPORTED PRIVILEGES</code> was run as <code>ACCOUNTADMIN</code> and that <code>PERPLEXITY\_ROLE</code> is granted to the user.</p>

<h4 id="h_f23e5d1e8f">Key-pair authentication fails</h4>

<p>Re-run <code>DESC USER PERPLEXITY\_USER</code> to confirm the public key fingerprint is populated.</p>

<p>If issues persist after updating these settings, contact Perplexity support for assistance.</p>
