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

# Connector Setup Guide

> Step-by-step guide to connecting your CRM, product analytics, support ticketing, NPS, and call intelligence tools to PILLAR

# Connector Setup Guide

PILLAR connects to your revenue stack to build a unified scoring and intelligence layer. This guide walks you through connecting every supported data source.

## How Data Gets Into PILLAR

PILLAR ingests data through three mechanisms:

1. **OAuth Connectors** -- For CRMs, email/calendar, and select tools. You authorize PILLAR once, and data flows automatically on a recurring schedule.
2. **API Key Connectors** -- For product analytics, support ticketing, and NPS tools. You provide an API key or token, and PILLAR pulls data on a schedule.
3. **CSV Import** -- For data not available via API (e.g., seat counts, utilization metrics). Upload a file and PILLAR maps columns to fields.

### Sync Cadence

| Connector Type                                     | Default Cadence                | Configurable                                  |
| -------------------------------------------------- | ------------------------------ | --------------------------------------------- |
| CRM (Salesforce, HubSpot, Dynamics 365)            | Every 15 minutes (incremental) | Yes -- can be set to 5, 15, 30, or 60 minutes |
| Email & Calendar (Google Workspace, Microsoft 365) | Every 5 minutes                | No                                            |
| Product Usage Tools                                | Every 60 minutes               | Yes -- can be set to 15, 30, or 60 minutes    |
| Support Ticketing                                  | Every 30 minutes               | Yes                                           |
| NPS / Sentiment                                    | Every 60 minutes               | Yes                                           |
| Call Intelligence (Gong)                           | Every 4 hours                  | No                                            |
| CSV Import                                         | Manual upload                  | N/A                                           |

### The Field Mapping UI

After connecting any data source, PILLAR auto-discovers the available fields and maps them to PILLAR's canonical data model. You can review and customize mappings via **Settings > Integrations > Field Mapping** on any connector card.

<Card title="Field Mapping Reference" icon="table-columns" href="/data/field-mapping-reference">
  See all 126+ fields PILLAR can ingest, with default CRM field names for Salesforce and HubSpot
</Card>

***

## CRM Connectors

CRM connectors are the foundation of PILLAR. They provide the core data for accounts, contacts, opportunities, leads, and contracts.

