Skip to content

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:

  1. Click Connect to Salesforce in the connector setup wizard.
  2. You are redirected to Salesforce to log in and authorize Rime.
  3. After authorization, Salesforce redirects you back to Rime with an access token and refresh token.
  4. 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

OptionDescription
Object selectionChoose which Salesforce objects to sync. Each object becomes a table in Snowflake
Field filteringFor each selected object, include or exclude individual fields. By default, all fields the user can read are included
EnvironmentProduction 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:

  1. Click Connect to Xero in the setup wizard.
  2. Log in to Xero and select the organisation you want to connect.
  3. Authorize Rime to read your Xero data.
  4. 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

EntityDescription
InvoicesSales and purchase invoices with line items
ContactsCustomers and suppliers
AccountsChart of accounts
Bank transactionsBank statement lines and reconciled transactions
PaymentsPayment records linked to invoices
Credit notesCredit notes issued or received
Manual journalsJournal entries
ItemsProducts and services in inventory
Tax ratesGST and other tax configurations
Tracking categoriesCustom 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-Since header. 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:

  1. In your Shopify admin, go to Settings > Apps and sales channels > Develop apps.
  2. Create a new app and grant it read access to the resources you want to extract.
  3. Generate an Admin API access token.
  4. Enter the access token and your shop domain (e.g., my-store.myshopify.com) in the Rime connector setup.

Available resources

ResourceDescription
OrdersOrder records including line items, shipping, and payment status
ProductsProduct catalogue with variants and images
CustomersCustomer records with addresses and tags
InventoryStock levels by location and variant
CollectionsProduct groupings (manual and automated)
FulfillmentsShipping and delivery records
TransactionsPayment transactions linked to orders
RefundsRefund records with line item details

Configuration options

OptionDescription
Shop domainYour Shopify store URL (e.g., my-store.myshopify.com)
API access tokenAdmin API token generated in Shopify
Resource selectionChoose 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:

  1. Click Connect to Google in the setup wizard.
  2. Log in with a Google account that has access to the target spreadsheets.
  3. Authorize Rime to read your Google Sheets data.

Rime requests read-only access to Google Sheets. It does not modify your spreadsheets.

Configuration

OptionDescription
Spreadsheet URLFull URL of the Google Sheets document (e.g., https://docs.google.com/spreadsheets/d/abc123/edit)
Sheet selectionChoose which sheets (tabs) within the spreadsheet to extract. Each sheet becomes a separate table in Snowflake
Header rowRow 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 rangeOptional 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 become TIMESTAMP, and everything else becomes VARCHAR.
  • 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