> ## Documentation Index
> Fetch the complete documentation index at: https://help.statisfy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce Chatter

> Sync Salesforce Chatter posts and comments on Accounts and Opportunities into Statisfy's AI timeline.

# Salesforce Chatter

The Chatter integration pulls Salesforce **FeedItem** posts and their
**FeedComment** replies into Statisfy, where they land on the AI
timeline of the matching customer alongside Slack, email, and meeting
activity. Posts authored on an Opportunity surface on the parent
Account's timeline — Statisfy doesn't run a separate per-Opportunity
timeline.

This page covers the Chatter section of the Salesforce settings
wizard. For the broader Salesforce integration, see
[Salesforce Integration](/integrations/salesforce).

## Prerequisites

* Salesforce is connected to Statisfy. If it isn't, follow
  [Salesforce Integration Steps](/integrations/salesforce_integration_steps).
* The connected Salesforce user has read access to `FeedItem`,
  `FeedComment`, and the parent objects (`Account` and/or
  `Opportunity`) you intend to sync.
* Chatter is enabled on the parent objects you plan to sync. If your
  Salesforce admin has disabled feeds on `Account` or `Opportunity`,
  the puller will return zero rows.

## Where Chatter shows up

* Each FeedItem becomes a **Chat** activity on the parent Account's
  AI timeline, with the FeedItem body as the opening message and each
  FeedComment as a reply.
* @-mentions like `@[005XXXXXXXXXXXXXXX]` (User Id) or
  `@[003XXXXXXXXXXXXXXX]` (Contact Id) are resolved to `@Name`
  automatically. If the user can't be resolved, the literal mention
  is left in place.
* HTML in rich-text posts is stripped — only the text and link URLs
  survive.
* Authors are matched first against Salesforce `User`, then against
  `Contact` (for Experience Cloud community posts).

## Open the Chatter settings

1. Navigate to **Integrations → Salesforce → Settings**.
2. Expand the **Chatter** section in the settings wizard.

All knobs below live inside that section unless called out.

## Configuration

### Enable Chatter Syncing

The master switch for Chatter. Turn off to pause ingestion without
losing your configuration — the rest of the form stays editable so
you can re-enable later with the same settings.

<Note>
  The **Sync Frequency** picker at the bottom of the section is saved
  separately from the rest of the configuration. If you disable Chatter
  Syncing but leave a schedule active, the puller will run but
  short-circuit immediately — the form will warn you. Click **Disable**
  under Sync Frequency to fully clear the schedule.
</Note>

### Parent Types

Pick which Salesforce records to read Chatter from:

| Parent Type     | Behavior                                                                                                                |
| --------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **Account**     | Posts on the Account itself. Routed to that Account's timeline.                                                         |
| **Opportunity** | Posts on an Opportunity. Routed to the **parent Account's** timeline. Opportunities without an `AccountId` are skipped. |

You can select either or both. Selecting neither is invalid — the
form blocks save.

### Parent Filter (SOQL `WHERE` clause)

Optional SOQL `WHERE` clause applied to the FeedItem's parent
record. Use this to scope ingestion to a subset of accounts or
opportunities. The clause is wrapped in parentheses and combined with
the built-in filters (parent type, lookback window, deletion check)
via `AND`.

Examples:

```sql theme={null}
Parent.Account.Type = 'Customer'
```

```sql theme={null}
Parent.Type = 'Account' AND Parent.Account_Status__c != 'Churned'
```

Leave blank to pull Chatter for all parent records of the selected
types.

### Lookback Window (days)

How many days back to look for FeedItems modified since. Default is
**3 days**; range is **1–365**.

* The **bootstrap** run (first connection or manual re-run) uses this
  same window — set it higher if you want more historical Chatter
  on day one.
* Periodic runs re-pull anything inside the window every time, so
  edits and new comments on older-but-still-in-window posts flow
  through.
* The lookback is enforced against Salesforce's `SystemModstamp`,
  not `LastModifiedDate` — this is what lets a deleted or edited
  FeedComment trigger a re-sync of its parent FeedItem even when the
  post body itself is unchanged.

<Tip>
  A short lookback (3–7 days) plus a daily cadence is the right default
  for most tenants. Longer windows just re-walk records that are
  already up to date.
</Tip>

### Include Comments

When on (recommended), FeedComment replies are pulled alongside their
FeedItem and threaded as messages in the same activity. When off,
only the opening post is synced.