<Tabs>
  <Tab title="Salesforce">
    ### What You'll Need

    * A Salesforce org with API access enabled
    * A Salesforce user with at least **Read** access to Account, Contact, Opportunity, Lead, and (optionally) Contract and Case objects
    * Admin permissions in PILLAR to configure connectors

    <Note>
      PILLAR uses OAuth 2.0 with the Salesforce Connected App flow. No passwords or security tokens are stored -- only the OAuth refresh token. Your Salesforce admin may need to pre-authorize the PILLAR Connected App in Setup > App Manager.
    </Note>

    ### Steps to Connect

    1. In PILLAR, navigate to **Settings > Integrations**.
    2. Click **Connect** on the Salesforce card.
    3. You will be redirected to Salesforce's OAuth consent screen. Log in with your Salesforce credentials and click **Allow**.
    4. PILLAR auto-discovers your org's schema and maps fields. The initial sync begins immediately.
    5. Review the auto-mapped fields by clicking **Field Mapping** on the connector card. Fix any unmapped required fields.

    ### What Syncs

    | CRM Object  | PILLAR Table               | Key Fields                                      |
    | ----------- | -------------------------- | ----------------------------------------------- |
    | Account     | `accounts`                 | Name, ARR, Segment, Industry, State, Owner      |
    | Contact     | `contacts`                 | Name, Email, Title, Account ID, Buying Role     |
    | Opportunity | `opportunities`            | Name, Amount, Stage, Close Date, Account ID     |
    | Lead        | `leads`                    | Name, Email, Company, Status, Lead Score        |
    | Contract    | `contracts`                | Account ID, Start Date, End Date, Value, Status |
    | Case        | `support_ticket_snapshots` | Account ID, Subject, Status, Priority, Severity |

    ### Score Write-Back

    PILLAR pushes computed scores back to Salesforce as custom fields on the Account object:

    | PILLAR Score           | Salesforce Field           | Type   |
    | ---------------------- | -------------------------- | ------ |
    | Health Score (0-100)   | `PILLAR_Health_Score__c`   | Number |
    | Risk Score (0-100)     | `PILLAR_Risk_Score__c`     | Number |
    | Priority Score (0-100) | `PILLAR_Priority_Score__c` | Number |

    <Warning>
      You must create these three custom Number fields on the Account object in Salesforce before enabling write-back. Go to Setup > Object Manager > Account > Fields & Relationships > New to create each field.
    </Warning>

    ### How It Feeds Scoring

    * **Account Health Score** -- Uses ARR, engagement signals, support burden, product usage, and NPS data from the account
    * **Pipeline Hygiene** -- Evaluates opportunities for missing next steps, stale deals, close date pushes, and unidentified economic buyers
    * **Renewal Risk** -- Uses contract end dates, support ticket severity, NPS trends, and engagement decay
    * **ICP Fit** -- Scores accounts against your ideal customer profile using segment, industry, student count, budget, and other firmographic data
    * **Lead Score** -- Combines fit signals (title, segment, enrollment) with engagement signals (email opens, content downloads, website visits, demo requests)

    ### Common Salesforce CPQ Patterns

    Many organizations using Salesforce CPQ or custom quoting workflows store deal values on **custom Opportunity fields** rather than the standard `Amount` field. PILLAR's field mapping UI handles these patterns natively — you just map your CPQ-derived amount field to PILLAR's canonical `amount` field during implementation.

    <Warning>
      If your team uses Salesforce CPQ or a custom quoting workflow, confirm which field holds the deal value **before** the PILLAR implementation kicks off. Mapping the wrong field will cause weighted pipeline, forecast, and ARR calculations to be incorrect across every dashboard.
    </Warning>

    **Common variants we've seen in EdTech organizations:**

    | Pattern                   | Typical Field API Name                                     | When You'll See This                                                                                |
    | ------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
    | **Standard Amount**       | `Amount`                                                   | Most Salesforce orgs without CPQ. PILLAR's default mapping.                                         |
    | **Selected Quote Amount** | `Amount - Selected Quote` / `SBQQ__SelectedQuoteAmount__c` | Salesforce CPQ with multi-quote workflows. Opportunity.Amount is auto-synced from the active quote. |
    | **Proposal Amount**       | `Proposal_Amount__c` / `Total_Proposal_Value__c`           | Orgs with a proposal-approval step separate from the quote.                                         |
    | **Quote Amount (Custom)** | `Quote_Amount__c` / `Custom_Quote_Amount__c`               | Custom-built quoting tools or migrations from legacy CPQ systems.                                   |
    | **Annual Contract Value** | `Annual_Contract_Value__c` / `ACV__c`                      | Orgs that want ACV (not TCV) to drive pipeline calculations.                                        |
    | **Total Contract Value**  | `Total_Contract_Value__c` / `TCV__c`                       | Orgs with multi-year deals where the full contract value lives on Opp.                              |

    ### How to Decide Which Field to Map

    Ask your Salesforce admin these three questions:

    1. **"When a rep creates a quote with the standard CPQ flow, does Opportunity.Amount get updated automatically?"** If yes, map `Amount`. If the team instead works off a custom field that drives pipeline reports, map that field.

    2. **"Which field do your Salesforce pipeline reports pull for the 'deal value' column?"** Whatever that field is, map it to PILLAR's `amount`. This ensures PILLAR's pipeline numbers match what your team sees in Salesforce.

    3. **"Do your leadership dashboards show ACV or TCV?"** Map the field that matches what your exec team reviews. PILLAR's pipeline and forecast calculations will then speak the same language as your board reports.

    ### Mapping in PILLAR

    Once you know the correct field:

    1. Navigate to **Settings → Integrations → Salesforce → Field Mapping**
    2. Find the `amount` row under the Opportunity section
    3. Change the CRM Field dropdown from `Amount` to your CPQ field (e.g. `SBQQ__SelectedQuoteAmount__c` or `Amount - Selected Quote`)
    4. Click **Save**. The next sync will pull the correct values.

    <Info>
      PILLAR also supports mapping different amount fields for different Opportunity record types if your org uses record types to distinguish New Business vs Renewal vs Expansion. Reach out to [support@pillargtm.com](mailto:support@pillargtm.com) if you need per-record-type amount mappings.
    </Info>
  </Tab>

  <Tab title="HubSpot">
    ### What You'll Need

    * A HubSpot account with API access (Professional or Enterprise tier)
    * Admin permissions in both HubSpot and PILLAR

    <Note>
      PILLAR uses HubSpot's OAuth 2.0 flow. The integration requests scopes for CRM objects (companies, contacts, deals, tickets) and optionally the beta Leads object if your portal has it enabled.
    </Note>

    ### Steps to Connect

    1. In PILLAR, navigate to **Settings > Integrations**.
    2. Click **Connect** on the HubSpot card.
    3. You will be redirected to HubSpot's OAuth consent screen. Select your HubSpot account and click **Connect app**.
    4. PILLAR auto-discovers your portal's schema and maps properties. The initial sync begins immediately.
    5. Review the auto-mapped fields by clicking **Field Mapping** on the connector card.

    ### What Syncs

    | CRM Object                 | PILLAR Table               | Key Fields                                                        |
    | -------------------------- | -------------------------- | ----------------------------------------------------------------- |
    | Company                    | `accounts`                 | Name, ARR, Segment, Industry, Domain, Owner                       |
    | Contact                    | `contacts`                 | Name (firstname + lastname), Email, Job Title, Associated Company |
    | Deal                       | `opportunities`            | Deal Name, Amount, Stage, Close Date, Associated Company          |
    | Contact (legacy lead path) | `leads`                    | Name, Email, Company, Lifecycle Stage, Lead Score                 |
    | Leads (beta 0-136 object)  | `leads`                    | Name, Email, Company, Status (if portal has beta enabled)         |
    | Ticket                     | `support_ticket_snapshots` | Account, Subject, Pipeline Stage, Priority                        |

    <Info>
      HubSpot does not have a native Contract object yet (it is in private beta as of early 2026). Once it goes GA, PILLAR will auto-discover and map contract properties. In the meantime, contract data can be imported via CSV.
    </Info>

    ### Score Write-Back

    PILLAR pushes computed scores back to HubSpot as custom properties on the Company object:

    | PILLAR Score           | HubSpot Property        | Type   |
    | ---------------------- | ----------------------- | ------ |
    | Health Score (0-100)   | `pillar_health_score`   | Number |
    | Risk Score (0-100)     | `pillar_risk_score`     | Number |
    | Priority Score (0-100) | `pillar_priority_score` | Number |

    Create these three custom Number properties on the Company object in HubSpot before enabling write-back (Settings > Properties > Company properties > Create property).

    ### How It Feeds Scoring

    Same scoring pipeline as Salesforce -- all CRM data flows into the same canonical PILLAR tables regardless of source CRM. See the Salesforce tab above for details on which scores use which data.
  </Tab>

  <Tab title="Dynamics 365">
    ### What You'll Need

    * A Microsoft Dynamics 365 online org (Sales or Customer Service)
    * Your Dynamics **org URL** — typically `https://yourorg.crm.dynamics.com`
    * A user with the **System Administrator** or **System Customizer** security role (needed for the initial field discovery)
    * Admin permissions in PILLAR to configure connectors

    <Note>
      PILLAR uses Azure AD OAuth 2.0 (multi-tenant) for Dynamics. You will be redirected to Microsoft's consent screen and asked to authorize PILLAR to access your Dynamics org. No passwords are stored — only the OAuth refresh token.
    </Note>

    ### Steps to Connect

    1. In PILLAR, navigate to **Settings > Integrations**.
    2. Click **Connect** on the Dynamics 365 card.
    3. Enter your **Dynamics org URL** (e.g. `https://yourorg.crm.dynamics.com`) and click **Continue**.
    4. You will be redirected to Microsoft's OAuth consent screen. Log in with your Dynamics credentials and click **Accept**.
    5. PILLAR auto-discovers your org's entity schema and maps fields. The initial sync begins immediately.
    6. Review the auto-mapped fields by clicking **Field Mapping** on the connector card.

    ### What Syncs

    | Dynamics Entity | PILLAR Table               | Key Fields                                          |
    | --------------- | -------------------------- | --------------------------------------------------- |
    | Account         | `accounts`                 | Name, ARR (`revenue`), Segment, Industry, Owner     |
    | Contact         | `contacts`                 | Full Name, Email, Job Title, Account ID             |
    | Opportunity     | `opportunities`            | Name, Est. Revenue, Status, Close Date, Account ID  |
    | Lead            | `leads`                    | Full Name, Email, Company Name, Status, Lead Source |
    | Incident (Case) | `support_ticket_snapshots` | Account ID, Title, Status, Priority                 |

    ### Score Write-Back

    PILLAR pushes computed scores back to Dynamics as custom fields on the Account entity:

    | PILLAR Score           | Dynamics Field         | Type    |
    | ---------------------- | ---------------------- | ------- |
    | Health Score (0-100)   | `pillar_healthscore`   | Integer |
    | Risk Score (0-100)     | `pillar_riskscore`     | Integer |
    | Priority Score (0-100) | `pillar_priorityscore` | Integer |

    <Warning>
      You must create these three custom Integer fields on the Account entity in Dynamics before enabling write-back. Go to **Settings > Customizations > Customize the System > Entities > Account > Fields > New** and create each field with the schema name above.
    </Warning>

    ### How It Feeds Scoring

    Same scoring pipeline as Salesforce and HubSpot — all CRM data normalizes into PILLAR's canonical tables regardless of source. See the Salesforce tab above for score component details.
  </Tab>
