Salesforce Configuration Guide

Last updated: July 24, 2026

Overview

The Tabs–Salesforce integration keeps customer, contract, and invoice data in sync between the two systems, so your team can manage billing in Tabs without duplicating work in Salesforce.

At a high level, here's what happens once you connect Salesforce:

  1. You choose what syncs in. For each Tabs object — Customer, Contract, Address, Contact, Invoice — you turn syncing on or off. Some objects depend on others (for example, Contract can't sync unless Customer sync is on), so Tabs will guide you through valid combinations automatically.

  2. You choose where data comes from. For each object you've enabled, you pick which Salesforce object is the source — for example, whether Customer should be sourced from Account or Contact records.

  3. You map the fields. Once a source object is chosen, you connect individual Tabs fields (like Customer Name or Contract Start Date) to the corresponding Salesforce fields, optionally pulling individual fields from a related object instead of the primary one. Required fields must be mapped before your configuration can go live.

  4. You configure sync behavior. Under Filters & Routing, this includes which Opportunities are eligible to sync as contracts (by pipeline stage, and by any additional sync filters you add), plus where the contract document itself is pulled from.

  5. You save and sync. Once required fields are mapped, you save the configuration. From that point on, Tabs keeps the mapped data flowing on an ongoing basis — pulling in updates from Salesforce for the objects you've configured, and pushing invoice and payment data back out to Salesforce automatically.

The Salesforce sync automatically runs every 4 hours, and can be manually triggered in Tabs at any point.

The rest of this guide walks through each configuration section in detail. For the exact rules governing what can and cannot be selected as well as a deep dive on the rules and logic behind sync filters, see CRM Sync and Mapping Rules.

Configuration guide

The configuration page is organized into two groups of sections: Entities (Customer, Contract, Address, Contact, Invoice) and Filters & Routing (Pipeline Filters, Sync Filters). You land on Pipeline Filters by default when you open the page.

Object sync

Each entity section has a sync toggle in its header (labeled "Syncing enabled"/"Syncing disabled"), along with a badge showing whether that entity is pulled from Salesforce or pushed to it:

Object

Direction

Notes

Customer

Pull

Turning this off also turns off Contract and Invoice, since both depend on customer records existing.

Contract

Pull

Requires Customer to be on. Turning Contract on will automatically enable Customer if it isn't already. Turning it off also turns off Invoice.

Address / Contact

Pull

Optional, independent entities alongside Customer.

Invoice

Push

Requires Contract (and therefore Customer) to be on. Always pushed from Tabs to Salesforce — there's no source object to choose.

Payments (not independently toggleable)

Push

Requires Invoice to be on. Always pushed from Tabs to Salesforce.

Choosing a source object

Pull from Salesforce to Tabs

For Customer, Contact, and Address, pick which Salesforce object should be the source:

  • Customer: Most commonly Account

  • Contact: Most commonly Account or Opportunity

  • Address: Most commonly Account or Opportunity

This is a single choice per entity — you can't source the same Tabs object from two Salesforce objects at once. Whichever you choose determines which fields are available to map in the field mapping table below it.

Contract doesn't have its own primary-object picker here — its source object is set as part of the Contract - Document Source section (see below), since the document is what ultimately defines the contract.

Push from Tabs to Salesforce

Invoice and Payments don't have this choice — they sync to a fixed, Tabs-managed Salesforce object, since Tabs is always the source for that data. The choice here is for the Associated Salesforce Object, which determines which object the Tabs invoice will link to in Salesforce.

Field mapping

Once a source object is selected, map each Tabs field to a Salesforce field using the CRM field control next to it. A few things to know:

  • Each Tabs field can only be mapped once — once a field is used, it disappears from the list of available targets for other rows.

  • Fields marked required must be mapped before you can save.

  • Each row also has its own Source object control. By default it's the entity's primary object, but you can change it per row to pull that one field from a different, related Salesforce object instead — you're not limited to the primary object for every field.

Note: For Contract specifically, there is no field mapping table at all — see Contract - Document Source below.

Fields mapped this way are pulled one-directionally from Salesforce to Tabs and only sync in once (at initial sync), without consistently updating afterward. The exception is the Additional fields section on Customer, which syncs on an ongoing basis — those field values keep updating in Tabs whenever they change in Salesforce, both on initial sync and afterward. Contact and Address also support an "Additional fields" table for extra field mappings, but those follow the standard one-time-sync behavior, not the Customer's continuous-sync behavior.

Contract - Document Source

Salesforce contracts are always sourced from a document rather than from Opportunity/Contract fields directly. This section shows a fixed, read-only source: ContentDocument (manually uploaded attachments, notes, and email attachments on the record) — there's no choice to make here for Salesforce, unlike HubSpot.

CRM or Contract source of truth

Customer, Contact, and Address each have their own Source of truth control (shown in that entity's section, once the entity is syncing and Contract is syncing):

  • CRM — Tabs syncs the data from Salesforce based on the configured field mappings in that section.

  • Contract document — Tabs uses the data from the Contract PDF to populate that section. If those fields aren't found in the contract, Tabs falls back to the field mappings configured.

Source of truth is independent per entity — for example, you can have Contact come from Salesforce while Address comes from the contract. If Contract is set as the source of truth for a given entity, that entity's field mapping section shows a banner noting the mappings below only apply as a fallback.

Sync filters (Filters & Routing)

Two separate sections control which Salesforce records are eligible to sync into Tabs as contracts:

Pipeline Filters

  • Cutoff date — Opportunities with a Close Date before this date won't be pulled into Tabs. Useful for excluding old, closed-out contracts from your initial sync.

  • Stage selection — a multi-select of Opportunity Stage Name values for your (single) pipeline. Only Opportunities in the selected stage(s) sync in as contracts.

Sync Filters (conditional/record-attribute filters)

  • Add filter rows via "+ Add New." Each row defines a Tabs entity (Customer or Contract), a Salesforce object, a field on that object, an operator (equals, not equals, contains, greater than, less than, in, is set, is not set), and a value to match against.

  • The object for a filter row can be the entity's primary object or an eligible related object (the same related-object reach used in field mapping) — it isn't limited to the primary object the way HubSpot's is. See CRM Sync Mapping Rules for the exact rules on which related objects are eligible.

  • Only records matching all added filters sync in. If no filters are added, all records sync (subject to the Pipeline Filters stage selection, for Contract).

Saving your configuration

Once all required fields are mapped, save your configuration to activate it. Tabs will begin syncing based on your settings going forward. If you later change field mappings or object choices, saving updates the live sync accordingly — existing synced records are not overwritten and new configuration takes effect on subsequent syncs.