Prerequisites: Setting Up Data Connections
Before configuring the Account model, you need at least one data connection in FunnelStory. A data connection is a link between FunnelStory and an external system that holds your account data.
This page helps you decide which connection type to use and how to set it up.
Choosing Your Data Source
Most organizations store account data in one of three places:
CRM (Customer Relationship Management)
Use your CRM if it is the primary system of record for customer accounts. CRMs typically contain account names, owner assignments, deal/opportunity data, and lifecycle stages.
| CRM | Connection Type | Query Format |
|---|---|---|
| Salesforce | OAuth | SOQL block queries |
| HubSpot | OAuth | HubSpot Search API (HS block queries) |
| Attio | API Key | Attio API (AT block queries) |
Best for: Organizations where the sales or CS team maintains account data directly in the CRM. Salesforce and HubSpot are the most common.
Data Warehouse
Use your warehouse if you have a curated analytics layer (dim tables, views) that consolidates data from multiple systems, or if your account data lives in a product database rather than a CRM.
| Warehouse / Database | Connection Type | Query Format |
|---|---|---|
| PostgreSQL | Host + credentials | Standard SQL |
| MySQL | Host + credentials | Standard SQL |
| MS SQL Server | Host + credentials | Standard SQL |
| Snowflake | Account + credentials | Standard SQL (Snowflake dialect) |
| BigQuery | Service account (JSON key) | Standard SQL (BigQuery dialect) |
| Databricks | Host + token | Standard SQL (Spark SQL dialect) |
| Redshift | Host + credentials | Standard SQL (Redshift dialect) |
| Amazon Athena | Access key + region | Standard SQL (Presto/Trino dialect) |
Best for: Organizations with a data team that maintains clean, modeled data in a warehouse. Often produces the richest account models because you can join data from many systems in a single query.
Both (Hybrid)
Use a combination when no single source has everything. For example:
- Salesforce for account metadata (name, owner, ARR, renewal date) + warehouse for product usage data (last login, feature adoption)
- HubSpot for deal data + PostgreSQL for subscription/billing data
FunnelStory supports this through Data Joins, where your primary account query runs against one connection and is enriched with data from a second connection. See Advanced Configuration for details.
Other Supported Sources
| Source | Connection Type | Query Format |
|---|---|---|
| MongoDB | Connection string | MQL block queries |
| Gainsight | API | GS block queries |
| Elasticsearch | Host + credentials | ES block queries |
Setting Up a Connection
Step 1: Navigate to Connections
Go to Configuration > Integrations in the left sidebar.
Step 2: Add a New Connection
Click Add Connection and select your data source type.
Step 3: Provide Credentials
Each connection type requires different credentials:
For CRMs (Salesforce, HubSpot):
- Click Connect to initiate an OAuth flow
- Authorize FunnelStory in the popup window
- The connection is established once you return to FunnelStory
For Data Warehouses (Snowflake, BigQuery, Databricks):
- Snowflake: Account identifier, warehouse name, database, schema, username, password (or key pair). The user needs
USAGEgrants on the warehouse, database, and schema, plusSELECTon relevant tables/views. - BigQuery: Upload a service account JSON key file. The service account needs
BigQuery Data ViewerandBigQuery Job Userroles on the relevant dataset. - Databricks: Server hostname, HTTP path, and personal access token.
For SQL Databases (PostgreSQL, MySQL, MS SQL):
- Host, port, database name, username, password
- Ensure FunnelStory's IP addresses are allowed through your firewall
- For private networks, configure an SSH tunnel first
Step 4: Test the Connection
After entering credentials, click Test Connection. A successful test confirms FunnelStory can reach your data source and authenticate.
SSH Tunnels
If your database is in a private network (VPC, private subnet), you can set up an SSH tunnel so FunnelStory connects through a bastion/jump host:
- Go to Configuration > Integrations > SSH Tunnels
- Add a tunnel with the bastion host, port, and SSH key
- When creating the database connection, select the tunnel
Refresh Intervals
Once a connection is used by a model, FunnelStory periodically refreshes the data. You can choose:
- Hourly (
1h): For data that changes frequently (e.g., CRM deal stages, support tickets) - Daily (
24h): For data that changes less often (e.g., account metadata, warehouse dim tables)
You set the refresh interval when configuring the Account model, not when creating the connection itself.
Decision Guide
Not sure which path to take? Here's a quick decision tree:
-
Do you have a data warehouse with a curated account view/table?
- Yes -> Use the warehouse. It's usually the cleanest source.
- No -> Continue to step 2.
-
Is your CRM (Salesforce or HubSpot) the system of record for accounts?
- Yes -> Use the CRM directly.
- No -> Continue to step 3.
-
Is account data spread across multiple systems?
- Yes -> Pick the richest source as primary, then use Data Joins for the rest.
- No -> Use whatever database or system holds your account records.
Next Step
Once you have at least one data connection configured, proceed to Configuration Walkthrough to set up the Account model.