</Tabs>

***

## Email & Calendar

Email and calendar connectors provide activity-level engagement data that powers the engagement component of Account Health scoring and contact-level engagement scores.

<Tabs>
  <Tab title="Google Workspace">
    ### What You'll Need

    * A Google Workspace account (personal Gmail is not supported)
    * Each user must authorize individually -- this is a per-user OAuth flow

    <Note>
      PILLAR never reads email body content. Only metadata is captured: sender, recipient, timestamp, and subject line. This data is stored as activities linked to contacts and accounts.
    </Note>

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Email & Calendar**.
    2. Click **Connect Google Workspace**.
    3. Each team member will see a prompt to authorize their individual Google account.
    4. After authorization, email metadata and calendar events begin syncing every 5 minutes.

    ### What Syncs

    | Data Type       | Fields Captured                            | Used For                                                     |
    | --------------- | ------------------------------------------ | ------------------------------------------------------------ |
    | Email metadata  | Sender, recipient, timestamp, subject line | Contact engagement scoring, activity tracking                |
    | Calendar events | Attendees, time, duration                  | Meeting activity signals, last-meeting-date on opportunities |

    ### How It Feeds Scoring

    * **Account Health** -- Email and meeting frequency contribute to the engagement component. Accounts with declining email/meeting activity trigger engagement decay signals.
    * **Contact Engagement Score** -- Individual contact engagement scores factor in email response rates and meeting attendance.
    * **Pipeline Hygiene** -- The `last_meeting_date` field on opportunities is updated from calendar data, and deals without recent meetings are flagged.
  </Tab>

  <Tab title="Microsoft 365 (Outlook)">
    ### What You'll Need

    * A Microsoft 365 (formerly Office 365) account with Outlook enabled
    * Each user must authorize individually — this is a per-user OAuth flow
    * Admin permissions in PILLAR to configure connectors

    <Note>
      PILLAR never reads email body content. Only metadata is captured: sender, recipient list, timestamp, and subject line. Calendar events capture attendees, time, and duration. No message bodies, attachments, or calendar descriptions are stored.
    </Note>

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Email & Calendar**.
    2. Click **Connect Microsoft 365**.
    3. Each team member will see a prompt to authorize their individual Microsoft account via Azure AD OAuth.
    4. After authorization, Outlook email metadata and calendar events begin syncing every 5 minutes.

    ### What Syncs

    | Data Type              | Fields Captured                             | Used For                                                     |
    | ---------------------- | ------------------------------------------- | ------------------------------------------------------------ |
    | Outlook email metadata | Sender, recipients, timestamp, subject line | Contact engagement scoring, activity tracking                |
    | Calendar events        | Attendees, start/end time, organizer        | Meeting activity signals, last-meeting-date on opportunities |

    <Info>
      Microsoft 365 and Google Workspace provide identical engagement signal coverage. If your team uses both, PILLAR will merge engagement signals from both sources per contact — whichever sync ran most recently wins.
    </Info>

    ### How It Feeds Scoring

    Same engagement signal pipeline as Google Workspace:

    * **Account Health** -- Outlook and Teams meeting cadence contributes to the engagement component.
    * **Contact Engagement Score** -- Email response rates and meeting attendance from Outlook.
    * **Pipeline Hygiene** -- `last_meeting_date` updated from Outlook Calendar; deals without recent meetings are flagged.
  </Tab>