### Include field-history posts

Salesforce auto-generates a `TrackedChange` FeedItem every time a
tracked field changes (Stage moves, Owner changes, etc.). These are
usually **70%+** of total Chatter volume on a busy Salesforce org
but they aren't real conversation.

Off by default. Turn on only if your team actively uses field-history
posts as conversation triggers.

### Preview Chatter

Click **Preview Chatter** to run the current filter against
Salesforce and see what would be ingested:

* Returns the **total count** of matching FeedItems in the lookback
  window (capped — large counts display as `1000+`).
* Shows up to **5 sample posts** with parent, author, date, type,
  and a body excerpt so you can sanity-check filter intent.
* Surfaces SOQL errors inline if the parent filter is invalid.

Preview always excludes `TrackedChange` posts, regardless of the
field-history toggle, so the sample reflects real conversation
volume.

### Sync Frequency

How often Chatter is pulled. Picker offers:

* **Hourly** — for orgs where Chatter is a primary communication
  channel and you want near-real-time ingestion.
* **Daily (recommended)** — the right cadence for most tenants.
* **Weekly** — minimal pull, useful for low-Chatter orgs.

Click **Save Schedule** to enable. Click **Disable** to fully clear
the schedule — no new Chatter runs will fire after that.

<Warning>
  Sync Frequency is saved **independently** from the rest of the
  Chatter configuration. Pressing the main **Save Configuration**
  button at the bottom of the wizard does **not** save the cadence —
  use the buttons inside the Sync Frequency block.
</Warning>

## Save and run

1. Configure the section as above.
2. Click **Save Configuration** at the bottom of the Salesforce
   settings wizard to persist parent types, filter, lookback,
   comments, and field-history settings.
3. Save (or update) the **Sync Frequency** separately.
4. Optionally, click **Run Sync Job** in the Sync Job card at the top
   of the page to fire a Chatter pull on demand without waiting for
   the scheduler.

## Troubleshooting

<Accordion title="Preview returns zero posts but I know Chatter exists">
  * Lookback window may be too narrow — try 30 days.
  * The parent filter may be too restrictive. Try clearing it.
  * Confirm the **Parent Types** match where the posts live (an
    Opportunity post won't appear when only `Account` is selected).
  * Verify the Statisfy-connected Salesforce user has read access to
    `FeedItem` on the parent object.
</Accordion>

<Accordion title="Posts are flooding in but they're all 'X changed Stage from Y to Z'">
  You're seeing `TrackedChange` field-history posts. Turn off **Include
  field-history posts** to filter them out. On most orgs this removes
  70%+ of Chatter volume.
</Accordion>

<Accordion title="An Opportunity post is missing from the Account timeline">
  * Chatter on Opportunity is only routed to the timeline if the
    Opportunity has an `AccountId`. Orphaned Opportunities are skipped
    with a warning in the sync logs.
  * Confirm **Opportunity** is checked under Parent Types.
  * Verify the parent Account is synced to Statisfy — Chatter for an
    account that doesn't exist as a Statisfy customer is dropped.
</Accordion>

<Accordion title="@-mentions show as @[005...] instead of @Name">
  Statisfy resolves mentions by looking up the Id in Salesforce. If
  the User or Contact behind the Id can't be read (deactivated, no
  read permission, deleted), the literal mention stays in the body.
  Confirm the connected Salesforce user can read the `User` and
  `Contact` objects.
</Accordion>

<Accordion title="Save succeeds but no Chatter is being pulled">
  * Check **Enable Chatter Syncing** is on.
  * Check **Sync Frequency** shows "Currently scheduled" — saving the
    rest of the config does **not** activate a schedule.
  * Open the **Sync Job** card at the top of the wizard for the
    latest job status. A status of `FAILED` will include the error in
    `sync_message`.
</Accordion>

<Accordion title="The puller logged 'hit _MAX_RECORDS_PER_QUERY' — what now?">
  A single sync run pulled 50,000 FeedItems and stopped early. This
  only happens on very chatty orgs with long lookback windows. Reduce
  the lookback or add a parent filter to scope the pull, then re-run.
  Contact [support@statisfy.com](mailto:support@statisfy.com) if you
  need the cap raised for a specific tenant.
</Accordion>

## Support

Need help? Contact [support@statisfy.com](mailto:support@statisfy.com)
or reach out to your Customer Success Manager.
