# Connect Reverse ETL Source to Gainsight PX Audience


<blockquote class="announcement">
  <div class="tip-quote">
    
    <div class="tip-text"><p>The Gainsight PX Audience destination is in <strong>Private Beta</strong>.</p>
<p>Reach out to <a href="mailto:support@rudderstack.com" >Customer Success</a> to enable it for your workspace.</p>
</div>
  </div>
</blockquote>

<p>This guide takes you through the steps to connect a <a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL source</a> to your Gainsight PX Audience destination.</p>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">Before you start, make sure to complete the <a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/gainsight-px-audience/#prerequisites" >prerequisites</a> — create the Boolean custom user attribute in Gainsight PX, and get a REST API key and your data center.</div>
  </div>
</blockquote>
<!-- TODO: Add screenshots of the Gainsight PX account form and the connection mapping form once the destination is available in the dashboard. -->
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="setup">Setup</h2><ol>
<li>Set up and configure your Reverse ETL source.</li>
<li>In the <strong>Overview</strong> tab of the source page, click <strong>Add destination</strong> &gt; <strong>Create new destination</strong>. You can also select an already-configured destination here.</li>
<li>From the list of destinations, select <strong>Gainsight PX Audience</strong> and click <strong>Continue</strong>.</li>
<li>Specify a unique name to identify this destination in RudderStack.</li>
<li>In the <strong>Gainsight PX account</strong> section, click <strong>Select</strong> to choose an existing account. To add a new account, click <strong>Add account</strong>, and specify the following settings:</li>
</ol>
<table>
  <thead>
      <tr>
          <th>Setting</th>
          <th><div>Description</div></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Account name</td>
          <td>Specify a unique account name.</td>
      </tr>
      <tr>
          <td>REST API key</td>
          <td>Enter your Gainsight PX REST API key. Create it in Gainsight PX under <strong>Administration</strong> &gt; <strong>REST API</strong> with <strong>Read</strong> and <strong>Write</strong> permission.</td>
      </tr>
      <tr>
          <td>Data center</td>
          <td>Select the data center of your Gainsight PX subscription: <code>US</code>, <code>EU</code>, or <code>US2</code>. Match the host of your Gainsight PX URL — <code>app</code> for <code>US</code>, <code>app-eu</code> for <code>EU</code>, <code>app-us2</code> for <code>US2</code>.</td>
      </tr>
  </tbody>
</table>
<ol start="6">
<li>Proceed to configure the mapping settings.</li>
</ol>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="mapping-settings">Mapping settings</h2><p>This section lists the settings to correctly map data from your Reverse ETL source to the Gainsight PX Audience destination.</p>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">Members who are not yet Gainsight PX users are reported as failed rows until they exist in Gainsight PX; no users are created.</div>
  </div>
</blockquote>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="attribute-api-name">Attribute API name</h3><p>Enter the <strong>API name</strong> of the Boolean custom user attribute in Gainsight PX that stores membership for this sync (for example, <code>rs_trial_power_users</code>).</p>
<ul>
<li>The attribute must already exist in Gainsight PX as an enabled <strong>Boolean</strong> custom user attribute.</li>
<li>API names are case-sensitive. Use the API name, not the display name.</li>
<li>Allowed characters: letters, numbers, and underscores, maximum length <strong>200</strong>.</li>
<li>You can&rsquo;t change the attribute once the connection exists. To use a different attribute, create a new sync.</li>
</ul>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="sync-mode">Sync mode</h3><p>Only <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#mirror-mode" >Mirror mode</a> is supported for this integration. There is no sync mode selector in the UI.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="map-user-identifier">Map user identifier</h3><p>Map exactly one warehouse column to the Gainsight PX user ID, <strong><code>identifyId</code></strong>. The values must match the user IDs in Gainsight PX exactly, including case.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="setup-validation">Setup validation</h2><p>When you create the connection, RudderStack checks the account and the attribute against Gainsight PX. The connection is saved only if:</p>
<ul>
<li>The API key is valid for the selected data center and has <strong>Read</strong> permission.</li>
<li>An attribute with that exact API name exists, is a <strong>custom</strong> attribute (not built in), is of type <strong>Boolean</strong>, and is enabled.</li>
<li>Exactly one column is mapped to <code>identifyId</code>.</li>
</ul>
<p>Editing an existing connection in the RudderStack dashboard or through the API doesn&rsquo;t re-run this check.</p>
<p>If a check fails, the form shows the reason. See <a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/gainsight-px-audience/#troubleshooting" >Troubleshooting</a> for each message and how to fix it.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="sync-settings">Sync settings</h2>

<p>RudderStack determines how and when to run a sync based on the <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-schedule-settings/" >sync schedule</a> you set for your Reverse ETL connection.</p>
<table>
  <thead>
      <tr>
          <th>Schedule type</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Basic</td>
          <td>Run syncs at a set interval, optionally starting from a specified time (UTC). <br /><br />If a start time is set, syncs run from that time until the end of that day.</td>
      </tr>
      <tr>
          <td>CRON</td>
          <td>Run syncs based on a specified CRON expression (in UTC).</td>
      </tr>
      <tr>
          <td>Manual</td>
          <td>Run syncs manually.</td>
      </tr>
  </tbody>
</table>
<!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="sync-observability-settings">Sync observability settings</h4>

<table>
  <thead>
      <tr>
          <th>Setting</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Retain sync logs</td>
          <td>This setting is toggled on by default and instructs RudderStack to store the sync logs in your warehouse. You can also configure the below settings: <br /><br /><table><tr><th width="20%">Setting</th><th width="80%">Description</th></tr><tr><td>Sync log retention</td><td>Specify the retention period of the <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-observability/#sync-logs" >sync logs</a> in your warehouse. <br /><br />If you set it to 1, then RudderStack deletes any sync log older than a day (in UTC time). </td></tr><tr><td>Snapshot table retention</td><td>Specify the number of <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-observability/#snapshot-table-schema" >snapshot tables</a> to retain. </td></tr></table></td>
      </tr>
      <tr>
          <td>Retry failed records</td>
          <td>This setting is toggled on by default and causes RudderStack to continually <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-observability/#retry-failed-records" >retry sending the failed records</a>.</td>
      </tr>
      <tr>
          <td>Retain and show failures</td>
          <td>This setting is toggled off by default. Turn it on to have RudderStack write the error recorded for every failed record to a <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/rudderstack-schema/#failed-records-table" >failed records table</a> in your warehouse and show it in the sync&rsquo;s <a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-observability/#failed-records" >failed records view</a>. It applies from the next sync and can take up to a minute to reach your data plane. <br /><br /><table><tr><th width="20%">Setting</th><th width="80%">Description</th></tr><tr><td>Failure retention</td><td>Number of days RudderStack keeps each sync&rsquo;s failed records in your warehouse. The default is 30 and the minimum is 7.</td></tr></table></td>
      </tr>
  </tbody>
</table>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">Storing sync logs, snapshot tables, and failed records may incur additional warehouse costs.</div>
  </div>
</blockquote>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">Avoid <strong>Reset History and Full Sync</strong> for this destination. A full sync sets the attribute to <code>true</code> for everyone currently in the source but never sets it to <code>false</code> for anyone who left before that run, so those users keep <code>true</code> until they re-enter and leave again. See <a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/gainsight-px-audience/#limitations" >Limitations</a>.</div>
  </div>
</blockquote>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="see-also">See also</h2><ul>
<li><a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/gainsight-px-audience/#how-membership-is-written-to-gainsight-px" >How membership is written to Gainsight PX</a></li>
<li><a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/" >Sync Modes</a></li>
</ul>
<br />