</Tabs>

***

## Notifications & Collaboration

PILLAR can push signal alerts, daily digests, and play notifications to your team's collaboration tools so CSMs and AEs see critical signals where they already work.

<Tabs>
  <Tab title="Microsoft Teams">
    ### What You'll Need

    * A Microsoft Teams workspace
    * **Option A (Webhook — simple):** An incoming webhook URL configured in your target Teams channel
    * **Option B (Graph API — full):** Microsoft 365 admin consent to allow PILLAR to post to channels via Graph API

    <Note>
      Option A (incoming webhook) requires no OAuth and can be set up by any Teams channel owner in under 2 minutes. Option B (Graph API) requires an Azure AD admin to grant consent but unlocks a channel picker UI so users can route different alerts to different channels from within PILLAR.
    </Note>

    ### Option A: Incoming Webhook (Recommended for Quick Start)

    1. In Microsoft Teams, open the channel where you want PILLAR alerts.
    2. Click **···** next to the channel name > **Connectors** > **Incoming Webhook** > **Configure**.
    3. Name the webhook (e.g. "PILLAR Alerts") and click **Create**.
    4. Copy the webhook URL.
    5. In PILLAR, navigate to **Settings > Integrations > Notifications**.
    6. Click **Configure** on the Microsoft Teams card and paste the webhook URL.
    7. Click **Test** to post a sample Adaptive Card, then **Save**.

    ### Option B: Graph API (Full Integration)

    1. In PILLAR, navigate to **Settings > Integrations > Notifications**.
    2. Click **Connect Microsoft Teams**.
    3. You will be redirected to Microsoft's OAuth consent screen. An Azure AD admin must accept the permissions (Channel.ReadBasic.All, ChannelMessage.Send, Team.ReadBasic.All).
    4. After consent, PILLAR lists all teams and channels your account has access to.
    5. Select the channels for each alert type: signal alerts, daily digest, and play notifications.
    6. Click **Save**.

    ### What Gets Sent

    | Notification Type  | Trigger                              | Card Content                                                                   |
    | ------------------ | ------------------------------------ | ------------------------------------------------------------------------------ |
    | Signal Alert       | New critical or high-severity signal | Account name, signal type, ARR at risk, recommended action, link to account    |
    | Daily Digest       | 8 AM (configurable)                  | Portfolio ARR, at-risk ARR, health score, critical signal count, top 3 actions |
    | Play Activation    | Play triggered on an account         | Account name, play type, ARR protected, link to account                        |
    | Renewal Risk Alert | Account crosses risk threshold       | Account name, risk score, renewal date, primary risk driver                    |

    ### Adaptive Cards

    All Teams notifications use Microsoft Adaptive Cards (v1.4) — they render natively in Teams with structured data, color-coded severity indicators, and **View in PILLAR** deep-link buttons. No plain-text messages are sent.
  </Tab>
