If you are using Snowflake with OneSignal’s legacy integration, please refer to the Snowflake Legacy Integration guide.

OneSignal Snowflake integration overview
Overview
The OneSignal + Snowflake integration supports two powerful data pipelines:- Export: Automatically send messaging event data (push, email, SMS, in-app) from OneSignal to Snowflake for analysis and reporting.
- Import: Sync custom user events from your Snowflake datasets to OneSignal to trigger automated Journeys and personalized messaging.
Export OneSignal events to Snowflake
This is currently in early access.
To request access, contact
[email protected] with:- Your company name
- Your OneSignal organization ID
- The app ID(s) you want to enable
- Build custom dashboards and reports
- Track delivery and engagement trends across channels
- Combine OneSignal data with other business data for analysis
- OneSignal Professional Plan (not available on free apps)
- Snowflake account
- SECURITYADMIN or ACCOUNTADMIN role in Snowflake (for setup)
1. Gather your Snowflake account details
Before configuring the integration, collect the following information from your Snowflake account:- Snowflake Host: Your account URL in the format
<account_identifier>.snowflakecomputing.com - Database name: The database where OneSignal will write event data
- Schema name: The schema within the database for OneSignal tables (this will be auto created by OneSignal)
- Warehouse name: The warehouse to use for data loading operations

