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

# Connector catalog

> The tools without a guide of their own: what each one does with a response, how it connects and what Usertick sends to it.

Each tool on this page connects under **Settings → Integrations** and receives responses through a step in a [workflow](https://docs.usertick.com/workflows/overview.md). Slack, Microsoft Teams, HubSpot, Google Sheets, Linear, Jira, webhooks and Zapier have guides of their own, listed in the [overview](https://docs.usertick.com/integrations/overview.md#what-the-catalog-includes).

## The tools

The tables follow the chips in **Settings → Integrations**. Google Analytics, FullStory and UXCam work on every plan. Every other tool here requires the Pro plan or higher.

### Marketing

| Tool | What a workflow step does with a response | How it connects |
| - | - | - |
| Mailchimp | Updates the respondent's contact in the audience the step selects, with tags, merge fields and an event. Adds new contacts only when the step allows it, and never subscribes anyone. See [Mailchimp](#mailchimp) | Signs in with Mailchimp |
| Klaviyo | Tracks an event on the Klaviyo profile that matches the respondent's email | Signs in with Klaviyo |
| Customer.io | Tracks an event on the matching person, found by user ID or email | **Site ID**, **Track API key**, **Region** |
| Braze | Logs an event on an existing Braze user, found by user ID or email | **REST endpoint**, **REST API key** |
| Iterable | Tracks an event on the matching Iterable user, found by user ID or email | **API key**, **Region** |
| Google Analytics | The widget sends `usertick_survey_response` through Google Analytics on the page | Nothing to connect. Switched on per site |

### Product research

| Tool | What a workflow step does with a response | How it connects |
| - | - | - |
| Productboard | Creates a note and links it to the respondent as its customer. See [Productboard](#productboard) | Signs in with Productboard, approved by a workspace admin |
| Amplitude | Sends an event for each response from a user your site identifies | **API key**, **Region** |
| Mixpanel | Tracks an event for each response from a user your site identifies | **Project token**, **Region** |
| FullStory | The widget sends "Usertick survey response" through FullStory on the page | Nothing to connect. Switched on per site |
| UXCam | The widget sends "Usertick survey response" through UXCam on the page | Nothing to connect. Switched on per site |

### CX & support

| Tool | What a workflow step does with a response | How it connects |
| - | - | - |
| Intercom | Tracks an event on the matching Intercom contact, found by user ID or email | Signs in with Intercom, after the **Data center** is selected |
| Zendesk | Creates a ticket, with the answers in an internal note. See [Zendesk](#zendesk) | Signs in with Zendesk, after the **Zendesk subdomain** is entered |

### Data

| Tool | What a workflow step does with a response | How it connects |
| - | - | - |
| Segment | Sends a track event for each response from a user your site identifies | **Write key**, **Region** |
| BigQuery | Adds a row to a table. See [BigQuery](#bigquery) | **Service account JSON**, **Dataset ID**, **Table ID** |

Google Analytics, FullStory and UXCam receive no answers and no personal data. See [Google Analytics, FullStory and UXCam](https://docs.usertick.com/integrations/page-events.md).

Salesforce, Freshdesk, Help Scout and the other tools that Usertick doesn't connect to natively are listed under **With Zapier**. See [Tools with Zapier](https://docs.usertick.com/integrations/with-zapier.md).

## Connect a tool

**1. Open the tool's panel**

In **Settings → Integrations**, select the tool.

**2. Sign in or enter the key**

If the tool signs in with OAuth, select the button named after it, such as **Continue with Zendesk**, and approve the connection on the tool's own screen in the popup. If the tool uses a key, fill in the fields and select **Connect**.

Some tools ask for more before the popup opens, or name the permissions they request:

* **Intercom** asks for the **Data center**: **United States**, **Europe** or **Australia**. If you sign in at app.eu.intercom.com, select **Europe**.
* **Klaviyo** asks to write events and profiles, and to read the account name.
* **Zendesk** asks for the **Zendesk subdomain**, the first part of your Zendesk address, such as `yourcompany` for yourcompany.zendesk.com. `yourcompany.zendesk.com` and the full address work too. If the value isn't one account name, Usertick stops before the popup opens: "Enter your Zendesk subdomain, such as yourcompany for yourcompany.zendesk.com." Usertick asks for `tickets:read`, `tickets:write`, `users:read` and `users:write`, so the respondent can be the ticket's requester. **Reconnect** uses the same subdomain.
* **Mailchimp** asks for no audience. Each step selects the audience it updates, so one connection covers every audience in the account. Mailchimp has no call that lets Usertick remove its own access, so after the connection is disconnected in Usertick, the app stays connected in your Mailchimp account until you remove it there.
* **Productboard** connects only when a Productboard workspace admin approves it. Usertick asks for `notes:read`, `notes:write`, `entities:read` and `entities:write`, so it can create notes and link the respondent to them.

If Klaviyo, Zendesk or Productboard didn't grant every permission, the panel says so, for example "Zendesk didn't grant every permission Usertick requests, so workflow steps that use this connection may fail. Reconnect and approve all permissions." If Klaviyo, Zendesk or Productboard ends the connection, for example because the app was removed there, the connection shows **Revoked**. If the Usertick app is removed in Intercom, Intercom refuses Usertick's access and the connection shows **Failing**. In each case, select **Reconnect**.

For a tool that uses a key, **Where to find these**, beside the form, says where each value is in the tool:

* **Region** is a list: **United States**, **Europe**, and **India** for Mixpanel. It starts on **United States**. Customer.io and Iterable detect their data center when Usertick checks the key.
* **REST endpoint** for Braze is a list of Braze's REST endpoints, each with its instance beside it, such as US-01 or EU-01. Your Braze dashboard address shows which one to use: dashboard-01.braze.com uses US-01, and dashboard-01.braze.eu uses EU-01.

### Where to find the keys

| Tool | Field | Where to find it |
| - | - | - |
| Mixpanel | **Project token** | In Mixpanel, open **Project settings** and copy the project token. Usertick never needs the API secret |
| Mixpanel | **Region** | Select Europe or India only if the project was created there |
| Amplitude | **API key** | In Amplitude, open **Settings** → **Organization settings** → **Projects**, then select the project and copy its API key. Usertick doesn't need the secret key |
| Amplitude | **Region** | If you sign in to Amplitude at analytics.eu.amplitude.com, select Europe |
| Segment | **Write key** | In Segment, add an HTTP API source under **Connections** → **Sources**, then copy the write key from the source's **Settings** → **API keys** |
| Segment | **Region** | Select Europe only if your Segment workspace is in the EU, because a US write key doesn't work on the EU endpoint |
| Customer.io | **Site ID**, **Track API key** | In Customer.io, open **Account settings** → **API credentials**. Under **Track API keys**, copy the Site ID and the API key from the same row. A key created only for Usertick is recommended |
| Braze | **REST API key** | In Braze, open **Settings** → **APIs and Identifiers** → **API keys**. Create a key with only the `users.track` permission |
| Iterable | **API key** | In Iterable, open **Integrations** → **API keys** and create a Server-side key. Copy the key right away, because Iterable shows it only once |
| BigQuery | **Service account JSON** | In Google Cloud, open **IAM & Admin** → **Service accounts**. Select an account with the **BigQuery Data Editor** role on the dataset, add a JSON key and paste the whole file |
| BigQuery | **Dataset ID**, **Table ID** | The dataset that holds the table, as BigQuery shows it, and a table with the [10 columns](#bigquery). The panel lists them under **Table columns** |

### Check a connection

When a tool is connected, Usertick checks the connection with a call that writes nothing in the tool. **Test** in the connection's menu checks it again.

Braze and Segment keys can't be checked without sending data. Their panels say "Usertick can't check a Braze key without sending data. After the first response is sent, the workflow's activity shows whether the key works." Such a connection shows **Not checked** instead of **Healthy**, and **Test** leaves its status as it is. For Braze, Usertick checks only that the REST endpoint is one of Braze's own.

### Manage a connection

The menu on a connection's row has **Test**, **Rename**, **Reconnect**, **Set as default** and **Disconnect**. A new step starts with the connection the organization used last for that action, or else the default connection. Disconnecting asks you to type the connection's name, lists the workflows that use the connection, and their steps stop sending until another connection is assigned to them. When Usertick can't check which workflows use the connection, it says so, and if any do, it lists them and asks again before the connection is disconnected.

## Event tools

Mixpanel, Amplitude, Segment, Customer.io, Braze, Iterable, Intercom and Klaviyo each receive one event per response. To send one, add the tool's **Track an event** step to a [workflow](https://docs.usertick.com/workflows/overview.md). The step has one setting:

| Setting | What it does | Default |
| - | - | - |
| **Event name** | The name of the event in the tool | "Survey Response". Klaviyo: "Survey Submitted" |

The event carries the time the response arrived, not the time it was sent, and the tool's own dedupe ID where the tool has one. A retry repeats the same event, so the tool doesn't count it twice. Braze keeps no dedupe ID, so Usertick never sends a Braze event again after a send that got no answer. The run then says "Braze did not answer in time. The event may have arrived, so it was not sent again."

### Who it is sent for

Each tool receives the event only for a person it can name: your user ID from [`identify()`](https://docs.usertick.com/installation/identify) or the respondent's email, never the browser's anonymous ID or the response ID. A response without what the tool needs is skipped. A skip isn't a failure, and the workflow's activity gives the reason.

| Tool | Sent when the response has | Otherwise, the run says |
| - | - | - |
| Mixpanel, Amplitude, Segment | Your user ID from `identify()` | "The response has no user ID from identify()." |
| Customer.io, Braze, Iterable, Intercom | Your user ID or the email | "The response has no user ID or email." |
| Klaviyo | The email. Your user ID goes along with it | "The response has no email address." |

Some tools refuse a person they don't have. Intercom never creates a contact from an event, and an email based Iterable project refuses an unknown user. The run then says "The tool has no person with this user ID or email." When Braze, Amplitude or Iterable refuses the person for another reason, the run says "The tool did not accept this person." Both are skips. Braze logs events only on users it already has, so a survey response never creates a Braze user.

The email comes only from an email campaign's contact, `identify()` or a Contact details question. See [how a tool knows who answered](https://docs.usertick.com/integrations/overview.md#how-a-tool-knows-who-answered) for the fields each tool receives.

### What the event carries

Every event tool receives these properties, each only when it has a value:

| Property | What it holds |
| - | - |
| `survey_id`, `survey_name` | The survey |
| `response_id`, `response_url` | The response, and a link that opens it in Usertick |
| `nps_score`, `csat_score`, `ces_score` | The answers to the survey's first answered NPS, rating and effort questions, each as the number given on that question's scale. `csat_score` holds the rating answer, such as 4 on a 5-star scale |
| `ai_type`, `ai_theme`, `ai_urgency`, `ai_sentiment` | The AI analysis, for a response the AI analyzed: the theme by name, and the sentiment of the strongest answer |
| `country`, `language` | Where the response came from and its language |
| `page_url` | The page it was sent from, without the query string |
| `answer_...` | One property per answered question, named after the question's text, such as `answer_what_could_we_improve`. Scores are numbers, and choices are their labels |

An answer property's name is the question's text in lowercase letters, digits and `_`, up to 60 characters after `answer_`. When two questions of a survey have texts that make the same name, each of them gets the first six letters and digits of its question ID after the name, such as `answer_how_was_it_3f2a9c`, so one question's property never moves to the other. Renaming a question starts a new property. File uploads, screenshots, signatures, Contact details answers and message screens are never sent, and neither is any value that holds a link to a stored file.

Each tool receives the properties in the shape it accepts:

| Tool | Properties |
| - | - |
| Mixpanel | All of them, with text cut at 255 characters, plus `distinct_id`, `$user_id`, `$insert_id`, `time` and `$source: "usertick"`. `ip` is `"0"`, so Mixpanel doesn't place the person at Usertick's server |
| Amplitude | All except the answers, with text cut at 1,024 characters. The country goes in Amplitude's own `country` field |
| Segment, Customer.io, Klaviyo | All of them, with text cut at 1,000 characters |
| Braze | All of them, with text cut at 255 characters |
| Iterable | All except the answer properties, plus one `answers` list of `{ question_id, question, answer }` with every answer as text, so Iterable keeps the same fields for every survey |
| Intercom | Ten metadata keys: `survey_id`, `survey_name`, `response_id`, `response_url`, `score` (the NPS answer, else the rating answer, else the effort answer), `ai_type`, `ai_theme`, `ai_urgency`, `ai_sentiment` and `country`, with text cut at 255 characters. No answers |

### Test

During a workflow's [**Test run**](https://docs.usertick.com/workflows/overview.md#test-a-workflow), an event tool's step never writes an event:

* On a real response, Usertick checks the connection the same way the connection's **Test** does, and the step reads **Checked, nothing sent**. When the tool refuses the connection, the step reads **Failed** with the reason.
* On a sample response, Usertick contacts no tool at all, and the step reads **Checked, nothing sent**.

When the response lacks what the tool needs, the step is skipped with the same reason a run gives, such as "The response has no user ID from identify()."

## Record tools

Zendesk, Productboard, Mailchimp and BigQuery each write one record per response. To send one, add the tool's step to a [workflow](https://docs.usertick.com/workflows/overview.md).

### Zendesk

The action **Create a ticket** has these settings:

| Setting | What it does | Default |
| - | - | - |
| **Subject** | The ticket's subject | "New feedback on" and the survey's name |
| **Comment** | The ticket's first comment. Usertick adds the comment as an internal note, which only agents see. Zendesk doesn't email it to the requester | The survey's name, the answers and the response link |
| **Priority** | **Low**, **Normal**, **High** or **Urgent** | **Normal** |
| **Tags** | The ticket's tags. Separate tags with commas or spaces. Zendesk saves tags in lowercase | `usertick` |
| **Add a tag for the survey** | Adds `survey_` followed by the survey's name, such as `survey_checkout_nps` | On |
| **Custom fields** | Values for your custom ticket fields. Each ticket gets the same value in these fields. A field left empty isn't set | None |

A tag keeps lowercase letters, digits, `_` and `-`, and any other character becomes `_`. A ticket gets up to 20 tags, each up to 80 characters.

**Custom fields** starts with "No custom fields are set." **Add a custom field** searches the account's active custom ticket fields, and the list shows each field's Zendesk type: Text, Multi-line, Checkbox, Date, Number, Decimal, Regex, Drop-down, Multi-select or Lookup relationship. Each added field gets a row with a value that fits its type:

* A number for Number and Decimal fields.
* **Checked** for a Checkbox field.
* A date for a Date field.
* For a Drop-down field, the option's tag, as the field's settings in Zendesk show it.
* For a Multi-select field, the options' tags, separated by commas.
* Text for the other types.

The delete icon on a row removes the field from the step.

The respondent is the ticket's requester when their email is known. A retry finds the ticket it made, so it never makes a second one.

During a workflow's **Test run**, the Zendesk step creates a real ticket whose subject starts with "\[Test]" when the test uses a real response. On a sample response, the step doesn't contact Zendesk and reads **Checked, nothing sent**.

### Productboard

The action **Create a note** has these settings:

| Setting | What it does | Default |
| - | - | - |
| **Title** | The note's title | "New feedback on" and the survey's name |
| **Content** | The note's text | The survey's name, the answers and the response link |
| **Response link** | The note's source link | The link to the response in Usertick |
| **Tags** | The note's tags. Separate tags with commas. Up to 20 | `usertick` |
| **Link the respondent as the customer** | Usertick finds the respondent in Productboard by email and creates the user when none exists | On |

The respondent is linked only when their email is known. If Productboard refuses to create the user, Usertick creates the note without a customer.

Each note carries a source record ID made from the response. Before a failed send goes out again, Usertick looks for that note, so a retry never makes a second note.

During a workflow's **Test run**, the Productboard step creates a real note whose title starts with "\[Test]" when the test uses a real response. With **Link the respondent as the customer** on, the test can also create the respondent as a Productboard user. On a sample response, the step doesn't contact Productboard and reads **Checked, nothing sent**.

### Mailchimp

The action **Update the contact** has these settings:

| Setting | What it does | Default |
| - | - | - |
| **Audience** | The Mailchimp audience the step updates. Required | None |
| **Add new people as contacts** | If this is off, Usertick updates only people who are already contacts in the audience | Off |
| **Tags** | Tags on the contact. Separate tags with commas | `usertick` |
| **Answers to merge fields** | Writes the answers to the selected questions into the audience's merge fields | None |
| **NPS merge field** | Receives the NPS answer, from 0 to 10 | **Don't write this value** |
| **Score merge field** | Receives the NPS answer. Without one, it receives the first rating or the effort score | **Don't write this value** |
| **Survey name merge field** | Receives the survey's name | **Don't write this value** |
| **Response date merge field** | Receives the date of the response, in the field's date format | **Don't write this value** |
| **Send a Mailchimp event** | Adds the event `usertick_survey_response` to the contact for each response, for use in journeys and segments | On |

**Who gets updated.** Mailchimp needs the respondent's email, and a response without one is skipped: "The response has no email address." By default, Usertick updates only people who are already contacts in the audience. A person who isn't a contact, or who is archived in the audience, is skipped: "This person isn't a contact in the Mailchimp audience, and the step doesn't add new contacts." A skip isn't a failure.

**New contacts.** With **Add new people as contacts** on, the step also adds people the audience doesn't have, and each new contact counts toward your Mailchimp bill. Usertick adds new people as transactional contacts, so they aren't subscribed to your campaigns. Usertick never subscribes anyone, and an existing contact keeps their status.

**Merge fields.** Until an audience is selected, the mapping says "Select the field above first." Each row pairs a question with a **Merge field**. The lists show the audience's text, number and date merge fields, and Usertick never creates a merge field. Each of the four value lists starts with **Don't write this value**, which clears it. Selecting another audience clears the mapping and the four fields. Each value takes the shape of its field:

* A number field gets a number. An answer that isn't a number is left out.
* A date field gets the date in the field's own format: MM/DD/YYYY, DD/MM/YYYY or YYYY-MM-DD.
* A text field gets the text, cut at 255 characters.

An answer that doesn't fit its field's type is left out, and so is a merge field the audience no longer has. The rest of the contact is still updated.

**Tags.** The tags go through Mailchimp's own tags call, so they reach existing contacts too.

**The event.** `usertick_survey_response` carries `survey_id`, `survey_name`, `response_id`, `response_url` and, when the survey has one, `score`, all as text. It carries the time the response arrived. Mailchimp keeps no dedupe ID for events, so Usertick never sends an event again after a send that got no answer. The run then says "Mailchimp did not answer in time. The event may have arrived, so it was not sent again."

**Test.** During a workflow's **Test run**, the Mailchimp step never writes anything in Mailchimp. On a real response, it reads the audience, the contact and the merge fields, and the step reads **Checked, nothing sent**. If the person isn't a contact and the step doesn't add new contacts, the step is skipped with "This person isn't a contact in the Mailchimp audience, and the step doesn't add new contacts." On a sample response, Usertick doesn't contact Mailchimp.

### BigQuery

The action **Insert a row** adds one row per response. The table needs these 10 columns, which the connection panel lists under **Table columns**:

| Column | Type | What it holds |
| - | - | - |
| `event_id` | STRING | The response's ID |
| `survey_id` | STRING | The survey's ID |
| `survey_name` | STRING | The survey's name |
| `variant` | STRING | The ID of the survey variant the respondent saw |
| `completed` | BOOL | Whether the respondent finished the survey. Always `true`, because Usertick stores a response only once the respondent finishes |
| `country` | STRING | The two-letter country code |
| `language` | STRING | The response's language |
| `url` | STRING | The page the response was sent from |
| `received_at` | TIMESTAMP | When the response arrived, in UTC with milliseconds, such as `2026-10-03T14:05:09.123Z` |
| `answers` | STRING or JSON | The answers as JSON, by question ID. File uploads, screenshots and signatures are left out, and so is any value that holds a link to a stored file |

Usertick leaves `survey_name` and `variant` empty when a response has no value for them, so both columns need the NULLABLE mode. A response from a survey without variants has an empty `variant`.

Usertick checks the table when the connection is made and refuses a table that is missing or lacks a column: "Usertick can't use this BigQuery table. Check that the dataset and the table exist and that the table has every column listed under Table columns." The error code is `CON-001-008`. The connection's **Test** names the missing columns, such as "The test did not go through: The BigQuery table is missing these columns: survey\_name, variant." A workflow's test run and its activity show the same list.

The service account needs to read the table and add rows. The **BigQuery Data Editor** role on the dataset covers both.

During a workflow's **Test run**, the BigQuery step checks the table and its columns and adds no row.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.