</Tabs>

***

## Product Usage Tools

Product usage data feeds the adoption and utilization components of Account Health scoring. PILLAR ingests feature usage, session data, and user activity metrics.

<Tabs>
  <Tab title="Pendo">
    ### What You'll Need

    * Pendo API key (found in Pendo > Settings > Subscriptions > App Details)
    * The Pendo account ID field that maps to your CRM account identifier

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Pendo card.
    3. Enter your Pendo API key.
    4. Map the Pendo account identifier to PILLAR's account lookup field.
    5. Click **Save & Test**. PILLAR will validate the connection and begin the initial sync.

    ### What Syncs

    | Data Point              | Cadence      | PILLAR Field                   |
    | ----------------------- | ------------ | ------------------------------ |
    | Feature adoption counts | Every 60 min | `accounts.product_usage_score` |
    | Active user counts      | Every 60 min | `accounts.active_users`        |
    | Session frequency       | Every 60 min | Engagement signals             |
    | Feature usage trends    | Every 60 min | Expansion readiness scoring    |
  </Tab>

  <Tab title="Mixpanel">
    ### What You'll Need

    * Mixpanel API key (Project Settings > Access Keys > API Secret)
    * Mixpanel API secret
    * The Mixpanel group key that maps to your CRM account identifier

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Mixpanel card.
    3. Enter your API key and API secret.
    4. Map the Mixpanel group key (account-level identifier) to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point              | Cadence      | Used For              |
    | ----------------------- | ------------ | --------------------- |
    | Event counts by account | Every 60 min | Product usage scoring |
    | Active user counts      | Every 60 min | Adoption signals      |
    | Feature usage breakdown | Every 60 min | Expansion readiness   |
  </Tab>

  <Tab title="Amplitude">
    ### What You'll Need

    * Amplitude API key (Settings > Projects > your project > API Key)
    * Amplitude API secret
    * Region: US or EU (determines the API endpoint)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Amplitude card.
    3. Enter your API key, API secret, and select your region (US or EU).
    4. Map the Amplitude account group to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point               | Cadence      | Used For             |
    | ------------------------ | ------------ | -------------------- |
    | Active users per account | Every 60 min | Adoption scoring     |
    | Event volume trends      | Every 60 min | Usage health signals |
    | Feature flag usage       | Every 60 min | Expansion readiness  |
  </Tab>

  <Tab title="Segment">
    ### What You'll Need

    * Segment API token (Settings > Workspace > Tokens > Create token)
    * Segment workspace slug

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Segment card.
    3. Enter your API token and workspace slug.
    4. Configure which Segment sources PILLAR should read from.
    5. Click **Save & Test**.

    ### What Syncs

    PILLAR reads group-level (account) traits and track events from Segment. Event data is aggregated into usage metrics per account.

    | Data Point                           | Cadence      | Used For           |
    | ------------------------------------ | ------------ | ------------------ |
    | Group traits (account properties)    | Every 60 min | Account enrichment |
    | Track events (aggregated by account) | Every 60 min | Usage scoring      |
    | Identify events (user properties)    | Every 60 min | Contact enrichment |
  </Tab>

  <Tab title="Heap">
    ### What You'll Need

    * Heap API key (Account > Manage > API Keys)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Heap card.
    3. Enter your Heap API key.
    4. Map the Heap account identifier to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point                | Cadence      | Used For           |
    | ------------------------- | ------------ | ------------------ |
    | Session counts by account | Every 60 min | Engagement scoring |
    | Event counts by account   | Every 60 min | Usage health       |
    | User activity metrics     | Every 60 min | Adoption signals   |
  </Tab>

  <Tab title="Mode Analytics">
    ### What You'll Need

    * Mode API token (your Mode profile > API Tokens)
    * Mode API secret
    * Mode workspace name
    * Mode report token (the token from the URL of the report you want PILLAR to read)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Product Usage**.
    2. Click **Connect** on the Mode card.
    3. Enter your API token, API secret, workspace name, and report token.
    4. Click **Save & Test**. PILLAR will query the specified report and extract account-level metrics.

    ### What Syncs

    Mode is used as a product analytics data warehouse connector. PILLAR runs the specified Mode report and extracts account-level usage metrics from the results.

    | Data Point                           | Cadence      | Used For             |
    | ------------------------------------ | ------------ | -------------------- |
    | Report query results (account-level) | Every 60 min | Custom usage metrics |

    <Info>
      Mode is best suited for teams that centralize product analytics in a SQL-based reporting layer rather than a dedicated product analytics tool.
    </Info>
  </Tab>
</Tabs>

***

## Support Ticketing

Support ticket data feeds the support burden component of Renewal Risk scoring. Accounts with high ticket volume, escalations, or low CSAT are flagged as at-risk.