Snowflake account identifier location
2. Run setup script in Snowflake
Execute the following SQL script in your Snowflake warehouse to create the necessary role, user, warehouse, and database for OneSignal:You can customize the variable values at the top of the script to match your naming conventions. If you’re using an existing warehouse or database, modify the script accordingly.
3. Generate key pair for authentication
OneSignal requires key-pair authentication for secure access to your Snowflake account. Follow these steps to generate and configure the keys:1
Generate a private key
Run one of the following commands to generate a private key:Unencrypted private key (simpler, but less secure):Encrypted private key (recommended for production):If using an encrypted key, you’ll be prompted to create a passphrase. Save this passphrase securely—you’ll need it when configuring OneSignal.
2
Generate the public key
Generate the public key from your private key:
3
Assign the public key to your Snowflake user
Copy the contents of the public key file (excluding the header and footer lines), then run this SQL command in Snowflake:Replace
<YOUR_PUBLIC_KEY_CONTENT> with the key content (without -----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY----- lines).4. Connect OneSignal
1
Activate the integration
In OneSignal, navigate to Data > Integrations > Snowflake.
2
Enter the details
- Host:
<your_account>.snowflakecomputing.com - Port: Optional, defaults to
443 - Database: e.g.
ONESIGNAL - Role: Optional, uses the user’s default role if omitted
- User: e.g.
ONESIGNAL_USER - Private Key: Paste the contents of your private key file (
rsa_key.p8) - Private Key Passphrase: Optional, only if your private key is encrypted
- Data processing location: Where data is processed before before sending it to Snowflake
3
Configure the integration
- Sync Frequency: as often as every 15 minutes
- Schema/Table Names: pre-set as
onesignal_events_<app-id>andmessage_events(editable) - Event Types: choose which to sync—select all or just what you need
4
Select events
Select the events you care to receive in your Snowflake warehouse.
5
Complete the setup
Click Save and wait for the success confirmation
Initial data sync can take 15–30 minutes to appear in Snowflake.While you wait, send messages via push, email, in-app, or SMS to trigger the events selected.
5. View data in Snowflake
Once the initial sync completes, query your OneSignal event data:If you run into issues like missing schemas, permission errors, or malformed events, contact
[email protected].Message events and properties
Message event kinds
Property:event_kind
Type: String
The kind of message and event (e.g. message.push.received, message.push.sent).
| Message Event (OneSignal) | event_kind | Description |
|---|---|---|
| Push Sent | message.push.sent | Push notification successfully sent. |
| Push Received | message.push.received | Delivered push (see Confirmed Delivery). |
| Push Clicked | message.push.clicked | User clicked the push. |
| Push Failed | message.push.failed | Delivery failure. See message reports. |
| Push Unsubscribed | message.push.unsubscribed | User unsubscribed from push. |
| In-App Impression | message.iam.displayed | In-App message shown. |
| In-App Clicked | message.iam.clicked | In-App message clicked. |
| In-App Page Viewed | message.iam.pagedisplayed | In-App page shown. |
| Email Sent | message.email.sent | Email delivered. |
| Email Received | message.email.received | Email accepted by recipient’s mail server. |
| Email Opened | message.email.opened | Email opened. See Email Reports. |
| Email Link Clicked | message.email.clicked | Link in email clicked. |
| Email Unsubscribed | message.email.unsubscribed | Recipient unsubscribed. |
| Email Marked Spam | message.email.resporedasspam | Marked as spam. See Email Deliverability. |
| Email Bounced | message.email.hardbounced | Bounce due to permanent delivery failure. |
| Email Failed | message.email.failed | Delivery failed. |
| Email Suppressed | message.email.supressed | Suppressed due to suppression list. |
| SMS Sent | message.sms.sent | SMS sent. |
| SMS Delivered | message.sms.delivered | SMS successfully delivered. |
| SMS Failed | message.sms.failed | SMS failed to deliver. |
| SMS Undelivered | message.sms.undelivered | SMS rejected or unreachable. |
Event data schema
For each message event generated by a user, the following metadata will be attached to the record.| Column Name | Type | Description |
|---|---|---|
event_id | UUID | Unique identifier for the event |
event_timestamp | Timestamp | Time of event occurrence |
event_kind | String | The Event Kind |
subscription_device_type | String | Device type (e.g., iOS, Android, Web, Email, SMS) |
language | String | Subscription language code |
version | String | Integration version |
device_os | String | Device operating system version |
device_type | Number | Numeric device type |
token | String | Push token, phone number, or email |
subscription_id | UUID | Subscription ID |
subscribed | Boolean | Subscription status |
onesignal_id | UUID | OneSignal user ID |
last_active | String | Last active timestamp |
sdk | String | OneSignal SDK version |
external_id | String | External user ID that should match the integration user ID |
app_id | UUID | App ID from OneSignal |
template_id | UUID | Template ID (if applicable) |
message_id | UUID | Message batch/request ID |
message_name | String | Name of the message |
message_title | String | Message title (English only) |
message_contents | String | Truncated message body (English only) |
_created, _id, _index, _fivetran_synced | Internal use | Fivetran sync metadata |
Notes
- Syncs after saving/activating may take an additional 15-30 minutes to complete.
- Deactivating may still result in one final sync after deactivation.
- To ensure efficient data synchronization, our system automatically creates and manages staging datasets. These datasets, named with a pattern like
fivetran_{two random words}_staging, temporarily store data during processing before it’s integrated into your main schema. These staging datasets are essential for maintaining a streamlined workflow and should not be deleted, as they will be automatically recreated.
Import events from Snowflake
Send behavioral event data from Snowflake to OneSignal to:- Trigger Journeys based on user activity
- Personalize messaging based on behavioral data
- Access to Event Streams for outbound message events (Plan limitations and overages apply)
- Access to Custom Events for inbound event syncing (Plan limitations and overages apply)
- Updated Account Plan (not available on free apps)
- Snowflake account with warehouse access
- Event data stored in Snowflake tables or views
- Network connectivity from OneSignal to your Snowflake instance
- User credentials with appropriate permissions
1
Create dedicated role for OneSignal
Create a role hierarchy following Snowflake best practices:
2
Create dedicated warehouse
Create a cost-optimized warehouse for OneSignal operations:
3
Create user and grant permissions
Create the OneSignal user and grant access to your event data:
4
Create bookkeeping database (Advanced Sync Engine)
Create a private database for OneSignal’s sync state management:
5
Configure authentication
Set up key-pair authentication (recommended) for enhanced security:
- Generate a public/private key pair following Snowflake’s documentation
- Configure the public key on your Snowflake user
- Use the private key in OneSignal’s connection settings
6
Connect to OneSignal
In OneSignal, go to Data > Integrations and click Add Integration.Select Snowflake and provide the following connection details:
- Account Name: Your Snowflake account identifier (e.g.,
abc123.us-east-1) - Warehouse:
CENSUS_WAREHOUSE - User:
CENSUS - Database: Your event data database name
- Schema: Your event data schema name
- Authentication: Key-pair (provide private key and optional passphrase)
Event data mapping
Map your to OneSignal’s custom events format:| OneSignal Field | Description | Required | |
|---|---|---|---|
name | event_name | Event identifier | Yes |
external_id | user_id | User identifier | Yes |
timestamp | event_timestamp | When event occurred | No |
properties | event_data | No |
Example Event Table Schema
SQL Query Mode
Write custom SQL queries to transform your event data:Advanced configuration
Managing Warehouse Costs
- Use X-Small warehouse size for cost optimization
- Configure auto-suspend (60 seconds) and auto-resume
- Schedule syncs during off-peak hours
- Consider sharing warehouse with other batch processing systems
Live Syncs Support
For real-time event processing, enable change tracking on your event tables:Network Security
If using Snowflake’s Allowed IPs network policy, add OneSignal’s IP addresses to your allowlist. Contact OneSignal support for the current IP ranges.Limitations
- Complex analytical queries may impact warehouse performance and costs
- User/Password authentication will be deprecated November 2025
- The CENSUS database is reserved for OneSignal operations only
FAQ
Which authentication method should I use?
Use Key-pair authentication (recommended). User/Password authentication will be blocked by Snowflake starting November 2025.Can I use an existing warehouse?
Yes, you can share a warehouse with other batch processing systems like dbt or Fivetran to optimize costs. Ensure the warehouse has sufficient capacity for your event processing needs.How can I optimize costs?
- Use X-Small warehouse size
- Configure aggressive auto-suspend (60 seconds)
- Schedule syncs during off-peak hours
- Use hourly/daily syncs instead of continuous syncing