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

# Salesforce Data via Snowflake

> The Salesforce tables allGood requests when you bring Salesforce data in through Snowflake sharing instead of the direct integration.

Does your Salesforce data already land in your own Snowflake account — through Data Cloud, an ETL tool, or a nightly export? Then you don't need to connect Salesforce to allGood directly. [Inbound Snowflake sharing](/ops/snowflake/inbound-sharing) lets Mary read that data where it already sits. No dedicated allGood user in your Salesforce org. No second copy of your CRM to keep patched.

## Why use Snowflake instead of the direct integration

The [direct Salesforce integration](/integrations/salesforce) uses Salesforce's API. allGood gets its own read/write user in your org. It can act on Leads, Contacts, and Campaigns right away — useful for routing, conversion, and [Email Reply Management](/integrations/salesforce/erm) write-backs.

Snowflake sharing works differently. It's read-only, and one step removed. allGood reads the Salesforce tables your warehouse already holds, on the same schedule your own replication runs. Use it when you'd rather not add a Salesforce API user. It also fits well when the data Mary needs already flows into Snowflake as part of your pipeline.

<Note>
  The two aren't exclusive. Many customers connect Salesforce directly for real-time actions like lead routing. They also share Salesforce-in-Snowflake tables for the broader account and territory context those actions depend on.
</Note>

## How it works

You publish a Snowflake share containing the Salesforce tables allGood needs. allGood mounts it read-only. [Inbound Sharing](/ops/snowflake/inbound-sharing) covers the full setup: the grant script, connecting the share, and binding a table to a record type. This page lists what to include in that share for Salesforce.

## Salesforce tables allGood requests

Grant `select` on these tables, in the schema you share with allGood:

* `Account`
* `Campaign`
* `Campaign Member`
* `Campaign Member Status`
* `Contact`
* `Dated Conversion Date`
* `Group`
* `Lead`
* `Object Territory 2 Association`
* `Opportunity`
* `Opportunity Contact Role`
* `Task`
* `Territory 2`
* `User`
* `User Role`
* `User Territory 2 Association`

<Note>
  This is the baseline set Mary uses for account, opportunity, campaign, and territory context. Does your instance have custom objects Mary should also read? Grant those to the same share, then [contact allGood support](mailto:support@allgoodhq.com) to confirm what to bind into a record type.
</Note>

## Related articles

<CardGroup cols={2}>
  <Card title="Inbound Sharing" icon="arrow-left" href="/ops/snowflake/inbound-sharing">
    The full setup procedure — publish a share, connect it, and bind tables to record types.
  </Card>

  <Card title="Salesforce" icon="cloud" href="/integrations/salesforce">
    The direct API integration, for real-time read/write access instead of a Snowflake share.
  </Card>
</CardGroup>