<Tabs>
  <Tab title="Intercom">
    ### What You'll Need

    * Intercom admin access to authorize the OAuth flow

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Support Ticketing**.
    2. Click **Connect** on the Intercom card.
    3. You will be redirected to Intercom's OAuth consent screen. Click **Authorize**.
    4. Map the Intercom company identifier to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point                       | Cadence      | PILLAR Field                          |
    | -------------------------------- | ------------ | ------------------------------------- |
    | Conversation count (per company) | Every 30 min | Support burden scoring                |
    | Conversation state (open/closed) | Every 30 min | `support_ticket_snapshots.status`     |
    | SLA breach status                | Every 30 min | Escalation signals                    |
    | CSAT ratings                     | Every 30 min | `support_ticket_snapshots.csat_score` |
    | Tags and categories              | Every 30 min | Ticket type classification            |
  </Tab>

  <Tab title="Zendesk">
    ### What You'll Need

    * Zendesk subdomain (e.g., `yourcompany` from `yourcompany.zendesk.com`)
    * Zendesk API token (Admin Center > Apps and integrations > APIs > Zendesk API > Add API token)
    * The email address associated with the API token

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Support Ticketing**.
    2. Click **Connect** on the Zendesk card.
    3. Enter your subdomain, API token, and associated email.
    4. Map the Zendesk organization field to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point                      | Cadence      | PILLAR Field                                  |
    | ------------------------------- | ------------ | --------------------------------------------- |
    | Ticket count (per organization) | Every 30 min | Support burden scoring                        |
    | Ticket status and priority      | Every 30 min | `support_ticket_snapshots.status`, `priority` |
    | Ticket satisfaction ratings     | Every 30 min | `support_ticket_snapshots.csat_score`         |
    | Escalation status               | Every 30 min | `support_ticket_snapshots.is_escalated`       |
    | First response time             | Every 30 min | `support_ticket_snapshots.first_response_at`  |
  </Tab>

  <Tab title="Freshdesk">
    ### What You'll Need

    * Freshdesk subdomain (e.g., `yourcompany` from `yourcompany.freshdesk.com`)
    * Freshdesk API key (Profile > Your API Key)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Support Ticketing**.
    2. Click **Connect** on the Freshdesk card.
    3. Enter your subdomain and API key.
    4. Map the Freshdesk company field to PILLAR's account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point                 | Cadence      | PILLAR Field                                  |
    | -------------------------- | ------------ | --------------------------------------------- |
    | Ticket count (per company) | Every 30 min | Support burden scoring                        |
    | Ticket status and priority | Every 30 min | `support_ticket_snapshots.status`, `priority` |
    | CSAT survey responses      | Every 30 min | `support_ticket_snapshots.csat_score`         |
    | SLA policy breaches        | Every 30 min | Escalation signals                            |
    | Resolution time            | Every 30 min | `support_ticket_snapshots.resolved_at`        |
  </Tab>
</Tabs>

<Note>
  If your support ticketing runs inside your CRM (HubSpot Service Hub or Salesforce Service Cloud), PILLAR ingests tickets directly through the CRM connector -- no separate support ticketing connector is needed. The CRM connector syncs Cases (Salesforce) or Tickets (HubSpot) into the same `support_ticket_snapshots` table.
</Note>

***

## Customer Sentiment & NPS

NPS and customer sentiment data feed the Satisfaction component of Account Health scoring. Accounts with declining NPS or negative survey responses are flagged for proactive outreach.

<Tabs>
  <Tab title="Wootric">
    ### What You'll Need

    * Wootric account with OAuth access

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Customer Sentiment**.
    2. Click **Connect** on the Wootric card.
    3. You will be redirected to Wootric's OAuth consent screen. Authorize the connection.
    4. Map the Wootric account/end-user identifier to PILLAR's account or contact lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point              | Cadence      | PILLAR Field         |
    | ----------------------- | ------------ | -------------------- |
    | NPS score (per account) | Every 60 min | `accounts.nps_score` |
    | NPS survey responses    | Every 60 min | Satisfaction scoring |
    | Response trends         | Every 60 min | NPS trend signals    |
  </Tab>

  <Tab title="Delighted">
    ### What You'll Need

    * Delighted API key (Settings > API)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Customer Sentiment**.
    2. Click **Connect** on the Delighted card.
    3. Enter your Delighted API key.
    4. Map the Delighted person identifier to PILLAR's contact or account lookup field.
    5. Click **Save & Test**.

    ### What Syncs

    | Data Point              | Cadence      | PILLAR Field               |
    | ----------------------- | ------------ | -------------------------- |
    | NPS / CSAT / CES scores | Every 60 min | `accounts.nps_score`       |
    | Survey response text    | Every 60 min | Sentiment analysis signals |
    | Score trends over time  | Every 60 min | Satisfaction decay signals |
  </Tab>

  <Tab title="SurveyMonkey">
    ### What You'll Need

    * SurveyMonkey account with OAuth access (Advantage plan or higher)

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Customer Sentiment**.
    2. Click **Connect** on the SurveyMonkey card.
    3. You will be redirected to SurveyMonkey's OAuth consent screen. Authorize the connection.
    4. Select which surveys contain NPS or CSAT questions.
    5. Map the respondent identifier to PILLAR's contact or account lookup field.
    6. Click **Save & Test**.

    ### What Syncs

    | Data Point                | Cadence      | PILLAR Field         |
    | ------------------------- | ------------ | -------------------- |
    | Survey responses          | Every 60 min | Satisfaction scoring |
    | NPS question responses    | Every 60 min | `accounts.nps_score` |
    | Response completion rates | Every 60 min | Engagement signals   |
  </Tab>
