SaaS Connectors
SaaS connectors extract data from cloud applications through their APIs. Unlike database connectors that query tables directly, SaaS connectors work with the application’s domain objects (contacts, invoices, issues) and convert them into tabular data for Snowflake.
All SaaS connectors follow the same 5-step configuration flow. This page covers the authentication and configuration specific to each SaaS source.
Salesforce
Salesforce is the most complex SaaS connector due to the breadth of objects and the OAuth authentication flow.
Authentication
Salesforce uses OAuth 2.0 with the Web Server flow:
- Click Connect to Salesforce in the connector setup wizard.
- You are redirected to Salesforce to log in and authorize Rime.
- After authorization, Salesforce redirects you back to Rime with an access token and refresh token.
- Rime stores the tokens (encrypted at rest) and uses the refresh token to maintain access without re-authorization.
The authorizing user must have API access enabled in their Salesforce profile. Rime connects to the Salesforce instance associated with that user’s login (production or sandbox).
Available objects
Rime discovers all standard and custom Salesforce objects that the authorizing user can read. Common objects include:
- Account, Contact, Lead, Opportunity
- Case, Task, Event
- User, Profile, Role
- Campaign, CampaignMember
- Product2, PricebookEntry, OpportunityLineItem
- Custom objects (any object ending in
__c)
Configuration options
| Option | Description |
|---|---|
| Object selection | Choose which Salesforce objects to sync. Each object becomes a table in Snowflake |
| Field filtering | For each selected object, include or exclude individual fields. By default, all fields the user can read are included |
| Environment | Production or Sandbox. This is detected automatically from the OAuth flow but can be overridden |
Sync behaviour
- Salesforce API rate limits apply. Rime tracks API call consumption and backs off when approaching the limit.
- Large objects (millions of records) use the Bulk API 2.0 for efficient extraction. Smaller objects use the REST API.
- Deleted records are not extracted by default. Enable Include deleted in the connector settings to capture soft-deleted records.
Xero
Xero is common among New Zealand businesses for accounting and invoicing.
Authentication
Xero uses OAuth 2.0:
- Click Connect to Xero in the setup wizard.
- Log in to Xero and select the organisation you want to connect.
- Authorize Rime to read your Xero data.
- Rime stores the OAuth tokens and refreshes them automatically.
If your Xero account has access to multiple organisations, you select which one to connect during the OAuth flow. To sync data from multiple organisations, create a separate connector for each.
Available entities
| Entity | Description |
|---|---|
| Invoices | Sales and purchase invoices with line items |
| Contacts | Customers and suppliers |
| Accounts | Chart of accounts |
| Bank transactions | Bank statement lines and reconciled transactions |
| Payments | Payment records linked to invoices |
| Credit notes | Credit notes issued or received |
| Manual journals | Journal entries |
| Items | Products and services in inventory |
| Tax rates | GST and other tax configurations |
| Tracking categories | Custom categorisation dimensions |
Sync behaviour
- Xero’s API has a rate limit of 60 calls per minute per organisation. Rime batches requests and respects rate limits automatically.
- Invoices and bank transactions support incremental sync using Xero’s
If-Modified-Sinceheader. The first sync fetches all historical data; subsequent syncs fetch only records modified since the last successful run. - Line items are extracted as a separate related table, linked to their parent invoice by invoice ID.
Shopify
Authentication
Shopify uses a custom API key:
- In your Shopify admin, go to Settings > Apps and sales channels > Develop apps.
- Create a new app and grant it read access to the resources you want to extract.
- Generate an Admin API access token.
- Enter the access token and your shop domain (e.g.,
my-store.myshopify.com) in the Rime connector setup.
Available resources
| Resource | Description |
|---|---|
| Orders | Order records including line items, shipping, and payment status |
| Products | Product catalogue with variants and images |
| Customers | Customer records with addresses and tags |
| Inventory | Stock levels by location and variant |
| Collections | Product groupings (manual and automated) |
| Fulfillments | Shipping and delivery records |
| Transactions | Payment transactions linked to orders |
| Refunds | Refund records with line item details |
Configuration options
| Option | Description |
|---|---|
| Shop domain | Your Shopify store URL (e.g., my-store.myshopify.com) |
| API access token | Admin API token generated in Shopify |
| Resource selection | Choose which resources to sync |
Sync behaviour
- Shopify’s API is rate-limited to 2 requests per second (REST) or 1,000 cost points per second (GraphQL). Rime uses the REST API with automatic throttling.
- Orders and customers support cursor-based pagination for efficient extraction of large datasets.
- Product variants are extracted as a separate table linked to the parent product by product ID.
Google Sheets
Google Sheets is useful for extracting data from manually maintained spreadsheets, lookup tables, or reference data that teams maintain outside of formal databases.
Authentication
Google Sheets uses OAuth 2.0:
- Click Connect to Google in the setup wizard.
- Log in with a Google account that has access to the target spreadsheets.
- Authorize Rime to read your Google Sheets data.
Rime requests read-only access to Google Sheets. It does not modify your spreadsheets.
Configuration
| Option | Description |
|---|---|
| Spreadsheet URL | Full URL of the Google Sheets document (e.g., https://docs.google.com/spreadsheets/d/abc123/edit) |
| Sheet selection | Choose which sheets (tabs) within the spreadsheet to extract. Each sheet becomes a separate table in Snowflake |
| Header row | Row number containing column headers (default: 1). Set to 0 if the sheet has no header row, in which case Rime generates column names (column_1, column_2, etc.) |
| Data range | Optional cell range to extract (e.g., A1:F100). If omitted, Rime reads all data in the sheet starting from the header row |
Sync behaviour
- Each selected sheet is extracted as a separate table. The table name is derived from the sheet tab name, sanitised for Snowflake compatibility (spaces replaced with underscores, special characters removed).
- Google Sheets does not have fixed column types. Rime infers types from the data: columns with only numbers become
NUMBER, dates becomeTIMESTAMP, and everything else becomesVARCHAR. - Empty rows at the end of a sheet are automatically trimmed. Empty rows in the middle of the data are preserved.
- If the spreadsheet is deleted or the authorized user loses access, the connector will enter an errored state on the next sync attempt.
Next steps
- Review Schema Discovery to understand how Rime maps SaaS objects to Snowflake tables
- Set up a sync schedule for each connector
- Monitor extractions on the run history page