</Tabs>

<Info>
  **How NPS feeds scoring**: NPS scores from any connected sentiment tool flow into `accounts.nps_score`, which is a component of the Account Health Score's Satisfaction dimension. Declining NPS triggers the `nps_decline` signal, which in turn can fire save plays or risk alerts. See the [Account Health scoring rules](/scoring/account-health) for weight details.
</Info>

***

## Call Intelligence

Call intelligence data powers the Call Intelligence scoring category -- 7 rules that evaluate conversation quality, rep performance, competitive mentions, and stakeholder engagement from recorded sales and CS calls.

<Tabs>
  <Tab title="Gong">
    ### What You'll Need

    * Gong workspace with API access enabled
    * A Gong user with admin permissions to authorize the OAuth connection
    * Admin permissions in PILLAR to configure connectors

    <Note>
      PILLAR uses Gong's OAuth 2.0 authorization flow. No API keys or passwords are stored -- only the OAuth refresh token. Your Gong admin may need to approve the PILLAR app in Gong's API settings.
    </Note>

    ### Gong Plan Requirements

    <Warning>
      **Full call analytics (sentiment, talk ratio, trackers, topics) require Gong Business or Enterprise plan.** Basic call tracking (title, participants, duration, direction) works on all Gong plans. If your Gong workspace is on a lower-tier plan, PILLAR will sync call metadata but the Call Intelligence scoring rules will return neutral scores for analytics-dependent fields until your Gong plan includes the analytics API endpoints.
    </Warning>

    | Gong Plan            | What PILLAR Can Access                                                                                                       |
    | -------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | **Essentials / Pro** | Call list (title, participants, duration, direction, outcome). CI rules return neutral scores for missing analytics.         |
    | **Business**         | Full analytics: talk ratios, interactivity, topics, trackers, next steps, call outcomes. All 7 CI rules fire with real data. |
    | **Enterprise**       | Everything in Business, plus transcript access for future keyword analysis features.                                         |

    ### Steps to Connect

    1. Navigate to **Settings > Integrations > Call Intelligence**.
    2. Click **Connect** on the Gong card.
    3. You will be redirected to Gong's OAuth consent screen. Authorize the connection.
    4. PILLAR begins an initial sync of the last 90 days of call data.
    5. Ongoing syncs run every 4 hours automatically.

    ### What Syncs

    | Data Point                                          | Cadence       | Used For                                                            |
    | --------------------------------------------------- | ------------- | ------------------------------------------------------------------- |
    | Call metadata (title, direction, duration, outcome) | Every 4 hours | Call frequency scoring (CI-006)                                     |
    | Participants (name, email, title, affiliation)      | Every 4 hours | Exec participation detection (CI-005), account matching             |
    | Rep talk ratio                                      | Every 4 hours | Rep talk ratio scoring (CI-001)                                     |
    | Customer talk ratio                                 | Every 4 hours | Customer engagement scoring (CI-007)                                |
    | Sentiment (overall, customer, rep)                  | Every 4 hours | Sentiment trend analysis (CI-002)                                   |
    | Topics discussed                                    | Every 4 hours | Conversation topic tracking                                         |
    | Trackers (competitor mentions, pricing, next steps) | Every 4 hours | Competitive mention detection (CI-003), next steps scoring (CI-004) |
    | Interactivity score                                 | Every 4 hours | Engagement quality                                                  |

    ### How PILLAR Matches Calls to Accounts

    PILLAR automatically resolves which account a call belongs to by:

    1. **Email domain matching** -- External participant email domains are matched against `accounts.domain`
    2. **Contact email matching** -- If domain matching fails, individual participant emails are matched against `contacts.email`

    Calls that cannot be matched to an account are stored but do not contribute to scoring until a match is established.

    ### How It Feeds Scoring

    The Call Intelligence category includes 7 scoring rules:

    | Rule                                 | What It Measures                                                                                                          |
    | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
    | **CI-001: Rep Talk Ratio**           | Ideal reps talk 40-50% of the time. Over-talking (over 60%) or under-talking (under 30%) reduces the score.               |
    | **CI-002: Customer Sentiment Trend** | Average customer sentiment across the last 3 calls. Declining sentiment is an early churn signal.                         |
    | **CI-003: Competitive Mentions**     | Whether competitors were discussed in recent calls. Frequent mentions indicate active evaluation risk.                    |
    | **CI-004: Next Steps Commitment**    | Whether next steps were explicitly mentioned on the most recent call. Calls without next steps indicate stalled momentum. |
    | **CI-005: Exec Participation**       | Whether executive stakeholders (VP+, C-suite) have joined recent calls. Exec presence signals strategic buy-in.           |
    | **CI-006: Call Frequency**           | Whether call volume is appropriate for the account's deal stage and renewal proximity.                                    |
    | **CI-007: Customer Engagement**      | Customer talk ratio in recent calls. Customers who talk more are more engaged; silent customers are at-risk.              |

    <Info>
      **When Gong is not connected**, all 7 CI rules return a neutral score of 50 and are not counted as triggered. This means the Call Intelligence category does not drag down account health scores for organizations that do not use Gong.
    </Info>
  </Tab>
</Tabs>

***

## CSV Import

For data that is not available through an API connector, PILLAR supports manual CSV upload. This is commonly used for:

* **Seat counts** -- Licensed seats vs. active seats per account (feeds utilization scoring)
* **Utilization metrics** -- Product usage percentages when no product analytics tool is connected
* **Financial data** -- P\&L metrics for the Board Report (has its own dedicated upload at Settings > Financial Data)
* **Historical data** -- Backfilling account or contract data that predates your CRM

### How to Upload

1. Navigate to **Settings > Integrations > CSV Import**.
2. Download the template CSV for the data type you want to import (Accounts, Contacts, Opportunities, Leads, or Contracts).
3. Fill in the template with your data. Each row should include a matching identifier (account name, CRM ID, or email) so PILLAR can link records.
4. Upload the completed CSV.
5. PILLAR shows a preview of the mapped columns and any validation errors. Fix any issues and confirm the import.

### CSV Template Columns

<AccordionGroup>
  <Accordion title="Account Import Template">
    | Column                     | Required     | Maps To                  |
    | -------------------------- | ------------ | ------------------------ |
    | `account_name` or `crm_id` | Yes (one of) | Record matching key      |
    | `arr`                      | No           | `accounts.arr`           |
    | `segment`                  | No           | `accounts.segment`       |
    | `status`                   | No           | `accounts.status`        |
    | `student_count`            | No           | `accounts.student_count` |
    | `licensed_seats`           | No           | Utilization scoring      |
    | `active_seats`             | No           | Utilization scoring      |
    | `nps_score`                | No           | `accounts.nps_score`     |

    Any column that matches a PILLAR field name from the [Field Mapping Reference](/data/field-mapping-reference) will be auto-mapped.
  </Accordion>

  <Accordion title="Contract Import Template">
    | Column                     | Required     | Maps To                     |
    | -------------------------- | ------------ | --------------------------- |
    | `account_name` or `crm_id` | Yes (one of) | Account lookup              |
    | `contract_number`          | No           | `contracts.contract_number` |
    | `start_date`               | Yes          | `contracts.start_date`      |
    | `end_date`                 | Yes          | `contracts.end_date`        |
    | `contract_value`           | Yes          | `contracts.contract_value`  |
    | `status`                   | No           | `contracts.status`          |
    | `auto_renew`               | No           | `contracts.auto_renew`      |
    | `term_months`              | No           | `contracts.term_months`     |
  </Accordion>
</AccordionGroup>

<Warning>
  CSV imports are additive by default -- they update existing records or create new ones but never delete data. If you need to correct previously imported data, re-upload the CSV with the corrected values and the same matching identifiers.
</Warning>

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="My connector shows 'Disconnected' status">
    OAuth tokens can expire if your CRM admin revokes access or if the token refresh fails. Navigate to **Settings > Integrations**, click the connector card, and click **Reconnect**. You will be prompted to re-authorize.
  </Accordion>

  <Accordion title="Fields are not mapping correctly">
    Check the **Field Mapping** screen on the connector card. Look for fields marked as "Unmapped" in the Required section. If PILLAR's auto-discovery couldn't match a field, you may need to create a manual mapping. See the [Field Mapping Reference](/data/field-mapping-reference) for the expected CRM field names.
  </Accordion>

  <Accordion title="Scores are not updating after connecting a new data source">
    Scores recalculate on every sync cycle (every 15 minutes for CRM data). If you just connected a new source, wait for at least one full sync cycle to complete. Check the connector card for "Last Synced" timestamp. If the sync completed but scores haven't updated, check that the required fields for the relevant scoring rule are mapped.
  </Accordion>

  <Accordion title="I see 'INVALID_FIELD' errors in the sync log">
    This means PILLAR tried to fetch a field from your CRM that doesn't exist in your org's schema. This typically happens when a mapped field references a custom field that was deleted or renamed in your CRM. PILLAR's Salesforce connector has fail-soft retry logic that automatically drops the invalid field and retries the query. Review your field mappings to remove or update the stale mapping.
  </Accordion>

  <Accordion title="How do I check what data PILLAR has synced?">
    Navigate to the **Data Health** dashboard (accessible from the main navigation). It shows coverage percentages for each data object, mapping coverage, picklist mapping warnings, and sync status across all connectors.
  </Accordion>
</AccordionGroup>
