# Add an activity or item in Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/add-an-activity-or-item-in-carerix-with-hiredata
Automatically add activities or items to Carerix from HireData, keeping candidate and client records up to date without manual admin work for recruiters.
This guide shows you how to automatically add an activity or item in Carerix using HireData. Follow the steps below to get the most out of your Carerix automations. For a visual walkthrough, watch the step-by-step video at the end of this article.
Before we start setting up this automated task, make sure you've [set up the connection with Carerix](/apps/carerix/connect-with-carerix) and are familiar with [how to create a Carerix automation](/apps/carerix/create-a-carerix-automation-in-hiredata) in HireData. Now let's start configuring this automated task.
## Step 1: Adding a task to your automation
Click one of the \[+] items in your automation to open up the menu where you can choose a building block. Select \[Task] to open up the options, then select \[Carerix] and \[Add Activity or Item].
*1.1: Click a \[+] item while editing your automation:*
*1.2: Select \[Task]:*
*1.3: Select \[Carerix]:*
*1.4: Select \[Add Activity or Item]*
## Step 2: Choosing the activity or item to be added
Next you'll select the activity or item you'd like to add or log in Carerix. We currently support these activities and items:
* Appointment
* Candidate
* Email
* Note
* Task
* User
* Vacancy
*Select the activity or item type you'd like to add or log in Carerix:*
## Step 3: Filling in the item's fields
Proceed to fill in the activity's or item's fields. If you'd like to use variables, click the variables icon (top right) to open the variables menu. You can use both static and dynamic data. Don't forget to click \[Save Task] after filling in all fields necessary.
*Complete the activity's or item's fields by using static and/or dynamic data (variables):*
# Allow Carerix cookies in your browser
Source: https://help.hiredata.com/apps/carerix/allow-carerix-cookies-in-your-browser
Fix Carerix Marketplace SSO login screens, loops, or blank panels by allowing the cross-site cookies required by embedded integrations such as HireData.
If you see a Carerix login screen inside the HireData RMA while you are already signed in to Carerix, your browser is probably blocking the cross-site cookies that Carerix Marketplace SSO needs.
Do not sign in again inside the embedded login screen. Allow Carerix cookies in your browser instead.
## How to recognize this issue
Blocked cross-site cookies can cause the HireData RMA or another Carerix Marketplace integration to:
* Show a Carerix login screen even though you are already signed in
* Return to the login screen immediately after you sign in
* Remain white or gray instead of loading
* Show a connection refused or session expired message
## Why this happens
Carerix Marketplace loads HireData inside a cross-site iframe. The iframe starts an OpenID Connect login with the Carerix Identity Server. Carerix SSO then uses your existing Carerix session to authenticate you without asking for your credentials again.
If your browser prevents that session cookie from being used inside the iframe, the Identity Server cannot recognize your existing session. The embedded app can then display a login screen or enter a login loop.
This is a known limitation of browser privacy controls and Carerix's iframe-based Marketplace SSO. It is not a defect in HireData's OpenID Connect implementation. Carerix describes the expected flow in its [Marketplace authentication and SSO documentation](https://help.carerix.com/en/articles/14034043-carerix-marketplace-framework-authentication-sso-flow).
## Comet and Google Chrome
Comet is based on Chromium, so you can use the same cookie exception as in Google Chrome.
Open your browser's **Settings**, then go to **Privacy and security** > **Third-party cookies**.
Under **Sites allowed to use third-party cookies**, click **Add**.
Enter the following address exactly and click **Add**:
```text theme={null}
[*.]carerix.net
```
The `[*.]` prefix includes your Carerix environment and all other `carerix.net` subdomains.
Carerix also recommends allowing its Identity Server domain. Add this as a separate entry:
```text theme={null}
[*.]carerix.io
```
Return to Carerix and reload the page. Open the HireData RMA again. It should now open without showing the Carerix login screen.
### Allow cookies from the address bar
If your browser displays a blocked third-party cookies icon in the address bar, you can also click that icon and turn on **Third-party cookies** for the current site. Reload the page afterward.
Adding `[*.]carerix.net` in **Settings** is the more reliable option because it covers every Carerix environment on that domain.
## Safari on macOS
Safari does not support a website-specific exception for this type of cross-site tracking protection. You must change the setting for the entire browser.
In the Safari menu, click **Settings**, then open **Privacy**.
Turn off **Prevent cross-site tracking**. Make sure **Block all cookies** is also turned off.
Close **Settings**, return to Carerix, and reload the page. Open the HireData RMA again.
If the HireData RMA loads after this change, Safari's cross-site tracking protection was the cause.
Turning off **Prevent cross-site tracking** affects every website in Safari. If you prefer a site-specific exception, use Comet or Chrome and allow only the Carerix domains listed above.
Do not test this in an Incognito or Private window. These modes often block third-party cookies by default.
## If you cannot change the setting
Your organization may manage your browser settings. If the option is unavailable or locked, ask your IT administrator to allow third-party cookies for `[*.]carerix.net` and `[*.]carerix.io`.
In Comet or Chrome, these exceptions allow Carerix to keep you signed in inside the HireData iframe. They do not enable third-party cookies for every website.
## Carerix resources
* [Marketplace authentication and SSO flow](https://help.carerix.com/en/articles/14034043-carerix-marketplace-framework-authentication-sso-flow)
* [Allow third-party cookies](https://help.carerix.com/en/articles/9857670-allow-third-party-cookies)
* [Cross-site cookie symptoms and Safari limitations](https://help.carerix.com/nl/articles/14706388-cross-site-cookies)
* [Troubleshoot integrations blocked by third-party-cookie settings](https://help.carerix.com/en/articles/13375528-troubleshooting-dashboards-or-integrations-not-loading-chrome-version-144-third-party-cookies)
# Carerix webhook fields
Source: https://help.hiredata.com/apps/carerix/carerix-webhook-fields
Learn which Carerix fields and keys are available in HireData, where to inspect a connection or event payload, and how to troubleshoot missing data.
*When Carerix sends an event to HireData, the event contains the fields enabled for the relevant object in your Carerix connection. This guide explains which candidate fields are commonly available, where to find their keys, and how to confirm exactly what HireData received for a specific record.*
## How Carerix fields reach HireData
Each Carerix connection has its own enabled field set. This means the fields available in one HireData account can differ from those in another account, even when both use the same Carerix object.
The connection's **Object Definition** determines which fields are available to new events and automations. A real event's **Data** tab then shows the values HireData received for one specific record.
Use the field table below as a guide to common Candidate fields. Your connection settings and the event's **Data** tab are the source of truth for the fields available in your account.
## Candidate fields at a glance
The standard Candidate object commonly includes the following fields:
| Field | Key | Typical use |
| ---------------------- | -------------------------- | ----------------------------------------------- |
| Id | `{{_id}}` | Identify the Carerix record |
| First Name | `{{firstName}}` | Personalise messages and updates |
| Last Name | `{{lastName}}` | Personalise messages and updates |
| Email Address | `{{emailAddress}}` | Use the main email field |
| Business Email Address | `{{businessEmailAddress}}` | Use the business email field |
| Private Email Address | `{{privateEmailAddress}}` | Use the private email field |
| Primary Email Address | `{{primaryEmailAddress}}` | Use Carerix's primary email field |
| Any Email Address | `{{anyEmailAddress}}` | Select an email using HireData's fallback order |
When an automation only needs a usable email address, **Any Email Address** can be more reliable than selecting one specific email field. See [Combined Fields Explained](/apps/carerix/combined-fields-explained) for the complete fallback order.
## Confirm the fields in your connection
Check the Carerix connection when you need to know whether a field is enabled or which key HireData uses for it.
1. Go to **Settings** > **Apps**.
2. Open **Carerix**.
3. Open the three-dot menu for the relevant connection and select **Edit**.
4. Select an object, such as **Candidate**, **Contact**, **Meeting**, or **User**.
5. Review the **Object Definition** table.
The table shows each field's **Label**, **Type**, and **Key**. Only enabled fields are available to new events for that object.
If the field you need is disabled, see [Enable Carerix Fields and Relationships](/apps/carerix/how-to-enable-carerix-fields-and-relationships-in-your-automations) before changing the connection.
## Inspect the exact event payload
Use a real event when you need to confirm which fields and values HireData received for an individual record.
1. Select **Events** in the main navigation.
2. Find and open the relevant Carerix event.
3. Select the **Data** tab.
4. Use the available table or tree view to explore the fields.
5. Select the code view (`>`) when you need to inspect the raw JSON or confirm an exact key and value.
The event's **Runs** tab shows which automations processed it. This is useful when the payload contains the expected field but an automation did not behave as intended.
For a fuller explanation of the event detail view, see [Events](/settings/logs/events).
## Choose the appropriate Carerix trigger
When you configure a Carerix **Start** block, the trigger picker can include:
* **Created**
* **Created or Updated**
* **Updated**
* **Schedule**
* **Manual**
Choose the trigger that matches when the automation should start. For example, use **Created or Updated** when the same automation should handle both new records and later changes.
**Deleted** is not currently offered in the trigger picker.
## Troubleshoot a missing field
If a field exists in Carerix but does not appear in HireData:
1. Confirm that you are checking the correct Carerix object.
2. Open the connection's **Object Definition** and confirm that the field is enabled.
3. If the field was recently created or changed in Carerix, run a [manual sync](/apps/carerix/manually-sync-carerix-with-hiredata).
4. Create or update a test record to generate a new event.
5. Inspect the new event's **Data** tab and code view.
Enabling a field does not add it to events that HireData received earlier. Use a newly generated event when testing a connection change.
## Need more help?
If the field is enabled but still missing from new events, contact [support@hiredata.com](mailto:support@hiredata.com). Include:
* The Carerix connection and object name
* The field label and key
* A link or the ID of a recent event
* The result you expected
# Combined fields explained: how HireData picks a value
Source: https://help.hiredata.com/apps/carerix/combined-fields-explained
Learn how HireData's combined fields automatically pick the first filled-in value from Carerix, and in what order each field is checked
*Combined fields, like `anyEmailAddress` and `anyPhoneNumber`, make sure your automations always find the right information, even if some fields in Carerix are empty. Keep reading to learn how these fields work and in what order HireData picks a value.*
## Candidate, user and contact
`CarerixCandidate`, `CarerixUser`, and `CarerixContact` records all use the exact same set of combined fields. Whether you're working with a candidate's, a user's or a contact's profile, these fields behave the same way.
### anyEmailAddress
If you're wondering which email address HireData picks when a record has more than one (business or private, primary or secondary), this is the field that decides. The priority order is below.
Use `anyEmailAddress` when you want HireData to always find an email address, no matter which specific field is filled in Carerix. If more than one email field has a value, HireData checks them in this order and uses the first one it finds:
1. `businessOrPrivateEmailAddress`
2. `privateOrBusinessEmailAddress`
3. `primaryOrBusinessEmailAddress`
4. `primaryOrPrivateEmailAddress`
5. `primaryEmailAddress`
6. `firstEmailAddress`
7. `businessEmailAddress`
8. `privateEmailAddress`
9. `emailAddress`
10. `homeEmailAddress`
### anyPhoneNumber
Use `anyPhoneNumber` to automatically pick a phone number, checking both personal and business numbers. HireData looks through these fields in this order:
1. `mobileNumber`
2. `phoneNumber`
3. `mobileNumberBusiness`
4. `phoneNumberBusiness`
5. `faxNumber`
6. `faxNumberBusiness`
### mobileOrPhoneNumber
This variable focuses on personal contact numbers. It checks for a mobile number first, then falls back to a personal phone number, then a fax number:
1. `mobileNumber`
2. `phoneNumber`
3. `faxNumber`
### phoneOrMobileNumber
This works the same way as `mobileOrPhoneNumber`, but checks the phone number first:
1. `phoneNumber`
2. `mobileNumber`
3. `faxNumber`
### mobileOrPhoneNumberBusiness
This variable only looks at business contact numbers. It checks the business mobile number first, then the business phone number, then the business fax number:
1. `mobileNumberBusiness`
2. `phoneNumberBusiness`
3. `faxNumberBusiness`
### phoneOrMobileNumberBusiness
Same as above, but checks the business phone number first:
1. `phoneNumberBusiness`
2. `mobileNumberBusiness`
3. `faxNumberBusiness`
## Match
### modifiedOrCreatedBy
Use `modifiedOrCreatedBy` to find out who's responsible for a match. HireData first checks who last modified the match record. If that's empty, it uses who created it instead:
1. `modifiedBy`
2. `createdBy`
* Where possible, choose the "any" version of a variable, such as `anyEmailAddress` or `anyPhoneNumber`, instead of a single specific field. This way, your automation will keep looking for a value if the first fields in Carerix are empty.
* The order in which values are picked is fixed and built into HireData, so there's nothing you need to configure yourself.
* If none of the fields behind a combined field has a value, the field will appear empty. We recommend checking that the Carerix fields you rely on most are kept up to date.
# Connect with Carerix
Source: https://help.hiredata.com/apps/carerix/connect-with-carerix
Step-by-step guide to connect HireData with Carerix, set up authentication, and start automating recruitment workflows between the two platforms in minutes.
This guide walks you through connecting your Carerix account with HireData. Follow the steps below to unlock the full potential of Carerix in your HireData automations. For visual support, watch the two step-by-step videos included.
## Connect with Carerix RMA (recommended)
***This is the standard and recommended way to connect Carerix with HireData.
No manual configuration, client IDs, or secrets are required.***
### Before you begin, you'll need
* Access to your **Carerix environment**
* Permission to install apps from the **Marketplace**
### Step 1: Install Carerix RMA from the marketplace
*1.1 Log in to your Carerix application*
*1.2 Open the \[Marketplace]*
*1.3 Under \[New/Uninstalled], locate Carerix RMA (powered by HireData)*
*1.4 Click \[Install]*
*1.5 After installation, the app will appear under \[Installed]*
### Step 2: Activate Carerix RMA
*2.1 Go to \[Installed] tab in the \[Marketplace]*
*2.2 Find Carerix RMA*
*2.3 Fill in your settings, including:*
* *Credit bundle*
* *Additional brand(s)*
* *Additional core app(s)*
* *Additional WhatsApp number(s)*
*2.4 Click \[Activate]\* to activate the app*
*\*In this screenshot, the \[Deactivate] button is visible because the app is already active.*
The Carerix RMA app depends on the Webhooks app.
This dependency is usually installed automatically during activation. If not, install the Webhooks app before activating the Carerix RMA.
You should see a green checkmark next to the Carerix RMA and the Webhooks apps if both were installed correctly.
Please check out our video tutorial for a full step-by-step guide on how to set up the connection:
## Connecting multiple tenants (advanced setup)
*If you need to connect **more than one Carerix tenant** to HireData (for example, a **production** and **staging** environment), you must use the **legacy connection method inside HireData**.*
*This setup is intended for **advanced use cases** and is **not required** for single-tenant connections.*
### Step 1: Navigating to Carerix app
Begin by navigating to the [app section](https://app.hiredata.com/apps) within **HireData**. Here, you'll find the option to [integrate with Carerix](https://app.hiredata.com/apps/carerix). This initial step is simple yet fundamental for the integration process.
### Step 2: Configuring your Carerix environment
In order to connect your Carerix and HireData environments, you need (a) to activate webhooks (see: step 2.1), and (c) set up a client (see: step 2.2). This gives you a (I) Client ID and (II) Client Secret for your Carerix environment. Please follow the steps below to obtain those:
#### Step 2.1 Activating webhooks
First, you need to activate webhooks for your Carerix environment. This is done by [sending a support ticket to Carerix](mailto:support@carerix.com). Once webhooks are activated, you can proceed to the next step. Before activating webhooks, some scopes that are needed will not be available yet.
#### Step 2.2 Setting up a confidential client
Second, head over to your Carerix environment, navigate to \[Maintenance] > \[Identity Management] > \[Clients], and click the \[New] > \[Confidential] link. Then, fill in the following values:
* Name: `HireData`
* Code: `urn:hiredata/hiredata`
* Default scopes:
* `urn:cx/cx5Wrapper:data:manage`
* `urn:cx/webhooks:data:manage`
* Permissions:
* Click \[Add] and search for `Webhooks`
* Configure permissions as follows:
* create: `on`
* delete: `owner`
* read: `all`
* update: `owner`
Last but not least, click "Save". Don't forget to save your Client ID and Client Secret - especially the latter - since you'll only be shown these values once for security reasons. If you don't save them, you'll have to redo this step.
*2.2.1: Create a Confidential Client within Carerix*
*2.2.2: Configure your Confidential Client within Carerix*
*2.2.3: Copy your Client ID and Client Secret*
### Step 3: Creating a new connection
Click \[+ New Connection] and enter the required Carerix details: your tenant (customer name or sub domain), Client ID, Client Secret, and API Key. If you don't have a Client ID, Client Secret, and/or API Key yet, please get in touch with your account manager at Carerix or [contact Carerix' support team](mailto:support@carerix.com).
*3.1: Click \[+ New Connection] and start connecting your Carerix*
*3.2: Provide your tenant (no capitals), client ID, and client secret to set up a new connection*
### Step 4: Carerix connected
After you've clicked "Connect", you've finished setting up the connection between Carerix and HireData. When it's the first time you've set up this connection, HireData might need a few minutes to sync data from your Carerix database. After that, you're all set to [set up your first Carerix automation in HireData](/apps/carerix/create-a-carerix-automation-in-hiredata).
Please check out our video tutorial for a full step-by-step guide on how to set up the connection:
## Next step: Creating a Carerix automation in HireData
Now that you've set up the connection with Carerix, let's [create your first Carerix automation](/apps/carerix/create-a-carerix-automation-in-hiredata) within HireData.
# Create a Carerix automation in HireData
Source: https://help.hiredata.com/apps/carerix/create-a-carerix-automation-in-hiredata
Learn how to build a Carerix automation in HireData: pick a trigger, map fields, and streamline recruitment workflows without writing any code.
This guide walks you through setting up a Carerix automation in HireData. With this integration, you can automate tasks such as sending Candidate NPS surveys to improve candidate experiences and streamline your recruitment processes. Follow each step below to set up the automation.
## Step 1: Setting up the trigger
After you've [set up the connection with Carerix](/apps/carerix/connect-with-carerix), the first step in setting up a Carerix automation is to define the trigger. A trigger makes sure HireData "listens" to certain events occurring within Carerix. Don't forget to select all relationships you'll need later on, e.g. select a candidate when you want to send a survey to them in a further step within the automation. Here's how to do it:
*Example Trigger: Match: Created or Updated*
*Select the related objects you'll need later on in the automation, e.g. a user you want to be the sender of a message and the recipient(s) of that message*
## Step 2: Adding a filter
Once you've set up the trigger, it's essential to add filters to ensure that the automation is triggered under specific conditions. Follow these steps:
*Example Filter: If match stage equals one of these stages*
## Step 3: Adding a delay
In some cases, you may want to introduce a delay before executing the automation. Here's how to add a delay:
*Example Delay: 1 day (e.g., to inform a candidate about landing the job before sending a post-placement survey)*
## Step 4: Setting up the 'Send Survey' task
Next, configure the task to send the Candidate NPS survey. Follow these steps:
*4.1. Select your survey template:*
*4.2. Choose the recipient of the survey:*
*4.3. Specify the sender of the survey:*
*4.4. Configure the timing of the survey:*
*4.5. Ensure all settings are correct and save your task:*
## Step 5: Activating your automation
Once you've completed the setup, it's time to activate your automation. With this step, your Carerix automation is ready to go, streamlining your recruitment processes effortlessly.
*Click the \[Activate] button to turn your automation on*
By setting up a Carerix automation within HireData, you can automate tasks such as sending Candidate NPS surveys, thereby improving candidate experiences and optimizing your recruitment workflows. With the step-by-step guide provided in this tutorial, you can efficiently set up and activate your automation, saving time and resources while enhancing your recruitment efforts.
# How profile pictures work in HireData
Source: https://help.hiredata.com/apps/carerix/how-profile-pictures-work-in-hiredata
Understand how HireData selects user avatars from Carerix attachments, the priority order applied, and when photos, logos, or initials are displayed.
*Profile pictures in HireData are automatically generated based on specific attachment types in Carerix. This article explains which attachments are used, the priority order applied, and when a photo, logo, or initials will be displayed.*
## How HireData selects a user avatar
When a profile is synced from Carerix, HireData checks whether there are attachments that can be used as an avatar. Only attachments with these specific type values are considered:
* `pasfoto`
* `emaillogo`
The system also evaluates the attachment label. Matching is case-insensitive, so any casing variation (for example, `PasFoto`, `PASfoto`, `EmailLogo`) is supported.
If multiple valid attachments exist, HireData evaluates them in a fixed priority order. Within that order, the most recently modified attachment is considered first.
## User avatar selection priority
HireData determines the avatar using the following priority:
### 1. Email logo with label "emailpasfoto"
First priority is given to an attachment where:
* Type value is `emaillogo`
* Label is `emailpasfoto`
If such an attachment exists and contains usable content, it is used as the avatar.
### 2. Profile photo with label "pasfoto"
If no match is found in step 1, HireData checks for:
* Type value `pasfoto`
* Label `pasfoto`
If found and valid, this image is used.
### 3. Any attachment with type "pasfoto"
If no exact label match is found, HireData checks for any attachment where:
* Type value is `pasfoto`
The label does not need to match in this case.
### 4. Any attachment with type "emaillogo"
If no profile photo is found, HireData checks for any attachment where:
* Type value is `emaillogo`
The label does not need to match.
## When is a photo or logo displayed?
An image is displayed as the avatar when a **matching attachment is found** based on the priority above, and a valid image is available to be used as the user's avatar.
## When are initials displayed?
Initials are shown when:
* No attachment with type `pasfoto` and/or `emaillogo` exists
* A matching attachment exists but does not contain usable content
* The profile has no attachments
In these cases, HireData automatically generates initials based on the profile name.
## Troubleshooting
If you expect an image but only see initials, check the following:
* The attachment type value is set to `pasfoto` or `emaillogo`.
* The label is correctly configured.
* The attachment contains accessible and usable file content.
* The attachment has been synced correctly.
If you make changes in Carerix, for example, uploading a new photo or updating the attachment type, the user avatar will update after the next successful sync within HireData.
# Enable Carerix fields and relationships in automations
Source: https://help.hiredata.com/apps/carerix/how-to-enable-carerix-fields-and-relationships-in-your-automations
Configure Carerix objects, fields, and relationships in your HireData connection so your automations can read and write the exact data they need.
*Properly configuring the objects and relationships in your Carerix connection with HireData is essential for ensuring your automations work correctly. This guide will walk you through the process of easily managing objects and configuring relationships.*
## Editing your Carerix connection
Begin by navigating to the [app section](https://app.hiredata.com/settings/apps) within HireData and open Carerix.
Then click \[Edit] from the drop-down menu on the connection you would like to update.
## Configuring objects
On the next screen, you will see a list of objects that are synced with your connection.
Click an object (e.g., Appointment, Candidate, Meeting) to configure its fields.
After selecting any of the objects, you will see a list of fields associated with it. Toggle the **switch on** for the fields you want to sync. After you do this and save the changes, these fields will be available for your automations.
## Configuring relationships
Here you can also define the relationships for your objects that will be used in your automations.
In the **Objects** panel on the left, select the object you would like to update and click the **Configuration** tab, where you will see the current relationships. Click \[Edit] to update them.
Select any of the relationships that you need for your automations.
Lastly, review your selection and confirm it.
The newly added relationships should be visible on the next screen.
By configuring the objects and relationship fields in your Carerix connection, you ensure that the right data is available for use in your HireData automations. These relationships and objects can be leveraged in automation filters, for selecting senders and recipients in email or WhatsApp messages, and for defining specific conditions that trigger actions.
Proper setup allows for seamless data flow between Carerix and HireData, enhancing the precision and efficiency of your automated workflows.
💡 **Pro** **Tip:** Only enable the fields required for your automation to optimize data synchronisation.
# Logging email messages on Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/logging-email-messages-on-carerix-with-hiredata
Set up a HireData automation that logs sent emails into Carerix, capturing sender, recipient, subject, and body so your team keeps full context.
This guide shows you how to log email messages from HireData to Carerix. Logging ensures every email is recorded in Carerix, making it easier to track interactions with clients and candidates. Read on to set up an automation that logs sent emails into Carerix.
## Step 1: Create a new automation
By integrating HireData with Carerix, you can automatically create email records in Carerix whenever an email is sent. The automation captures relevant details such as sender, recipient, subject, body content, and when the message has been sent, ensuring that every email is properly logged.
### 1.1. Navigate to the automations section in HireData and click \[Create New Automation]
### 1.2. Select the "Log email in Carerix" template
## Step 2: Add a trigger
### 2.1. Review the app connection
It will be automatically selected, but we recommend making sure it's the correct one in case you have multiple connections with Carerix.
### 2.2. Select object
The \[Message] object will also be automatically configured, but this can be edited when you click the \[Edit] button. Here are the other object options we support in this case:
### 2.3. Set a trigger
Set the trigger to \[Message: Sent] to capture emails as soon as they are sent.
### 2.4. Add filters (optional)
Adding a filter will result in better segmentation depending on your needs. For this example, we want to filter out all messages that are sent via other channels, so only message that are sent via email will be added to Carerix.
## Step 3: Set up the \[Add Email to Carerix] task
This task is a part of the automation template where you can fill in the required fields to ensure the email data is logged correctly:
### 3.1. Select the object you would like to create in Carerix, e.g. email, note, etc.
You can select any of these objects to be added to your app:
* **Appointment:** To schedule meetings or interviews
* **Candidate:** To add a new candidate to the system
* **Email:** To log email communications
* **Match:** To connect candidates with job opportunities
* **Note:** To record conversation details or observations
* **Task:** For follow-up actions or to-do items
### 3.2. Select the sender and the recipient email addresses to log in Carerix
### 3.3. Then ensure the correct email content is recorded
* Subject
* Body
### 3.4. Set the status to any of the following options depending on the emails you would like to log
### 3.5. Add a Send On condition
For example, use \[Message: Sent At] to log the timestamp of the email:
## Step 5: Save and activate
Click \[Save Task] to finalise the setup:
Finally, click \[Activate] to go live:
Once activated, this automation ensures that every email sent is automatically recorded in Carerix, allowing users to maintain a complete communication history. This improves tracking, transparency, and collaboration across teams.
# Logging WhatsApp conversations in Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/logging-whatsapp-conversations-in-carerix-with-hiredata
Automatically log completed WhatsApp conversations from HireData into Carerix, so every candidate and client interaction stays visible across your team.
This guide shows you how to log WhatsApp conversations from HireData to Carerix. Logging ensures every conversation is recorded in Carerix, making it easier to track interactions with clients and candidates. Read on to set up an automation that logs WhatsApp communication into Carerix.
## Step 1: Create a new automation
By integrating HireData with Carerix, you can automatically create WhatsApp conversation records in Carerix whenever a conversation is completed. The automation captures relevant details such as sender, recipient, subject, body content, and when the conversation has started or ended, ensuring that every conversation is properly logged.
## 1.1. Navigate to the automations section in HireData and click \[Create New Automation]
## 1.2. Select the "Log email in Carerix" template
## Step 2: Add a trigger
## 2.1. Review the app connection
It will be automatically selected, but we recommend making sure it's the correct one in case you have multiple connections with Carerix.
## 2.2. Select object
The \[Message] object will be automatically configured, so you will have to change it to \[Conversation] from the \[Edit] button. Here are all the object options we support in this case:
## 2.3. Set a trigger
Set the trigger to the conversation \[Started] or \[Ended] depending on when you want to trigger the automation, e.g. when the conversation has just started or ended.
## Step 3: Set up the \[Add X to Carerix] task
This task is a part of the automation template where you can select an object and fill in the required fields to ensure the conversation data is logged correctly in Carerix.
You can select any of these objects to be added to your app:
* **Appointment:** To schedule meetings or interviews
* **Candidate:** To add a new candidate to the system
* **Email:** To log email communications
* **Match:** To connect candidates with job opportunities
* **Note:** To record conversation details or observations
* **Task:** For follow-up actions or to-do items
## Step 5: Save and activate
Click \[Save Task] to finalise the setup and activate the automation\*\*.\*\*
Once activated, this automation ensures that every WhatsApp conversation (started or ended) is automatically recorded in Carerix, allowing users to maintain a complete communication history. This improves tracking, transparency, and collaboration across teams.
# Manually sync Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/manually-sync-carerix-with-hiredata
Trigger a manual sync between Carerix and HireData to refresh objects, fields, and statuses so your automations always run against up-to-date data.
Follow the instructions below to manually sync objects, statuses, and users between your Carerix account and HireData. This lets you use a candidate status, custom field, or match stage you just created or updated in Carerix, without waiting for the daily sync.
To do that, you should first [connect your Carerix](/apps/carerix/connect-with-carerix) account with HireData.
Once the connection is established, HireData automatically schedules a sync to import the users' data from Carerix. That is required so the users can automatically send different types of communication through the platform. HireData then schedules daily resyncs in case you make any changes in your Carerix profile.
However, you can also manually sync when, for instance, you want to see the changes you have made in your Carerix environment reflected in your HireData profile right away. Here is how to do it:
## Step 1: Navigate to the Settings page
Log in to your HireData account and open the Settings page via the \[Settings] button above your name.
## Step 2: Open the apps menu
## Step 3: Select the Carerix app
You can open the Carerix app either by clicking the name or the \[View app] button.
## Step 4: Sync the data
Click the \[Sync] button (the two arrows in a circular motion) located at the end of the company's connection. After you have clicked it, you will see the progress of the syncing.
## Pro tip
When you click the \[Timeline] button (the first of the four buttons), you can see what has been synced.
***
## Video guide
# Carerix integration overview
Source: https://help.hiredata.com/apps/carerix/overview
Learn what the HireData Carerix integration syncs, which recruitment automations it supports, and how to get started connecting your Carerix account.
Connect Carerix to HireData to turn changes in your recruitment database into automated communication, follow-up, and data-management workflows. HireData listens for Carerix events, applies your conditions, and performs the tasks you configure.
## What the integration provides
The Carerix connection makes recruitment data available to your HireData automations, including commonly used candidate, user, contact, match, and job information. You choose which fields and relationships are available so each automation can use the records it needs.
A Carerix event can start an automation when a record is created or updated. Filters can then narrow the audience by stage, status, owner, or another available field.
## What you can automate
Common Carerix workflows include:
* Send personalized email, WhatsApp, or survey messages after a match-stage change
* Schedule recruiter tasks and follow-ups in Carerix
* Add activities or other items to Carerix records
* Update Carerix fields when a workflow reaches a specific outcome
* Log email messages and WhatsApp conversations in Carerix
* Add delays and conditions so communication happens at the right time
The available records and variables depend on the objects, fields, and relationships enabled in your connection.
## Forms inside Carerix
Recruiters do not have to leave Carerix to work with HireData forms. The Carerix RMA adds two tabs:
* **Forms** on a vacancy, where you switch individual questions on or off for that vacancy. It is the same configuration as the **Forms** tab of a vacancy record in HireData, described in [Configuring a form per record](/content/configuring-a-form-per-record).
* **Forms & responses** on a match, where you see what the candidate answered. Open the full details to read every answer, and follow the links to the candidate or the vacancy the response belongs to.
This keeps one form running across every vacancy while each client, and each role, gets the questions it needs.
## How data stays current
HireData performs an initial sync when you connect Carerix and schedules daily resyncs for connection data such as users, objects, fields, and statuses. Run a [manual sync](/apps/carerix/manually-sync-carerix-with-hiredata) when you need a recent Carerix change immediately.
If a field or related record is missing from the automation builder, review [Carerix fields and relationships](/apps/carerix/how-to-enable-carerix-fields-and-relationships-in-your-automations) before syncing again.
## Get started
Install and activate the Carerix RMA from the Marketplace. If you manage multiple tenants, follow the advanced connection method in [Connect with Carerix](/apps/carerix/connect-with-carerix).
Enable only the objects, fields, and relationships your workflows need. This keeps variables relevant and makes automations easier to configure.
Choose a Carerix event, add conditions and tasks, then [test the automation](/automations/how-to-test-an-automation) before activating it.
## Carerix guides
* [Connect with Carerix](/apps/carerix/connect-with-carerix)
* [Allow Carerix cookies in your browser](/apps/carerix/allow-carerix-cookies-in-your-browser)
* [Enable fields and relationships](/apps/carerix/how-to-enable-carerix-fields-and-relationships-in-your-automations)
* [Create a Carerix automation](/apps/carerix/create-a-carerix-automation-in-hiredata)
* [Schedule a task in Carerix](/apps/carerix/schedule-a-task-in-carerix-with-hiredata)
* [Update fields in Carerix](/apps/carerix/update-fields-in-carerix-with-hiredata)
# Schedule a task in Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/schedule-a-task-in-carerix-with-hiredata
Automatically schedule tasks and follow-ups in Carerix through HireData, so recruiters always know what to do next and never miss a candidate action.
This guide shows you how to create a "Schedule task" in Carerix with HireData. Follow the instructions below so you can manage the process yourself. A video tutorial is included at the end for additional support.
You should already have created an automation for Carerix - see how to do this [here](/apps/carerix/create-a-carerix-automation-in-hiredata).
## Step 1: Create a task
Click the \[+] to open the Building Blocks menu, then click \[Task] and finally select the \[Carerix] app. You will see all of the automated tasks that we currently support through Carerix:
* Add Activity or Item
* Update Field(s)
* Schedule task
Select the task you want to create.
## Step 2: Set it up
This guide focuses on creating a "Schedule task". After you click the \[Schedule Task] button, you need to fill in a few fields.
***2.1. Choose the owner of the task***
The first thing you need to do after creating the task is make sure the owner is the same as the owner of the match. To do that, select \[ID] in the \[Match Owner] box and \[Match: Owner (User)] in the \[With] box after that. That way, the task will be assigned to this person.
***2.2. Set a start and a due date***
Depending on when you want the task to start and be completed, you can set a \[Start date] as well as a \[Due Date].
***2.3. Include a subject***
In the \[Subject] area, you can add variables. There are two ways to do that. The first one is to open the variables on the right via the **\{}** button. Then type any keyword of the variable to find it quicker, and simply click it to copy.
The other way to do this is to type "\{\{" followed by the variable's name in the subject field.
For example, if you want to check if the candidate is happy, you need to type "Check if \{\{CandidateFirstName is happy".
***2.4. Write a description***
Write a brief description of the task - this shouldn't be longer than one sentence.
***2.5. Select the status of the task***
It can be:
* To do
* In progress
* Done
* Screening accepted
* Screening declined
***2.6. Add expiration date or a delay***
This is optional, so if you don't want to add them, you can skip this part.
***2.6.1. Setting an expiration date for the task***
***2.6.2. Setting a delay for the task***
***2.7. Match the candidate***
Make sure to match the correct candidate to this task so it also matches the candidate's file in Carerix.
***2.8. Save the task***
Click \[Save Task] at the bottom of the Building Blocks menu.
## Step 3: Review the task
Review the summary of the task in the automation.
***
## Video guide
# Update fields in Carerix with HireData
Source: https://help.hiredata.com/apps/carerix/update-fields-in-carerix-with-hiredata
Use HireData automations to update candidate, vacancy, and contact fields in Carerix automatically, cutting manual admin work for your recruitment team.
This guide shows you how to update one or more fields across different objects in Carerix with HireData. Follow the steps below to learn how to update any field yourself. A video tutorial is included at the end for further guidance.
Before updating the fields in the object, you should have already created an [automation in Carerix](/apps/carerix/create-a-carerix-automation-in-hiredata).
## Step 1: Open the building blocks menu
First, log in to your HireData account and open the automation you want to edit. Then click the plus icon \[+] at the end of the automation to open the Building Blocks menu. You will see it open up on the right side of the screen.
## Step 2: Select the object you want to edit
After you have opened the menu, select \[Task], then \[Carerix], and choose a connection. You will then see all of the tasks that we support. One of them is \[Update Field(s)]. Click it.
At this point, you have to choose the object you want to edit, which can be one of these:
* Appointment
* Candidate
* Company
* Match
* Placement
* Publication
* User
* Vacancy
*For this example, we have selected the candidate:*
## Step 3: Select an identifier
Now you have to select an identifier, which will be used to find the object in the automation. This could be either an ID or a Business/Private email address.
For this guide, use the \[ID] as an identifier and the \[Candidate: ID] as the value to track. In other words, use the Candidate ID to track the candidate you want to update in the automation.
***The displayed values will be different depending on the selected object and identifier.***
## Step 4: Update the fields
Now, you can select all the fields you want to update. You can select as many as you want; use the search bar to find them.
Edit the fields and click the \[Save Task] button at the bottom of the page.
*This is an example of some of the fields you can update:*
## Step 5: Review
Last but not least, review the task pop-up, which will appear at the end of the automation, to ensure everything runs smoothly.
***
## Video guide
# WhatsApp active chats counter in Carerix RMA
Source: https://help.hiredata.com/apps/carerix/whatsapp-active-chats-counter-in-carerix-rma
Learn how the Carerix RMA active chats counter works, what triggers it to go up or down, and what it means for daily recruiter workflows in HireData.
*The active chats counter gives you a real-time view of how many active conversations you currently have. This article explains exactly how the counter works, what triggers it to go up or down, and what it means for your daily workflow.*
The active chats counter is currently only available for RMA users in Carerix.
## What is the active chats counter?
The active chats counter is a live notification badge visible in the left side menu in Carerix, next to your WhatsApp inbox. It shows the number of active conversations assigned to you at any given moment. The counter is personal, so it only reflects conversations that belong to you, the logged-in user.
### What counts as an active chat?
Not every conversation shows up in the counter. A conversation is only included when it meets all of the following:
* It is a WhatsApp conversation
* You are the conversation owner (the logged-in user)
* It contains at least one real message (not a system message, e.g. "Conversation started for X")
* It has not been closed yet
Both conversations handled by you manually and those triggered by an automation are included. A conversation that has ended, been closed, or is waiting with no reply from the candidate's side is not reflected in the counter.
## When does the counter change?
* **Going up** – The counter goes up when a new WhatsApp conversation is opened and assigned to you. As soon as it contains a real message and it's not closed yet, it is added to your count.
* **Going down** – The counter goes down when a conversation is closed. Once a conversation is closed, it is no longer active and is removed from your count.
Opening a conversation to read it does not affect the counter. The count only changes when a conversation is actually closed.
### How often does the counter update?
The counter refreshes automatically every 60 seconds. This means that after a conversation is opened or closed, it may take up to a minute before you see the updated number.
## What should you do when the counter goes up?
The counter is a prompt to take action. Depending on the type of conversation, you can:
* **Read and respond** if the candidate is replying to your manual outreach.
* **Monitor or take over** if the reply came in through an automated flow and the conversation needs a human touch.
* **Respond to an inbound contact** if the message was unprompted and the candidate is already in your Carerix database.
Key things to remember:
* The counter is per user. You only see your own active conversations.
* Both manual and automated conversations count toward the number.
* Inbound messages from registered candidates or contacts are routed to the owner of that record.
* The counter goes down only when an active conversation is closed.
## Video guide
Watch the video walkthrough and log in to your Carerix account to see how it works in your WhatsApp inbox.
# Why is my Carerix not syncing with HireData
Source: https://help.hiredata.com/apps/carerix/why-is-my-carerix-not-syncing-with-hiredata
Troubleshoot common reasons why your Carerix account is not syncing with HireData, from permission errors to connection issues, and how to fix each one.
This guide helps you restore a broken connection between your Carerix environment and HireData. Read on to learn how to identify a connection issue and fix it quickly, so your campaigns keep running without disruption.
## Step 1: Test your Carerix connection with HireData
To test whether your Carerix account and HireData connection have the correct access, you can initiate a [manual sync](/apps/carerix/manually-sync-carerix-with-hiredata) from your account settings.
If you see a "403: Forbidden" message during the sync process, it means that HireData doesn't have the correct access within your Carerix setup. This issue is typically due to missing scopes in the client configuration.
Additionally, if you don't see any match stages or variables loading when creating automation in HireData, then the connection with Carerix is broken.
## Step 2: Fix the connection
To restore the connection, you have to add the missing scopes from Carerix to HireData by following these steps:
***2.1 Log in to your Carerix account***
***2.2. Locate the client***
Navigate to the \[Maintenance] drop-down menu and then open the \[Identity Management] page to find the client that was created during the [initial setup](/apps/carerix/connect-with-carerix).
***2.3 Add the missing scopes***
This will ensure that HireData has the required permissions to access your Carerix environment. You can directly copy the default scopes from here, and then see ["Step 2.2: Setting up a Confidential Client"](/apps/carerix/connect-with-carerix) for more information:
* urn:cx/webhooks:data:manage
* urn:cx/cx5Acl:data:manage
* urn:cx/cx5Wrapper:data:manage
* urn:cx/webhooks:data/webhooks:manage
* urn:cx/webhooks:data/applications:manage
***2.4 Save the changes***
## Step 3: Re-sync Carerix
After updating the client scopes, you can manually sync [Carerix](/apps/carerix/connect-with-carerix) again by following the same steps mentioned earlier for [manually syncing](/apps/carerix/manually-sync-carerix-with-hiredata). If the permissions were correctly updated, you should no longer see the "403: Forbidden" message, and the sync should proceed successfully.
# Custom Apps
Source: https://help.hiredata.com/apps/custom-apps/introduction
Use Custom Apps to connect any tool to HireData through webhooks, describe the data it sends, and turn incoming events into recruitment automations.
A custom app connects HireData to a tool that has no built-in integration, like your own portal, a niche job board, or an internal system. If the tool can send a web request, a custom app can receive it and start your automations.
## What is a custom app?
A custom app is an app you create and control yourself. It consists of:
* **A name, icon, and logo** so your team recognises it across HireData
* **Triggers**: web addresses your other tools send data to
* **An active state** that controls whether incoming data runs automations
When an active trigger receives data, HireData stores it as an [event](/settings/logs/events) and starts every automation connected to that trigger.
## Is this the right feature for me?
Use a custom app when:
* HireData does not have an integration with the tool you want to connect
* You built the tool yourself, or your team controls how it sends data
* The tool supports webhooks, or a developer can add a web request for you
You don't need a custom app when:
* An [integration](/apps/introduction) already exists for your ATS such as Carerix, Salesforce, OTYS, Recruitee, or Vincere
* You only want to send data out of HireData; custom apps receive data
Not sure if your tool can send web requests? Search its help centre for
"webhooks", or ask our team at [support@hiredata.com](mailto:support@hiredata.com).
## Create your custom app
Go to [Settings → Apps](https://app.hiredata.com/settings/apps) and click **Create New App**. Give it a recognisable name and you'll land on its edit page.
Click the app's icon in the header to open **App Icon & Logo**. Both are optional. The icon appears next to your app across HireData, the logo on its page.
Click **Create Trigger** to add your first trigger. The [next article](/apps/custom-apps/set-up-a-trigger) covers this step by step.
## Where you'll see your custom app
Once set up, your custom app behaves like any other app in HireData:
* **Automations** can start from its triggers and use its fields
* **Events** show every request your triggers received
* **Variables** from its fields work in emails, messages, and forms
* **People** can be synced automatically from incoming data
## Activating your app
Your app and each of its triggers have their own active state. Automations only run when both are active.
This lets you prepare and test everything safely: keep the app paused while you build, then activate it when you're ready.
## Next steps
Create a trigger, describe the data it receives, test it, and turn it into automations.
# Set up a trigger
Source: https://help.hiredata.com/apps/custom-apps/set-up-a-trigger
Create a Custom App trigger in HireData, describe the payload it receives, test it with sample data, and use it to build fully custom recruitment automations.
A trigger is a web address your other tool sends data to. This article walks through the trigger page from top to bottom: creating the trigger, describing its fields, testing it, and connecting automations.
If you haven't created a custom app yet, start with the [introduction](/apps/custom-apps/introduction).
## Create a trigger
On your app's edit page, click **Create Trigger**. Name it after the data it will receive, for example "New application" or "Candidate updated".
The trigger opens in its editor. At the top you'll find:
* The trigger's **name** and its **address bar** with the request method
* **Try It** to send a test request
* **Automate This** to create an automation from the trigger
* The **Activate** or **Pause** button
## Choose the method and share the address
Click **Copy address** and paste the address into the tool that will send the data.
The request method tells HireData what kind of request to expect:
| Method | How data is read |
| ---------------- | ------------------------------------------- |
| `POST` (default) | From the request body, as JSON or form data |
| `GET` | From the address's query parameters |
HireData rejects requests with a different method than the one configured.
## Describe the fields you'll receive
The **Fields we receive** list tells HireData what's inside the data, so you can use it in automations and as [variables](/variables/introduction). Each field has:
* **Label**: a readable name, like "Contact: First Name"
* **Key**: the identifier in the data, with dots for nested values, like `contact.firstName`
* **Type**: what kind of value to expect, like text, a number, or a date
There are three ways to build the list:
While the trigger has no fields yet, click **Upload Sample Object** and paste or upload a JSON example of the data you'll send. HireData creates the fields for you and detects emails, phone numbers, dates, and URLs automatically.
While the trigger has no fields yet, any request sent to its address is stored as the sample and mapped into fields automatically. This also works while the trigger is paused, so it's a safe way to map real data from the other tool.
Click **New Field** to add fields one by one with the same field editor used across HireData. This includes AI fields, which generate a value with AI every time data arrives.
Once a trigger has fields, new requests no longer change them. Edit the list
manually or clear it before uploading a new sample.
## Test it with Try It
Click **Try It** in the trigger's header to send a request without leaving HireData:
1. The form is pre-filled with example values based on your fields. Adjust anything you like.
2. Click **Send**.
3. Check the request on the left and the response on the right.
The **Mode** switch above the form chooses how the request is handled:
* **Test** (default): creates a test event and runs your automations in a safe sandbox. You can follow every step and its outcome, but nothing is created, changed, or sent.
* **Live**: sends a real request, exactly as your other tool would.
Test events and their runs show a Test label in the **Events** tab.
## Hand it to your developer
If someone else manages the tool that will send the data, the **Request Examples** at the bottom of the trigger give them everything they need. You can copy:
* **cURL**: a ready-to-run example request for the command line
* **JSON**: an example of the data the trigger expects
* **OpenAPI**: a schema that imports into tools like Postman
* **Copy for LLMs**: a single document describing the trigger, made to paste into an AI assistant that's building the integration for you
Selecting fields first limits the copies to just those fields.
### Sending test requests
You can mark any request as a test by adding a header:
```text theme={null}
X-HireData-Test: true
```
Test requests behave exactly like Try It's Test mode: automations run in a safe sandbox that doesn't create, change, or send anything, and the event shows a Test label in the **Events** tab. Useful while the other tool's integration is still being built.
## Sync people
If the incoming data describes a person, like a candidate or a contact, the **People** section maps it onto person records in HireData:
1. Click **Add Person** and map the fields.
2. Every request to the trigger now syncs that person automatically.
3. Automations using the trigger can use the person directly, for example as the receiver of an email, without mapping fields again.
Remove all people to stop syncing.
## Turn it into automations
Click **Automate This** in the trigger's header to create a draft automation that starts whenever the trigger receives data. You can configure its steps right after.
The trigger's tabs show everything it does in one place:
* **Automations**: the automations connected to this trigger, with bulk activate, pause, duplicate, and delete
* **Events**: every request the trigger received
* **Runs**: the automation runs those events started
* **Tasks**: the individual tasks those runs executed
## How requests are handled
A quick reference for when something doesn't behave as expected:
1. The request method must match the trigger's configured method, otherwise it's rejected.
2. Every valid request is stored as an event, even while the app or trigger is paused. You'll always see it in the **Events** tab.
3. Automations only run when both the app and the trigger are active. If nothing happens, check those two switches first, then the automation's own status and start filters.
4. Requests with the `X-HireData-Test: true` header are stored as test events and run automations in a sandbox, without live changes.
5. While a trigger has no fields, its first request is used to create them automatically.
### Still need help?
If a trigger isn't behaving as expected, contact our team at [support@hiredata.com](mailto:support@hiredata.com) and include:
* A link to the trigger
* The event, from the **Events** tab
* The automation you expected to run
# Apps
Source: https://help.hiredata.com/apps/introduction
Browse the apps you can connect to HireData, from ATS platforms like Carerix and Otys to messaging tools like WhatsApp and email, all in one place.
HireData connects to your existing stack so you can build automations around the tools your team already relies on. Pick an integration below to get started.
## ATS integrations
Sync candidates, publications, and activities between Carerix and HireData.
Push and pull records between Salesforce and HireData automations.
Connect your OTYS environment for automated candidate workflows.
Hook Recruitee into HireData to automate your hiring pipeline.
Sync Vincere data and schedule tasks from HireData automations.
## Messaging
Send and receive WhatsApp messages as part of your automations.
Build branded email templates and send newsletters to your audience.
## Custom
Connect any tool that can send a web request and automate the data it sends.
## Other
Collect survey responses and feed them into your recruitment flows.
# HireData MCP: Connect HireData to your AI assistant
Source: https://help.hiredata.com/apps/mcp/connect-hiredata-to-your-ai-assistant
Connect ChatGPT, Claude, Gemini, or Microsoft Copilot to the official HireData MCP server, authorize your workspaces, and use HireData safely.
*HireData has an official MCP (Model Context Protocol) connection. Any AI assistant that supports MCP can connect to HireData with your own account. It sees only the workspaces you grant and works with the same permissions you have in the app. Every request is verified and recorded in the activity log. This guide shows you how to set up the connection in ChatGPT, Claude, Gemini, and Microsoft Copilot.*
If you use ChatGPT, Codex, or Claude, you can [install the HireData plugin](/apps/mcp/install-hiredata-plugin) to get nine recruitment, diagnostic, and issue-reporting skills together with this MCP connection. Continue with this guide when you want MCP tools only, or use Gemini or another MCP client.
## What you can do once connected
After connecting, your AI assistant can work directly with your HireData workspaces. For example, it can:
* **People** — find, view, create, and update candidates and contacts, including their contact details and labels.
* **Forms** — build and maintain complete forms: fields, answer options, validation, and branching logic.
* **Form responses** — look up submitted answers, including responses to older versions of a form.
* **Email templates** — create branded email templates, translate them, and send test emails.
* **Message templates & conversations** — manage WhatsApp and messaging templates, check their approval status, and view conversation history.
* **Team & invitations** — manage workspace users, roles, and invitations.
* **Statistics** — request usage and performance figures, such as credit usage over any period, email and messaging performance, and automation runs.
* **Knowledge base** — search and read HireData help articles directly from your assistant.
Your assistant can never do more than you can. During sign-in you'll see exactly which permissions apply (up to 14, depending on your role), and within each workspace your own access level applies. Some tools may therefore not be available to you.
## Before you begin
* You need a HireData account with access to at least one workspace.
* The connection URL for all assistants is:
```text theme={null}
https://api.hiredata.com/mcp
```
* Custom connectors require a specific plan on some assistants (see each section below).
## Connect from Claude
Custom connectors are available on all Claude plans (Free, Pro, Max, Team, and Enterprise); free accounts are limited to one custom connector.
### Step 1: Add the HireData connector
1. Open Claude and go to **Settings** > **Connectors** (in the desktop app you'll find Connectors under **Customize**).
2. Click **Add** > **Add custom connector**.
3. Enter the MCP server URL: `https://api.hiredata.com/mcp`
4. Click **Add**. HireData now appears in your connector list.
On Team and Enterprise plans, an organisation owner first adds the connector in **Organization settings** > **Connectors**. After that, each member connects it from their own **Settings** > **Connectors**.
### Step 2: Sign in and authorize
1. Click **\[Connect]**. Your browser opens HireData's consent screen: *"Connect Claude to HireData MCP"*.
2. Check that you're signed in with the right HireData account.
3. Under **Workspace access**, select the workspace(s) you want to grant access to.
4. Under **What Claude can access**, review the permissions. By default all permissions available to you are selected. Click the gear icon to narrow them down.
5. Tick **"I recognise and trust the above URL"** to confirm the redirect back to Claude, and click **\[Authorize]**.
*Expand the permission list to see exactly what you're granting:*
You can revoke this access at any time from your settings.
### Step 3: Choose when Claude needs your approval
Back in **Settings** > **Connectors**, click the HireData connector to open **Tool permissions**. Tools are grouped into **Read-only tools** and **Write/delete tools**, and both default to **Needs approval**.
A common setup: set read-only tools to **Always allow** so Claude can look things up freely, and keep write/delete tools on **Needs approval** so nothing changes in HireData without your explicit OK. You can also set this per individual tool.
### Step 4: Use it in a chat
In a conversation, click the **+** button, choose **Connectors**, and make sure **HireData** is enabled. Then just ask — for example: *"Create a candidate NPS email template in our brand style and send me a test."*
## Connect from ChatGPT
Custom MCP connections are available on ChatGPT paid plans (Plus, Pro, Business, Enterprise, and Edu; not on the free plan).
### Step 1: Add the HireData MCP server
1. Open ChatGPT (desktop app) and go to **Settings** > **Plugins** (under *Integrations*).
2. Open the **MCPs** tab and click **\[+ Add server]**.
3. In *Connect to a custom MCP*, fill in:
* **Name**: `HireData`
* **Type**: **Streamable HTTP**
* **URL**: `https://api.hiredata.com/mcp`
4. Leave the token and header fields empty — HireData uses OAuth sign-in — and click **\[Save]**.
On ChatGPT web, the same feature lives under **Settings** > **Connectors**: click **Advanced**, enable **Developer mode**, and use **Add custom connector** with the URL above.
### Step 2: Sign in to HireData
The first time ChatGPT uses the server you'll be taken to HireData's sign-in and consent screen. Log in, select the workspace(s) you want to grant access to, review the permissions, confirm the redirect URL, and authorize. After that, toggle the HireData server on and its tools are available in your chats.
## Connect from Gemini
The regular Gemini chat app does not support custom MCP connections yet. Google currently offers them in two places:
* **Gemini Spark** (Google AI Ultra): open **Connected Apps** in Spark's settings, add a custom app, and enter the MCP server URL `https://api.hiredata.com/mcp`. You'll be asked to sign in to HireData the first time you use it.
* **Gemini Enterprise**: an administrator adds HireData as a custom MCP server connection in the Gemini Enterprise admin console using the same URL. After that, users sign in with their own HireData account.
Since Google's MCP support is evolving quickly, check Google's documentation for the latest availability on your plan.
## Connect from Microsoft Copilot
The consumer Copilot app does not support custom MCP connections yet. Microsoft currently offers them through Copilot Studio:
1. In **Microsoft Copilot Studio**, open your agent's **Tools** page and choose **Add a tool** > **New tool** > **Model Context Protocol**.
2. Enter a name and description (the agent uses the description to decide when to call HireData), and the server URL: `https://api.hiredata.com/mcp`
3. Choose **OAuth 2.0** authentication with **Dynamic discovery**, create the connection, and add the tool to the agent.
4. Publish the agent; users sign in to HireData with their own account on first use, with the same workspace selection and permissions as other assistants.
Agents built this way can be made available in Microsoft 365 Copilot. Copilot Studio requires appropriate licensing, and MCP connections are subject to your organisation's Power Platform data policies. Check Microsoft's documentation for current availability.
## How access and security work
* **Your permissions, nothing more.** The assistant works with the same rights you have in HireData, and only in the workspaces you selected during sign-in. Every request is re-checked on HireData's side.
* **Audit trail.** Every action your assistant takes is recorded in the activity log, linked to the workspace it ran in.
* **New capabilities need your approval.** When HireData adds new MCP capabilities, your existing connection does not widen automatically. You'll be asked to re-authorize first. No surprises.
* **Safe changes.** Updates are partial (anything your assistant doesn't mention stays unchanged), your assistant can't silently overwrite newer work, and destructive or external-facing actions require explicit confirmation.
* **Disconnect anytime.** Remove the connector in your assistant's settings, or revoke the grant from your HireData settings.
## Troubleshooting
* **403 error during authorization** (*"The provided auth token for the request is different from the session auth token"*): close the authorization tab and click **Connect** in your assistant again to restart the flow. This can happen when an older HireData sign-in session is still open in your browser.
* **Tools don't appear in the chat**: check that the connector is enabled for that conversation (in Claude via the **+** menu > Connectors; in ChatGPT via the server toggle in Settings > Plugins > MCPs).
## Try it out
Some example prompts to get started:
* "Which email templates do we have in HireData, and which ones are missing a Dutch translation?"
* "Set up a GDPR consent form and show me a preview link."
* "Create a candidate NPS form with a 0–10 score question and a follow-up question for scores below 7."
* "How many credits did our workspace use in June and July?"
* "Invite [jane@example.com](mailto:jane@example.com) to our workspace as a user."
# Create your own skill
Source: https://help.hiredata.com/apps/mcp/create-your-own-skill
Turn something you explain repeatedly, like converting an ATS email signature, into a skill your AI assistant applies on its own. Build or record it.
[HireData's skills](/apps/mcp/hiredata-skills) cover the work HireData knows best. The things *you* do the same way every time — your agency's tone of voice, how you rebuild a client's email signature, the checklist you run before a workspace goes live — are the ones worth writing down. A skill is how you do that once instead of explaining it in every conversation.
A skill is a folder with a `SKILL.md` file in it: plain text, no code required. You never have to mention it afterwards. Your assistant checks the description of every skill you have installed, and reads the full instructions whenever your request matches one.
## Is this worth a skill?
Good candidates share three traits:
* **You do it repeatedly.** Once a month is enough; once ever is not.
* **The method is stable.** You would give a new colleague the same instructions today as last year.
* **There is a right answer.** House style, a required order of steps, a format that has to match — things an assistant guesses wrong unless you tell it.
If it's a one-off, just ask for it. A skill you never trigger is clutter.
## Before you begin
Claude has to be allowed to create files for you. That is how it hands you the finished skill. In Claude on the web, click your name in the bottom-left corner and go to **Settings** > **Capabilities**; in the desktop app, the same page sits under **Customize**. Switch on code execution and file creation.
If it is off, Claude writes the skill into the chat but can't give you a file to upload. On a Team or Enterprise plan an Owner controls this in **Organization settings** > **Skills**.
## Route 1: turn a conversation into a skill
This is the easiest route, and it works in any Claude conversation. You have already done the task once with your assistant, which means the method is sitting right there in the chat.
Work through it with your assistant until the result is what you actually want. Correct it as you go — *"no, the icons always go under the phone number"* — because those corrections are the valuable part.
In the same conversation, paste:
```text theme={null}
Turn what we just did into a skill I can reuse.
Write a SKILL.md with a short name in lowercase-with-hyphens, and a
description that says both what the skill does and when to use it —
including the words a colleague of mine would actually use when asking
for this.
In the body, capture the method we followed, the corrections I made along
the way, and one worked example. Leave out anything specific to today's
case, and leave out passwords, tokens and customer data.
Then package it as a zip with the skill folder at the root, and give me
the zip to download.
```
In Claude, go to **Customize** > **Skills**, click **\[Add]**, choose the option to upload a skill file, and pick the zip. In ChatGPT, go to [chatgpt.com/skills](https://chatgpt.com/skills), click **Create**, then **Upload from your computer**.
Skills only load when a conversation starts, so open a new one and ask the way you normally would — not by naming the skill. If your assistant doesn't reach for it, see [when a skill does not trigger](#when-a-skill-does-not-trigger).
### Worked example: an email signature
Rebuilding a client's ATS email signature as a HireData email template is a perfect candidate: same job, different client, every time, and the rules only live in your head.
Do one signature with your assistant. Tell it which parts are fixed and which come from [variables](/variables/introduction), where the logo goes, what happens when a phone number is missing, and which icons your clients use. Then run the prompt above. The next signature starts from your method instead of from scratch.
Icons and logos in an email template have to be hosted somewhere your recipients can reach. Cover that in the skill — where the images come from, and what to do when a client hasn't supplied them — so the skill doesn't stall on it every time.
## Route 2: record yourself doing it
You can record yourself doing the task instead of describing it. Useful when the work spans several screens and is easier to show than to write down.
You need all three: a Mac, a Pro, Max, or Team plan, and Claude's Cowork mode. If **Record a skill** doesn't appear in the **\[+]** menu, you don't have it. Use Route 1 instead.
Before you start: your video and audio aren't kept, only screenshots from the session, stored in the Cowork task. Treat it like a screen share and close anything you wouldn't show a colleague.
Click **\[+]** in the composer and choose **Record a skill**, or go to **Customize** > **Skills**, click **\[Add]**, and choose **Record your screen**.
Work at your normal pace, up to about ten minutes, and say what you're doing and why — *"I always check the brand first, because that decides the sender"*. The reasoning is what makes the skill worth having; the clicks alone aren't.
Claude reviews the recording and proposes a new skill, or an update to one you already have. Read it before saving: a recording picks up details from the one case you demonstrated. Delete anything that won't be true next time.
## Route 3: write it yourself
Sometimes you already know exactly what it should say.
The quickest start is to copy one of HireData's. Open any folder under [github.com/HireData/skills](https://github.com/HireData/skills), read its `SKILL.md`, and use it as the shape for your own. The structure is small:
```text theme={null}
my-skill/
├── SKILL.md
└── references/
└── examples.md
```
`SKILL.md` is a plain text file. Write it in a text editor — not Word — and save it as `SKILL.md`, with no `.txt` or `.docx` on the end. It starts with two required fields between two lines of three dashes, then ordinary text:
```markdown theme={null}
---
name: rebuild-ats-email-signature
description: Rebuild a client's ATS email signature as a HireData email template. Use when someone asks to migrate, convert, or recreate an email signature, or match a client's existing signature layout.
---
# Rebuild an ATS email signature
## Before you begin
- Check which brand the signature belongs to...
## Steps
1. ...
## Example
...
```
Three rules matter:
* **`name`** — lowercase letters, numbers, and hyphens only, up to 64 characters, and it can't contain the words *claude* or *anthropic*.
* **`description`** — the only part your assistant reads before deciding whether the skill applies. Say **what it does and when to use it**, in the words your colleagues actually use, and keep it under 200 characters.
* **`references/`** — put anything long here: field lists, examples, edge cases. Link to it from `SKILL.md`. Your assistant only opens those files when it needs them, which keeps the skill quick.
Zip the `my-skill` folder itself, so that opening the zip shows exactly the folder above and not another folder wrapped around it. Then upload it as in [Route 1](#route-1-turn-a-conversation-into-a-skill), step 3.
Claude's help centre writes this file as `skill.md`. `SKILL.md` is the form used in Anthropic's developer documentation and in HireData's own skills, and both work.
## When a skill does not trigger
Nine times out of ten the problem is the description, not the instructions.
* **Start a new conversation.** Skills load at the start of one.
* **Rewrite the description around the request, not the skill.** "Rebuild a client's ATS email signature as a HireData email template. Use when someone asks to migrate, convert, or recreate a signature" beats "Email signature helper".
* **Add the words people really say.** If your team says "handtekening ombouwen", put that in the description too.
* **Ask your assistant what it saw.** *"Which skills were available to you just now, and why didn't you use the signature one?"* It will usually tell you exactly what's missing.
* **Split it.** One skill per workflow triggers far more reliably than one skill that tries to cover five.
## Share it with your team
A skill you upload yourself is personal. Each colleague uploads their own copy, unless an Owner provisions it for the whole organisation. To hand one over, send the zip.
On Team and Enterprise plans an Owner can provision a skill for everyone: **Organization settings** > **Skills** > **\[+ Add]**, upload the zip, and it appears in every member's **Customize** > **Skills**. Owners can also switch off user-created skills entirely, so if you can't upload one, that is why.
A skill gives your assistant instructions it will follow. Only install skills from people you trust, read one through before enabling it, and never put passwords, API keys, or customer data inside one. Use the [HireData MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) for live data instead.
## Contribute it back to HireData
If your skill would help other HireData users, HireData will publish it. The skills are open source under Apache 2.0.
The easy route: send it to [support@hiredata.com](mailto:support@hiredata.com) with a line about what it does and who it helps, and HireData will take it from there.
Comfortable with GitHub? Open a pull request on [github.com/HireData/skills](https://github.com/HireData/skills) instead. In short: add your folder under `plugins/hiredata/skills/` with a lowercase, hyphenated, preferably verb-led name, a `SKILL.md`, and a one-level-deep `references/` folder; add eval cases to `evals/regression-cases.json` — a normal use, a case with missing or ambiguous data, a safety or invalid-combination case, plus a baseline and candidate result scored against `evals/RUBRIC.md`; and run `python3 scripts/validate_repo.py` before you open the PR. [CONTRIBUTING.md](https://github.com/HireData/skills/blob/main/CONTRIBUTING.md) has the full requirements and the review checklist.
Ten working examples, their references, and the eval cases behind them.
Get HireData's own skills and the MCP connection in one step.
# HireData skills for your AI assistant
Source: https://help.hiredata.com/apps/mcp/hiredata-skills
How the ten HireData skills guide ChatGPT, Codex, and Claude to plan activations, build workflows, diagnose issues, report ROI, and write issue reports.
The [HireData MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) gives your AI assistant HireData's tools. Skills give it the working method behind them: how an experienced HireData consultant would approach the task, what to check in your workspace first, and when to stop and show you a preview instead of creating something you didn't ask for.
HireData currently publishes ten skills: one that plans, four that build, two that diagnose, one that reports on what the automations delivered, one that writes issue reports, and one that supplies the staffing domain knowledge behind the rest.
The skills that build something gather the available context, show you a complete draft or preview, and only create or change something after you approve that exact action. New triggers stay inactive, forms stay unpublished where drafts are supported, and nothing is sent or activated as a side effect. The skills that diagnose read your workspace data, explain what actually happened, and propose a repair. They never apply it on their own.
| Skill | Use it when you want to |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| [Plan an activation](#plan-an-activation) | Turn a recruitment problem into a prioritized, evidence-based automation plan |
| [Create triggers](#create-triggers) | Start an automation at the right moment, with the right filters and population |
| [Create forms](#create-forms) | Capture a decision or signal with the shortest possible form |
| [Create email templates](#create-email-templates) | Write emails with safe variables, modifiers, and bounded AI variables |
| [Create WhatsApp templates](#create-whatsapp-templates) | Design concise WhatsApp messages that pass Meta's template review |
| [Diagnose automations](#diagnose-automations) | Find out why a workflow did not do what you expected, and what to change |
| [Diagnose email performance](#diagnose-email-performance) | Explain a drop in opens, clicks, or deliverability, and act on it |
| [Report automation ROI](#report-automation-roi) | Show what your automations have actually delivered, on measured figures |
| [Write issue reports](#write-issue-reports) | Draft and refine HireData Linear issues using the workflow sources you can access |
| [Apply staffing lifecycle knowledge](#apply-staffing-lifecycle-knowledge) | Have your assistant read recruitment requests the way a recruiter would |
## Plan an activation
Turns a recruitment or staffing problem into a small, prioritized activation plan. The skill establishes your operating context (ATS, staffing model, audiences, channels, current HireData usage) and expresses each problem as a user story. It scores opportunities by reach, frequency, value, data readiness, effort, and risk. It then recommends the smallest coherent first release, normally three to five workflows. Each workflow includes a trigger moment, channel, owner, success measure, and a safe first test.
Try:
* "We lose candidates between application and first interview. Use HireData to propose which automations to implement first. Do not create anything yet."
* "Review our existing templates and automations and rank the highest-impact missing workflow."
* "Build a 30-day activation plan for interview no-show reduction, with success measures."
When you approve a recommendation, this skill hands the workflow to the matching creation skill below.
## Create triggers
Designs automation triggers around the business event and the data your later workflow steps need. The skill inspects your connected apps, objects, fields, and existing triggers, checks for overlapping triggers, and previews the source, timing, timezone, filters in plain language, expected frequency, and duplicate controls before creating anything. New and changed triggers stay **inactive** unless you explicitly ask for activation.
Try:
* "Create a trigger for candidates whose placement ends in 30 days. Show me the filters in plain language first."
* "Our welcome automation fires too often. Diagnose the trigger and propose a narrower configuration."
## Create forms
Creates the shortest form that captures the decision or signal your workflow needs, such as screening, availability, interview feedback, intake, consent, or NPS. The skill won't ask candidates for data HireData already knows from the trigger, person, application, or vacancy. It keeps required fields to a minimum and checks that every branch reaches an appropriate ending. It previews fields, validation, branching, and the submission outcome before creating.
Try:
* "Create a candidate availability form for weekend shifts. Show me the form and branching logic before creating it."
* "Design an interview feedback form for hiring managers that takes under a minute to complete."
## Create email templates
Designs emails around the recipient's context and the next useful action. The skill selects deterministic variables for facts and uses modifiers for formatting and fallbacks. It applies AI variables only for bounded generation with an explicit source, tone, length, and fallback. An AI variable is never allowed to invent dates, salary, legal status, or commitments. You see the complete copy, subject, variables, and CTA destinations before anything is saved. Test emails go only to an address you approve.
Try:
* "Design an application acknowledgement email that uses an AI variable safely. Show me a preview and do not send it."
* "Improve our interview invitation template: check which variables can replace the hard-coded text."
## Create WhatsApp templates
Creates concise WhatsApp templates that are useful in context and likely to pass Meta's current review requirements. The skill reasons explicitly about the Meta category (it won't disguise promotional content as transactional), validates variable order and button targets, plans the response and no-response paths, and reports Meta approval as pending until the platform confirms it. No live message is sent as part of template creation.
Try:
* "Create a WhatsApp template reminding candidates of tomorrow's interview, with a confirm button and a reschedule path."
* "Review our shift-offer template: is the category right, and what would you change before resubmitting to Meta?"
## Diagnose automations
Explains what actually happened to a workflow before anything is changed. Most reports of a "broken" automation turn out to be one of several different situations with different fixes: a trigger that never produced an event, runs that stopped at a filter, a step that errored, a message that was sent but never delivered, runs that started and never finished, or an automation running at a volume nobody intended. The skill separates them using your events, runs, steps, and message data, then states what happened, the evidence for it, how many records it affected, whether it is still happening, and what remains unexplained. It also reports what the volume actually cost. Repairs come with their trade-off, and nothing is changed, paused, activated, or replayed without your approval of that exact change.
Try:
* "This candidate never received our welcome email. Use HireData to find out why."
* "Our onboarding automation shows thousands of cancelled runs. Is that a fault, or normal?"
* "Check whether any of our automations are stuck, or producing far more runs than results."
## Diagnose email performance
Separates "the mail didn't arrive" from "the mail arrived and nobody cared". Those feel identical when you look at a falling open rate, and they have nothing in common. The skill first checks delivery, bounce, complaint, and unsubscribe rates against healthy thresholds, so you know whether the sending itself is at fault. It then strips machine opens — Apple Mail Privacy Protection inflates every headline open rate — and compares human-only engagement per provider and per month, using click-to-open to tell a content problem apart from an inbox placement one. It also catches comparisons that aren't comparisons, such as one-to-one mail measured against a bulk campaign, or a previous system that counted opens differently. Advice comes back in order of expected impact, with what HireData will do separated from what you need to do.
Try:
* "Our open rate dropped since we moved to HireData. What changed?"
* "Mail to Microsoft addresses seems to be blocked. Check the last six months per provider."
* "What are our delivery, bounce, and complaint rates this quarter, and are they healthy?"
## Report automation ROI
Answers "what has this actually given us?" without inventing anything. The skill first establishes the true reporting period from when your automations were created and when they actually ran, rather than accepting a window someone picked. It separates automations that communicate with candidates and contacts — which can be credited with placements — from data-only automations, which are credited with time saved. Every figure comes from measured workspace data, never a model, and where attribution covers less of the period than the automations were live, the skill says so and explains why. You get the customer-facing readout plus an internal note listing the numbers it rejected and the arithmetic that failed.
Try:
* "What have our automations delivered since we went live? Use only measured figures."
* "Build a business review for this workspace ahead of renewal, and tell me which numbers you couldn't stand behind."
## Write issue reports
Turns a bug, customer request, prototype, recording, meeting note, or technical prompt into a structured HireData Linear issue. The skill includes HireData's issue-writing method, templates, refinement guidance, and maintained workflow snapshots. HireData team members can use the live Linear workspace and internal Notion SOPs; approved partners can use the project and Notion pages shared with them. Users without live access still get a complete report with unverified metadata clearly marked.
Installing the skill never grants additional access. Existing HireData, Linear, and Notion permissions determine which sources and live actions are available.
Try:
* "Turn these reproduction steps, screenshot, and automation URL into an intake-ready HireData bug issue. Draft only."
* "Refine this prototype into a product specification, but treat the mock as evidence rather than the final product contract."
* "Use the HireData Notion pages shared with our partner project to improve this issue, and mark inaccessible metadata as unverified."
[Learn how to write better HireData issue reports with AI](/apps/mcp/write-better-hiredata-issue-reports-with-ai).
## Apply staffing lifecycle knowledge
Background knowledge rather than a task you ask for directly. It gives your assistant staffing and ATS domain judgment: who the actors are (candidate, contact, company, recruiter) and who owns each record; how candidates, jobs, matches, publications, talent pools, and placements relate; which stage a match is in and the event that legitimately moves it forward; and what a candidate-driven or job-driven market means for timing, audience, and cadence. Mostly it prevents expensive misreadings — "close the candidate" after an assignment ends means ending the placement, not the person, and a rejected match cannot trigger onboarding. The other skills work without it; it makes them read your request correctly. It supplies reasoning, never workspace facts: stage names, fields, and values are always confirmed against your live workspace.
Try:
* "This placement ends in three weeks. What should happen next for this candidate?"
* "The client hasn't given feedback on our two submissions. What should we send, to whom, and when?"
## Get the skills
The skills are bundled with the HireData MCP connection in the HireData plugin. One install covers both. [Install the HireData plugin](/apps/mcp/install-hiredata-plugin) in ChatGPT, Codex, or Claude. No plugin support on your plan or assistant? [Install the skills with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt) instead.
HireData improves these skills as the product changes and adds new ones, so [keep them up to date](/apps/mcp/keep-hiredata-skills-up-to-date). They are public and open to review at [github.com/HireData/skills](https://github.com/HireData/skills), and you can [create your own](/apps/mcp/create-your-own-skill) for the work only your team does.
Get every skill plus the MCP connection in ChatGPT, Codex, or Claude.
No plugin support? Let your assistant fetch and package the skills for you.
Check your version, update in one step, and hear about new skills.
Capture your own method once, and contribute it back.
# Install the HireData plugin
Source: https://help.hiredata.com/apps/mcp/install-hiredata-plugin
Install the HireData plugin in ChatGPT, Codex, or Claude to add every recruitment, diagnostic, and issue-reporting skill plus the MCP connection.
Installing the HireData plugin does two things in one step:
* It adds [HireData's skills](/apps/mcp/hiredata-skills) — the working method behind HireData's tools, covering activation planning, triggers, forms, email and WhatsApp templates, automation and email diagnostics, ROI reporting, staffing domain knowledge, and actionable Linear issues.
* It sets up HireData's official MCP connection, so your assistant can read and change things in the HireData workspaces you allow.
Nothing is installed inside HireData, and nothing changes in your workspaces until you ask for it. Prefer to skip the plugin? You can [install the skills with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt) instead.
The plugin is currently available as an early-access install from HireData's public GitHub marketplace. It does not appear in OpenAI's universal Plugins Directory yet. In every assistant you add HireData's marketplace first, then install the plugin from it. Use **Settings** > **Plugins** in the ChatGPT and Claude desktop apps, or the commands in the Codex CLI and Claude Code. For Gemini or an MCP-only connection, [connect HireData to your AI assistant](/apps/mcp/connect-hiredata-to-your-ai-assistant).
## What the plugin adds
The plugin includes every skill HireData publishes — ten today. See [HireData skills for your AI assistant](/apps/mcp/hiredata-skills) for what each one does and example prompts:
* [**Plan an activation**](/apps/mcp/hiredata-skills#plan-an-activation) — connect client problems to high-impact HireData workflows and measurable outcomes.
* [**Create triggers**](/apps/mcp/hiredata-skills#create-triggers) — choose the right event, timing, filters, and relationships before creating a trigger.
* [**Create forms**](/apps/mcp/hiredata-skills#create-forms) — design concise forms with validation, branching, and a clear next step.
* [**Create email templates**](/apps/mcp/hiredata-skills#create-email-templates) — use variables, modifiers, and bounded AI variables safely.
* [**Create WhatsApp templates**](/apps/mcp/hiredata-skills#create-whatsapp-templates) — design concise, contextual templates with appropriate category reasoning and follow-up paths.
* [**Diagnose automations**](/apps/mcp/hiredata-skills#diagnose-automations) — find out why a workflow did not run, send, or finish as expected, and get a repair with its trade-off.
* [**Diagnose email performance**](/apps/mcp/hiredata-skills#diagnose-email-performance) — explain a drop in opens, clicks, or deliverability, and what to do about it.
* [**Report automation ROI**](/apps/mcp/hiredata-skills#report-automation-roi) — report what automations have actually delivered over the period they have genuinely been running.
* [**Write issue reports**](/apps/mcp/write-better-hiredata-issue-reports-with-ai) — draft and refine HireData Linear issues using the internal or partner workflow sources you can access.
* [**Apply staffing lifecycle knowledge**](/apps/mcp/hiredata-skills#apply-staffing-lifecycle-knowledge) — read recruitment requests correctly: a person, an application, and a placement are not the same thing.
The plugin also configures the existing remote HireData MCP connection at `https://api.hiredata.com/mcp`. It does not bundle or deploy a separate MCP server.
| Installation | What you get | Use it when |
| ----------------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| [HireData plugin](#install-the-plugin-in-chatgpt) | Every HireData skill and the MCP connection, updated from one button | You use ChatGPT desktop, Codex, or Claude and want both HireData knowledge and tools |
| [Skills with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt) | The skills you pick, saved by hand, and no automatic updates | Your assistant has no plugin support, or your organisation blocks the marketplace |
| [MCP only](/apps/mcp/connect-hiredata-to-your-ai-assistant) | Live HireData tools without the skills | You use Gemini, ChatGPT on the web, another MCP client, or only need tool access |
## Before you begin
You need:
* A HireData account with access to at least one workspace.
* For ChatGPT: the desktop app, or the Codex CLI with `codex plugin` support. ChatGPT on the web cannot install the plugin. See the note below.
* For Claude: the desktop app, Claude web, or Claude Code in a terminal.
* Permission to add Git marketplaces and MCP connections. Your organisation's AI administrator may restrict these features.
The `codex plugin` and `/plugin` commands below are CLI commands. They do not work in the ChatGPT or Claude desktop apps. Add the marketplace from **Settings** > **Plugins** in those apps instead.
## Install the plugin in ChatGPT
### ChatGPT desktop app
Open **Settings** > **Plugins**, click **\[Add]**, then choose **Add a marketplace**.
In **Add plugin marketplace**, enter `HireData/skills` in the **Source** field and click **\[Add marketplace]**. Leave **Git ref** and **Sparse paths** empty. Their greyed-out text is placeholder guidance, not a value you need to set. This adds HireData's public GitHub repository as a marketplace; you do not need to clone it.
**HireData** now appears under the **HireData Skills** marketplace. Click **\[Install]**.
Complete the sign-in flow when prompted. Select the workspace or workspaces the assistant may use, review the requested permissions, and click **\[Authorize]**.
The assistant receives only the workspace access you select and works with your existing HireData permissions. See [how HireData access and security work](/apps/mcp/connect-hiredata-to-your-ai-assistant#how-access-and-security-work).
Installed skills and tools load when you start a new conversation. They do not appear retroactively in an existing one. Then [verify it works](#verify-it-works).
ChatGPT on the web cannot install the plugin: it cannot add a marketplace, and it does not show plugins you installed in the desktop app, so HireData will not appear there after a desktop install. Use the desktop app for the full plugin. On the web you can still upload skills from your computer, and [add HireData as a custom MCP server](/apps/mcp/connect-hiredata-to-your-ai-assistant) with Developer mode enabled.
### Codex CLI
Open a terminal and run:
```bash theme={null}
codex plugin marketplace add HireData/skills
```
This adds HireData's public GitHub repository as the `hiredata-skills` marketplace. You do not need to clone the repository.
Run:
```bash theme={null}
codex plugin add hiredata@hiredata-skills
```
Follow any setup prompt shown by Codex. The plugin source is public at [github.com/HireData/skills](https://github.com/HireData/skills).
Installed skills and tools load when you start a new Codex session. They do not appear retroactively in an existing one.
When prompted, sign in to HireData. Select the workspace or workspaces the assistant may use, review the requested permissions, and click **Authorize**.
The assistant receives only the workspace access you select and works with your existing HireData permissions. See [how HireData access and security work](/apps/mcp/connect-hiredata-to-your-ai-assistant#how-access-and-security-work).
Check the installed plugin from the terminal:
```bash theme={null}
codex plugin list --marketplace hiredata-skills
```
Then [verify it works](#verify-it-works) in a new session.
## Install the plugin in Claude
Installing the plugin also configures the HireData MCP connection, so you don't need to set up a separate connector.
### Claude desktop app and web
Open **Settings** > **Plugins**, click **\[Add]**, then choose **Add marketplace**. On a personal Claude plan, Claude first asks where to add from. Choose **Add from a repository** rather than **Browse Anthropic sources**.
Type `HireData/skills` into the **URL** field, then click **Use "HireData/skills"** or press Enter. This adds HireData's public GitHub repository as a marketplace; you do not need to clone it.
Claude shows a warning that marketplace plugins are not controlled or verified by Anthropic. HireData publishes this plugin, and its source is public at [github.com/HireData/skills](https://github.com/HireData/skills).
**HireData** appears under the **skills** marketplace on the **Personal** tab. Click the **\[+]** on its card, or open the card and click **\[Install]**.
Sign in to HireData when prompted on first use. Select the workspace or workspaces Claude may use, review the requested permissions, and click **\[Authorize]**.
Claude receives only the workspace access you select and works with your existing HireData permissions. See [how HireData access and security work](/apps/mcp/connect-hiredata-to-your-ai-assistant#how-access-and-security-work).
Installed skills and tools load when you start a new conversation. They do not appear retroactively in an existing one. Then [verify it works](#verify-it-works).
### Claude Code
The `/plugin` commands work in Claude Code in a terminal. Run:
```bash theme={null}
/plugin marketplace add HireData/skills
/plugin install hiredata@hiredata-skills
```
Sign in to HireData when prompted on first use, select the allowed workspaces, and authorize. Start a new conversation before testing. Skills are namespaced as `/hiredata:hiredata-plan-activation` and so on.
### Claude Team and Enterprise
Owners can distribute the plugin through the organisation catalog instead of having each member add the marketplace:
Open **Organization settings** > **Plugins** and add a GitHub-synced marketplace with the repository `HireData/skills`. The initial sync runs automatically, and later plugin releases sync from the repository's default branch.
Alternatively, add a custom marketplace and upload the plugin as a ZIP file (the `plugins/hiredata` directory from the repository). Use this when your organisation prefers not to sync from GitHub; note that manual uploads do not receive automatic updates.
Set the HireData plugin's installation preference, for example **Available for install** or **Installed by default**.
Members open **Settings** > **Plugins**, install **HireData**, and complete the HireData sign-in on first use. They do not need to add the marketplace themselves. The plugin then works in Claude web chat, the Claude desktop app, and Cowork sessions. If the Owner set the plugin to **Installed by default**, members skip this step entirely.
## Verify it works
Start a new conversation and try one of these requests:
* "Use HireData to review our existing templates and rank the highest-impact missing workflow. Do not create anything yet."
* "Use HireData to design an application acknowledgement email that uses an AI variable safely. Show me a preview and do not send it."
* "Use HireData to create a candidate availability form. Show me the form and branching logic before creating it."
* "Use HireData to turn these reproduction steps and screenshots into an issue report. Draft only."
If your assistant asks you to sign in to HireData at this point, that is expected. The connection authorizes on first use.
## Install the skills with a prompt
Can't install the plugin — no plugin support on your plan, or your organisation blocks the marketplace? The skills are plain, public files, so your assistant can fetch and package them for you instead, and you save them yourself.
[Install the HireData skills with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt) has the copy-paste prompt for Claude, ChatGPT, and any other assistant, plus the full list of skill folder names. Pair it with the [HireData MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) to get the same behaviour as the full plugin.
## Update the plugin
* **ChatGPT or Claude desktop app:** update the plugin from **Settings** > **Plugins**.
* **Codex CLI:** run `codex plugin marketplace upgrade hiredata-skills`, then run `/plugins` to apply the update.
* **Claude Code:** run `/plugin marketplace update hiredata-skills` in a terminal.
* **Claude Team and Enterprise:** GitHub-synced marketplaces update automatically when HireData publishes a new plugin version. Manually uploaded ZIPs require a new upload.
Start a new conversation after updating so your assistant loads the new skills and configuration.
HireData adds and improves skills over time. [Keep your HireData skills up to date](/apps/mcp/keep-hiredata-skills-up-to-date) shows how to check which version you have, and how to be told when something new arrives instead of remembering to look.
## Troubleshooting
* **A `/plugin` or `codex plugin` command does nothing:** these are CLI commands, and only work in Claude Code and the Codex CLI. In the ChatGPT and Claude desktop apps, add the marketplace from **Settings** > **Plugins**.
* **HireData does not appear in ChatGPT on the web after a desktop install:** the web app cannot add marketplaces and does not show plugins installed in the desktop app. Use the desktop app, or [add HireData as a custom MCP server](/apps/mcp/connect-hiredata-to-your-ai-assistant) on the web for tools without the skills.
* **The `codex plugin` command is unavailable:** update the Codex CLI, then try again.
* **The HireData marketplace does not appear in the Codex CLI:** run `codex plugin marketplace list`, then start a new session.
* **The plugin is installed but its skills do not appear:** enable HireData in **Settings** > **Plugins** and start a new conversation.
* **HireData does not ask you to sign in:** start a new conversation with the plugin enabled and make a request that needs HireData workspace data.
* **Your organisation blocks the installation:** ask your ChatGPT or Claude administrator to allow the HireData marketplace and MCP connection.
* **The skills do not trigger in Claude:** confirm the plugin shows as installed (**Settings** > **Plugins**, or `/plugin` in Claude Code) and start a new conversation.
* **You only need the MCP tools or use another assistant:** follow the [manual MCP connection guide](/apps/mcp/connect-hiredata-to-your-ai-assistant).
## Remove the plugin
* **ChatGPT or Claude desktop app:** remove the plugin from **Settings** > **Plugins**.
* **Codex CLI:** run `codex plugin remove hiredata@hiredata-skills`.
* **Claude Code:** run `/plugin uninstall hiredata@hiredata-skills` in a terminal.
* **Claude Team and Enterprise:** remove the plugin from **Settings** > **Plugins**, or ask an Owner to change its availability in **Organization settings** > **Plugins**. Plugins marked **Required** by an Owner cannot be removed by members.
Removing the plugin does not necessarily revoke an existing HireData OAuth grant. Disconnect HireData in your AI assistant or revoke the grant in HireData settings when you also want to remove access.
No plugin support, or a blocked marketplace? Let your assistant fetch the skills instead.
Check your version, update in one step, and get told when new skills arrive.
Capture your own method once, and contribute it back to the skills repository.
Connect Gemini, or any MCP-compatible assistant, without installing the skills.
# Install the HireData skills with a prompt
Source: https://help.hiredata.com/apps/mcp/install-hiredata-skills-with-a-prompt
Use a copy-paste prompt to have your AI assistant fetch and package the HireData skills when you cannot install the plugin in your assistant.
A HireData skill is a set of written instructions that teaches your AI assistant how HireData does one job — writing an email template, diagnosing an automation, planning an activation. There are two ways to get [HireData's skills](/apps/mcp/hiredata-skills) into your assistant. This page covers the manual one: you paste a prompt, your assistant fetches the instructions and hands you a file, and you upload that file yourself. About two minutes per skill.
If you can [install the plugin](/apps/mcp/install-hiredata-plugin), do that instead. It is one step, it includes the HireData connection, and it updates from one button.
| Route | What happens | Choose it when |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| [Install the plugin](/apps/mcp/install-hiredata-plugin) | Your assistant gets every HireData skill **and** the HireData MCP connection in one step, and both update from one button later | Your assistant supports plugins and your organisation allows them. **Start here.** |
| Install with a prompt (this page) | Your assistant fetches the skill files; you save the ones you want. Nothing updates by itself | Your assistant has no plugin support, your organisation blocks the marketplace, or you only want one or two skills |
A skill teaches your assistant how HireData does a job. It does not let your assistant see or change anything in your workspaces. For that you also need the [HireData MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) — the link between your assistant and your HireData account. Set up both, and you have what the plugin gives you.
## Install skills in Claude
### Install one skill
Start with one. Once you have done it once, the rest work exactly the same way.
In Claude on the web, click your name in the bottom-left corner and go to **Settings** > **Capabilities**. In the Claude desktop app, the same page sits under **Customize**.
Switch on code execution and file creation. Claude uses this to build the file you are about to download; if it is off, Claude will tell you it cannot create files.
No switch there, or it won't stay on? You are probably on a Team or Enterprise plan, where an Owner controls it in **Organization settings** > **Skills**. Both **Code execution and file creation** and **Skills** have to be on. Ask them to switch it on, or to [install the plugin](/apps/mcp/install-hiredata-plugin#claude-team-and-enterprise) for everyone, which is less work for both of you.
Start a **new** conversation and paste the prompt below. It does not install anything yet. It asks Claude to build one file, which you upload in the next step.
This prompt builds the **Create email templates** skill. To build a different one, replace `hiredata-create-email-templates` with another folder name from [the skill list further down this page](#the-skill-folder-names). It appears twice — once in the first line, once in the web address — so change both.
```text theme={null}
Please package the HireData "hiredata-create-email-templates" skill for me.
1. Fetch https://raw.githubusercontent.com/HireData/skills/main/plugins/hiredata/skills/hiredata-create-email-templates/SKILL.md
2. Fetch every file that SKILL.md refers to in its references/ folder, from that same folder in the repository.
3. Rebuild the folder exactly as it is in the repository: SKILL.md at the top, the references/ folder beside it.
4. Zip it so the skill folder itself sits at the root of the zip, and give me the zip to download.
```
Claude replies with a zip file. Download it. It lands in your Downloads folder.
In Claude, go to **Customize** > **Skills**, click **\[Add]**, choose the option to upload a skill file, and pick the zip you just downloaded.
The skill now appears in your list, switched on.
Start another **new** conversation — skills only load when a conversation starts — and ask something the skill is for, for example: *"Design an application acknowledgement email for candidates. Show me a preview and do not send anything."*
Claude names the skill as it starts working. If it doesn't, see [Troubleshooting](#troubleshooting).
### Install all of them at once
One prompt builds all of them. It fetches every skill file in the repository, which takes a few minutes. Leave the tab open until it finishes.
```text theme={null}
Please package all HireData skills for me.
The skills live at https://github.com/HireData/skills in plugins/hiredata/skills.
Read that folder to find the current skill names — do not assume you know them.
For each skill, fetch its SKILL.md plus every file it refers to in its
references/ folder, and rebuild the folder exactly as it is in the repository.
Then give me one zip per skill, each with that skill's folder at the root of
the zip, so I can upload them one by one.
```
Upload each zip through **Customize** > **Skills** > **\[Add]**.
**Using Claude's Cowork mode?** Ask for `.skill` files instead of zips — *"send them to me as .skill files"* — and Claude delivers files you can save to your account straight from the session.
## Install a skill in ChatGPT
Custom skills in ChatGPT need a Business, Enterprise, Healthcare, or Edu plan. On Enterprise and Edu an administrator has to switch skills on first. Personal skills do not sync between the desktop app and the web, so add them in the one you use every day.
Use the same prompt as in [Install one skill](#install-one-skill), step 2. ChatGPT returns a zip to download.
Go to [chatgpt.com/skills](https://chatgpt.com/skills) (or **Skills** in the desktop app), click **Create**, then **Upload from your computer**, and pick the zip.
ChatGPT scans an uploaded skill before it becomes active, so it may be a minute before you can use it.
Start a new chat and ask something the skill is for.
If you use the ChatGPT desktop app, [installing the plugin](/apps/mcp/install-hiredata-plugin#install-the-plugin-in-chatgpt) is quicker and also sets up the MCP connection.
## Use a skill once, without installing it
Assistants that can't install skills can still follow one for a single task. Nothing is installed. You give the assistant the link each time you want it.
```text theme={null}
Read https://raw.githubusercontent.com/HireData/skills/main/plugins/hiredata/skills/hiredata-plan-activation/SKILL.md
and any files it refers to, follow the method it describes, and help me with:
[describe what you want]
```
This works in Gemini, Microsoft Copilot, ChatGPT on the web, or any assistant that can read a public web page. Replace `hiredata-plan-activation` with whichever skill fits the task, and pair it with the [HireData MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) so the assistant can also reach your workspace.
## The skill folder names
Use these exactly as written. [HireData skills for your AI assistant](/apps/mcp/hiredata-skills) explains what each one does.
| Skill | Folder name |
| ---------------------------------- | ------------------------------------- |
| Plan an activation | `hiredata-plan-activation` |
| Create triggers | `hiredata-create-triggers` |
| Create forms | `hiredata-create-forms` |
| Create email templates | `hiredata-create-email-templates` |
| Create WhatsApp templates | `hiredata-create-whatsapp-templates` |
| Diagnose automations | `hiredata-diagnose-automations` |
| Diagnose email performance | `hiredata-diagnose-email-performance` |
| Report automation ROI | `hiredata-report-automation-roi` |
| Write issue reports | `hiredata-create-linear-issues` |
| Apply staffing lifecycle knowledge | `hiredata-map-staffing-lifecycle` |
HireData adds skills over time, so check [the repository](https://github.com/HireData/skills) for today's list, or use the [check prompt](/apps/mcp/keep-hiredata-skills-up-to-date#check-whether-you-are-out-of-date).
## Troubleshooting
* **Your assistant says it can't reach the files.** It needs permission to fetch web pages — web search and fetching in **Settings** > **Capabilities**. If your organisation has switched that off, the plugin route is your only option; ask your AI administrator to allow the HireData marketplace instead.
* **The upload is rejected.** Open the zip and check it looks like this — the skill folder first, `SKILL.md` inside it:
```text theme={null}
hiredata-create-email-templates/
├── SKILL.md
└── references/
```
If a second folder is wrapped around that, paste this to your assistant: *"Rebuild the zip so the skill folder itself is at the top level, with nothing wrapped around it."*
* **The skill uploads but never triggers.** Skills load when a conversation starts. Open a new conversation and try again, and check the skill is switched on in **Customize** > **Skills**.
* **You can't upload skills at all.** On Team and Enterprise plans an Owner can switch off user-created skills. Ask them to distribute [the plugin](/apps/mcp/install-hiredata-plugin#claude-team-and-enterprise) through your organisation catalogue instead.
* **Nothing happens in your HireData workspace.** Skills describe the method; the [MCP connection](/apps/mcp/connect-hiredata-to-your-ai-assistant) provides the tools. Set up both.
Skills installed this way do not update themselves. Here is how to check.
One step for every skill plus the MCP connection, and one button to update.
# Keep your HireData skills up to date
Source: https://help.hiredata.com/apps/mcp/keep-hiredata-skills-up-to-date
Check which HireData skill version you have, update the plugin, refresh manually installed skills, and get notified when new skills arrive.
HireData improves its skills as the product changes, and publishes new ones. Your assistant keeps using the copy it has until you update it, so skills you installed six months ago still give six-month-old advice, and won't include skills that didn't exist yet.
Checking once a month is enough. What you have to do depends on how the skills got there.
## Which one are you?
If you don't remember how your skills got installed, check:
* Open **Customize** > **Plugins** in Claude, or **Settings** > **Plugins** in ChatGPT. If **HireData** is listed there, you have the plugin. Use [Update the plugin](#update-the-plugin).
* If that list is empty but HireData skills appear under **Customize** > **Skills**, you [installed them with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt). Use [Refresh skills you installed with a prompt](#refresh-skills-you-installed-with-a-prompt).
* If your organisation installed HireData for you, updates usually arrive on their own. If they stop, ask whoever set it up.
* If you have both, do both.
## Check whether you are out of date
The quickest check is to ask. First switch the HireData plugin — or your HireData skills — on for the conversation: your assistant can only see what is loaded in the chat you are in. Then paste this. It only reads and reports; it changes nothing.
```text theme={null}
Check whether my HireData skills are up to date.
1. Fetch https://raw.githubusercontent.com/HireData/skills/main/.claude-plugin/marketplace.json
and tell me the published version number.
2. Look at https://github.com/HireData/skills in plugins/hiredata/skills and list
every skill folder that exists there today.
3. Compare that list with the HireData skills you currently have available to you
in this conversation.
4. Report three things: which HireData skills I already have, which ones exist but
I don't have, and the published version number.
Do not change or install anything — just report.
```
Your plugin's version number is also shown wherever you manage it: on the plugin card in **Customize** > **Plugins**, with `/plugin` in Claude Code, or with `codex plugin list --marketplace hiredata-skills` in the Codex CLI. The latest published number is the `version` field near the top of [HireData's marketplace file](https://github.com/HireData/skills/blob/main/.claude-plugin/marketplace.json) on GitHub. If the two match, you are up to date.
## Update the plugin
Do the step for your assistant, **then start a new conversation.** Skills and tools load when a conversation starts, so a chat that was already open keeps using the old version.
| Assistant | What to do |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Claude desktop app or web** | **Customize** > **Plugins**, click **HireData**, and update it. Nothing to click means you are already current |
| **ChatGPT desktop app** | **Settings** > **Plugins**, open the HireData plugin, and update it |
| **Claude Code** | Run `/plugin marketplace update hiredata-skills` |
| **Codex CLI** | Run `codex plugin marketplace upgrade hiredata-skills`, then use `/plugins` to check the plugin is enabled |
| **Claude Team or Enterprise** | Nothing, if an Owner added the marketplace synced from GitHub. New versions arrive on their own. A manually uploaded ZIP needs a new upload |
Your assistant only receives an update when HireData raises the version number. If you click update and nothing happens, you already have the newest version.
## Refresh skills you installed with a prompt
A skill you [installed with a prompt](/apps/mcp/install-hiredata-skills-with-a-prompt) is a fixed copy of the instructions as they were on the day you installed it. To refresh one:
Re-run the install prompt for that skill. Your assistant fetches the current version and gives you a new zip.
In Claude, go to **Customize** > **Skills** and delete the old skill. In ChatGPT, remove it from your skills list. Skip this and you end up with two versions of the same skill.
Upload it the same way you did the first time: **Customize** > **Skills** > **\[Add]**. Then start a new conversation. The skill you just uploaded is not available in any chat that was already open.
## Get told when something changes
If you'd rather not remember to check, have something tell you.
**Claude's Cowork mode can run a task on a schedule.** If you have Cowork, paste the prompt below into a session once and it watches the skills library for you. Not sure whether you have it? Then you don't — use the GitHub option underneath.
```text theme={null}
Set up a weekly task that watches the HireData skills library for me.
Every Monday morning:
1. Look at https://github.com/HireData/skills and list every skill folder under
plugins/hiredata/skills, plus the version number in
.claude-plugin/marketplace.json.
2. Compare that with the HireData skills available to you in the session, and
with what the previous run of this task reported.
3. Tell me only about differences: skills that are new, skills that changed
since the last check, and a version number that has moved. One line each on
what changed, with the link to the change on GitHub.
4. If nothing changed, say so in a single line and do not notify me.
```
The task tells you what moved and where; you still click update on the plugin, or re-run the install prompt, yourself. Add *"package anything new as a .skill file and send it to me"* and it hands you the files ready to save.
**Or follow the repository.** Open [github.com/HireData/skills](https://github.com/HireData/skills), click **Watch**, and choose what you want to hear about. You need a GitHub account. If you use an RSS reader, `https://github.com/HireData/skills/commits/main.atom` gives you the same changes as a feed. New skills are also announced with other product news at [hiredata.com](https://www.hiredata.com/).
## Troubleshooting
* **You updated, but your assistant still behaves the old way.** Start a new conversation. An update never applies to a chat that was already open.
* **A new skill isn't showing up after an update.** Check the plugin is still switched on in **Customize** > **Plugins**, then start a new conversation.
* **Your organisation manages the plugin.** On Team and Enterprise plans, members can't update a plugin an Owner distributes. Ask an Owner to re-sync the marketplace.
* **Updating won't touch skills you made yourself.** Your own skills and HireData's live side by side; updating one leaves the other alone.
Every HireData skill, what it is for, and example prompts.
Turn something you explain over and over into a skill of your own.
# Write better HireData Linear issues with AI
Source: https://help.hiredata.com/apps/mcp/write-better-hiredata-issue-reports-with-ai
Use the HireData Linear Issues skill to turn evidence, requests, prototypes, and technical notes into clear, actionable Linear issues.
Use the **HireData Linear Issues** skill to turn a bug, customer request, prototype, recording, meeting note, or technical prompt into an issue that is complete for its current maturity.
The skill contains HireData's issue-writing method, templates, refinement guidance, and a maintained snapshot of the relevant workflow rules. It supports both HireData team members and approved partners. Access to live Linear issues and Notion pages still depends on the permissions of the connected account.
Installing the skill does not grant access to HireData's Linear workspace, Notion pages, customer data, or projects. It uses only the sources you are already authorized to access.
## Who can use it
| Audience | What the skill does |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| HireData team | Drafts, refines, relates, and—when explicitly requested—creates or updates issues using the live HireData Linear workspace and internal Notion SOPs. |
| Approved partners | Uses the HireData project and Notion pages shared with the partner, plus the bundled guidance. This is useful for joint projects such as an RMA backlog. |
| Users without live workspace access | Produces a complete report for the agreed HireData support or partner channel and marks live metadata, duplicates, and relations as unverified. |
HireData can share selected Notion pages with a partner when closer collaboration is useful. The same skill then follows those shared sources without exposing unrelated internal pages.
## Before you begin
[Install or update the HireData plugin](/apps/mcp/install-hiredata-plugin) and start a new conversation so your assistant loads the latest skill.
Prepare as much of the following evidence as you have:
* The affected user, account, workflow, or object
* The relevant environment and page URL
* Exact reproduction steps for a bug
* What happened and what you expected
* Frequency, impact, and any workaround
* Screenshots, recordings, timestamps, runs, events, or logs
* The original request or conversation
You do not need every item before starting. The skill identifies material gaps without inventing answers.
## Draft before changing Linear
Start with:
```text theme={null}
Use $hiredata-create-linear-issues to turn the evidence below into a
HireData Linear issue. Draft only. Use the HireData and partner sources
I can access, and mark anything that still needs live verification.
[Paste your notes and links here]
```
In Claude Code, the installed skill may appear as `/hiredata:hiredata-create-linear-issues`.
The draft includes:
1. A proposed title
2. The correct route: intake, product specification, implementation, or delivery
3. An honest readiness level
4. A structured description with evidence and source links
5. Missing information and open decisions
6. Duplicate, dependency, and related-work recommendations when they can be verified
7. Proposed metadata only when an approved source supports it
## Example prompts
### Report a bug
```text theme={null}
Turn these reproduction steps, screenshots, and automation URL into an
intake-ready HireData bug issue. Search for duplicates if I have access,
but do not create anything yet.
```
### Refine a feature
```text theme={null}
Refine this prototype and customer feedback into a product specification.
Treat the prototype as evidence, not as the product contract. Separate
reusable HireData behaviour from customer-specific configuration.
```
### Prepare work for engineering
```text theme={null}
Review this issue and its sources. Tell me whether it is ready for
refinement, estimation, or implementation. Do not invent technical
decisions. Draft the changes and summarize what you changed.
```
### Work as an approved partner
```text theme={null}
Use the issue-writing skill and the HireData Notion pages shared with our
project to improve this report. Follow the shared workflow, leave
inaccessible internal metadata unverified, and do not update the live
issue until I approve the draft.
```
### Apply an approved update
```text theme={null}
Update HD-1234 with the agreed draft now. Preserve metadata I did not ask
you to change, then reopen the issue and verify the result.
```
## How the skill treats complex work
For broad or prototype-led features, the skill:
* keeps the issue understandable without opening the prototype;
* separates predetermined behaviour from model-judged behaviour;
* states whether capabilities coexist, are mutually exclusive, or run in order;
* covers or explicitly defers configuration, execution, storage, presentation, reporting, automation, failure handling, regression, and rollout;
* separates reusable product behaviour from customer-specific wiring;
* keeps product specifications and engineering implementation issues distinct when appropriate.
## Review and responsibility
AI-assisted does not mean automatically approved. As the reporter, you remain responsible for facts, evidence, and customer context. HireData's normal Triage, refinement, estimation, and planning process still applies.
Before submitting or approving a live change, check that the issue:
* describes the observable problem or outcome;
* distinguishes facts, decisions, assumptions, and open questions;
* links the original evidence;
* does not invent urgency, ownership, estimates, implementation details, or acceptance criteria;
* uses only sources and actions available within your existing permissions.
## Privacy and security
* Share only the customer and candidate data needed to understand or reproduce the issue.
* Never include credentials, access tokens, secrets, or unrelated personal data.
* Do not paste security vulnerabilities into a public GitHub issue. Contact HireData privately through your normal support channel.
* A public skill source does not make private Notion pages or Linear issues public. Their existing permissions continue to apply.
## Troubleshooting
* **The skill is missing:** update the HireData plugin and start a new conversation.
* **The assistant cannot open a Notion page:** ask HireData whether that page should be shared with your account, or continue using the bundled snapshot and mark the result unverified.
* **The assistant wants to change Linear immediately:** say "Draft only" unless you intend and are authorized to make the live change.
* **A workflow rule looks stale:** ask the assistant to check the canonical shared Notion page before applying metadata.
* **The assistant cannot search Linear:** it can still produce a complete report; duplicate and relationship checks remain unverified.
The skill source is available at [github.com/HireData/skills](https://github.com/HireData/skills/tree/main/plugins/hiredata/skills/hiredata-create-linear-issues).
# Adding images to your emails
Source: https://help.hiredata.com/apps/messaging/emails/adding-images-to-your-emails
Upload images to the HireData Media Library, reuse them across your email templates, and copy an image URL for icons in your email signature.
*Every image in a HireData email comes from the **Media Library**: your logo, a header photo, a background, or the small social icons in your signature. You open the Media Library from any image field in the email editor, upload your file once, and reuse it in every template. Each image also gets its own public URL, which is what you need when a signature or block asks for an image link.*
## Step 1: Open the Media Library
Open an email template in **Settings** > **Emails**, then click any image field in the editor. Select a section and its panel carries **Background image** with a **Choose image** button, and an image block or a signature picture opens the same library.
The Media Library opens as a pop-up with two tabs.
* **Home** is the media stored in your workspace, including everything you or a colleague uploads. It shows the item count, with **Show** and the page numbers at the bottom to work through a long library.
* **Fields** is the images that come from a variable, such as your brand's avatar, banner, and logo, and the sender's photo. These stay dynamic: they follow whichever brand or sender the automation uses when the email is sent.
## Step 2: Upload your image
Click **Upload media** in the top-right corner of the Media Library and select the file from your device. The image appears in the grid straight away and stays available for every other template in your workspace, so you only upload each logo or icon once.
**Which file to upload:**
* Use **PNG with a transparent background** for logos and icons, so they look right on any background colour.
* Choose a **dark version** of your logo. Most email clients use a white background, and a light logo disappears on it.
* Upload icons at roughly **twice the size** you want them displayed (for example 64 x 64 px for a 32 px signature icon) so they stay sharp on high-resolution screens.
* Keep files small (under a few hundred KB). Heavy images slow the email down and can hurt deliverability.
## Step 3: Add a title and alt text
Click an image in the grid to open its details on the right.
* **Title** — the name you and your colleagues use to find the image back. An upload arrives named after the file, so `image.png` is worth renaming.
* **Alt text** — the text shown when the image cannot load, and the text a screen reader reads out. If you leave it empty, HireData falls back to the image title.
Under **More info** you will find the image's **Id** and **Mime type**.
Both boxes are read-only on the **Fields** tab. A picture that comes from a variable takes its title and its alt text from the variable, so an image sourced that way cannot be given alt text of its own. Only an upload on the **Home** tab can.
Many recipients block images by default, and some corporate mail clients never load them at all. Alt text is what they see instead, so write something meaningful — "HireData logo" rather than "image1".
## Step 4: Use the image in your email
With the image selected, click **Add media to field** at the bottom of the details panel. The image is placed in the field you opened the Media Library from, and the pop-up closes.
Save the template and use the preview or a test email to check how the image renders before you use the template in an automation.
## Step 5: Copy the image URL (for signature icons)
Some places ask for an image **link** instead of a file. Social icons in a signature are the usual example. Every image in the Media Library has its own public URL:
1. Open the image in the Media Library.
2. Click the **share** icon in the top-right corner of the details panel.
3. A **URL Copied** confirmation appears. The link is now on your clipboard, and **Open URL** lets you check it in a new tab.
4. Paste the link wherever the image URL is asked for.
This URL is public: anyone who has the link can open the image. Only upload images that you are happy to have on the open internet — no candidate documents, ID scans, or anything else confidential.
## Icons in your email signature
Your signature is part of the email template, so signature images work the same way as any other image:
1. Upload the icons you want to use (for example LinkedIn, Instagram, or a certification badge) via **Upload media**.
2. Click the signature block in the email editor and select the image element you want to fill.
3. Pick the icon from the Media Library and click **Add media to field**, or paste the image URL if the element asks for a link.
Keep signature icons to a maximum of three or four, all the same size, and give each one alt text ("LinkedIn"). A signature full of images looks like a newsletter to spam filters.
Your brand's **logo**, **banner**, and **avatar** do not belong in the signature as uploaded images. Set them once in **Settings** > **Brands**, and every template that uses that brand picks them up automatically. See [Brands](/settings/brands).
## Good to know
* The Media Library is shared across your workspace: an image one colleague uploads is available to everyone building templates.
* Images you add through the **Fields** tab (brand avatar, banner, logo, sender photo) stay dynamic. Change the logo in **Settings** > **Brands** and every email using that brand updates automatically, with no need to touch the templates.
* Always send yourself a test email before putting a template live. Image rendering differs between Outlook, Gmail, and Apple Mail.
***
## Related topics
* [Setting up an email template in HireData](/apps/messaging/emails/setting-up-an-email-template-in-hiredata)
* [Brands](/settings/brands)
* [Image block](/reference/email-builder/blocks/image)
* [Sending an email newsletter to your audience](/apps/messaging/emails/sending-an-email-newsletter-to-your-audience)
* [How to verify a domain in HireData to send emails](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails)
# Sending an email newsletter to your audience
Source: https://help.hiredata.com/apps/messaging/emails/sending-an-email-newsletter-to-your-audience
Send email newsletters to your talent pool from HireData: build the audience, design the template, and schedule the send to keep candidates engaged.
*Sending newsletters to candidates is one of the most common and practical use cases in HireData. Whether you're sharing company updates, promoting events, or delivering curated job opportunities, newsletters help you stay top of mind with your talent pool.*
*With HireData, the entire process—from defining your audience to designing the email and scheduling it—is handled in one place. It's a simple, reliable way to keep your candidates engaged, with complete control and visibility from start to finish.*
## Step 1: Setting up your automation
To begin, navigate to the **Automations** page in HireData and click the \[+ New Automation] button at the top right corner.
Give your automation a clear name, such as "Newsletter". Choose your app, e.g. Carerix and the connection. Then, select the Candidate object and schedule the automation for when you want to send the newsletter (the date can be edited later).
This allows you to decide exactly when the automation runs. For example, you might want the newsletter to go out every Monday at 9:00 am. Set the day and time, and HireData takes care of the rest.
## Step 2: Filtering your audience
Next, you'll want to define which candidates should receive the email. Click the \[+] icon and add a filter **\[Candidate: Groups only has Newsletter/Nieuwsbrief]**.
This ensures that only candidates assigned exclusively to the "Newsletter" group will be included. It's a good way to ensure you're targeting the right audience without overlapping with other groups.
## Step 3: Configuring the Send Email task
### 3.1. Add the Send Email task
With the audience in place, it's time to add your action. Click the \[+] icon, then \[Message], and select the **Send Email** task via HireData.
### 3.2. Select email template
From here, you can select the email template you'd like to send. This might be a formatted newsletter containing product updates, job opportunities, or company news. You can [create the email template](/apps/messaging/emails/setting-up-an-email-template-in-hiredata) for your newsletter in HireData and update it with the new editions.
### 3.3. Select email branding
Select the branding you want to use for your newsletter:
### 3.4. Choose email recipient and sender
Ensure the recipient is set to **Candidate** and select the appropriate sender. You can send from a specific user or use a dynamic sender.
### 3.5. Add email subject line
### 3.6. Preview the email
Then, preview the email, ensuring the content appears exactly as you want it to in recipients' inboxes.
## Step 4: Activating your newsletter automation and reviewing results
Once everything looks good, click the \[Activate] button in the top right corner, and your automation will be live and will run on the schedule you've set.
After it runs, you can monitor performance directly within the automation. You'll see metrics such as the number of emails sent, delivered, bounced, opened, or clicked. This helps you understand how your audience is engaging with your content and adjust your approach over time.
## Best practices
* **Target the right audience**: Use specific filters like "Candidate Group only has Newsletter" to ensure relevance and avoid spamming.
* **Keep content clear and concise**: Focus on providing valuable updates and use short paragraphs, headings, and bullet points to enhance readability.
* **Use a strong subject line**: This is key to getting your email opened. Keep it short, specific, and engaging.
* **Include a clear call to action**: Let readers know what to do next (e.g. "View job openings" or "Register for the event").
* **Test before you send**: Always preview your email and send a test version to check formatting, links, and personalization.
* **Review performance**: After sending, check open and click rates in HireData to learn what works and improve future sends.
# Setting up an email template in HireData
Source: https://help.hiredata.com/apps/messaging/emails/setting-up-an-email-template-in-hiredata
Build reusable email templates in HireData with dynamic variables and brand styling, then plug them into your recruitment automations and newsletters.
Create custom email templates to use in your automations, complete with personalised fields, a branded signature, and dynamic content. Follow this guide to set up an email from scratch in HireData.
## Step 1: Create a new email
Open the **Emails** page from **Settings**, then click **New Email**. You can use any of the available email templates that HireData has created for you, or create a **Blank Email**.
## Step 2: Set up the email content
### 2.1. Select branding
Each email template in HireData can inherit styling, colours, logos, and footer content from your **Brand** settings.
In the top-right corner of the editor, you'll see a dropdown labelled **Brand**, where you can select a branding you've already added to HireData for your email (e.g., "HireData").
Selecting a brand ensures your email uses the correct logo, theme colours, and fonts.
### 2.2. Add email subject
At the top of the template editor, you'll find the **Subject** field. This is the subject line that will appear in the recipient's inbox. You can include static text or dynamic fields for personalisation.
**Tips**
* Make your subject clear and relevant to encourage recipients to open the email.
* Keep it under 50 characters if possible.
* Use dynamic fields to personalise content (such as first name or job title).
* Avoid spammy words.
### 2.3. Email body
This is the main content area where you write the message the recipient will see.
The body is made of [sections](/reference/email-builder/sections), and each section holds the blocks you add to it. The text ones are [Paragraph](/reference/email-builder/blocks/paragraph) and [Heading](/reference/email-builder/blocks/heading); the rest are listed in the [Email builder reference](/reference/email-builder/overview). Click any block to open its own settings in the right-hand panel.
#### 1. Add a new block from the section's **Blocks** list by clicking the **+**
#### 2. Click inside the existing block as if you are about to type something to add your content
#### 3. Include dynamic placeholders (e.g., \{\{Recipient: First Name}}, \{\{Sender: Email}}) to personalise the message
See [Variables](/reference/email-builder/variables) for where the values come from and what happens when one has nothing behind it.
### 2.4. Add a form (optional)
If your email should collect responses (e.g., company feedback, confirmation of availability, etc.), you can add a form, again by clicking the **+** in the section's **Blocks** list and selecting **Form**:
You can select from the form templates or [create your own](/content/creating-a-form-in-hiredata):
Click the Form's block to open the editor and adjust the formatting:
You can also make the first question visible in the email to encourage recipients to proceed to the next questions:
That first question is the **Leading Question**, and its type decides what the email actually shows: a rating or choice question becomes one button per answer, and everything else becomes a single call to action. See the [Form block](/reference/email-builder/blocks/form), or follow [Ask for feedback in one click](/knowledge-base/cookbook/one-click-feedback-email) to build one end to end.
### 2.5. Customise the email signature
The signature block is usually pre-filled with placeholders and branding elements, including:
* Sender's name and email
* Company website
* Logo/Sender's profile photo
* Contact details such as the company's address and phone number
To edit, click the signature section and modify the text or layout.
For what each line of the signature can hold, and why the picture is worth a second look before you send, see the [Signature block](/reference/email-builder/blocks/signature).
### 2.6. Legal disclaimer and unsubscribe link
At the bottom of the template, there's a built-in disclaimer that includes:
* Confidentiality notice
* Unsubscribe link
You can edit this block, but make sure to keep the unsubscribe link, as it ensures compliance with privacy laws.
## Step 3: Email formatting
Every block is styled from the right-hand panel, and what the panel offers depends on which block you have selected. Colours, fonts, alignment, spacing, and borders are all set per block, and the [Email builder reference](/reference/email-builder/overview) documents each one.
Three settings decide the styling and they reach different blocks. **Brand** restyles the whole email, **Theme** in the Template settings only reaches blocks you add afterwards, and a value you set on a block yourself reaches that block alone. See [Brand, theme, and metadata](/reference/email-builder/template#brand-theme-and-metadata) before you go hunting for the change that did not appear.
## Step 4: Use the template in your automations
Once your email is complete, click **Save**, and you will be able to preview it and use it in your automations.
## Best practices
* **Keep it short and focused.** Use headings and spacing to break content into readable chunks.
* **Use consistent branding.** Apply your brand's logo, colours, and font styles to match other communications.
* **Test before use.** Use the preview button or send a test email to verify personalisation and formatting. See [Testing](/reference/email-builder/testing).
***
## Video guide
# Add a valid payment method for WhatsApp
Source: https://help.hiredata.com/apps/messaging/whatsapp/add-a-valid-payment-method-for-whatsapp
Step-by-step guide to adding a valid payment method to your WhatsApp Business account so you can keep sending template messages without interruptions.
*Adding a valid payment method to your WhatsApp business account is essential to successfully connecting it to HireData and automating your conversations. Follow the steps below to set up your payment method quickly and efficiently.*
## Step 1: Open the payment methods in Meta
Navigate to the **Settings menu** within HireData and click \[Apps]. Select WhatsApp from the apps list by clicking the \[View App] button.
Open the drop-down menu from the three dots next to your connection and click \[Payment Methods] to go directly to the Payment Methods page in Meta.
## Step 2: Add a payment method
You will be redirected to the Payment Methods page. There, click the \[Add payment method] and enter the details of your credit card, debit card, or any other supported payment option. After you do that, review and save your details.
## Step 3: Sync WhatsApp account with HireData
After you've updated your account's details in Meta, log in to HireData and open WhatsApp from the **Apps page** in the **Settings menu.** Then, select \[Sync Account] from the drop-down menu to initiate a manual sync. If everything is updated correctly, the error messages will disappear.
By completing these steps, you’ll successfully add a valid payment method for WhatsApp, enabling seamless transactions and management of your business activities.
## Tips
* Ensure that the payment method you provide has sufficient funds and is authorised for online transactions.
* Verify that the billing details entered match the information associated with your payment method.
* If you encounter any issues, refer to Meta’s support documentation or contact their customer service for assistance.
# Buy a phone number from Numero for your WhatsApp account
Source: https://help.hiredata.com/apps/messaging/whatsapp/buy-a-phone-number-from-numero-for-your-whatsapp-account
Buy a dedicated phone number from Numero and connect it to your WhatsApp Business account so you can start messaging candidates directly from HireData.
Follow this step-by-step guide to buy a phone number from Numero. Use it when your current number is already connected to a WhatsApp account you don't want to delete.
When connecting WhatsApp to HireData, you might receive an error message that your phone number is already connected to an account. If that happens, one option is to delete your WhatsApp account and try again, but remember that this will delete your entire chat history. Or you can purchase a new phone number from a telecom platform such as Numero e Sim.
**[Numero eSIM](https://www.numeroesim.com/virtual-numbers/all-countries)** is an app that allows users to purchase virtual phone numbers from various countries worldwide that can be used for calls, texts, and verification purposes on different platforms.
## Step 1: Download and install the Numero eSIM app
### 1.1. Go to your device's app store (Google Play Store for Android or Apple App Store for iOS) and search for **Numero eSIM** to download the app.
### 1.2. Once downloaded, open the app and create an account or log in if you already have one.
## Step 2: Explore the available phone numbers
### 2.1. Open the app, go to the **Home** screen and click \[Phone Numbers]
### 2.2. Select \[Mobile Numbers] to continue
### 2.3. Select the country your business is based in to see the available phone number plans
## Step 3: Buy a phone number
### 3.1. Review the features associated with each subscription (e.g., calling, texting, and verification support). Select one of the plans and click \[Buy Plan].
### 3.2. Select your preferred payment method (credit card, Google Pay, Apple Pay, or other options available in the app) and confirm the purchase. Once done, the phone number will be added to your account.
## Step 4: Set up and start using your new number
Go back to the **My Numbers** section to see your purchased number.
* Numero eSIM allows you to manage your new number, including making calls, sending texts, and setting up voicemail.
* You can also activate or deactivate features like call forwarding or setting a custom ringtone for incoming calls.
After you have your new phone number, you can go back and complete [connecting your WhatsApp to HireData](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up).
💡 **Subscription Renewal**: Remember to renew your subscription to avoid interruptions. Numero may offer auto-renew options, which can be helpful if you plan to keep the number for an extended period.
# Using a WhatsApp Business number after API connection
Source: https://help.hiredata.com/apps/messaging/whatsapp/can-a-user-manually-use-their-whatsapp-business-number-after-connecting-it-via-api
Understand what happens to your WhatsApp Business number once connected via the API and how users can still manage conversations from HireData's inbox.
*This article explains how you can effectively manage your WhatsApp conversations using HireData’s inbox once a WhatsApp Business Account (WABA) number is connected through the WhatsApp Business API.*
## What happens when you connect a WABA via API
Once a WhatsApp Business number is integrated with the WhatsApp Business API:
* The number **cannot** be used via the standard WhatsApp or WhatsApp Business mobile applications.
* All message handling, both inbound and outbound, occurs exclusively through HireData’s Inbox interface.
## Managing your conversations in the HireData inbox
### Log in to HireData
* Navigate to your HireData dashboard and select the **Inbox** from the menu.
### Handling incoming messages
* New WhatsApp messages appear in real-time in the HireData inbox.
* Conversations are clearly labelled and associated with the relevant contact, user, brand, or account.
### Sending messages
* You can manually reply to incoming messages directly from the inbox.
* Messages sent from the HireData inbox appear to recipients exactly as if sent directly from your connected WhatsApp Business number.
### Automation and personalisation
* Initial outreach messages and automated reminders can be set up to run automatically.
* You can seamlessly take over automated conversations anytime to ensure personalised communication.
## Advantages of using the HireData inbox
* **Personalised Outreach:** Messages sent via HireData reflect your connected WhatsApp Business number, maintaining personalised engagement.
* **Centralised Communication:** Easily manage all conversations from a single interface.
* **Automation Control:** Balance automated outreach with manual follow-up at your discretion.
### Mobile accessibility
Currently, HireData’s inbox is accessible via desktop browsers. Mobile accessibility for manual message handling is under consideration for future development.
## Best practices
* Regularly check your HireData inbox for timely follow-ups.
* Customise your automated sequences while retaining the ability to step in manually at any time.
* Clearly communicate with your recipients that messages received originate from your connected WhatsApp Business number.
For further questions or feature requests, please reach out to our support team. We’re here to ensure your messaging experience with HireData meets your professional needs.
# Connect with WhatsApp: Embedded sign-up
Source: https://help.hiredata.com/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up
Connect your WhatsApp Business account to HireData with embedded sign-up, a fast Meta-hosted flow to authenticate and start messaging candidates in minutes.
Set up WhatsApp in HireData by following the steps below. You'll learn how to connect the two platforms via the embedded sign-up.
## Step 1: Choose a connection method
You can either do this from your \[Inbox] and then \[WhatsApp], or navigate to the \[Settings page], then \[Apps], and open \[WhatsApp].
HireData presents two options to connect your WhatsApp account:
* **Embedded Sign-Up**: This option allows you to use the WhatsApp Embedded Sign-Up feature for easier setup.
* **[System User](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up)**: To connect your WhatsApp account via this option, you will need the **WhatsApp Business Account Id** and the **Access Token** (API key).
## Step 2: Grant HireData access to WhatsApp Business
### 2.1. Log in to Facebook
After you select a connection method, Facebook opens in a new tab. Log in to your Facebook account to continue.
### 2.2. Grant permissions
Facebook then opens the permissions page, where you connect your WhatsApp Business account to HireData. To continue, agree to the [WhatsApp Business Terms of Service](https://www.whatsapp.com/legal/business-terms?fbclid=IwZXh0bgNhZW0CMTAAAR0O-c4JvRz5u9AKYZq_4QBZjltjfxac5AoPTh3E31K3Ho2TtD8l-JP4DiA_aem_-GN92crMv9g93Rp_HF4Q-w) and the [Meta Terms of Service](https://business.facebook.com/legal/terms).
## Step 3: Fill in your business information
You will need to complete the business information fields, including:
* **Business Portfolio**: Choose an existing portfolio or create a new one.
* **Business Name**: Type the name of your business.
* **Business Website or Profile Page**: If available, enter the URL of your company's website or social media profile.
* **Country**: Select the country where your business is based.
* **Address (optional):** You can also add your business address if you want.
Once done, click \[Next] to proceed.
## Step 4: Create or select your WhatsApp Business account
If you already have a WhatsApp Business account, select it at this stage. If you don't, create a new one.
### 4.1. Creating a new WhatsApp Business account
Fill in the required fields, including:
* **WhatsApp Business Account Name**: Enter the name of your WhatsApp Business Account. It shouldn't be longer than 255 characters.
* **WhatsApp Business Display Name**: Ensure the display name matches your business name and adheres to [WhatsApp's display name guidelines](https://www.facebook.com/business/help/757569725593362).
* **Category**: Select the business category that best describes your business.
Click \[Next] to continue.
## Step 5: Add a phone number for WhatsApp
### 5.1. Enter the phone number that will be linked to your WhatsApp Business account
* **Phone Number**: Select the correct country code and input your phone number.
If the phone number you are attempting to use is already linked to WhatsApp, you will need to either [purchase a new phone number](/apps/messaging/whatsapp/buy-a-phone-number-from-numero-for-your-whatsapp-account) or delete your WhatsApp account and try again. Remember that if you do the latter, your chat history will be deleted.
* **Verification**: Choose how you would like to verify the phone number via a text message or a phone call.
### 5.2. Verify your phone number by entering the 6-digit code you will receive
## Step 6: WhatsApp connected
### 6.1. Review HireData's access request
### 6.2. Confirmation message
If you have set up everything correctly, you will see this message at the end, and you will be ready to use HireData with WhatsApp!
### 6.3. Review the connection between WhatsApp and HireData
Simply navigate to \[Settings] > \[Apps] > \[WhatsApp] and review if the connection between HireData and WhatsApp is successful.
Now that you know all of the steps, visit our [WhatsApp sign-up page](https://app.hiredata.com/inbox/whatsapp) to get started on setting up your WhatsApp connection. If you experience any issues, you can also try connecting your account to HireData using a [system user sign-in](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up).
# Create a WhatsApp automation in HireData
Source: https://help.hiredata.com/apps/messaging/whatsapp/create-a-whatsapp-automation-in-hiredata
Build a WhatsApp automation in HireData: choose a trigger, select a template, and send personalised messages to candidates without any manual work.
This guide walks you through setting up a WhatsApp automation in HireData. With this integration, you can automate tasks such as collecting and updating candidate details (like availability status) and notifying candidates about new job openings, which improves candidate experiences and streamlines your recruitment processes.
Follow each step below to set up the automation.
## Step 1: Create a new automation
### 1.1. Navigate to the Automations panel and click the \[New Automation] button to begin
### 1.2. On the pop-up screen, click \[WhatsApp] and select one of the templates depending on the topic of the conversation you want to create
*This guide uses the "Availability" template.*
*Learn how to create new WhatsApp templates in HireData and WhatsApp [here](/apps/messaging/whatsapp/how-whatsapp-templates-work).*
## Step 2: Select a trigger
When you click the trigger building block (the first one), you will see that the app and the connection will already be selected for you.
### 2.1. Select the Object you will listen to
*Define the Object:*
### 2.2. Specify the date and time to execute the task
If this task needs to run periodically, configure the **Repeat every** setting. For one-time tasks, select **Don’t Repeat**.
## Step 3: Apply filters
Open the next building block to add more filters to refine your candidate selection. For example, you can filter candidates by their status, as shown here:
You can also add additional filters by clicking \[Add Filter], and if necessary, you can create multiple filter sets using the \[Add New Set] option to narrow or expand your selection.
## Step 4: Configure task
When you use the available templates, HireData creates the task for you automatically, but you can also customise it by:
### 4.1. Changing the form
### 4.2. Providing a detailed briefing, including any missing goals to ensure optimal performance
### 4.3. Adding more knowledge fields
These are fields you can add to provide additional context for the AI to use during conversations. Select items that it should be aware of to handle conversations effectively, such as the names of the participants, email addresses, etc.
Limits:
* Up to **16 fields**
* Key length: **64 characters**
* Value length: **512 characters**
## Step 5: Update Fields
When the conversation in WhatsApp ends, the specified fields in this task will be updated in your app.
More information about the key components of this task:
1. **Object:**
* The object represents the data entity you want to update, e.g., "Candidate".
2. **Identifier:**
* An identifier is a unique field (like an ID) used to locate the exact record that should be updated. For example: "Candidate: ID" ensures the automation targets the correct candidate's record.
3. **Fields:**
* These are the fields within the object that you want to be updated. You can select different fields, such as "Candidate: Notes" or "Candidate: Available Date", etc., to specify what part of the record needs to be updated.
## Step 6: Review and activate the automation
Ensure all filters, forms, and contextual knowledge are properly set before activating the automation.
## Tips for optimal use
* Regularly update your filters and forms to align with your recruitment needs.
* Provide detailed and specific briefings to enhance AI effectiveness.
# How does the WhatsApp messaging cost structure work?
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-does-the-whatsapp-messaging-cost-structure-work
Understand how WhatsApp messaging costs work in HireData, including conversation types, template pricing, and what triggers a billable 24-hour window.
***Understanding how costs for WhatsApp messaging are structured is crucial for effectively managing your communication budget. Below, you'll find a clear breakdown of how costs work within your HireData setup.***
# Inbound messages are free
When a candidate initiates a conversation by sending a message to your WhatsApp number (for example, applying via WhatsApp), you have a 24-hour window to reply without incurring any additional fees from Meta.
# Outbound messages require templates
When starting a new conversation proactively (sending an outbound message), you must use an approved WhatsApp template. These templates typically come with costs, especially if they fall into the marketing category.
# Template costs are billed by Meta
WhatsApp template costs are directly billed by Meta (Facebook), based on the message type and the region where it is sent. These charges appear separately on your Meta invoice.
You can check Meta's detailed pricing here: [WhatsApp Business Platform Pricing](https://business.whatsapp.com/products/platform-pricing).
# Credit deduction within HireData
In addition to Meta's fees, each task automated also consumes credits from your HireData plan. This is part of HireData’s monetization structure. When you send a WhatsApp message or let an agent run a conversation, this deducts both from your Meta budget and your HireData credits.
# Automation-friendly structure
If the candidate has already contacted you, Meta doesn't charge for any automated responses within the subsequent 24-hour period. After this 24-hour window, you must use a paid WhatsApp template to continue the conversation.
# Cost visibility
You can monitor and track your WhatsApp-related expenses through Meta’s transaction interface for complete transparency.
In summary:
* Replies within 24 hours of inbound messages are free.
* Proactive outbound messages require paid templates.
* Charges include both Meta fees and HireData credit deductions.
# How to add a WhatsApp chat button to your website
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-to-add-a-whatsapp-chat-button-to-your-website
Embed a WhatsApp chat button on your website so candidates and clients can start a conversation with one click and reach your team directly on WhatsApp.
*You can easily allow visitors to contact your team via WhatsApp by embedding a **Click to Chat** button on your website. This method works across devices and doesn’t require any special integrations.*
## Step 1: Get your WhatsApp Business number
Make sure you have a WhatsApp Business number [connected to your brand in HireData](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up). This is the number your website visitors will message.
**Example format:**
31612345678
*(No +, no spaces, no dashes)*
## Step 2: Generate your WhatsApp link
Use this format:
```
?text=
```
Replace:
* \ with your full phone number (international format)
* \ with a pre-filled message
Example:
```
!
```
💡 Tip: You can create different messages for different pages (e.g. job detail pages, services, or FAQs).
## Step 3: Add the button to your website
You can embed the link as a text link, image button, or styled button. Here’s a simple example using text:
```
target="_blank"> Chat with us on WhatsApp
```
Or use an image:
```
target="_blank">
```
You can also style this as a floating button using custom CSS if you have access to your site’s theme.
## Tips for customisation
* Add different links per page with tailored messages (e.g., “I’m interested in Job ID 5421”)
* Track traffic by adding UTM parameters (e.g. ?utm\_source=website)
* Position the button for visibility (e.g., bottom-right corner, fixed position)
# How to edit WhatsApp message templates in HireData
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-to-edit-whatsapp-message-templates
Edit existing WhatsApp message templates in HireData, tweak copy, variables, and buttons, and resubmit them to Meta for approval without leaving the app.
*WhatsApp message templates in HireData allow you to manage and update messages used in automations. This article walks you through how to edit existing message templates directly in HireData.*
Go to your **Settings** and open the **Messages** page. There you will see a list of your WhatsApp templates created in HireData or synced with your WhatsApp Business Manager.
Select the template you want to edit from the list.
Update the message content as needed. Use the preview screen on the right to see how your message will appear to recipients before saving.
Once you're happy with your edits, click **Save** in the upper right corner to apply them.
Each template can only be edited once every **24 hours**. Plan your changes carefully before saving, as you won't be able to make further edits until the next day.
If you try to adjust it multiple times within that timeframe, you will see an alert message on the template.
To learn more about how templates work and how they are approved, see [How WhatsApp Templates Work](/apps/messaging/whatsapp/how-whatsapp-templates-work).
# Prevent your WhatsApp account from being flagged as spam
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-to-prevent-your-whatsapp-account-from-being-flagged-as-spam
Learn what causes WhatsApp spam warnings and account restrictions, and follow best practices to maintain a good quality rating on your Business number.
*If you've received a warning regarding a security-sensitive event reported for a WhatsApp number or a WhatsApp Business account identified as sending spam, this article explains what these warnings mean, what causes them, and how to prevent them from happening.*
## How Meta's enforcement system works
Meta automatically monitors all WhatsApp Business Accounts for [policy compliance](https://developers.facebook.com/documentation/business-messaging/whatsapp/policy-enforcement). When a violation is detected, your account will initially receive a warning with details on which policy was breached.
If violations continue, restrictions gradually increase. This can look like a 1 or 3 day block on sending template messages, a couple of days, or 30 day block on sending any messages at all. It can also mean an indefinite account lock that requires an appeal to lift, or in serious cases, permanent removal from the [WhatsApp Business Platform](https://business.whatsapp.com/products/business-platform). In cases involving severe harm - such as fraud, scams, or illegal content - Meta may offboard an account immediately without prior warning.
You can find details about any active violations or restrictions by logging in to your [Meta Business Manager](https://business.facebook.com/) and navigating to **All Tools -> Business Support Home**.
## What counts as a violation
Meta enforces both the [WhatsApp Business Messaging Policy](https://www.whatsapp.com/legal/business-policy/) and the [WhatsApp Commerce Policy](https://www.whatsapp.com/legal/commerce-policy/). Violations that commonly affect recruiters and businesses include:
* **Sending spam or unsolicited messages**Messaging candidates who haven't given permission to be contacted is the most common cause of spam flags. If enough recipients block or report your number, Meta will rate-limit or restrict it.
* **Misclassifying templates**Sending a promotional or marketing message under a Utility template category, or vice versa, is a policy violation. Meta treats template misclassification as an attempt to bypass delivery restrictions.
* **Misleading content**Templates that create false expectations, use deceptive language, or pressure recipients in an inappropriate way violate Meta's policies.
* **Prohibited content categories**Meta prohibits messaging related to certain product and service categories entirely, including drugs, gambling, weapons, adult content, counterfeit goods, and scams. A full list is available in [Meta's policy violations documentation](https://developers.facebook.com/documentation/business-messaging/whatsapp/policy-enforcement-violations).
## How to prevent your WhatsApp account from spam flags
### 1. Only message candidates who have opted in
Meta requires that you have explicit permission before sending WhatsApp messages to someone. The candidate must have provided their phone number and agreed to receive messages from your organisation. This opt-in doesn't have to be WhatsApp-specific, but it must be clear, documented, and compliant with local law.
* [Valid opt-in methods](https://developers.facebook.com/documentation/business-messaging/whatsapp/getting-opt-in) include a checkbox on a job application form, a consent statement during a phone intake, a written or digital form signed by the candidate, or an SMS confirmation.
* The opt-in must clearly state your company's name and that the candidate agrees to receive messages from you.
### 2. Make sure candidates expect your messages
Even with a valid opt-in, candidates who are surprised by a message are more likely to block or report it. Make it clear during sign-up what kind of messages they'll receive - for example, interview reminders, application updates, or recruitment campaigns - and only send what you've indicated.
### 3. Use the correct template category
Sending a message under the wrong category is a direct policy violation. In HireData, you can choose the right category when creating a template:
* **Marketing** - for promotional content, job campaigns, and outreach to passive candidates
* **Utility** - for transactional updates like interview confirmations, status changes, or reminders
* **Authentication** - for one-time codes or verification
[Using the correct category](https://help.hiredata.com/en/articles/643856-whatsapp-template-categories-in-hiredata) keeps your deliverability healthy and reduces the risk of messages being flagged or blocked.
### 4. Respect opt-outs immediately
If a candidate replies to opt out or blocks your number, stop messaging them. Do not retry. Continuing to send messages after an opt-out is both a policy violation and the fastest way to accumulate blocks that damage your sender reputation.
### 5. Keep your message quality high
Meta tracks how recipients respond to your messages. A high rate of blocks, reports, or ignored messages lowers your phone number's quality rating, which can lead to rate limits and eventually restrictions.
To maintain quality, personalise your messages where possible, only send relevant and timely messages, avoid sending the same template to large lists repeatedly, and review your quality rating regularly in Meta Business Manager under **WhatsApp Manager -> Phone Numbers**.
## What to do if your account received a warning
When a violation occurs, Meta sends a notification to all admins in your Meta Business Manager account and displays a banner in WhatsApp Manager. To review it:
1. Log in to [Meta Business Manager](https://business.facebook.com/)
2. Go to **All Tools -> Business Support Home**
3. Find the relevant WhatsApp Business Account
4. Review the violation details, including which policy was breached and any active restrictions
If you believe the warning was issued in error, you can appeal by clicking **Request Review** on the violation. Appeals typically take 24 to 48 hours. Note that not all spam violations can be appealed and in some cases you may need to wait for the restriction period to end.
## Need more help?
If you're unsure about a warning you've received or need help reviewing your setup, reach out to us at [support@hiredata.com](mailto:support@hiredata.com). For account-level issues, you can also contact Meta Business Support directly via [Meta Business Help Center](https://www.facebook.com/business/help).
# How to resolve WhatsApp Business Account permission issues
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-to-resolve-whatsapp-business-account-permission-issues
Fix WhatsApp Business Account permission errors in HireData by re-granting Meta access, checking admin roles, and reconnecting your WABA in a few steps.
*When sending WhatsApp messages through HireData, you may encounter the following error: `(#200) You do not have the necessary permissions required to send messages on behalf of this WhatsApp Business Account (OAuthException: 200)`.*
*This error means that the WhatsApp Business Account (WABA) connected to HireData doesn't currently allow sending messages via the API. This usually happens due to account permissions or conflicts with other providers. This article covers some possible causes and solutions.*
## 1. Payment settings are missing or invalid
* The WABA must have [valid payment details](/apps/messaging/whatsapp/add-a-valid-payment-method-for-whatsapp) configured in the Meta Business Manager.
* Go to **Meta Business Manager → Business Settings → WhatsApp Accounts → Payment Settings** and verify that a valid payment method is active.
## 2. The WABA is connected to another provider (e.g., Bird)
* A WhatsApp Business Account can only be linked to **one provider** at a time.
* If the WABA is still connected to another provider, disconnect it before linking it to HireData.
## 3. The WABA is tied to another platform
* Some platforms restrict direct API access when they control the WABA.
* Check whether your WABA is still tied to another platform (for example, a CRM or messaging tool). If so, unlink it to restore the API permissions.
## 4. The WABA has credit with a third-party provider
* If the WABA has purchased credits through another provider, Meta doesn't allow direct API usage.
* Remove or stop the credit setup with the third-party provider before connecting the WABA directly.
Error ***"(#200) OAuthException: You do not have the necessary permissions"*** usually means that the WhatsApp Business Account is either misconfigured, tied to another provider, or missing valid payment details. By verifying payment settings, checking for existing provider connections, and ensuring the WABA is not locked by another platform, you can resolve this issue and restore messaging functionality.
### Need more help?
If you've gone through these steps and the error still appears, contact HireData support at ***[support@hiredata.com](mailto:support@hiredata.com)*** for help resolving the issue.
# How to use forms in WhatsApp conversations
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-to-use-forms-in-whatsapp-conversations
Use HireData forms inside WhatsApp conversations to collect candidate information and automatically update fields in your ATS without manual data entry.
*This guide will walk you through the process of setting up and using forms in HireData for your WhatsApp conversation. The collected responses automatically update the relevant fields in your ATS.*
## Step 1: Create a form
Firstly, you need to **define the purpose of the form.** Determine what data you need to collect (e.g., candidate's details such as availability date, salary expectations, years of work experience, etc.).
Then open the Forms page via the Settings and click \[New Form]:
There will be plenty of question types to choose from, so add the ones that will fit the purpose of your form and add any logic to them:
Once completed, review the form and click \[Save].
## Step 2: Add a form to your automation
[Create your automation](/apps/messaging/whatsapp/create-a-whatsapp-automation-in-hiredata) with two tasks \[Start a Conversation] and \[Update field(s)]. Add the form you've created or select any of the templates:
In the Fields section, you will see the questions in the form, so all fields for which data should be collected during the WhatsApp conversation:
## Step 3: Automatically update fields based on form responses
One of our key features is automatic field updates. When a candidate fills out a form in a WhatsApp conversation:
1. The submitted responses are collected in real-time
2. The system maps the answers to the corresponding fields and updates them in the specified app (e.g., Carerix)
## Example:
* A candidate provides their **availability date** via the form
* HireData automatically updates their next availability date in your app, so all details stay up-to-date
In summary, HireData’s WhatsApp-integrated forms provide a seamless way to collect and update candidates' information in real-time, eliminating manual data entry.
# How WhatsApp templates work
Source: https://help.hiredata.com/apps/messaging/whatsapp/how-whatsapp-templates-work
Understand how WhatsApp templates work in HireData, including categories, approval by Meta, variables, and when you need them to message candidates.
*Our WhatsApp automation templates streamline candidate communication using AI and conversational recruiting techniques. These pre-built templates help recruiters engage with candidates efficiently via WhatsApp, ensuring timely responses and personalised interactions. Continue to learn how to use them effectively for your business, as well as how to create WhatsApp templates in the WhatsApp manager.*
## WhatsApp templates in HireData
### Available WhatsApp templates
1. **Availability Check (via Carerix)** -\*\* \*\*This template is designed to verify a candidate's availability for job opportunities. It sends personalised messages to inquire about their current job search status, ensuring that candidate profiles remain up-to-date.
2. \*\*Job Alert (via Carerix) \*\*- This automation notifies candidates about new job openings via WhatsApp. It leverages AI-driven conversational techniques to ensure timely communication and gather responses effectively.
3. **Job Alert (via OTYS)** - Similar to the Carerix job alert template, this version is tailored for OTYS users. It informs candidates about new job opportunities while maintaining engagement through AI-powered messaging.
### How the trigger works
All of the WhatsApp templates use the same logic but can differentiate in the set trigger and the content of the conversation (e.g. the questions asked, the collected information, and the tone of voice). This article focuses on the Job Alert automation via Carerix.
In this automation, the trigger is based on a **stage update** within the Carerix system. Here's how it functions:
1. **Trigger Object** – The automation listens for when a **Match** is either **created or updated.**
2. **Filter Condition** – The automation only proceeds if the **\[Match: Stage]** is set to \*\*"Placed on shortlist" \*\*ensuring that only shortlisted candidates receive the job alert message.
Once triggered, the automation initiates a **WhatsApp conversation**, sending a personalised job alert to the candidates informing them about the new opportunity.
### Configuring the \[Start Conversation] task
Once the trigger is set, the next step is to configure the task that defines how the WhatsApp message will be sent. Here's a breakdown of each configuration option:
1. **Phone Number Selection**
* Choose the phone number that will be used to send the WhatsApp messages. This is typically a verified business number associated with your WhatsApp Business that should already be verified and visible in the WhatsApp connection in HireData.
2. **Message Template**
* Select a pre-approved WhatsApp message template to ensure smooth and compliant communication. The template defines the structure of the first message, which can include placeholders for dynamic content (like candidate names, job titles, etc.).
3. **Recipient Selection**
* Define who will receive the message. In this case, it's typically the candidate linked to the match that triggered the automation.
4. **Form Selection**
* The form holds all of the questions that the recipient will be asked. You can select a template form or create your own on the Forms page in HireData.
5. **Briefing**
* Provide a briefing outlining the objective of the WhatsApp conversation. This helps maintain consistency and clarity in communication. You can include any guidance that will help the AI to communicate effectively with the audience.
6. **Knowledge**
* These are **up to 16 fields** you can add to provide additional context for the AI to use during conversations. Select items that it should be aware of to handle conversations effectively, such as the names of the participants, email addresses, etc.
These are some standard dynamic placeholders that will personalise the message:
* **Candidate Name** → Automatically inserts the recipient's name.
* **Job Title** → Populates the job vacancy title.
* **Recruiter Name** → Personalises the message with the sender's name.
* **Company Name** → References the hiring company or brand.
### Configuring the \[Update Fields] task
After the WhatsApp conversation collects information from the candidate, the automation can **automatically update specific fields** in the system. This ensures that the candidate's profile stays up-to-date without requiring manual data entry.
Here's how this process works:
1. **Creating a Task to Update Fields**
* A task is added to the automation that updates specific fields in the candidate's records. This happens after the WhatsApp conversation when the candidate provides new information, such as their availability date or additional notes.
2. **Object Selection**
* The object being updated is the **Candidate** record. This ensures that all collected information is stored in the correct candidate profile.
3. **Identifier**
* To ensure the update is applied to the correct candidate, the system matches the **Candidate: ID** from the conversation with the **Candidate: ID** in the database. This unique identifier ensures that the data is updated only for the relevant candidate.
4. **Fields Updated**
* The automation updates one or more fields based on the responses received from the candidate. Common fields include:
* **Candidate: Available Date** → Updates the candidate's availability for new job opportunities.
* **Candidate: Notes** → Stores any additional information the candidate provided, such as preferences or special requests.
* **Other Fields** → Additional fields can be added as needed, such as preferred job type, location preference, or salary expectations.
## WhatsApp templates in WhatsApp
### Creating a WhatsApp template
*Go to your WhatsApp Template Manager by clicking \[Manage Templates]:*
*Click \[Create Template]:*
*Select the template type, e.g. by selecting \[Marketing] and then \[Custom]:*
*Set up your WhatsApp template in the editor:*
### 1. Name your WhatsApp template
*Use a clear and consistent name for your template. For example, if you're creating the same template in multiple languages, use the exact same name, e.g. “availability” in this case, for all versions (before):*
*Use the name as an identifier for your WhatsApp template (after):*
### 2. Add variables to your WhatsApp template
*You can insert dynamic fields by clicking \[+ Add variable] in the editor:*
*For example, add a variable name, e.g. company:*
*Add a default value, e.g. Randstad:*
*Choose the variable type: Name vs. Number:*
*An example of a numbered variable:*
You can select between **Name** and **Number** as variable types. While numbered variables are allowed, we recommend using **named variables** for better clarity and reuse.
### 3. Add buttons to your WhatsApp template
Buttons help recipients interact with your message directly.
*Choose the button type, e.g. \[Custom]:*
*Add your first button, e.g. Sim:*
💡 Tip: For templates in multiple languages, make sure you’re using the same variable name/number for consistency.
*Preview your button:*
*Adding multiple buttons (optional):*
*Preview the WhatsApp template with its buttons:*
### 4. Submit your WhatsApp template
*Once everything is ready, click \[Submit] to send the template for approval and wait for the template’s review:*
*Hooray! Your WhatsApp template is verified*
### How long does template approval take?
Submitting a template starts two steps, in this order:
1. **Category validation** — happens immediately. Meta checks the category you chose (Marketing, Utility or Authentication) against the template's content. If Meta disagrees, the template is rejected right away for incorrect category, before any content review happens. See [WhatsApp Template Categories in HireData](/apps/messaging/whatsapp/whatsapp-template-categories-in-hiredata).
2. **Template review** — this is the **In review** (Pending) state. Meta checks the content against its guidelines and then approves or rejects it.
Most templates complete review within a few minutes. Allow up to **24 hours** before treating an **In review** template as stuck.
| Status | What it means | Can you send with it? |
| ----------------------- | ---------------------------------------------------------------------------- | --------------------- |
| **In review** (Pending) | Passed category validation, Meta is checking the content. | No |
| **Approved** | Passed review. | Yes |
| **Rejected** | Failed category validation or content review. Meta gives a rejection reason. | No |
| **Paused** | Approved, but paused by Meta after negative feedback from recipients. | No, until it resumes |
Meta tells you the outcome by email and with an alert in WhatsApp Manager, so you don't need to keep refreshing the template list.
Editing a template that is already **Approved** or **Paused** sends it back through review, but those edits are usually accepted almost instantly unless the change fails review. See [How to Edit WhatsApp Message Templates in HireData](/apps/messaging/whatsapp/how-to-edit-whatsapp-message-templates).
**If a template has been in review for more than 24 hours**
* Check your email and the WhatsApp Manager alerts. The outcome may already have been sent.
* Open the template in **Manage Templates** and confirm its current status there rather than in HireData, which only sees the template after a sync.
* If it's been rejected, fix the content against Meta's guidelines and resubmit, or create a new template.
* If it remains in review, contact Meta Business Support.
An approved template only becomes selectable in HireData automations once it has been synced. If a template shows as approved in WhatsApp Manager but you can't find it in HireData, run **Sync Account** as described below.
### Syncing WhatsApp templates with HireData
*To make your newly created template available in HireData, click \[Sync Account] in the dropdown menu of your WhatsApp account in HireData:*
*A sync will be scheduled after this notification:*
*After a while, you’ll see the sync will start:*
*Click the timeline icon to check the status of your sync:*
*You can now select your new WhatsApp template in the WhatsApp tasks you’ll configure in any automation:*
### Editing a WhatsApp template
*Go to your WhatsApp Template Manager by clicking \[Manage Templates]:*
*Click one of your existing templates:*
*Click \[Edit Template] to go to the editor:*
*Editing your WhatsApp template:*
*Example: Adding a title to your WhatsApp template*
*Example: Adding a button (call-to-action) to your WhatsApp template*
*Submitting your updated WhatsApp template for review (usually almost instantly accepted, if you comply with the guidelines):*
### Deleting a WhatsApp template
*Click \[Delete template] in the top right corner of the editor:*
*Confirmation of deleting your WhatsApp template:*
# Manually sync WhatsApp with HireData
Source: https://help.hiredata.com/apps/messaging/whatsapp/manually-sync-whatsapp-with-hiredata
Trigger a manual sync between WhatsApp and HireData to refresh templates, phone numbers, and account status so your messaging automations stay accurate.
Sync your Business WhatsApp account with HireData whenever needed. Follow the instructions below to manually trigger a sync.
To do that, you should first connect your Business WhatsApp account with HireData via the **[embedded sign-up](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up)** or the **[system user](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up)**.
## Step 1: Navigate to the Settings page and open the Apps menu
Log in to your HireData account and open the Settings page via the \[Settings] button above your name. Then, go to the Apps menu.
## Step 2: Select WhatsApp
You can open WhatsApp to see your connection(s) by clicking the name or the \[View app] button.
## Step 3: Sync the data
Click the \[Sync] button (the two arrows in a circular motion) located in the drop-down menu of the company's connection. After you have clicked it, you will see the syncing progress.
# WhatsApp error codes explained
Source: https://help.hiredata.com/apps/messaging/whatsapp/whatsapp-error-codes-explained
Reference guide to the most common WhatsApp error codes in HireData, what each one means, and step-by-step fixes to get your messages delivered again.
*When a WhatsApp message fails to send in HireData, you may see an error code in the conversation overview of the Send Message or Survey task. These codes come directly from Meta and explain why a message wasn't delivered. This article explains what each code means, so you know what's going on.*
## Authentication and permission errors
These errors occur when HireData can't authenticate properly with your WhatsApp Business Account.
### (0) Authentication exception
The access token used to connect your account has expired or been revoked. Messages cannot be sent until this is resolved.
### (190) Access token expired
The access token linked to your WhatsApp connection has expired and needs to be refreshed.
### (200–299) API permission issue
HireData doesn't have the permissions needed to send messages on behalf of your WhatsApp Business Account. This is usually caused by a missing payment method, a conflict with another provider, or an expired access token.
***What to do:*** *See [How to Resolve WhatsApp Business Account Permission Issues](/apps/messaging/whatsapp/how-to-resolve-whatsapp-business-account-permission-issues).*
### (10) Permission denied
HireData is missing a required permission or is no longer eligible to send messages.
## Account and billing errors
These errors relate to the status or billing configuration of your WhatsApp Business Account.
### (368) Account temporarily blocked
Your account has been temporarily blocked due to a policy violation. Messaging is paused until the issue is reviewed and resolved in Meta Business Manager.
\*\*\*What to do:\*\*\**Log in to your [Meta Business Manager](https://www.facebook.com/business/tools/meta-business-suite?content_id=ucfMkKhXkEqVC24\&ref=sem_smb\&utm_term=meta%20business%20manager\&gclid=CjwKCAjw46HPBhAMEiwASZpLRE3o4iBGHx4q8mAkEhnMTwXG17_Eec92qkYRHL2I6MBiuJ0sf-h4kRoC8fkQAvD_BwE\&gad_source=1\&gad_campaignid=21314039965\&gbraid=0AAAAACr-yC_ciGa5Zg7Mvjvr9xEpi0OMx) and review the policy enforcement notice on your account.*
### (131031) Account locked
Your WhatsApp Business Account has been locked, typically due to a policy violation or a two-factor authentication (PIN) mismatch.
\*\*\*What to do:\*\*\**Log in to [Meta Business Manager](https://www.facebook.com/business/tools/meta-business-suite?content_id=ucfMkKhXkEqVC24\&ref=sem_smb\&utm_term=meta%20business%20manager\&gclid=CjwKCAjw46HPBhAMEiwASZpLRE3o4iBGHx4q8mAkEhnMTwXG17_Eec92qkYRHL2I6MBiuJ0sf-h4kRoC8fkQAvD_BwE\&gad_source=1\&gad_campaignid=21314039965\&gbraid=0AAAAACr-yC_ciGa5Zg7Mvjvr9xEpi0OMx) and check your account status.*
### (131057) Account in maintenance mode
Your WhatsApp Business Account is temporarily in maintenance mode, usually because a throughput upgrade is in progress. This resolves itself automatically.
### (130497) Country restricted
Messaging is not permitted in the recipient's country or region based on your current account settings.
### (131042) Payment eligibility issue
Your WhatsApp Business Account doesn't have an active payment method or credit line set up with Meta. Messages cannot be sent until billing is active.
***What to do:*** *See [Add a Valid Payment Method for WhatsApp](/apps/messaging/whatsapp/add-a-valid-payment-method-for-whatsapp).*
### (133010) Phone number not registered
The phone number hasn't been properly onboarded to the WhatsApp Business API.
## Rate limit errors
These errors happen when too many messages are being sent in a short period of time.
### (80007) Business account rate limit
Your WhatsApp Business Account has reached its messaging throughput limit. It applies to your entire WhatsApp Business Account and caps the total volume of messages you can send over a period of time.
### (130429) Rate limit hit
Your account has exceeded the allowed number of messages per second. It's a restriction that kicks in when you're sending too fast in a short window. This lifts automatically after a short period.
### (131048) Spam rate limit
Your phone number has been flagged due to a high volume of messages being blocked or reported by recipients. This affects your number's quality rating with Meta.
\*\*\*What to do:\*\*\**Check your phone number's quality rating in [Meta Business Manager](https://www.facebook.com/business/tools/meta-business-suite?content_id=ucfMkKhXkEqVC24\&ref=sem_smb\&utm_term=meta%20business%20manager\&gclid=CjwKCAjwhqfPBhBWEiwAZo196jHORmdR703fP9fJkUx0gzy4Wduft0nyV2RJxkHUxlxbIFDT_deR_hoC_HAQAvD_BwE\&gad_source=1\&gad_campaignid=21314039965\&gbraid=0AAAAACr-yC9y2Odwg7zSG1UwxxT2UpbMa) under WhatsApp Manager → Phone Numbers.*
### (4) Too many API calls
Your account has hit the app-level rate limit. This is a temporary restriction that lifts automatically.
### (131056) Too many messages to the same user
You've sent too many messages to a single recipient in a short time.
## Conversation window errors
These errors occur when a message is sent outside the rules of WhatsApp's 24-hour conversation window.
### (131049) Message not delivered by Meta
Meta chose not to deliver this marketing message, typically to protect the recipient's experience. This can happen when a recipient receives a high volume of marketing messages.
\*\*\*What to do:\*\*\**Wait at least 24 hours before trying again. Consider whether the template content is relevant and personalised for this recipient.*
### (131047) Re-engagement message without an active window
You tried to send a free-form message after the candidate's 24-hour window had already closed. WhatsApp only allows template messages once the window expires.
\*\*\*What to do:\*\*\**Use an approved WhatsApp template to restart the conversation.*
### (131050) User has opted out
The candidate has blocked or opted out of receiving marketing messages from your number. No further messages can be sent to them.
## General message errors
These are general errors that cover invalid requests or failed deliveries.
### (100) Invalid parameter
The message request contained an unrecognised or misspelt field.
### (131026) Message undeliverable
The message couldn't reach the recipient. This usually means the phone number isn't registered on WhatsApp, the number no longer exists, or the recipient is using an outdated version of the app.
### (131052) Media download error
HireData couldn't download a media file sent by the candidate. This usually means the file is no longer available or the link has expired.
\*\*\*What to do:\*\*\**Ask the candidate to resend the file.*
### (131053) Media upload error
The media file you tried to send uses an unsupported file type or format.
### (131008) Required parameter missing
A required field was not included in the message request.
### (131021) Recipient is the same as sender
The phone number you're trying to send to is the same as the sending number.
### (131000) Unknown error
An unexpected internal error occurred on Meta's side.
\*\*\*What to do:\*\*\**Wait a few minutes and try again. If the error persists, contact us at* *[support@hiredata.com](mailto:support@hiredata.com).*
## Template creation errors
These errors occur when a template is being submitted or saved before it's ever used to send a message.
### (2388072) Body format incorrect
The body of the template contains a formatting issue that doesn't meet Meta's requirements.
### (2388040) Character limit exceeded
One of the template fields contains too much text and exceeds the allowed character limit.
### (2388073) Footer format incorrect
The footer of the template contains a formatting issue.
### (2388047) Header format incorrect
The header of the template uses an invalid format or syntax.
### (2388293) Too many parameters
The template uses more variable placeholders than Meta allows relative to the total text.
### (134101) Template syncing
The template was recently created and is still syncing with Meta's systems. Wait a few minutes before trying again.
### (134102) Template unavailable
The template is currently unavailable due to a sync or eligibility issue.
### (2388299) Variable at the start or end of text
A variable placeholder is positioned at the very beginning or end of the message body, which isn't permitted.
## Template sending errors
These errors occur when a template message is sent, but something about the template or its parameters doesn't match what Meta has on record.
### (132068) Flow blocked
A WhatsApp Flow attached to this template has a configuration issue and is currently blocked.
### (132069) Flow throttled
Too many messages using a WhatsApp Flow have been sent in a short period.
### (132005) Hydrated text is too long
The dynamic values filled into the template's placeholders make the final message too long.
### (132000) Parameter count mismatch
The number of variables passed with the template doesn't match the number of placeholders defined in it.
### (132012) Parameter format mismatch
A variable passed with the template is in the wrong format, for example, a number was expected, but text was sent.
### (132001) Template not found
The template name or language code doesn't match an approved template in your Meta account. This can happen if a template was recently deleted, renamed, or not yet approved.
### (132007) Template content violates policy
The template content includes something that doesn't comply with Meta's messaging policies.
### (132015) Template paused
Meta has temporarily paused this template due to a low quality rating or a high number of user reports.
### (132016) Template disabled
The template has been permanently disabled by Meta following repeated quality issues.
### (132018) Template validation error
There's a parameter issue with the template that prevented it from being validated by Meta.
## Need more help?
If an error persists and you're not sure what's causing it, reach out to us at *[support@hiredata.com](mailto:support@hiredata.com)*. For account-level issues in Meta, you can also contact Meta Business Support directly via [Meta Business Help Center](https://www.facebook.com/business/help).
# WhatsApp inbox basics
Source: https://help.hiredata.com/apps/messaging/whatsapp/whatsapp-inbox-basics
Learn how the HireData WhatsApp inbox is organised, what the coloured indicators mean, and how to collaborate with your team on candidate conversations.
*The WhatsApp inbox in HireData gives you a clear overview of all your candidate conversations, their status, and who is managing them. This article explains how the inbox is organised, what the coloured indicators mean, and how to manage conversations and collaborate with your team.*
## Inbox layout
When you open the **Inbox**, you'll see two main views:
* **My Chats** – Shows conversations you personally own or are currently handling.
* **All Chats** – Displays all WhatsApp conversations across your organisation, based on your permissions.
You'll also see a list of candidates who haven't been messaged yet, allowing you to start new conversations using templates.
## Conversation indicators
Each conversation in the inbox has a coloured dot on the recipient's avatar that tells you the current status of that chat.
### Green: active chat
The conversation is active and being managed by the conversation owner.
* If you see **"Managed by you"**, you are the conversation owner.
* If someone else owns the chat, their name and avatar will appear.
*An ongoing chat managed by you:*
*An ongoing chat managed by another person:*
### Grey: session open, no active chat
The 24-hour messaging window is open, but no conversation is currently active. Any user can send a message during this period.
### Red: session closed
The 24-hour messaging window has expired. You can only reach the candidate again using an approved WhatsApp template, or by waiting for them to reply first.
### Teal: unread inbound message
A teal dot appears on the right side of a manual conversation when the candidate's last message has not been answered yet and has arrived within the last 24 hours.
This indicator is visible in both **My Chats** and **All Chats**, so nothing slips through. It disappears once you reply or when 24 hours have passed since receiving the message.
*Open session (left grey dot) with an inbound message (right teal dot) in the last 24 hours:*
## The 24-hour conversation window
Every WhatsApp conversation has a **24-hour window** that begins when a candidate sends or replies to a message. Each new inbound message resets this 24-hour period, allowing you to continue messaging freely until the window expires.
During this window:
* You can freely exchange messages.
* The system automatically tracks which conversations are open.
When the window expires, you will only be able to message the candidate again using an approved WhatsApp template.
Only the **candidate owner** or the **conversation owner** can send outgoing messages. If a person doesn't have an assigned owner, anyone can message them.
## Sending messages
You can send messages to candidates directly from the WhatsApp inbox, either manually or through automations. What you can send depends on the conversation status shown by the coloured dot next to the chat:
* **Green (active chat):** You can freely send and receive messages during an ongoing conversation managed by the chat owner.
* **Grey (session open, no active chat):** The 24-hour window is open, but there's no current conversation. Any user can send a message to continue the chat before the window closes.
* **Red (session closed):** The 24-hour messaging window has expired. You'll need to use an approved WhatsApp template to restart the conversation or wait for the candidate to respond.
## Using WhatsApp message templates
Message templates are pre-approved WhatsApp messages required to start or reopen a chat outside the 24-hour window. They can include placeholders that automatically pull candidate or job data.
To enable or create a WhatsApp template for manual sending:
1. Go to **Settings → WhatsApp → Message Templates**.
2. Choose an existing approved template or create a new one.
3. Link it to the appropriate form or workflow.
4. The template will then appear in the inbox when messaging a candidate manually.
You can learn more in our detailed guides: [How WhatsApp Templates Work](/apps/messaging/whatsapp/how-whatsapp-templates-work) and [How to Edit WhatsApp Message Templates](/apps/messaging/whatsapp/how-to-edit-whatsapp-message-templates).
## Starting and managing conversations
If a candidate has a linked WhatsApp number:
1. Go to their profile.
2. Open the **Inbox** tab.
3. Click **Send Message**.
4. If the conversation window is open, you can send a message directly.
5. If it's closed, select a WhatsApp template to reopen it.
Open conversations (green dot) appear in:
* **Inbox:** Displays all accessible conversations.
* **My Chats:** Shows conversations you currently manage and that remain open.
## Chat ownership and permissions
A conversation appears in **My Chats** when:
* You are the owner of the candidate or conversation, or
* You've recently interacted with the candidate (sent or received a message).
If you are not the conversation owner, you will not be able to close or modify the conversation, and it will be visible to you in the **All Chats** section.
## Closing conversations
Closing a chat:
* Marks the chat as closed in the inbox (it isn't deleted).
* Removes it from your **My Chats** view.
* Stops automations from sending further messages unless reopened.
## Message reactions
Candidates can react to your WhatsApp messages with emoji reactions. These reactions are visible directly in the inbox, giving you a quick read on how a message landed. Click a reaction to see a full overview of who reacted and how.
## Comments and internal collaboration
You can add internal comments to any conversation directly from the inbox by using **Comments**. This is particularly useful for sharing notes or collaborating with your team without affecting the conversation.
* Comments are visible to all users.
* Comments are not visible to the candidate as they are for internal use only.
## Automations and message labels
Messages marked **"Sent by automation"** were automatically triggered by workflows or rules, for example, reminders or follow-ups when a candidate reaches a certain stage or doesn't respond.
This label helps distinguish automated messages from those sent manually by users.
## Cost and billing overview
* Inbound messages (i.e., when a candidate sends a message first) are **free** for replies within a 24-hour window.
* Outbound messages (when you initiate a conversation) require using an **approved WhatsApp template**, which incurs fees.
* Template costs are billed by Meta Platforms (WhatsApp's platform owner) and vary based on message type and the region being sent to.
* On top of Meta's fees, using WhatsApp through HireData also deducts credits from your HireData plan for each message or automated task.
* You can monitor costs via Meta's billing interface for transparency.
For a detailed breakdown of how WhatsApp message costs and templates are billed, see [How Does the WhatsApp Messaging Cost Structure Work](/apps/messaging/whatsapp/how-does-the-whatsapp-messaging-cost-structure-work).
* **Use All Chats** to get a full picture of what your team is handling, especially useful for managers or team leads.
* **The teal dot is your priority signal.** If a conversation has a teal dot on the right side, a candidate is waiting for a reply.
* **Comments are private.** Candidates will never see what you write there, so use them freely for internal notes.
# WhatsApp template categories in HireData
Source: https://help.hiredata.com/apps/messaging/whatsapp/whatsapp-template-categories-in-hiredata
Learn the difference between WhatsApp template categories in HireData, how Meta classifies each one, and how to pick the right category for deliverability.
*When creating a WhatsApp message template in HireData, you need to choose a category. This tells Meta how to classify and deliver your message. Choosing the wrong category can lead to lower deliverability, spam flags, or policy violations. This article explains what each category means and how to pick the right one.*
## Why the message category matters
Meta uses the template category to determine how a message is treated during delivery. A message sent under the wrong category, for example, a promotional job campaign labelled as Utility, can be [flagged as a policy violation](https://help.hiredata.com/en/articles/643863-how-to-prevent-your-whatsapp-account-from-being-flagged-as-spam), have reduced delivery rates, or contribute to your phone number receiving a lower quality rating.
## What are the template categories
## Marketing
Use this for any message that promotes your organisation, a role, or any other content that isn't directly tied to an action the candidate has already taken.
Examples:
* Outreach to passive candidates
* Job campaign announcements
* Recruitment newsletters
* Re-engagement messages
## Utility
Use this for transactional messages that are triggered by something the candidate or your team has already done - confirming a next step, sending a reminder, or updating a status.
Examples:
* Interview confirmation messages
* Application status updates
* Reminder messages before an interview
* Survey follow-ups linked to a specific process step
## Authentication
Use this for messages that send a one-time code or verify a candidate's identity. This category is rarely needed in day-to-day recruitment workflows.
Examples:
* Verification codes
* One-time passwords
## How to set the category in HireData
### When creating a new message template in HireData
You'll find the category selector in the template builder. Select the category before submitting the template for Meta's approval.
### During the automation set-up
The category selector is also available when converting form fields into message templates inside the automation builder.
### Edit and update categories on draft templates
If a template is still in draft, you can change its category from the settings drawer. Once a template has been submitted and approved by Meta, the category is fixed - you'll need to create a new template if you want to change it.
### Reviewing the template category
You can see the category of each template in the template list, where a **Category** column is shown next to the template name.
### Need more help?
If you're unsure which category fits your use case, reach out to us at [support@hiredata.com](mailto:support@hiredata.com).
# Connect with OTYS
Source: https://help.hiredata.com/apps/otys/connect-with-otys
Step-by-step guide to connect HireData with OTYS, authenticate the integration, and start automating recruitment workflows between the two platforms.
Connect your OTYS account with HireData to unlock the full potential of OTYS within your workflows. For a visual walkthrough, watch the step-by-step video.
## Step 1: Navigating to the OTYS app
Begin by navigating to the [app section](https://app.hiredata.com/apps) within HireData. Here, you'll find the option to [integrate with OTYS](https://app.hiredata.com/apps/otys). This initial step is simple yet fundamental for the integration process.
## Step 2: Creating a new connection
Next, within HireData, select the OTYS app and opt to add a \[+ New Connection]. This process is designed to be straightforward, allowing you to integrate both platforms effortlessly.
*Click \[+ New Connection] and start connecting your OTYS*
## Step 3: Adding your OTYS account name and API key
For a successful integration, two critical pieces of information are required: your OTYS account name and the API key. If you're unsure about these details, reach out to your OTYS representative for assistance.
*Provide your account name and API key to set up a new connection*
## Next step: Creating an OTYS automation in HireData
Now that you've set up the connection with OTYS, let's [create your first OTYS automation](/apps/otys/create-an-otys-automation-in-hiredata) within HireData.
# Create an OTYS automation in HireData
Source: https://help.hiredata.com/apps/otys/create-an-otys-automation-in-hiredata
Learn how to create an OTYS automation in HireData: pick a trigger, map fields, and streamline recruitment workflows without writing a single line of code.
This guide walks you through setting up an OTYS automation in HireData. With this integration, you can automate tasks such as sending Candidate NPS surveys to improve candidate experiences and streamline your recruitment processes. Follow each step below to set up the automation.
## Step 1: Setting up the trigger
After you've [set up the connection with OTYS](/apps/otys/connect-with-otys), the first step in setting up an OTYS automation is to define the trigger. A trigger makes sure HireData "listens" to certain events occurring within OTYS. Don't forget to select all relationships you'll need later on, e.g. select a candidate when you want to send a survey to them in a further step within the automation. Here's how to do it:
*Example Trigger: Procedure: Created or Updated*
*Select the related objects you'll need later on in the automation, e.g. a user you want to be the sender of a message and the recipient(s) of that message*
## Step 2: Adding a filter
Once you've set up the trigger, it's essential to add filters to ensure that the automation is triggered under specific conditions. Follow these steps:
*Example Filter: If procedure status 2 equals one of these stages*
## Step 3: Adding a delay
In some cases, you may want to introduce a delay before executing the automation. Here's how to add a delay:
*Example Delay: 1 day (e.g., to inform a candidate about landing the job before sending a post-placement survey)*
## Step 4: Setting up the 'Send Survey' task
Next, configure the task to send the Candidate NPS survey. Follow these steps:
*4.1. Select your survey template:*
*4.2. Choose the recipient of the survey:*
*4.3. Specify the sender of the survey:*
*4.4. Configure the timing of the survey:*
*4.5. Ensure all settings are correct and save your task:*
## Step 5: Activating your automation
Once you've completed the setup, it's time to activate your automation. With this step, your OTYS automation is ready to go, streamlining your recruitment processes effortlessly.
*Click the \[Activate] button to turn your automation on*
By setting up an OTYS automation within HireData, you can automate tasks such as sending Candidate NPS surveys, thereby improving candidate experiences and optimizing your recruitment workflows. With the step-by-step guide provided in this tutorial, you can efficiently set up and activate your automation, saving time and resources while enhancing your recruitment efforts.
# Manually sync OTYS with HireData
Source: https://help.hiredata.com/apps/otys/manually-sync-otys-with-hiredata
Trigger a manual sync between OTYS and HireData to refresh objects, fields, and statuses so your automations always run against up-to-date recruitment data.
Manually sync your OTYS account with HireData to update objects, statuses, and users on demand. This lets you use a newly created or updated candidate status, custom field, or match stage without waiting for the daily sync.
To do that, you should first [connect your OTYS](/apps/otys/connect-with-otys) account with HireData.
Once the connection is established, HireData automatically schedules a sync to import the users' data from OTYS. That is required so the users can automatically send different types of communication through the platform. HireData then schedules daily resyncs in case you make any changes in your OTYS profile.
However, you can also manually sync when, for instance, you want to see the changes you have made in your OTYS environment reflected in your HireData profile immediately. Here is how to do it:
## Step 1: Navigate to the Settings page
Log in to your HireData account and open the Settings page via the \[Settings] button above your name.
## Step 2: Open the Apps menu
## Step 3: Select the OTYS app
You can open the OTYS app either by clicking the name or the \[View app] button.
## Step 4: Sync the data
Click the \[Sync] button located in the drop-down menu of the company's connection.
After you have clicked it, you will see the syncing progress.
Finally, when the sync has finished successfully, you should receive this message at the bottom of the Data Sync Timeline:
# OTYS integration overview
Source: https://help.hiredata.com/apps/otys/overview
Learn what the HireData OTYS integration syncs, which recruitment automations it supports, and how to get started connecting your OTYS account today.
Connect OTYS to HireData to start automations from recruitment events and use OTYS data in messages, surveys, conditions, and follow-up workflows.
## What the integration provides
HireData receives events from OTYS and makes the selected record and its related data available to an automation. For example, a procedure being created or updated can start a workflow. You can add filters so the workflow continues only for the stages, statuses, or other values you choose.
## What you can automate
With an OTYS connection, you can:
* Start workflows when supported OTYS records are created or updated
* Filter events using OTYS fields and related records
* Send personalized email, WhatsApp, or survey messages
* Add delays before a message or follow-up
* Combine OTYS data with HireData forms, templates, and messaging tasks
The objects, fields, and tasks shown in the automation builder are the capabilities available for your connection.
## How data stays current
After the connection is created, HireData imports connection data such as users, objects, fields, and statuses and schedules daily resyncs. If you add or change something in OTYS and need it immediately, run a [manual sync](/apps/otys/manually-sync-otys-with-hiredata).
## Get started
Add the OTYS app in HireData using your account name and API key. Ask your OTYS representative if you do not have these credentials.
Select OTYS as the trigger app, choose the object and event, then include every related record you will need later in the workflow.
Limit the audience with filters, add any required delay, and configure the message, survey, or other available task.
Run the automation with sample data and confirm that each step uses the expected OTYS values.
## OTYS guides
* [Connect with OTYS](/apps/otys/connect-with-otys)
* [Manually sync OTYS](/apps/otys/manually-sync-otys-with-hiredata)
* [Create an OTYS automation](/apps/otys/create-an-otys-automation-in-hiredata)
* [Test an automation](/automations/how-to-test-an-automation)
# Connect with Ratecard
Source: https://help.hiredata.com/apps/ratecard/connect-with-ratecard
Effortlessly connect HireData with Ratecard: a simple, efficient guide to sending automated surveys and collecting reviews via HireData.
Connect your Ratecard account with HireData to unlock the full potential of Ratecard within your workflows. For a visual walkthrough, watch the step-by-step video.
## Step 1: Navigating to the Ratecard app
Begin by accessing the [app section](https://app.hiredata.com/apps/) in HireData. Here, you'll find the [Ratecard app](https://app.hiredata.com/apps/ratecard). Selecting Ratecard is your first step towards integration.
## Step 2: Creating a new connection
Once you've selected Ratecard, click the \[+ New Connection] button. This action will initiate the process of linking your Ratecard account with HireData.
*Click \[+ New Connection] and start connecting your Ratecard*
## Step 3: Acquiring the access token
To proceed, acquire an access token by clicking the link provided in HireData. This token is crucial for establishing a secure connection between your Ratecard and HireData accounts.
*Provide your access token to set up a new connection*
# Using custom fields to personalise surveys
Source: https://help.hiredata.com/apps/ratecard/using-custom-fields-to-personalise-surveys
Use HireData custom fields to personalise Ratecard surveys with candidate-specific data, boost response rates, and collect more relevant recruitment feedback.
*To increase your survey response rates and tailor your surveys to specific audiences, using custom fields is essential. Custom fields let you personalise surveys, making them more engaging and relevant to respondents. By following a few simple steps, you can integrate custom fields into your surveys and gather more useful, accurate data.*
## Step 1: Choosing a survey template with custom fields
When personalising a survey with custom fields, the first step is selecting a survey template that includes these fields. Look for templates that offer variables such as %jobtitle% and %client% to customise the survey content based on respondent details. This ensures that the survey is relevant and engaging to each participant, increasing the likelihood of a higher response rate.
*Preview of a survey template with custom fields %jobtitle% and %client%*
## Step 2: Editing survey settings
After selecting a survey template with custom fields, the next step is to edit the survey settings within your automation platform. Locate the "Send Survey" block and click \[Edit], then navigate to \[Settings]. Here, you can configure various settings such as the survey's timing, frequency, and targeting criteria. Adjust these settings to ensure that your survey is delivered to the right audience at the right time, maximizing response rates and data accuracy.
*Click \[Edit] for the Send Survey block and navigate to \[Settings]*
## Step 3: Adding custom fields
To further personalise your survey, add custom fields and populate them with variables from your connected app. These custom fields let you dynamically insert respondent-specific information, such as names, job titles, or client details, into the survey. This level of customisation enhances the survey experience, making it more relevant and engaging for each participant.
*Add (a) custom field(s) and populate them with variables from your connected app*
# Connect with Recruitee
Source: https://help.hiredata.com/apps/recruitee/connect-with-recruitee
Step-by-step guide to connect HireData with Recruitee, authenticate your account, and start automating recruitment workflows between the two platforms.
Connect your Recruitee account with HireData to unlock the full potential of Recruitee within your automations. For a visual walkthrough, watch the **Connect with Recruitee Video** at the end.
## Step 1: Navigating to the Recruitee app
Begin by navigating to the [Apps section](https://app.hiredata.com/settings/apps) within HireData. You can find this under Settings > Apps. Here, you’ll see the option to [integrate with Recruitee.](https://app.hiredata.com/apps/recruitee) This initial step is simple but essential for the integration process.
## Step 2: Creating a connection with Recruitee
Open the app and click **Connect to Recruitee** to start the integration process. This will allow HireData to connect with your Recruitee account.
### 2.1. Create API token
Click '**here'** to create a new API token in Recruitee.
Make sure your user has these roles:
* Basic permissions → Collaborate on candidates, Join hiring teams
* Jobs → View all existing jobs data
* Hires → View hired candidates
* Add-ons → Manage API tokens
Now copy the generated API token and paste it below to connect Recruitee with HireData.
### 2.2. Copy your Recruitee Company ID
Under **Current company details in Recruitee**, you’ll see your **Company ID**. Simply copy this ID and paste it into the HireData field.
Once filled in, click \[Continue] to complete the connection with Recruitee.
## Step 3: Recruitee connected!
After you've clicked \[Continue], you've finished setting up the connection between Recruitee and HireData. When it's the first time you've set up this connection, HireData might need a few minutes to sync data from your Recruitee database. After that, you're all set to [set up your first Recruitee automation](/apps/recruitee/create-a-recruitee-automation-in-hiredata) in HireData.
***
# Video guide
# Create a Recruitee automation in HireData
Source: https://help.hiredata.com/apps/recruitee/create-a-recruitee-automation-in-hiredata
Build a Recruitee automation in HireData: choose a trigger, map candidate fields, and streamline hiring workflows without writing a single line of code.
This guide walks you through setting up a Recruitee automation in HireData. With this integration, you can automate tasks such as sending Candidate NPS surveys to improve candidate experiences and streamline your recruitment processes. Follow each step below to set up the automation.
## Step 1: Setting up the automation
After you've set up the [connection with Recruitee](/apps/recruitee/connect-with-recruitee), you can create your first automation. Log in to HireData and navigate to the **Automations** page, where you can find and click the \[New Automation] button.
### 1.1 Choose Blank Automation or any of the available templates
If you want complete control and the freedom to design every step of your workflow exactly as you need, then **Blank Automation** is the right choice. It allows you to build a fully customised process from the ground up.
On the other hand, if you prefer a quick, ready-made solution, select any of the templates, and the automation will be created for you.
## Step 2: Define the trigger
The second step is to define the trigger. A trigger makes sure HireData “listens” to specific events occurring within Recruitee. To set this up, first select the app, then the object, and finally the trigger that should start the automation. You can also apply filters at this stage to narrow down when the automation runs, for example by targeting only applications that meet certain criteria.
*Example Trigger: Application: Created or Updated*
Select the timing for when the automation should run, e.g. only when an item is created, updated, or both.
## Step 3: Adding a filter
Once you've set up the trigger, it's essential to add filters to ensure that the automation is triggered under specific conditions.
Filters can be added directly to the trigger, ensuring the automation only runs when specific conditions are met. They can also be created as a separate building block, which is especially useful when multiple filter sets are needed for more complex workflows. Follow these steps:
*Example Filter: If Outcome equals Declined*
*Filters ensure that the automation only runs for candidates you want to reach (e.g., rejected candidates).*
## Step 4: Adding a delay
In some cases, you may want to introduce a delay before executing the automation. A delay is when the automation waits a certain amount of time before performing the next action. Here's how to add it:
*Example Delay: 1 day (e.g., to inform a candidate about landing the job before sending a post-placement survey)*
## Step 5: Setting up the 'Send Email' task
Next, configure the task to send the Candidate NPS survey. Follow these steps:
### 5.1 Add a block from the \[+] and then click \[Message]
### 5.2 In this step, you can decide what type of message you would like to send
### 5.3 Now, select the template you would like to use
### 5.4 Select the branding of your email
### 5.5 Choose the recipient of the message
### 5.6 Specify the sender of the survey
### 5.7 Ensure all settings are correct and save your task
### 5.8 Review the automation
After you have set up your first Automation, we advise reviewing to ensure everything is set up correctly and that it runs smoothly.
**Here is how the example automation in this guide will work:**
When an application is updated to **Declined**, HireData will receive an event from Recruitee. Then the automation will wait one day while skipping weekends to avoid delays (optional). After this short pause, the candidates who meet the criteria will receive a personalised email addressing them by name and including a feedback form.
This approach makes the rejection process more thoughtful and professional, while also giving you the chance to collect valuable feedback from candidates to improve the hiring experience.
## Step 6: Activating your automation
Once you've completed the setup, it's time to activate your automation. With this step, your Recruitee automation is ready to go, streamlining your recruitment processes effortlessly.
*Click the \[Activate] button to turn your automation on*
By setting up a Recruitee automation within HireData, you can automate tasks such as sending Candidate NPS surveys, thereby improving candidate experiences and optimizing your recruitment workflows. With the step-by-step guide provided in this tutorial, you can efficiently set up and activate your automation, saving time and resources while enhancing your recruitment efforts.
***
# Video guide
# Recruitee integration overview
Source: https://help.hiredata.com/apps/recruitee/overview
Learn what the HireData Recruitee integration syncs, which recruitment automations it supports, and how to get started connecting your Recruitee account.
Connect Recruitee to HireData to respond automatically to application and candidate changes. HireData can use Recruitee event data to select an audience, personalize communication, and run follow-up tasks.
## What the integration provides
The connection uses a Recruitee API token and Company ID. The permissions assigned to that token determine which candidate, job, hiring, and related data HireData can access.
Supported Recruitee events can start an automation. For example, an application being created or updated can trigger a workflow, while conditions can limit it to a stage such as **Declined**.
## What you can automate
Common Recruitee workflows include:
* Send a personalized email after an application-stage change
* Request candidate feedback or send a survey
* Add conditions so only the intended applications enter the workflow
* Wait for a defined period before sending a follow-up
* Use candidate, job, sender, and other related values in message templates
## How data becomes available
The initial connection may take a few minutes to sync. If expected records or fields are missing, first confirm that the Recruitee user behind the API token has the permissions listed in the connection guide.
The objects, fields, and tasks displayed in the HireData automation builder reflect what is available through your connection.
## Get started
Use a Recruitee user with permission to work with candidates, jobs, hires, and API tokens.
Enter the API token and Company ID in HireData, then wait for the initial connection to finish.
Choose a Recruitee object and event, add conditions, and configure the message or other available task.
Confirm the trigger data, recipients, and task output before allowing live events to enter the automation.
## Recruitee guides
* [Connect with Recruitee](/apps/recruitee/connect-with-recruitee)
* [Create a Recruitee automation](/apps/recruitee/create-a-recruitee-automation-in-hiredata)
* [Test an automation](/automations/how-to-test-an-automation)
* [Inspect incoming events](/settings/logs/events)
# Connect with Salesforce
Source: https://help.hiredata.com/apps/salesforce/connect-with-salesforce
Step-by-step guide to connect HireData with Salesforce, authenticate the integration, and start syncing recruitment data between the two platforms.
This guide shows you how to integrate your Salesforce account with HireData. The process is straightforward and enhances your recruitment workflow. See the video below for a recorded walkthrough.
## Step 1: Navigating to the Salesforce app
Start by navigating to the [app section](https://app.hiredata.com/apps) within HireData. There you'll find the option to [connect with Salesforce](https://app.hiredata.com/apps/salesforce). It's a simple process that forms the foundation of this integration.
## Step 2: Filling out your login credentials
Next, click **\[+ New Connection]** and enter your Salesforce login credentials. HireData applies high security standards to protect your data.
\_2.1: Click \[+ New Connection] and start connecting your Salesforce\_
*2.2: Click \[Connect]*
*2.3: Log In to Salesforce using a user with admin rights:*
## Step 3: Using a custom domain (if applicable)
If you're using a custom domain in Salesforce, we provide specific instructions at the 00:24 mark of our video. This step is crucial for a seamless connection between the two platforms.
*Click \[Use custom domain] and make sure your custom domain is filled in:*
# Salesforce integration overview
Source: https://help.hiredata.com/apps/salesforce/overview
Learn what the HireData Salesforce integration syncs, which recruitment automations it supports, and how to get started connecting your Salesforce org.
Connect Salesforce to HireData to make authorized Salesforce data available to recruitment workflows. The records and actions you can use depend on your Salesforce configuration and the permissions of the user who authorizes the connection.
## How the connection works
HireData connects through Salesforce's authorization flow. Sign in with a user who has the required administrative access and approve the connection. If your organization uses a custom Salesforce domain, select **Use custom domain** during sign-in.
Once connected, open the HireData automation builder and select Salesforce to see the objects, fields, events, and tasks available to your organization.
## What you can build
Depending on the capabilities available through your connection, a Salesforce-based workflow can:
* Start from a supported Salesforce event
* Apply conditions using fields received from Salesforce
* Use Salesforce and related HireData values in messages or forms
* Combine Salesforce data with email, WhatsApp, survey, delay, and other HireData tasks
* Record each execution in HireData's event and run logs
Salesforce organizations can differ significantly. Use the automation builder as the source of truth for the objects and actions enabled for your connection.
## Get started
Open **Apps** in HireData, select Salesforce, and start a new connection.
Sign in with a Salesforce user that has the required access. Use your custom domain when your organization requires it.
Create or open an automation and select Salesforce to inspect the available trigger objects, fields, and tasks.
Use a safe test record and confirm the event data and run timeline before processing live records.
## Salesforce guides
* [Connect with Salesforce](/apps/salesforce/connect-with-salesforce)
* [Create and manage automations](/automations/automations)
* [Test an automation](/automations/how-to-test-an-automation)
* [Inspect events](/settings/logs/events)
* [Read automation runs](/settings/logs/runs)
# Add an activity or item in Vincere with HireData
Source: https://help.hiredata.com/apps/vincere/add-an-activity-or-item-in-vincere-with-hiredata
Use HireData automations to automatically add activities or items in Vincere, keeping candidate and client records up to date without manual admin work.
Automatically add an activity or item in Vincere with HireData. Follow this guide to get the most out of Vincere automations.
Before we start setting up this automated task, make sure you've [set up the connection with Vincere](/apps/vincere/connect-with-vincere) and are familiar with [how to create a Vincere automation](/apps/vincere/create-a-vincere-automation-in-hiredata) in HireData. Now let's start configuring this automated task.
## Step 1: Adding a task to your automation
### 1.1. In your automation, click the \[+] to open up the building block panel
### 1.2. Click \[Add] in the building block panel
### 1.3. Choose activity or item task
## Step 2: Choosing the activity or item type
These are the currently supported Types that you can choose from:
* Candidate
* Candidate URL Document
* Candidate Note
* Company
* Contact
* Job
* Meeting
*Select the activity or item type you'd like to add or log in Vincere:*
## Step 3: Filling in the item's fields
Now, you can complete the activity's or item's fields. You have the option to incorporate variables by clicking the icon located in the top-right corner. Both static and dynamic data can be used to populate the task. Remember to click \[Save Task] when finished.
*Click the curly brackets for the Variables menu:*
# Connect with Vincere
Source: https://help.hiredata.com/apps/vincere/connect-with-vincere
Step-by-step guide to connect HireData with Vincere, authenticate the integration, and start automating recruitment workflows between the two platforms.
Connect your Vincere account with HireData to unlock the full potential of Vincere within your automations. For a visual walkthrough, watch the step-by-step video.
## Step 1: Navigating to the Vincere app
Begin by navigating to the [app section](https://app.hiredata.com/apps) within HireData. Here, you'll find the option to [integrate with Vincere](https://app.hiredata.com/apps/vincere). This initial step is simple yet fundamental for the integration process.
## Step 2: Creating a new connection
Click \[+ New Connection] and enter the required Vincere details: your tenant, client ID, and API key. If you don't have a client ID and API key yet, get in touch with your account manager at Vincere. We prioritize your security, ensuring that your credentials are protected throughout the integration process.
*2.1: Click \[+ New Connection] and start connecting your Vincere*
*2.2: Provide your tenant, client ID, and API key to set up a new connection*
## Step 3: Log in to Vincere
After you've configured your connection, you're asked to log in to Vincere. Make sure you're logging in with a user that has admin rights assigned to it.
*Log In to Vincere using a user with admin rights:*
## Step 4: Vincere connected!
After you've logged in to your Vincere environment and given your consent to HireData, you've finished setting up the connection between Vincere and HireData. Please check out the tutorial for a full step-by-step guide on how to set up the connection.
## Next step: Creating a Vincere automation in HireData
Now that you've set up the connection with Vincere, let's [create your first Vincere automation](/apps/vincere/create-a-vincere-automation-in-hiredata) within HireData.
# Create a Vincere automation in HireData
Source: https://help.hiredata.com/apps/vincere/create-a-vincere-automation-in-hiredata
Build a Vincere automation in HireData: pick a trigger, map candidate fields, and streamline recruitment workflows without writing any code at all.
This guide walks you through setting up a Vincere automation in HireData. With this integration, you can automate tasks such as sending Candidate NPS surveys to improve candidate experiences and streamline your recruitment processes. Follow each step below to set up the automation.
## Step 1: Setting up the trigger
After you've [set up the connection with Vincere](/apps/vincere/connect-with-vincere), the first step in setting up a Vincere automation is to define the trigger. A trigger makes sure HireData "listens" to certain events occurring within Vincere. Don't forget to select all relationships you'll need later on, e.g. select a candidate when you want to send a survey to them in a further step within the automation. Here's how to do it:
*Example Trigger: Application Status Changed*
*Select the related objects you'll need later on in the automation, e.g. a user you want to be the sender of a message and the recipient(s) of that message*
## Step 2: Adding a filter
Once you've set up the trigger, it's essential to add filters to ensure that the automation is triggered under specific conditions. Follow these steps:
*Example Filter: If application status equals placed*
## Step 3: Adding a delay
In some cases, you may want to introduce a delay before executing the automation. Here's how to add a delay:
*Example Delay: 1 day (e.g., to inform a candidate about landing the job before sending a post-placement survey)*
## Step 4: Setting up the 'Send Survey' task
Next, configure the task to send the Candidate NPS survey. Follow these steps:
*4.1. Select your survey template:*
*4.2. Choose the recipient of the survey:*
*4.3. Specify the sender of the survey:*
*4.4. Configure the timing of the survey:*
*4.5. Ensure all settings are correct and save your task:*
## Step 5: Activating your automation
Once you've completed the setup, it's time to activate your automation. With this step, your Vincere automation is ready to go, streamlining your recruitment processes effortlessly.
*Click the \[Activate] button to turn your automation on*
By setting up a Vincere automation within HireData, you can automate tasks such as sending Candidate NPS surveys, thereby improving candidate experiences and optimizing your recruitment workflows. With the step-by-step guide provided in this tutorial, you can efficiently set up and activate your automation, saving time and resources while enhancing your recruitment efforts.
# Manually sync Vincere with HireData
Source: https://help.hiredata.com/apps/vincere/manually-sync-vincere-with-hiredata
Trigger a manual sync between Vincere and HireData to refresh objects, fields, and statuses so your automations always run against up-to-date data.
Manually sync your Vincere account with HireData to update objects, statuses, and users on demand. This lets you use a newly created or updated candidate status, custom field, or match stage without waiting for the daily sync.
To do that, you should first [connect your Vincere](/apps/vincere/connect-with-vincere) account with HireData.
Once the connection is established, HireData automatically schedules a sync to import the users' data from Vincere. That is required so the users can automatically send different types of communication through the platform. HireData then schedules daily resyncs in case you make any changes in your Vincere profile.
However, you can also manually sync when, for instance, you want to see the changes you have made in your Vincere environment reflected in your HireData profile right away. Here is how to do it:
## Step 1: Navigate to the Settings page
Log in to your HireData account and open the **Settings** page via the \[Settings] button above your name.
## Step 2: Open the Apps page
## Step 3: Select the Vincere app
You can open the Vincere app either by clicking the name or the \[View app] button.
## Step 4: Sync the data
Click the \[Sync] button located in the drop-down menu of the company's connection.
After you have clicked it, you will see the progress of the syncing.
Finally, when the sync has finished successfully, you should receive this message at the bottom of the Data Sync Timeline:
# Vincere integration overview
Source: https://help.hiredata.com/apps/vincere/overview
Learn what the HireData Vincere integration syncs, which recruitment automations it supports, and how to get started connecting your Vincere account.
Connect Vincere to HireData to automate communication, recruiter follow-up, and record updates from changes in your recruitment workflow.
## What the integration provides
HireData receives supported Vincere events and makes their fields and related records available to automations. For example, an application-status change can start a workflow. Conditions can then limit the workflow to the statuses, candidates, jobs, or other values you choose.
## What you can automate
Common Vincere workflows include:
* Send personalized email, WhatsApp, or survey messages
* Schedule candidate, contact, job, personal, or project tasks in Vincere
* Add activities or items to Vincere records
* Update Vincere fields from an automation
* Add filters and delays before a follow-up
* Assign recruiter tasks using Vincere user data
## How data stays current
HireData imports connection data such as users, objects, fields, and statuses after you connect and schedules daily resyncs. Run a [manual sync](/apps/vincere/manually-sync-vincere-with-hiredata) when a recent Vincere change needs to appear immediately.
## Get started
Add the Vincere app using your tenant, client ID, and API key, then authorize HireData with a Vincere admin user.
Select a Vincere object and event, then include every relationship you need for recipients, senders, conditions, or later tasks.
Filter the incoming records and configure the communication, record update, activity, or scheduled task.
Test with a safe record, verify both HireData's run and the result in Vincere, then activate the automation.
## Vincere guides
* [Connect with Vincere](/apps/vincere/connect-with-vincere)
* [Manually sync Vincere](/apps/vincere/manually-sync-vincere-with-hiredata)
* [Create a Vincere automation](/apps/vincere/create-a-vincere-automation-in-hiredata)
* [Schedule a task in Vincere](/apps/vincere/schedule-a-task-in-vincere-with-hiredata)
* [Add an activity or item](/apps/vincere/add-an-activity-or-item-in-vincere-with-hiredata)
* [Update fields in Vincere](/apps/vincere/update-fields-in-vincere-with-hiredata)
# Schedule a task in Vincere with HireData
Source: https://help.hiredata.com/apps/vincere/schedule-a-task-in-vincere-with-hiredata
Automatically schedule tasks and follow-ups in Vincere through HireData, so recruiters always know what to do next and never miss a candidate action.
Use the Vincere Scheduled Task action to automatically create scheduled tasks in Vincere whenever a trigger event fires in a HireData automation. This is ideal for automating reminders and follow-ups so no task is overlooked. Follow along to learn how to use it.
## Step 1: Create or edit an automation
In your HireData account, navigate to the **Automations** section and either create a new workflow or open an existing one by clicking **+ New Automation**.
## Step 2: Add the action
### 2.1. Click **Blank Automation** to start a new automation from scratch
Selecting Blank Automation will create a new automation
### 2.2. Click in the first building block/trigger to bring up the app panel and select **Vincere**
Clicking the First Building block you'll be able to choose which App to link this to
### 2.3. Select the trigger for the automation
Follow the setup steps to choose how you would like this automation to trigger and click **Save**.
Selecting the Object value for the app
Choosing the timing in which you would like the trigger to adhere to
Checking that everything is correct and saving the trigger
### 2.4. Click the 2nd building block to open the action panel and click **Add** to create a new task
### 2.5. Navigate until you see the Vincere logo along with the text **Task**
## Step 3: Fill in the task details
* **Type:** Choose the Item Type you would like the Task to correspond to. This can be:
* Candidate - A task relating to the Job Seeker
* Contact - A task tied to the Client Contact
* Job - A task relating to a Job Order or Vacancy
* Personal - A task for your own use, such as reminders or admin duties
* Project - A task associated with a larger project or campaign
* **Subject:** Enter a clear and descriptive subject for the task (e.g., "Test project, local")
* **Description:** Provide a detailed description of the task
* **Start/End Date:** Set the task's start and end dates. You can also set a delay if you wish
* **Reminders:** Add a reminder to ensure the task is not forgotten
* **Assignee:** Assign the task to the relevant user in Vincere
## Step 4: Save and test
Click **Save Task** to finalise the task configuration and [run the automation workflow to test it](/automations/how-to-test-an-automation).
## Step 5: Confirm the task
* **HireData** – Navigate to **Task History** to verify it was created.
* **Vincere** – Open **Email View → Task Tab**.
# Update fields in Vincere with HireData
Source: https://help.hiredata.com/apps/vincere/update-fields-in-vincere-with-hiredata
Use HireData automations to update candidate, vacancy, and contact fields in Vincere automatically, cutting manual admin work for your recruitment team.
Update one or more fields across different objects in Vincere with HireData. Follow this step-by-step guide to learn how to update any field yourself.
Before updating the fields in the object, you should have already created an [automation in Vincere](/apps/vincere/create-a-vincere-automation-in-hiredata).
## Step 1: Open the building blocks menu
First, log in to your HireData account and open the automation you want to edit. Then click the plus icon \[+] at the end of the automation to open the Building Blocks menu on the right side of the screen. After you have opened the menu, select \[Update].
## Step 2: Select the object you want to edit
Choose the object you want to edit, which currently can be one of these:
* Candidate
* Company
* Contact
* Job
* Meeting
* Task
*For this example, we have selected the candidate:*
## Step 3: Select an identifier
Now you have to select an identifier, which will be used to find the object that you want to update.
For this guide, use the \[ID] as an identifier and the \[Candidate: ID] as the value to track. In other words, use the Candidate ID to track the candidate you want to update in the automation.
***The displayed values will be different depending on the selected object and identifier.***
## Step 4: Update the fields
Now, you can select all the fields you want to update. You can select as many as you want; use the search bar to find them.
Edit the fields and click the \[Save Task] button at the bottom of the page.
## Step 5: Review
Last but not least, review the task pop-up, which will appear at the end of the automation, to ensure everything runs smoothly.
# Automations
Source: https://help.hiredata.com/automations/automations
Get started with HireData automations: learn the core concepts, watch a product demo, and create your first event-triggered or scheduled automation in minutes.
*Explore the power of automations in this concise video guide, covering everything from basic concepts to setting up your own automation. The video includes a detailed product demo and insights on event-triggered versus scheduled automations.*
Choose a step and see what it does in a run.
Find the tasks available for each connected app and the reference for each one.
Trace an event through its run, step data, task, and outcome.
# How to restore a deleted automation
Source: https://help.hiredata.com/automations/how-to-restore-a-deleted-automation
Recover a deleted automation in HireData by finding it in the trash, restoring it in a few clicks, and reactivating it so recruitment workflows keep running.
*Accidentally deleted an automation or changed your mind? No worries, you can easily restore deleted automations from within the Automations page in HireData. Follow the steps below to bring them back into your active workflows.*
## Step 1: Enable the deleted automations view
Go to the **Automations** page in HireData and click the **Filters** drop-down menu at the top of the page. Toggle the option to **Show deleted**.
*Deleted Automations view:*
## Step 2: Select automation(s) to restore
You’ll now see a list of the deleted automations in your account. Check the box next to one or multiple automations you'd like to restore.
## Step 3: Restore the automation(s)
Once selected, click the **Restore** button at the top of the list.
Then, clear the filters to return to the default view and see if your automation(s) have been correctly restored.
## That's it!
Your automation is now ready to use and activate. If you're unsure about whether changes were preserved, open the restored automation to review and make any needed updates.
***
## Video guide
# How to test an automation
Source: https://help.hiredata.com/automations/how-to-test-an-automation
Test your HireData automations with sample data before going live, catch errors early, and validate every step so your recruitment workflows run smoothly.
*Before activating an automation in HireData, test it to make sure it runs as expected. There are two ways to test an automation: **Preview a Single Item** and **Test with a User**. This guide walks through how to test with a user.*
## Selecting how to test an automation
Navigate to the automation you want to test and click the test icon in the top-right corner of the screen. This will open the automation testing panel.
You will be given two options:
* **Test with a User**: This runs the automation using real user data, such as an email address or phone number, to simulate the actual experience of, for example, sending an email or starting a WhatsApp conversation.
* **Preview a Single Item**: This allows you to see how the automation would process an individual item without actually running tasks.
## Testing with a user
This is the better choice if you want to see the whole experience of running an automation.
### Step 1: Choose the user whose data will be used for testing
This user will receive emails or messages as if the automation was live. Once selected from the drop-down menu, click \[Run Test] to initiate the process.
### Step 2: Monitor the timeline
HireData displays a timeline of each step of the automation as it runs. You will see alerts such as:
* Run Scheduled
* Run Started
* Interaction Started
* Email Sent (or other task execution)
* Run Finished
Wait for the test to complete and ensure all steps progress smoothly.
### Step 3: Check the user’s inbox
If the automation includes sending an email, go to the selected user's inbox (for example, yours) and verify that the email was delivered correctly.
* Check the formatting and content to ensure it appears as expected;
* Go through the form to ensure all questions are set up correctly.
### Step 4: Review the run and event details
After the test run, you can click **View Details** to check specific event logs, including:
* Email delivery status (sent, delivered, opened, clicked, or bounced)
* Any delays in execution
* Data values used in the test
*Automation overview details:*
*Fields details:*
*Related automation and event:*
## Testing with Preview a Single Item
You can use this to see how the automation would process an individual item without actually running tasks.
### Step 1: Choose the match/item you would like to test with and click Run Test
### Step 2: Monitor the timeline
HireData displays a timeline of each step in the automation as it runs. You will see alerts such as:
* Run Scheduled
* Run Started
* Interaction Started
* Email Sent (or other task execution)
* Run Finished
Wait for the test to complete and ensure all steps progress smoothly.
*Email Sent step with more details:*
### Step 3: Review the run and event details
After the test run, you can click **View Details** to check specific event logs, including:
* Email delivery status (sent, delivered, opened, clicked, or bounced)
* Any delays in execution
* Data values used in the test
## Adjusting an automation and testing again if necessary
If you notice an issue, such as missing information or an error in execution, return to the automation editor, make the necessary adjustments, and test again until the automation runs correctly.
By following these steps, you can ensure that your automation works properly before activating it, preventing errors and improving efficiency.
# How HireData works
Source: https://help.hiredata.com/concepts/how-hiredata-works
Understand the core HireData model: events trigger automations, automations create runs, and runs execute tasks that update your ATS and messaging tools.
HireData connects the changes in your recruitment tools to repeatable workflows. The core flow is:
**Event → Automation → Run → Task**
Understanding these four parts makes it easier to build an automation and diagnose what happened afterward.
## Event: something changed
An **event** is a signal from a connected app. It contains the record and values available at the moment the change occurred.
Examples include:
* A candidate was created
* An application or match changed stage
* A vacancy was updated
* A placement was completed
* A WhatsApp conversation ended
HireData stores incoming events so you can inspect their data and see which automations processed them. Learn more in [Events](/settings/logs/events).
## Automation: the rules you define
An **automation** describes when HireData should act and what it should do. It normally contains:
1. A trigger that selects the app, object, and event
2. Conditions or filters that decide whether the record should continue
3. Optional delays or branches
4. One or more tasks
An automation must be active before new matching events can start it. See [Automations](/automations/automations) and [Test your automations](/automations/how-to-test-an-automation).
## Run: one execution of an automation
A **run** is created when one event enters one automation. It records the exact path that event followed through the workflow.
A run shows:
* The trigger and event that started it
* Which conditions passed or failed
* Delays and branches
* Every task that completed, stopped, or was cancelled
* The fields used or created by each step
Use [Runs](/settings/logs/runs) when you need to understand why a workflow produced a particular result.
## Task: one action inside a run
A **task** is an action performed by an automation. Examples include:
* Send an email or WhatsApp message
* Send a form or survey
* Update a field in an ATS
* Create an activity or scheduled recruiter task
* Send an HTTP request to another system
Completed and cancelled actions are also available in [Task history](/pages/task-history).
## Example: follow up after a placement
Suppose a match changes to **Placed** in your ATS:
1. The ATS sends a match-updated **event** to HireData.
2. An active placement-follow-up **automation** checks whether the stage is **Placed**.
3. HireData creates a **run** for that event.
4. The run waits seven days, then executes a **task** that sends the candidate a survey.
5. The event, run, and task result remain available in the logs.
Each new matching event creates its own run, so multiple candidates can move through the same automation independently.
## Where to inspect each part
| Part | What to check | Where to find it |
| ---------- | ------------------------------------------------------ | --------------------------------------- |
| Event | Incoming fields, raw payload, and associated processes | [Events](/settings/logs/events) |
| Automation | Trigger, conditions, steps, and active status | [Automations](/automations/automations) |
| Run | Timeline, step result, fields, and related event | [Runs](/settings/logs/runs) |
| Task | Completed or cancelled action and its source event | [Task history](/pages/task-history) |
## When something does not run
Start at the beginning of the flow:
1. Confirm that the event arrived.
2. Confirm that the automation was active and its trigger matched.
3. Open the run, if one was created.
4. Inspect the first step that stopped or was cancelled.
5. Correct the configuration and test with a new event or a carefully reviewed replay.
For the complete diagnostic flow, see [Why didn't my automation run?](/knowledge-base/why-didnt-my-automation-run).
# Configuring a form per record
Source: https://help.hiredata.com/content/configuring-a-form-per-record
Switch individual form questions on or off per vacancy in HireData, so one pre-screening form fits every client and role without duplicates.
One form rarely fits every vacancy. A client insists on a killer question that means nothing to the next role. A question about years of experience is beside the point for a junior opening.
You do not need a form per vacancy for that. Build one form, then switch its questions on or off per record. Each vacancy serves only the questions that belong to it, and the form itself never changes.
## Before you start
You can configure a form per record once the form is linked to an object, and that object is first in the form's list. Link it on the **Objects** panel in the form builder, described in [Objects](/reference/forms/objects).
Put Vacancy first and you configure the form per vacancy. Objects below it, such as Match or Candidate, still give you their variables and tie the response to their record. You cannot configure the form against them.
## Find the forms for a collection
Open **Data** in the main menu and pick a collection, for example **Vacancy**. A collection holds every record of one object type that a connected app syncs into HireData.
Each collection has a **Forms** tab and a **Responses** tab.
* **Forms** lists every form linked to this object type, with a chip per object the form uses and an icon that shows whether the form is a draft or published.
* **Responses** lists every response collected against a record of this type.
## Configure a form for one record
Open the **Records** tab, click a record, then open its **Forms** tab. Each form linked to this record's collection gets a tab of its own.
The **Question** column lists the questions that can be configured for this record. The **Available** column decides whether each one is shown. Set a question to **Off** and this vacancy skips it. Set it to **On** and it comes back.
HireData saves each change as you make it. The list highlights every question that no longer follows the form, so you can tell what this record changed.
Two things stay as they are:
* Questions with **Always include** turned on in the form builder. The form serves them whatever the record says. See [Display and requirements](/reference/forms/overview#display-and-requirements).
* Ending screens and redirects. They are not questions, so they never reach the list.
### Shortcuts
**Preview** opens the form as this record would serve it, with the record's own values filled into the questions. It offers the same [Interactive, Conversational](/reference/forms/testing/previews), and [Test & Evaluate](/reference/forms/testing/test-and-evaluate) views as the builder, and a language picker. Use it to check that a question still reads correctly once its variables resolve.
The menu next to **Preview** holds three actions:
* **View form** opens the form in the builder.
* **Enable all** clears this record's changes, so every question follows the form again. It appears once at least one question is off.
* **Mandatory only** switches off everything except the questions that have to stay. In a form with nothing set to **Always include**, that switches off every question.
## Read the responses for a record
The **Responses** tab of a record lists what came back, whichever channel it arrived through.
Open a response to read the answers. The highlights above them show the channel, the number of messages, how much of the form the respondent finished, and how long it took.
The two buttons above the answers switch between a compact list and a roomier layout. **Previous** and **Next** move through the responses without going back to the list.
## Why configure per record
A staffing agency runs one pre-screening form across hundreds of vacancies. Configuring per record is what keeps that workable.
* A client with a hard requirement gets that question switched on for their vacancies only.
* A vacancy with no salary range switches the salary question off, so nobody is asked to react to a figure that is not there.
* A role where experience does not matter switches the experience question off, and it drops out of the evaluation with it.
One form still holds the questions, the logic, and the evaluation. Only the selection per vacancy moves.
# Creating a form in HireData
Source: https://help.hiredata.com/content/creating-a-form-in-hiredata
Build custom forms in HireData to collect structured feedback and candidate data, then feed the responses straight into your automations and ATS fields.
*The forms in HireData help you collect structured data during candidate journeys. This guide walks you through setting up and using forms in HireData for your automations.*
## Creating a form
First, **define the purpose of the form.** Decide what data you need to collect, such as a candidate's availability or feedback on the recruitment process.
Then open the **Forms** page from **Settings** and click **New Form**. You can create a blank form or pick one of the templates:
*Form templates:*
*If you start from scratch, give the form a name. The name is for internal use only:*
## Adding questions
A form is one or more questions. Each question can carry logic, for example to show a follow-up only when a rating is below 8. Click the **+** button above the question list to open the **Add Content** palette and pick a question type.
The palette offers text, contact, date and time, choice, numeric, rating, file upload, and ending types. For what each type stores and the logic operators it supports, see the [form builder overview](/reference/forms/overview).
### Question settings
Click a question to open its settings. Every question has a **Description** and an **Image**. Text questions add a **Placeholder**, rating questions a scale and a **Reverse** toggle, and choice questions their options. The settings that every field carries are in [Settings every field shares](/reference/forms/overview#settings-every-field-shares).
The button at the bottom right of the card opens **Display & requirements**, which holds three switches:
* **Hidden** keeps the question out of the form while its stored answer stays available to your automations.
* **Required** stops the respondent from continuing until they answer.
* **Always include** stops the question being switched off for an individual record, and makes it required.
See [Display and requirements](/reference/forms/overview#display-and-requirements) for how the three work together.
Drag and drop to reorder the questions.
Before you make a Yes/No or numeric question required, read [What counts as an answer](/reference/forms/overview#required-answers).
## Adding logic to the questions
Use **rules** to set up flows between questions. For example:
* If a candidate rates **7 or below**, show a follow-up asking for improvement suggestions.
* If the rating is **8 or higher**, take them to the next question or ask them to leave a Google review.
To set this up, open the **Logic** tab and click **Add Rule** under a question. Set the condition, for example "is less than or equal to 7", then choose the question or ending screen to go to. **All other cases go to** decides where everyone else continues.
Which operators each question type supports and how HireData picks between several rules are in the [Logic tab reference](/reference/forms/logic).
## Adding a thank-you screen
Based on the answers, forms can end with a thank-you message or redirect candidates to an external page to leave a review.
You can customise the **Thank-you screen** with a:
* Title
* Short message
* Image
* Button with text
* Redirect URL. Use this to direct candidates to leave a review or go to your website.
*Thank you screen with Website Redirect URL:*
*Thank you screen with Google Review URL:*
## Preview and save the form
Click the eye icon to preview the form and **Save** to save it.
*Form preview on different devices:*
Once your form is ready, add it to your email templates in HireData and send it through your automations.
## Tailor the form per record
Link the form to an object such as a vacancy, and you can switch individual questions on or off for one record without touching the form itself. One pre-screening form then covers every vacancy, each serving only the questions that belong to it. See [Configuring a form per record](/content/configuring-a-form-per-record).
***
## Video guide
# Quickstart: Your first automation
Source: https://help.hiredata.com/get-started/quickstart
Build, test, and activate your first HireData automation in about 15 minutes with this quickstart guide, from connecting an app to going live in production.
This quickstart takes you from a connected recruitment app to a tested automation. Use a safe test record and choose a workflow that does not contact real candidates while you learn.
## Before you begin
You need:
* A HireData account with permission to manage apps and automations
* Access credentials for your ATS or recruitment app
* One test candidate, application, match, or other record
* A clear outcome, such as sending an internal test email or creating a recruiter task
If your app is already connected, start at step 2.
Open **Settings** > **Apps**, choose your ATS, and create a connection.
Use the connection guide for [Carerix](/apps/carerix/connect-with-carerix), [Vincere](/apps/vincere/connect-with-vincere), [OTYS](/apps/otys/connect-with-otys), [Recruitee](/apps/recruitee/connect-with-recruitee), or [Salesforce](/apps/salesforce/connect-with-salesforce).
Wait for the initial sync to finish before building your trigger.
Open **Automations**, select **Blank Automation**, and give it a name that describes the outcome.
In the **Start** block:
1. Select your connected app and connection.
2. Choose the object, such as Candidate, Match, Application, or Procedure.
3. Choose the event that should start the workflow.
4. Include any related records you will need for filters, recipients, senders, or tasks.
Add conditions to the **Start** block or add a separate filter step. Begin with one simple condition that your test record satisfies.
For example, run only when an application stage equals **Test** or when a specific test email address is present.
Add a task with an outcome you can verify. Good first tasks include:
* Send an email to your own address
* Create an internal recruiter task
* Update a dedicated test field
* Send a test form or survey to yourself
Map the recipient, sender, and other fields from the trigger data. Save the task.
Use HireData's test option and select your test record or sample event. Review each step and confirm that the expected values are available.
If a step stops, open its details before changing the workflow. See [How to test an automation](/automations/how-to-test-an-automation).
Activate the automation only after the test completes successfully. Make the expected change in your source app, then confirm that:
1. HireData received the [event](/settings/logs/events).
2. The automation created a [run](/settings/logs/runs).
3. The task completed with the expected result.
## A safe first automation
A useful first workflow is:
**Test record updated → test condition passes → send an internal email**
It exercises the complete HireData flow without messaging a candidate or changing production recruitment data.
## Next steps
* Learn [how HireData works](/concepts/how-hiredata-works)
* Complete the [first-week checklist](/get-started/your-first-week)
* Explore the template gallery from the HireData dashboard
* Learn how to [read variables](/variables/introduction)
* Review [automation safety limits](/settings/automation-safety-limits)
# Your first week with HireData
Source: https://help.hiredata.com/get-started/your-first-week
A first-week checklist for new HireData accounts: connect apps, invite users, set up brands and domains, and get your first automations ready to go live.
*You've created your account. This checklist takes you from empty workspace to production-ready, in the order that avoids rework. Each step links to a detailed guide.*
## 1. Connect your ATS
Link HireData to your ATS so events start flowing in.
* [Connect with Carerix](/apps/carerix/connect-with-carerix) · [Vincere](/apps/vincere/connect-with-vincere) · [OTYS](/apps/otys/connect-with-otys) · [Recruitee](/apps/recruitee/connect-with-recruitee) · [Salesforce](/apps/salesforce/connect-with-salesforce)
## 2. Verify your email domain
Required before HireData can send any email on your behalf.
* [How to verify a domain](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails)
* [Add a default sender](/settings/domains/adding-a-default-sender-to-your-domains)
## 3. Connect WhatsApp (optional)
If you'll message candidates on WhatsApp:
* [Connect with WhatsApp](/apps/messaging/whatsapp/connect-with-whatsapp-embedded-sign-up)
* [Add a valid payment method](/apps/messaging/whatsapp/add-a-valid-payment-method-for-whatsapp)
## 4. Invite your team
* [Invite users to your account](/introduction/invite-users-to-your-account)
* [Protect user roles from ATS sync](/settings/prevent-user-role-changes-during-third-party-sync)
## 5. Review your safety limits
Safety limits prevent automations from over-messaging your contacts. Review the defaults before going live.
* [Automation safety limits](/settings/automation-safety-limits)
## 6. Build and test your first automation
* [Quickstart: your first automation](/get-started/quickstart)
* [How to test an automation](/automations/how-to-test-an-automation)
# Welcome to HireData
Source: https://help.hiredata.com/index
Automate the repetitive parts of recruiting — follow-ups, reminders, and multi-channel outreach — directly inside the ATS you already use.
HireData plugs into your existing ATS and takes care of the manual work around candidate communication: follow-ups, reminders, WhatsApp and email outreach, and keeping records up to date. Recruiters average 10+ hours reclaimed per week and triple the number of candidate conversations they can run at once.
These docs cover how to get set up, connect your tools, and build automations that actually run in your workflow.
## Start here
A quick walkthrough of what HireData does and how it fits into your day.
Add teammates to your workspace and get everyone onboarded.
## Build and connect
Create, test, and manage the automations that power your recruiting workflow.
Connect Carerix, Salesforce, OTYS, Vincere, WhatsApp, and more.
## Configure your workspace
Set up your branding and verify the domains you send email from.
Review events and runs to see exactly what your automations are doing.
# Invite users to your account
Source: https://help.hiredata.com/introduction/invite-users-to-your-account
Invite team members to your HireData account, assign the right roles and permissions, and manage who can build automations, edit apps, or view runs.
*Inviting team members to your HireData account ensures they have the tools and access they need to collaborate efficiently. Whether you're adding colleagues to help manage data, review analytics, or streamline workflows, the process is simple and secure. This guide will walk you through the steps to invite users, assign appropriate access levels, and ensure everyone can start using HireData seamlessly.*
## Step 1: Access control
### 1.1. Open the Users page
Navigate to the settings menu within HireData and open the **Users** **page**. There you will see a list of users synced with your ATS, e.g. [Carerix](/apps/carerix/connect-with-carerix), [OTYS](/apps/otys/connect-with-otys), [Salesforce](/apps/salesforce/connect-with-salesforce), etc., that you've connected to HireData.
### 1.2. Manage the users' roles and permissions
Before inviting anyone to your account, open the user's account to manage their access level, including the information they can see and the editing permissions.
**Roles:**
* **Owner**
* **Admin**
* **User**
*Click the user to see their details:*
*Choose a user role based on the permissions you want to give to that user:*
## Step 2: Invite users to join your account
### 2.1. Group invitation
If you want to invite multiple members to your account at once, use the tick box to mark each of them and then click the \[Invite] button at the top right corner. Confirm your choice, and each of the selected users will be emailed an invitation to join your account.
### 2.2. Individual invitation
You can also send individual invitations to different users. This functionality is best if you want to invite one user at a time or if you have missed selecting someone with the group invitation.
To do this, click the three dots button next to the user and click the \[Invite] button from the drop-down menu or the one located at the top right corner.
Each user will then receive an invitation to your account via email. Once they accept it, they will be able to log in to the account and apply any changes depending on their access level.
## Tips
* Always check the user role before inviting them. If needed, you can update their role anytime by navigating to the user details, as explained in section *1.2. Manage the users' roles and permissions.*
* If the user loses their email invitation, you can resend it from the \*\*Users \*\*page by clicking \[Re-send invite] from the drop-down menu as shown below:
# Product demo
Source: https://help.hiredata.com/introduction/product-demo
Watch this HireData product demo and learn about our vision, mission, and how our product helps you to scale recruitment by automating stuff
# Find incomplete candidate profiles
Source: https://help.hiredata.com/knowledge-base/cookbook/incomplete-candidate-profiles
Build a data-quality automation that finds candidate profiles with missing information, then creates a task or starts a completion workflow.
*Incomplete candidate profiles can make it harder to contact people, match them with suitable roles, or keep recruitment data reliable. This recipe shows you how to identify records that are missing important information and route them into a practical completion workflow.*
## What you will build
The automation uses four parts:
1. A candidate event from your connected ATS
2. Start conditions that define which information is required
3. An action for a recruiter, internal team, or candidate
4. A safe test that confirms the correct profiles enter the workflow
Start with one important missing field. Once the first version works as expected, you can extend the automation to cover other parts of the candidate profile.
## Check the template gallery first
Before building the automation from scratch, open the template gallery from the HireData Dashboard. Select **All**, then search or filter for a template that matches your data-quality workflow.
Depending on what you want to achieve, useful starting points can include:
* **Email Bounce: Schedule Task**
* **Job Application**
* **Phone Number Standardizer +31 - Candidates - Cleanup**
* **Pre-Intake / Screening**
Open a template and review its trigger, conditions, and actions before adding it to your account. You can then adapt it to match the fields and process used by your team.
## Decide what makes a profile incomplete
Agree which information your team needs before building the conditions. Common examples include:
* Email address
* Phone number
* First or last name
* Consent or availability
* Preferred role or location
* Other information required for placement or communication
Focus on fields that lead to a clear follow-up action. A missing optional field does not always need its own automation.
## Build the automation
### 1. Choose the candidate trigger
Open the **Start** block and select your ATS. Choose the candidate-created or candidate-updated trigger that best matches when you want HireData to check the profile.
For example:
* Use a created trigger when profiles should be checked as they enter the ATS.
* Use an updated trigger when the check should also run after recruiters or integrations change the record.
* Use a combined created-or-updated trigger when both situations should enter the same workflow.
The available trigger names can differ between integrations.
### 2. Add the missing-data conditions
Add Start conditions for the field you want to check. Configure the condition so that only profiles without the required value continue into the automation.
Begin with one high-impact field, such as an email address or phone number. This keeps the first test easy to understand. Add other fields after confirming that the automation selects the correct profiles.
If a field does not appear in the variable picker, confirm that it is enabled in your ATS connection. Carerix users can follow [Enable Carerix Fields and Relationships](/apps/carerix/how-to-enable-carerix-fields-and-relationships-in-your-automations).
### 3. Add the completion action
Choose what should happen after HireData finds an incomplete profile. Depending on your process, the automation can:
* Create a task for a recruiter
* Notify an internal channel or email address
* Ask the candidate to provide the missing information
* Update the profile after the information is collected
Make the action specific enough that the recipient knows which profile and field need attention.
If the source system often adds fields shortly after creating a record, place a short delay before the check. Set the delay to reflect the timing of your actual import or enrichment process.
### 4. Test with an incomplete profile
Use a test record that is missing the field targeted by your condition.
1. Activate the automation when it is ready for testing.
2. Create or update the test candidate in your ATS.
3. Select **Events** in HireData and open the new event.
4. Check the event's **Data** tab to confirm that the field is empty or missing.
5. Select **Runs** and confirm that the expected actions completed.
Repeat the test with a complete profile. It should not enter the missing-data workflow.
Keep account and automation safety limits enabled while testing workflows that can send messages to candidates.
## Review and improve the workflow
After the automation has processed a small number of records, review its runs and the follow-up work it creates.
Check whether:
* The selected profiles genuinely need attention
* The assigned person has enough information to complete the record
* The workflow runs at the right point in your recruitment process
* A delay or additional condition would reduce unnecessary actions
Add more required fields gradually so that it remains clear why each candidate entered the workflow.
## Need more help?
If the automation does not find the expected profiles, compare the event's **Data** tab with the Start conditions. See [Why Didn't My Automation Run?](/knowledge-base/why-didnt-my-automation-run) for a complete troubleshooting checklist.
If you still need help, contact [support@hiredata.com](mailto:support@hiredata.com) and include:
* The automation name
* A link or the ID of a test event
* The field you expected to be checked
* The result you expected
# Cookbook
Source: https://help.hiredata.com/knowledge-base/cookbook/introduction
Ready-made recruiting playbooks you can build in HireData, from no-show follow-ups to placement surveys, with step-by-step guides and automation templates.
The cookbook contains practical HireData recipes for real recruitment outcomes. Most combine a trigger, conditions, tasks, and templates into a workflow you can adapt to your own apps and process. A few build one piece of content, such as a form that screens its own answers.
## How to use a recipe
Every recipe opens with what you will build and ends with how to test it safely. In between, an automation recipe walks the trigger that starts it, the conditions that decide which records continue, and the tasks HireData runs on them. A recipe that builds one piece of content walks that content instead, question by question or block by block.
Use the recipe as a starting point. Object names, stages, fields, and available tasks can differ between ATS connections, so choose the equivalent values from your own automation builder.
## Before you build
* Connect the app that provides the source data.
* Identify a safe test record.
* Confirm which fields and relationships are available.
* Decide who owns the outcome when a task requires human follow-up.
* Check the template gallery for an existing automation you can adapt.
* Test every external action before activating the workflow.
Recipes that send messages, update records, or call external systems can affect real data. Use test recipients and sandbox endpoints until you have reviewed the complete run.
## Available recipes
Find profiles with missing information and route them to a recruiter, internal team, or candidate-completion workflow.
Send a JSON summary to an API endpoint when a HireData event occurs, then reuse the response in later tasks.
Build a pre-screening form that rejects the applicants who cannot do the job, ranks the rest, and summarises each response.
Put a rating question in the email itself, so a candidate answers with one click from their inbox.
## Build confidently
After creating a recipe:
1. [Test the automation](/automations/how-to-test-an-automation).
2. Review its [event](/settings/logs/events) and [run](/settings/logs/runs).
3. Confirm the result in the destination app.
4. Activate it for a limited audience before expanding the conditions.
For reusable starting points, also browse the template gallery from the HireData dashboard.
# Ask for feedback in one click
Source: https://help.hiredata.com/knowledge-base/cookbook/one-click-feedback-email
Build a feedback email whose rating question renders as one button per score, so a candidate answers from their inbox instead of opening a form first.
*Most feedback requests ask twice. The email asks you to give feedback, the form asks the actual question, and half the people you asked never get as far as the question. A Form block collapses that into one step. The rating sits in the email as a row of buttons, and the click that answers it is the same click that opens the form.*
## What you will build
1. A short feedback form whose first question is the rating
2. An email that turns that question into one button per score
3. A test send that proves the buttons carry the answer
4. Somewhere for the answers to land, tied to the right record
One form, one email, and no automation logic. What takes the thought is the question, because it is the one a recipient answers in their inbox and cannot take back.
## Before you start
Decide who you are asking and when. A placement survey a week after a start date, an interview experience email the same afternoon, a re-engagement check on a candidate who went quiet. The timing changes the wording more than it changes the build.
Then decide the one question. Only the form's leading question becomes buttons, so everything else you want to know goes behind it, answered on the form itself by the people who care enough to keep going.
## Build the form
### 1. Put the rating first
Open **Forms**, click **New Form**, pick **Blank Form**, and add a [Net Promoter Score](/reference/forms/fields/net-promoter-score-and-opinion-scale) question as the first field: "How likely are you to recommend us to a friend?" It comes fixed at 0 to 10 with **NOT LIKELY AT ALL** and **EXTREMELY LIKELY** under the ends, and those two labels are what stop a bare row of numbers being ambiguous.
Leave it **Optional**. A required rating field blocks the answer 0, and 0 is the answer you most want to hear about.
Then add the questions that only matter once you have the score. Two is usually enough.
| Question | Field type | Why it is there |
| ----------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| How likely are you to recommend us to a friend? | [NPS](/reference/forms/fields/net-promoter-score-and-opinion-scale) | The leading question. This is the row of buttons in the email. |
| What is the main reason for your score? | [Long Text](/reference/forms/fields/short-and-long-text) | The answer that tells you what to change. |
| May we quote you? | [Yes/No](/reference/forms/fields/yes-no) | Asked last, because it only makes sense after they have said something. |
Finish with an [ending screen](/reference/forms/fields/ending-screen). A recipient who clicked a number from their inbox and lands on a blank page assumes the click failed.
Prefer a 1 to 5 **Opinion Scale** if most of your recipients read email on a phone. Eleven buttons stack into eleven rows on a narrow screen, five stack into five, and an Opinion Scale lets you write all three end labels yourself.
### 2. Link the record the feedback is about
Open the **Objects** drawer and link the object the response belongs to, usually **Match** or **Vacancy**. Two things follow from it. Every field on that record becomes a variable you can write into the question, so you can ask about the role by name. And the response arrives on that record's **Responses** tab, rather than in a pile of responses you have to match up by hand.
Whichever object you put at the top is the form's main object. See [Objects](/reference/forms/objects).
### 3. Publish it
Click **Publish**. Each button in the email carries a link tokenised per recipient, which opens the form whatever its status, so a draft would technically work. Publish anyway. A draft is the form a colleague tidies away, and a published form is also the one you can send through any other channel.
Leave **Make form public** off unless you are posting the link somewhere. The token in the emailed link is what lets the recipient in, so the form does not need to be open to anyone who finds its address.
## Build the email
### 4. Create the email and pick the brand
Open **Emails** from **Settings**, click **New Email**, and choose **Blank Email** or one of the supplied templates. Set **Brand** in the top right first. It restyles the whole email, including the button colours, so choosing it early saves you checking the contrast twice. See [Setting up an email template](/apps/messaging/emails/setting-up-an-email-template-in-hiredata).
### 5. Write the shortest ask you can stand behind
A [heading](/reference/email-builder/blocks/heading) and one [paragraph](/reference/email-builder/blocks/paragraph) above the buttons. Say who is asking, what the score is for, and how long the rest takes. "One question, and a box for anything else you want to tell us" is a promise the form can keep.
Do not explain the scale in the paragraph. The end labels under the buttons do that.
### 6. Add the Form block
Click the **+** in the section's **Blocks** list and choose **Form**, then set the two selects at the top of its panel.
* **Form** is the feedback form you just published.
* **Leading Question** is the NPS question. Hidden fields and ending screens are left out of the list.
Both belong to the email rather than to the block, so one email asks one question. A second Form block arrives pointing at the same question, which is worth knowing before you try to put two ratings in one send.
Eleven buttons appear in the canvas, 0 to 10, with the end labels underneath in capitals.
Each button carries the form's link with that score attached, and HireData records the score as it forwards the recipient to the form. So a recipient who clicks 4 and then closes the tab has still told you 4. Everything after the rating is a bonus. See [Form](/reference/email-builder/blocks/form).
### 7. Style the buttons so they read as a scale
Leave **Show Question** on. The question sits above the row, and an email that shows numbers without the question they answer gets ignored.
* **Size: Medium** and **Rounded corners: Full** turn the numbers into a row of circles, which reads as a rating rather than as eleven links.
* **Background color** and **Color** are the button fill and the number. Keep the contrast strong. Many recipients read email in dark mode, and a pale fill with white numerals disappears.
* **Width: Auto** lets the eleven buttons share the row. **Full** makes each one the width of the email, which stacks them whatever the screen.
* **Alignment: centre** for a scale.
### 8. Check it at phone width before you send
Each button is its own column, so below 480 pixels the row stops fitting and the buttons stack one per line. Eleven buttons become eleven rows. Open the preview and narrow the window until it happens, then decide whether you can live with it or want the five-point scale instead.
## Test it
### 9. Send yourself the real thing
Open **Test Email**, leave the name and address empty to send it to yourself, and click **Send test email**. Then click a number in the email that arrives.
You should land on the form with the rating already filled in. If it is sitting there blank, the **Leading Question** is not the field you think it is.
A click from a test email records nothing, which is what you want while you are still editing. The score only lands on a response for a real send.
If the form links a required object, the test send needs a record for it. Pick one under **Objects** in the modal, or use **Auto fill**. Leave it empty and the send fails with a **Failed to send test email** notification naming the object by its key. See [Testing](/reference/email-builder/testing).
### 10. Add the other languages, if you have them
The Form block renders in the language of the form it points at, not the language of the email, so a Dutch form puts Dutch buttons in an English template. The rating labels and the fallback call to action are translatable per language from the email's own **Manage Languages** drawer. See [Translations](/reference/email-builder/translations).
## Send it and read the answers
Plug the finished template into a **Send Email** task and choose the audience the same way you would for any other send. See [Automations](/automations/automations).
The responses arrive on the **Responses** tab of the record the form was linked to, and on the form itself. See [Configuring a form per record](/content/configuring-a-form-per-record).
An automation can act on the answer as soon as it arrives. Before you write the condition, open **Test & Evaluate** on the form and read **Automation variables**, which lists each value with the exact variable to copy beside it. See [Test & Evaluate](/reference/forms/testing/test-and-evaluate).
Start with one branch. A low score creates a task for whoever owns the relationship, and everything else does nothing. Anything more elaborate can wait until you have seen thirty real responses.
## Review and improve
* **Are people clicking a number and stopping?** That is a working email and a form that asks too much. Cut a question.
* **Is every score an 8, 9, or 10?** Check who you are asking. A survey that only goes to placements you are pleased with measures your sending list.
* **Is nobody clicking at all?** Look at the buttons in a dark-mode client and on a phone before you rewrite the copy.
* **Does the free-text answer say anything you did not know?** If not, the question is too general. "What is the main reason for your score?" beats "Any other comments?"
## Need more help?
If the buttons render as a single **Give Feedback** button, the leading question is a type that has no buttons of its own. Only rating and choice questions get one button per value. Everything else falls back to one call to action, which you can click in the canvas to reword.
If a choice question is missing options, you have hit the five-option cap. A Form block renders the first five and gives no warning about the rest. See [Limits](/reference/email-builder/blocks/form#limits).
If you still need help, contact [support@hiredata.com](mailto:support@hiredata.com) and include:
* The email template name and the form name
* The leading question and what rendered instead
* Whether it was a test send or a real one
# Post an outcome to your own system
Source: https://help.hiredata.com/knowledge-base/cookbook/post-an-outcome-to-your-own-system
Build an automation that POSTs a JSON summary to your API when a conversation ends, authenticates with a bearer token, and reuses the response later.
*Your own system needs to know what happened in HireData. This recipe builds an automation that POSTs a JSON summary to an endpoint you control the moment a conversation ends, authenticates it with a bearer token, and feeds the endpoint's answer back into the same run.*
## What you will build
One automation with four parts:
1. A **trigger** for the moment worth reporting
2. An **HTTP Request** task that POSTs JSON to your endpoint, authenticated with a bearer token
3. A **described response**, so what the endpoint sends back becomes fields
4. A **later task** that uses one of those fields
Every tab, field, and default is covered in the [HTTP Request task](/reference/automation-tasks/http-request-task) reference. This page walks one path through it, start to finish.
This recipe sends data **out** of HireData. If what you actually need is the other direction — another tool sending data **in** to start an automation — that's a custom app trigger instead. See [Custom Apps](/apps/custom-apps/introduction) and [Set up a trigger](/apps/custom-apps/set-up-a-trigger).
## What to ask for before you start
Whoever owns the endpoint has all of this. Getting it up front saves a round of guessing:
* The **URL** to call, and the **method** it expects
* The **body** it expects, ideally as a sample JSON payload rather than a description
* How it **authenticates**. This recipe uses a bearer token issued for this integration, not anyone's personal one
* What it **returns** — both when a call is accepted and when it's rejected
* Whether there's a **test or sandbox address**. The test in step 7 sends a real request, so you want somewhere safe to aim it
If they can send you an OpenAPI or Swagger specification, a Postman collection, or even the cURL command straight out of their documentation, ask for that instead of a written description. HireData reads all of them and fills the request in for you. See [Import a specification or a cURL command](/reference/automation-tasks/http-request-task#import-a-specification-or-a-curl-command).
## Build the automation
### 1. Trigger on the moment worth reporting
Open the **Start** block. Choose **HireData** as the app, then **Conversation** as the object and **Ended** as the trigger. The automation now runs once each time a conversation finishes.
Any trigger works here — a completed form response, a candidate updated in your ATS. It only changes which fields you have available to send in step 4; the rest of the recipe is the same.
### 2. Add the HTTP Request task
Add a task and pick **HTTP Request**. It's filed under both **Add** and **Message**, and both routes open the same task. See [where to find the task](/reference/automation-tasks/http-request-task#where-to-find-the-task).
If you were given a specification or a cURL command when you asked for the endpoint's details, click **Import** in the drawer's footer now and let HireData fill the request in. The two routes fill in different things, so check [what an import fills in](/reference/automation-tasks/http-request-task#what-an-import-fills-in), then read back through steps 3 to 6 against what it wrote. Otherwise, fill it in by hand as below.
### 3. Set the method and the URL
A new task already has the method set to `POST`, which is what you want. Enter your endpoint's address in the URL bar:
```text theme={null}
https://api.example.com/v1/recruitment-events
```
If part of the address changes from run to run, wrap that part in curly braces and a required row appears for it on the **Params** tab. See [query and path parameters](/reference/automation-tasks/http-request-task#query-and-path-parameters).
### 4. Build the JSON body from automation fields
Open the **Body** tab and add a property per value you want to send. Beside each **Value** is a field picker: use it to pick a field from the run rather than typing a fixed value, so each run sends its own data.
Dots in a property name nest it, so a body like this needs six properties:
| Property | Value to pick |
| ---------------------- | ----------------------------------------------- |
| `conversation_id` | The conversation's ID |
| `channel` | The channel the conversation ran on |
| `finished_at` | When the conversation ended |
| `contact.name` | The **Sender** name |
| `contact.phone_number` | The **Sender** phone number |
| `outcome` | A value from an earlier task, or a fixed string |
A conversation groups the people in it under **Sender**, **Receiver**, and **Owner**, so pick from whichever side the candidate is on: the sender when they started the conversation, the receiver when your automation did. On the sender's side, which contact detail is filled in follows the channel — a phone number on WhatsApp, an email address on email.
More generally, which fields you can pick depends on the trigger you chose in step 1, and includes values that earlier tasks in the same automation produced. What arrives at your endpoint is ordinary JSON:
```json theme={null}
{
"conversation_id": "8f2c1e64-3a71-4f0b-9d2e-7c5a1b8e40df",
"channel": "WhatsApp",
"finished_at": "2026-08-21T14:32:00Z",
"contact": {
"name": "Sofia Almeida",
"phone_number": "+31612345678"
},
"outcome": "interested"
}
```
Full detail on the format controls, the builder, and the raw editor is in [request body](/reference/automation-tasks/http-request-task#request-body).
### 5. Authenticate with a bearer token
Open the **Auth** tab, select `Bearer token`, and paste the token into **Token**. HireData sends it as an `Authorization` header on every request; there's no header for you to add on the **Headers** tab.
If the endpoint wants a key in a named header or a query parameter instead, or trades a client ID and secret for a token, the other types cover both. See [authentication](/reference/automation-tasks/http-request-task#authentication).
Anyone who can edit this automation can read the token you paste here. See [authentication](/reference/automation-tasks/http-request-task#authentication) for what that means when you're configuring this on someone else's behalf.
### 6. Describe what comes back
Two things to do before the response is usable, and it's easier in this order.
Start on the **Advanced** tab and write a **Description** — "Post conversation outcome" for this task. It titles the task everywhere else, and it's the first half of the name of every field this task produces, so settling it now saves re-reading a picker full of renamed fields later.
Then, in the **Response** section beneath the tabs, describe the body your endpoint returns. Say it answers a successful call with this:
```json theme={null}
{
"id": "evt_9Fk2Lq",
"status": "accepted"
}
```
Under **Success response (2xx)**, click **Add property** twice: one for `id`, labelled "Event ID", and one for `status`, labelled "Status". Later tasks can now pick these two by name:
* `Post conversation outcome: id`
* `Post conversation outcome: status`
They arrive on top of the three fields every HTTP Request task produces anyway — the status code, the response body as text, and whether the call succeeded. Describing `id` is what saves a later task from digging it out of that text.
Under **Error response (non-2xx)**, describe what the endpoint returns when it rejects a call — usually a message you'd want in a log. That tree is only worth filling in if you set the run to continue past a failure. See [Decide what happens when the call fails](#decide-what-happens-when-the-call-fails) below.
A value you don't describe here is a value no later task can pick out by name. See [describe the response](/reference/automation-tasks/http-request-task#describe-the-response).
### 7. Test the request before you activate
Click **Test** in the footer, and read the warning before you click **Send**.
The test sends the real request. A `POST` you test is a `POST` your endpoint receives and acts on. Aim it at the test address you asked for up front, or at data the endpoint's owner is happy for you to write.
The dialog asks for one value per parameter, grouping them by where they belong. This recipe's request has no path or query parameters, so you'll see a **Body** group only, one input per property from step 4.
Anything you set to a fixed value in step 4 is already filled in. The properties you bound to automation fields come up blank, because those values only exist during a real run. Type a plausible literal into each of those. See [fill in the values](/reference/automation-tasks/http-request-task#fill-in-the-values).
Click **Send**. You get back a status word, the HTTP code, and how long the call took, plus the full response body — and an **Outputs** section listing the values HireData pulled out using the tree you built in step 6.
Read those against each other. A property you described that comes back missing shows up here, and this is the cheapest moment to find that out.
### 8. Use a response value in a later task
Add a task after the HTTP Request that does something with what came back. **Add → Note** is the simplest: put `Post conversation outcome: id` in the note's text, so the reference your own system generated is recorded in HireData too.
Any later task that takes a text value works the same way. The pattern is what matters: the endpoint's answer is now data in the run, not something you have to go and look up. See [use a response value in a later task](/reference/automation-tasks/http-request-task#use-a-response-value-in-a-later-task).
## Decide what happens when the call fails
Your endpoint will be unavailable at some point. Two switches on the **Advanced** tab decide what that costs you, and for this recipe:
* Leave **Fail on error responses** on. If your endpoint rejects the payload, you want the task to say so.
* Turn **Continue automation on failure** on only if this POST is a notification and the rest of the run is worth doing without it. If you do, fill in the **Error response (non-2xx)** tree as well, so a later task can log what your endpoint actually said.
For an endpoint that's occasionally slow rather than broken, raise **Retries** on the same tab.
Both switches, and what they do together, are covered in [decide what counts as a failure](/reference/automation-tasks/http-request-task#decide-what-counts-as-a-failure).
## Activate and check the first runs
Activate the automation and let a real conversation end. Then open **Runs** and find the run.
A completed HTTP Request shows its description as the title, with **What will you provide?** and **What will you get back?** beneath it, so you can compare what was sent against what you configured. See [what the task looks like in a run](/reference/automation-tasks/http-request-task#what-the-task-looks-like-in-a-run) and the [Runs](/settings/logs/runs) log.
Check the first few runs against your own system's records before you rely on the automation. A request that succeeded from HireData's side still tells you nothing about what your system did with it.
## Need more help?
If the automation isn't running at all, the problem is the trigger rather than the request. See [Why didn't my automation run?](/knowledge-base/why-didnt-my-automation-run).
If the request runs but comes back blocked, see [if a request comes back blocked](/reference/automation-tasks/http-request-task#if-a-request-comes-back-blocked).
If you still need help, contact [support@hiredata.com](mailto:support@hiredata.com) and include:
* The automation name and a link to a run
* The task's method and URL, with the token removed
* What you expected your endpoint to return, and what it returned instead
# Screen and score applicants with a pre-screening form
Source: https://help.hiredata.com/knowledge-base/cookbook/pre-screening-form
Build a form that rejects the applicants who cannot do the job, ranks the ones who can, and writes your recruiter a summary before anyone opens the response.
*Most application forms collect answers and leave a person to read them. This recipe builds one that decides. Criteria rules out the applicants who cannot do the job, Scoring ranks the ones who can, and the summary gives your recruiter the response in three sentences before they open it.*
## What you will build
One form with four parts:
1. Four questions, each of which decides something
2. **Criteria** that rejects an applicant who fails a hard requirement
3. **Scoring** that ranks everyone who passes
4. A **summary** and a **generated field** your automation can act on
Every setting used here is covered in the [evaluation reference](/reference/forms/evaluation/overview). This page walks one form from blank to published.
## Before you start
Decide two things with whoever owns the vacancy.
* **What disqualifies someone.** These become must-have criteria. Be strict: a must-have that is really a preference rejects people you wanted to talk to.
* **What makes one qualified applicant better than another.** This becomes the scoring, and it is usually one or two questions rather than all of them.
Write both down before you open the builder. The form is quick. Agreeing on the rules is not.
## Build the form
### 1. Ask the fewest questions that decide something
Open **Forms**, click **New Form**, and pick **Blank Form**. A pre-screening form earns its keep by being short, so add only the questions whose answers change what happens next.
| Question | Field type | Why it is there |
| ----------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------- |
| Do you have a driving licence? | [Yes/No](/reference/forms/fields/yes-no) | The knock-out. Two known answers, no interpretation needed. |
| When can you start? | [Date](/reference/forms/fields/date) | The second knock-out, against the date the client needs someone. |
| How many years of experience do you have? | [Number](/reference/forms/fields/number) | The ranking question. |
| Why do you want this job? | [Long Text](/reference/forms/fields/short-and-long-text) | The one only AI can judge. |
Finish with an [ending screen](/reference/forms/fields/ending-screen) so applicants know the form submitted.
Leave the Yes/No question optional. A bug in the web form blocks a required Yes/No answered No, so a required licence question strands exactly the applicants Criteria is meant to reject. The criterion still works on an optional question.
### 2. Switch the evaluators on for the form
Open the **Evaluation** tab and switch on **Criteria**, **Scoring**, and **Summary**. Leave **Skills** off: it sorts qualified people by strength, which is a different job from this one.
Do this before you configure anything. A question's evaluator switch does nothing while the form-level switch is off, and it does not even appear on the question card. See [the enable order](/reference/forms/evaluation/overview#enable-order).
### 3. Set the knock-outs with Criteria
Click **Criteria** to open the list of questions, then switch on the three that matter.
* **Do you have a driving licence?** Set **Must-have**, keep **Use answer rules**, and expect `is equal to Yes`.
* **When can you start?** Set **Must-have**, keep **Use answer rules**, and expect `is less than or equal to` the date the client needs someone. Logic cannot compare dates, but a criterion can.
* **Why do you want this job?** Set **Nice-to-have** and switch to **Evaluate with AI**. In **What should AI look for?**, say what a real answer contains, such as "Look for a specific reason connected to this work. Generic enthusiasm does not count."
Leave the experience question out of Criteria for now. It is the ranking question, and putting it in both places means one answer can reject and rank at the same time, which makes a surprising result hard to read.
The verdict is **Does not meet criteria** as soon as one answered must-have fails. An applicant who never reached a must-have question comes back **Incomplete** instead, so check that no [logic](/reference/forms/logic) jump can step over one.
### 4. Rank the rest with Scoring
Click **Scoring**. Keep the three ranges it starts with, **Low** at 0, **Medium** at 50, and **High** at 80, then switch on the experience question.
* Set **How many points is this question worth?** to 20.
* Add a rule: `is greater than or equal to 5`, worth 20 points.
* Add a second rule: `is greater than or equal to 3`, worth 10 points.
Both rules match an applicant with five years, and the total is capped at the question's maximum, so they score 20 rather than 30. That cap is what lets you write overlapping bands and stop worrying about the gaps between them.
One 20-point question means the score is 20 out of 20 for five years, which is 100% and **High**. Add a second scored question and the maths spreads across both. See [how the percentage is worked out](/reference/forms/evaluation/scoring#how-the-percentage-is-worked-out).
### 5. Let the AI write the handover
**Summary** needs no configuration. It writes the finished response up in a few sentences for whoever picks it up.
For the one decision your automation has to make, add a [generated field](/reference/forms/evaluation/generated-fields). Switch **Generated fields** on, click **Create custom**, and build a **List** output:
* **Name**: Next step
* **Reference as**: `next_step`
* **What is it for?**: What should happen with this applicant now
* **Options**: `Book an interview`, `Ask for more detail`, `Reject politely`
A list output can only return one of your options, which is what makes it safe to branch on. A free-text output would give you a different sentence every time.
In **Hints for the AI (optional)**, add "Leave a field empty when the answers do not say." Without it, the AI guesses at an output when the response is thin.
### 6. Test it before you publish
Open **Test & Evaluate** and run all four scenarios with **Autofill with AI**. Each one has a result you should be able to predict.
| Scenario | What you should see |
| ------------------------- | ------------------------------------------------------------------------------------------------- |
| **Ideal candidate** | **Meets criteria**, a high score, and a next step of booking an interview |
| **Borderline candidate** | **Partially meets criteria** or a middling score. This is the run that finds a wrong points band |
| **Unqualified candidate** | **Does not meet criteria**. If it passes, a must-have is not doing its job |
| **Partially completed** | **Incomplete**, not a rejection. If it rejects, an unanswered question is being read as a failure |
Open each result panel and check the per-question detail, not only the headline. A right verdict reached for the wrong reason breaks as soon as a real applicant answers differently.
Remember that running an evaluation saves the form, so anything you were still deciding about gets committed.
### 7. Act on the result in an automation
Publish the form, then build the automation that does something with the result. **Automation variables** at the bottom of **Test & Evaluate** lists every value with the result from your test run beside it, which saves guessing at the exact wording.
| Variable | Holds |
| -------------------------------------------------- | ----------------------------------------------------------------- |
| `{{form_response.evaluation.screening}}` | `passed`, `passed_with_restrictions`, `rejected`, or `incomplete` |
| `{{form_response.evaluation.scoring.score}}` | The percentage |
| `{{form_response.evaluation.scoring.band.label}}` | The score range label, such as `High` |
| `{{form_response.evaluation.ai_summary}}` | The summary |
| `{{form_response.evaluation.ai_output.next_step}}` | Your generated next step |
Start with one condition on the verdict, such as rejections going to a polite decline and everything else creating a task. Add the score once you trust it. See [Automations](/automations/automations).
## Review and improve the form
After twenty or thirty real responses, compare the verdicts against what your recruiters would have decided.
* Are you rejecting people the team would have called? A must-have is too strict, or it belongs in Scoring.
* Is everyone landing in the same score range? The minimums need moving, or the scored question does not separate applicants.
* Does the AI criterion agree with a person reading the same answer? If not, the note is too vague. Say what a good answer contains, not that it should be good.
* Are the summaries worth reading? If they only repeat the answers, the form is asking closed questions and the summary has nothing to add.
Change one thing at a time and re-run the scenarios in **Test & Evaluate** before you publish again.
## Need more help?
If the evaluators return nothing, the usual cause is the enable order. Check the form-level switch as well as the per-question one, on [the Evaluation tab](/reference/forms/evaluation/overview#enable-order).
If a criterion never fails, open the question in **Test & Evaluate** and read the expected answer under it. A criterion with no conditions is skipped rather than failed.
If you still need help, contact [support@hiredata.com](mailto:support@hiredata.com) and include:
* The form name
* The question and the rule that behaved unexpectedly
* The answer you tested with, and the result you expected
# Run cancellation reasons
Source: https://help.hiredata.com/knowledge-base/run-cancellation-reasons
Find the message that stopped an automation run and resolve common filter, loop, email, and message-limit cancellations.
When HireData cancels a run, the step that stopped it records a message. Read that message on the run before changing the automation.
## Find the cancellation message
1. Open **Runs** and select the affected run.
2. Select the cancelled step in the run diagram or timeline.
3. Read the message in **Overview**.
4. Open **Fields** to check the values the step used.
## Cancellation messages
| Message | What it means | What to check |
| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `Filter not passed.` | A Filter condition evaluated as false. | The Filter conditions and the event fields. |
| `No valid paths found.` | Every branch of a Split failed its Filter. | The Filters in each Split branch. |
| `Data lookup failed.` | A Loop could not retrieve the records it needs. | The connected app, selected object, and Loop filter. |
| `Invalid recipient email.` | The Send Email recipient is not a valid email address. | The recipient field or fixed recipient. |
| `Email invalid.` | HireData has an invalid-address result for the recipient. | The recipient address. Use a valid address before trying again. |
| `Email blocked.` | The recipient is on the workspace email blocklist. | The workspace blocklist and the recipient address. |
| `Email unsubscribed.` | The recipient is listed in the workspace's email unsubscribes. This can include an address suppressed after a bounce. | **Settings** > **Unsubscribes** and the recipient address. |
| `Invalid sender email.` | The Send Email step has no sender that HireData can use. | The sender and its verified domain. |
| `Send limits exceeded.` | The recipient reached an account-level message limit. | **Settings** > **Safety Limits**. |
| `Send limits per automation exceeded.` | The recipient reached a limit set on this automation. | The automation's **Settings**. |
The exact message can identify a configuration error instead. `Required data reference missing.` is one example. That makes the run **Failed**, not **Cancelled**. Fix the missing required value in the task configuration, then start a new event.
## Invalid sender email
HireData cancels a real Send Email run when its sender is not valid for the workspace. For a transactional email, HireData can fall back to a valid default sender user or default sender on the configured brand domain or workspace domain.
1. Go to **Settings** > **Domains**.
2. Open the domain used by the sender.
3. Generate and add its DNS records if needed.
4. Select **Verify DNS** after the records are available.
5. Check the Send Email step's sender, then start a new event.
If DNS verification fails, confirm that every generated record is present at your DNS provider. Some providers expect only the subdomain in the **Host/Name** field. See [How to Verify a Domain in HireData to Send Emails](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails).
## Send limits exceeded
Account-level limits prevent the same email address or phone number from receiving more messages than the workspace allows. Review the limits under **Prevent Message Overload** in **Settings** > **Safety Limits**. Only increase a limit when the planned contact frequency is appropriate.
## Send limits per automation exceeded
An automation can also have its own email and conversation limits. Open the automation, select its three-dot menu, then select **Settings**. Review **Message limits** and the recipient's earlier messages for that automation.
**Ignore all safety limits** removes the account and automation protections for this automation. Check the recipient's history before you use it.
## Start a new run after a correction
Use a new event after changing a sender, recipient, Filter, or limit. Replaying an old event can repeat completed emails, messages, updates, and tasks.
If the message is not listed here, include the run ID, automation name, cancelled step, and exact message when you contact [support@hiredata.com](mailto:support@hiredata.com).
# Understand respondent identities in form exports
Source: https://help.hiredata.com/knowledge-base/understanding-form-response-exports
Read respondent IDs, identity sources, additional matches, and consistency checks in HireData form exports before importing responses into your CRM.
Use the form export with verified identity sources to understand which respondent and source record belong to each response. Each row carries at most one external identity, with separate columns showing additional matches and differences between sources.
This guide applies to the export variant containing `respondent_origin`. It is available through the HireData team. The regular and raw exports can have a different structure.
## Identify the response and the respondent
These three columns serve different purposes:
| Column | How to use it |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `form_response_id` | The unique response ID. Use it as the key when importing responses so you can recognise the same response in a later import. |
| `respondent_external_id` | The selected identity's ID in its external source. Read it together with the integration, record type, and connection before using it as a CRM link. |
| `respondent_source_match_external_ids` | All synced record IDs matching the person's contact details. Use this list to investigate additional matches, not to link the response to every listed record. |
Use column names rather than spreadsheet letters, which can differ between files.
Two rows with the same email address can be different responses. Compare `form_response_id`, the form, delivery details, and timestamps before deciding whether a response is a duplicate.
## Understand the selected identity source
`respondent_origin` names the source used for the external identity. HireData selects the first available origin in this order:
| Value | Source |
| ----------------- | --------------------------------------------------------------------------------------------------- |
| `external_record` | The record the automation ran on, such as a Salesforce contact or a Google Sheet row. |
| `person_source` | The linked person's own synced record, verified by a matching email address or phone number. |
| `address_lookup` | An identity found by looking up the address the message was delivered to. |
| `none` | No identity could be established with enough certainty. The external identity columns remain empty. |
All `respondent_external_*` values come from this one origin. HireData does not combine a name from one source with an email address from another. If the selected source did not provide a name or phone number, that external field stays empty.
The columns `respondent_name`, `respondent_email`, and `respondent_phone_number` describe the linked person in HireData. They are separate from the selected external identity and can differ from it.
## Choose the correct CRM ID
Check these columns together:
* `respondent_external_app`: the integration, such as `salesforce` or `google`.
* `respondent_external_type`: the record type, such as Contact.
* `respondent_external_connection`: the connected account.
* `respondent_external_id`: the record ID in that source.
A Salesforce Contact ID can identify a contact in the corresponding Salesforce connection. A Google Sheet row ID is not a Salesforce Contact ID.
If the automation started from a sheet, the `external_data_…` columns contain the original sheet values. If you supplied a Salesforce ID in that sheet, use the corresponding column after confirming which CRM record and connection it refers to. It does not automatically turn the sheet's own row ID into a Salesforce ID.
For example, if `respondent_origin` is `external_record` and `respondent_external_app` is `google`, interpret `respondent_external_id` as the sheet's source ID. Locate the separately supplied CRM ID in the original sheet data.
## Interpret additional matches
`respondent_source_match_count` shows how many synced records matched the person's contact details:
* `1`: one matching record.
* `2` or more: multiple matching records to investigate.
* `0`: no matching records.
* Empty: there was nothing to match against.
`respondent_source_match_external_ids` lists those records. Multiple matches can reflect duplicates or separate contacts sharing an email address or phone number. They do not prove that all the records represent the same person.
For example, two contacts can share a company phone number. Finding both IDs makes that overlap visible; it is not an instruction to merge them or attach the response to both.
## Read the consistency checks
| Column | What it compares |
| ------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `email_consistent` | The HireData person's email, the external identity's email, and the delivery address. |
| `phone_number_consistent` | The corresponding phone numbers. Formatting differences such as `06…` and `+316…` do not count as mismatches. |
| `external_id_consistent` | The automation's source record and the person's synced record within the same external system. |
For each check, `1` means the compared values agree, `0` means they differ, and an empty value means there is not enough comparable information.
A `0` makes a difference visible. It does not by itself establish which value is correct. Check the selected source, the `receiver_*` delivery details, and the original record when investigating.
## Import historical responses
Incomplete responses are included with an empty `completed_at`. Question columns contain the answers, including hidden fields. Choice questions also have a `…_label` column for the option label.
This export explains the origin of respondent data. It does not automatically correct historical answers or merge duplicate source records.
Before importing:
1. Use `form_response_id` to recognise each response and avoid importing it twice.
2. Confirm the source and CRM ID used to link each response.
3. Keep cases with unresolved identity differences separate for investigation.
4. After importing, check that the responses and answer values are attached to the intended CRM records.
If you need help with a particular row, share its `form_response_id`, the form name, and the difference you found with the HireData team.
[Lees dit artikel in het Nederlands](/nl/knowledge-base/understanding-form-response-exports).
# Why can't I verify my DNS records?
Source: https://help.hiredata.com/knowledge-base/why-cant-i-verify-my-dns-records
Fix 404 errors or no response when clicking Verify DNS in HireData by installing the Email app first, then generating and verifying DNS records.
*You're trying to verify your domain in HireData, but clicking **Verify DNS** results in a 404 error, or simply nothing happens. In most cases, this is because the Email app hasn't been installed yet. Follow the steps below to fix it.*
## Why this happens
DNS records for your domain are created by the email service behind the Email app. As long as the Email app is not installed, there is no email service connected to your account yet, so HireData cannot generate or verify DNS records, and the **Verify DNS** button on the **Domains** page will return a 404 error or no response.
Installing the Email app first resolves this.
## Step 1: Install the Email app
Go to the [Email app](https://app.hiredata.com/apps) within HireData and click **Install Email**.
## Step 2: Choose your email service
A panel will appear where you choose which email service you want to use for sending emails:
1. **HireData** (recommended) – use HireData's built-in email service.
2. **SendGrid API Key** – use your own SendGrid account.
## Step 3: Select a region and install
If you chose HireData's email service, select the **region** where your email data should be processed (for example, **Europe** if your organization requires EU data residency), and click **Connect and Install**.
Not sure which region to pick? For most European organizations, **Europe** is the right choice, as it keeps your email data within the EU.
## Step 4: Generate and add your DNS records
Now that the Email app is installed, return to the [**Domains**](https://app.hiredata.com/settings/account/domains) page in your settings. The DNS records for your domain can now be generated.
Add these records to your domain provider (e.g., GoDaddy, Cloudflare, Namecheap). If someone else manages your domain, use the **Send To Coworker** button to email the records directly to the right person.
For a full walkthrough of this part of the process, see [How to Verify a Domain in HireData to Send Emails](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails).
## Step 5: Verify DNS
Once the DNS records have been added, click the **Verify DNS** button on the **Domains** page. The 404 error should now be gone, and your domain will be verified as soon as the records have propagated.
DNS changes can take some time to propagate — from a few minutes up to 24–48 hours, depending on your provider. If verification doesn't succeed right away, allow some time and try again.
Still running into issues after installing the Email app and adding the DNS records? Reach out to us at [support@hiredata.com](mailto:support@hiredata.com). We're happy to help.
# Why didn't my automation run?
Source: https://help.hiredata.com/knowledge-base/why-didnt-my-automation-run
Diagnose why a HireData automation didn't run with this troubleshooting checklist, covering event delivery, filters, conditions, and how to read the run logs.
*When an automation does not run as expected, the event and run history can show exactly where the process stopped. This guide walks you through the checks in order, from confirming that HireData received the event to inspecting an individual automation step and safely testing your correction.*
## First identify where the process stopped
Before changing the automation, check how far the event progressed. This helps you focus on the relevant settings.
| What you find | What it usually tells you | Start with |
| ------------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------- |
| No matching event | HireData may not have received the change from the source app. | The app connection and source record |
| An event exists, but no run was created | The automation may be inactive or its Start configuration did not match. | The automation status, trigger, and conditions |
| A run exists, but a step stopped or was cancelled | The automation started, but an individual step could not continue. | The run timeline and step details |
## 1. Confirm that HireData received the event
Every event-based automation starts with information received from a connected app. If the expected event is not in HireData, the automation has nothing to process.
1. Select **Events** in the main navigation.
2. Search for the candidate, contact, or event you expected to start the automation.
3. Open the event.
4. Check the **Data** tab to confirm that the expected fields and values are present.
5. Use the code view (`>`) when you need to inspect the raw JSON or confirm an exact field name.
If you cannot find the event, check whether the change was saved in the source app and whether its HireData connection is working. For Carerix connection problems, see [Why is my Carerix not syncing with HireData?](/apps/carerix/why-is-my-carerix-not-syncing-with-hiredata).
For more information about the event detail view, see [Events](/settings/logs/events).
## 2. Check whether the automation is active
An inactive automation does not create new runs when matching events arrive.
Open the automation and look at the action in the upper-right corner:
* **Pause** means the automation is currently active.
* **Activate** means the automation is currently inactive. Select **Activate** when you are ready for new events to enter it.
Activating an automation does not automatically process events that arrived while it was inactive. After checking the rest of the configuration, you can carefully replay an earlier event.
## 3. Compare the event with the Start configuration
If the event exists but no run was created, compare the event with the automation's **Start** block. The app, trigger, and conditions must match the incoming event.
Check for:
* A different app or object from the one that produced the event
* A different trigger, such as **Created** instead of **Updated**
* A required field that is missing from the event
* A field value that does not satisfy one of the Start conditions
* A field whose name, type, or format changed in the source app
Use the event's **Data** tab while reviewing the Start block so that you can compare the actual values rather than the source record's current values.
If you change the Start configuration, save the automation before testing it again.
## 4. Inspect the run and its steps
If a run exists, the automation did start. The run timeline shows how the event moved through the automation and where it stopped.
1. Select **Runs** in the main navigation.
2. Find the relevant run and select its row.
3. Select the step that stopped, failed, or was cancelled.
4. Review the step's **Overview**, **Fields**, and **Related** tabs.
The **Overview** tab can contain the result or cancellation message. **Fields** shows the values used or produced by the step, while **Related** links the run back to its automation and event.
For explanations of common cancellation messages, see [Run Cancellation Reasons](/knowledge-base/run-cancellation-reasons). For more information about reading a run, see [Runs](/settings/logs/runs).
## 5. Test the correction
Once you have found and corrected the cause, test the automation again.
A new event is the safest option because it creates a fresh run without repeating actions from the earlier one. If creating a new event is not practical, you can replay the original event:
1. Return to the event.
2. Open its **Runs** tab and review what already completed.
3. Select **Replay**.
4. Open the new run and confirm that it follows the expected path.
Replay can repeat emails, messages, record updates, tasks, and other actions that completed during the earlier run. Review all related runs before confirming a replay.
## Need more help?
If the automation still does not run as expected, contact [support@hiredata.com](mailto:support@hiredata.com). Include:
* A link or the ID of the event
* The automation name
* The run ID, if one was created
* The result you expected
* The step or condition where the process appears to stop
* The exact cancellation or error message, if one appears
# People
Source: https://help.hiredata.com/pages/people
Use the People tab in HireData to browse candidates, employees, and hiring managers synced from your ATS, search profiles, and open individual records fast.
# Task history
Source: https://help.hiredata.com/pages/task-history
Understand how many tasks have been executed, what went wrong if a task is canceled, and replay events when you want to test an automation
*This guide will introduce you to all the basics you need to know about the \[Task History] tab. You will learn how to use the filters to see completed and cancelled tasks, where to look for event details, and how to replay them. Scroll to the end of the page if you prefer a video format.*
To see any tasks in the \[Task History] tab, you need to have [automations](/automations/automations) running through HireData. This is where you can see all of the tasks that they executed.
## How to filter tasks
One of the features of this tab is the \[Filters]. They allow you to filter the tasks as completed or cancelled.
*Completed tasks view:*
To see only the cancelled tasks, enable the cancelled filter by moving the slide bar to the left so it becomes grey.
*Cancelled tasks view:*
## Understanding events
If you want to check why a task was cancelled, you can look at the event history. Click \[View Event] next to the task you want to investigate, and you will see its details.
*Example event details:*
If you click \[Runs], you will see all the runs created by this event. For example, this event started a run for the displayed automation, but the run was cancelled because of invalid data.
*Example event runs:*
This overview gives you an idea of what happened and whether there were any errors that prevented the task from being completed. This allows you to fix them and complete the task.
## How to replay an event
If you edit a task and you want to see if it will be completed, you can replay the event by clicking the \[Replay] button in the drop-down menu.
For example, suppose in the **Runs** tab of the event you see that the delay you set up in the automation is not working. You can remove it and then replay the event to see what will happen.
## Pro tip
The numbers next to the \[Task History] tab will update as you switch between completed and cancelled tasks, displaying the total number of tasks.
***
## Video guide
# Automation steps overview
Source: https://help.hiredata.com/reference/automations/overview
Every step you can add to a HireData automation, what kind of step it is, and what it does in a run.
An automation is a start node followed by steps. An event that matches the start node begins a run. The run works through the steps in order, and a step that acts on a connected app leaves a task.
To start one, click **New Automation** in the top bar and pick a template, or open the **All** tab and choose **Blank Automation** to start from scratch. Every automation opens in the builder, where the **Start** node and each **+** lead to the drawers these pages describe. Use the table below to pick a step from the **Next step** drawer.
| Step | Kind | What it does in a run |
| ---------------------------------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------- |
| [Setup](/reference/automations/steps/setup) (the **Start** node) | Start | Names the app, object, and trigger whose event begins a run |
| [Add](/reference/automations/steps/add) | Task category | Creates a record in a connected app, such as a note, task, or job application in your ATS, or a Google Sheets row |
| [Delay](/reference/automations/steps/delay) | Step | Pauses the run for a preset such as 5 minutes or 1 day, or until a chosen weekday |
| [Filter](/reference/automations/steps/filter) | Step | Continues when its conditions pass and cancels the run when they do not |
| [Find](/reference/automations/steps/find) | Task category | Looks up a record in a connected app, or finds an email address or a company domain |
| [Loop](/reference/automations/steps/loop) | Step | Retrieves records from a connected app and runs the steps inside it once per record |
| [Message](/reference/automations/steps/message) | Task category | Sends an email, a WhatsApp message, a survey, or an HTTP request |
| [Prompt](/reference/automations/steps/prompt) | Task | Asks an AI model to do something and returns the output fields you define |
| [Split](/reference/automations/steps/split) | Step | Runs its branches side by side, each branch starting with its own Filter |
| [Update](/reference/automations/steps/update) | Task category | Changes a record that already exists in a connected app |
Add, Find, Message, and Update appear in the picker only when a connected app offers a task in that category. The [task catalogue](/reference/automations/task-catalogue) lists those tasks per app.
# Add
Source: https://help.hiredata.com/reference/automations/steps/add
The Add category in a HireData automation: tasks that create a record in a connected app, such as a Carerix note or a Google Sheets row.
**Add** creates something new in a connected app. It is a category, not a step of its own: choosing it opens a list headed **Add** with one entry per task, and **Back** returns to the picker.
Add appears in the picker only when a connected app offers a task in this category. Connect an app that creates records and its tasks join the list.
## Settings
Each task has its own drawer. The settings are the fields of the record being created, named as the app names them, plus the connection to create it through when the app has more than one.
The tasks that fill the category in a workspace with Carerix, Google Sheets, and HireData connected:
| Task | App | What it creates |
| ------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Email | Carerix | An email record on a Carerix object |
| Job Application | Carerix | A job application linking a candidate to a vacancy |
| Note | Carerix | A note on a Carerix object |
| Task | Carerix | A Carerix task |
| Row | Google Sheets | A row in a spreadsheet |
| [HTTP Request](/reference/automation-tasks/http-request-task) | HireData | A request to any external API, which can create a record in a system HireData does not connect to |
| Post Webhook | HireData | The older form of HTTP Request. Build new automations with HTTP Request; see [Existing Post Webhook tasks](/reference/automation-tasks/http-request-task#existing-post-webhook-tasks) |
### On the canvas
An Add task shows a **Task** badge, the task name with the app, and the values it will write, grouped as the app groups them.
## What it outputs
The created record. The run step's **Overview** links to the record in the app by its id and repeats the values written, such as a task's status, due time, and content. Its **Fields** tab lists the run values the task read, each with the icon of the step that produced it and a type badge. Later steps use the created record under the task's name. [Follow a run](/reference/automations/follow-a-run) shows an Add Task step from a real run.
## What stops the run
A task that cannot create its record stops the run. The run page shows the task card in red with the line "Cancelled" and the time, and the timeline records the task name with "Cancelled" and the reason the app returned. Open the card to read the fields the task used.
An HTTP Request with **Continue automation on failure** switched on is the exception: it shows as Failed and the run carries on.
Reasons are explained in [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Related
* [Automation steps overview](/reference/automations/overview) compares Add with the other categories.
* [Find](/reference/automations/steps/find) looks a record up instead of creating one.
* [Update](/reference/automations/steps/update) changes a record that already exists.
* [HTTP Request task](/reference/automation-tasks/http-request-task) documents the one Add task HireData itself provides.
* [Task catalogue](/reference/automations/task-catalogue) lists every task per connected app.
# Delay
Source: https://help.hiredata.com/reference/automations/steps/delay
The Delay step in a HireData automation: presets, custom amounts, weekend skipping, and set times, and what the run shows while it waits.
**Delay** pauses the run for a set time before the next step.
## Settings
* **Preset**. A select of ready-made waits, default **1 day**. Durations: **None**, **5 minutes**, **15 minutes**, **30 minutes**, **1 hour**, **8 hours**, **12 hours**, **1 day**, **3 days**, **5 days**, **1 week**. Weekdays: **Next Monday** through **Next Sunday**, which wait until that day. **None** adds no wait.
* **Skip Weekends**. A checkbox. When the wait would end on a Saturday or Sunday, the run continues on the Monday instead. Disabled for the weekday presets, which already name a day.
* **Custom**. A switch that replaces the preset select with a number box, default 0, and a period select of **minute**, **hour**, **day**, or **week**.
* **Set time**. A button that appears for the weekday presets. It sets the time of day, and its timezone, at which the run continues on that weekday. Duration presets have no time setting; the run continues exactly the duration after it reached the step.
Without **Set time**, a weekday preset continues at the time of day the run reached the Delay. A run that reached it at 16:20 on Thursday continues at 16:20 on the chosen day.
### On the canvas
The card reads the wait in words.
## What it outputs
Nothing. The variables available after a Delay are the same as before it.
While the run waits, the run page shows the step as Waiting with the message "Run Delayed", and the timeline records "Run Scheduled" with the time it will continue. When the wait ends the timeline records "Run Moved" and the next step starts.
A test run does not wait. Every Delay completes at once with "Run Moved", so a test shows the steps but not the timing.
## What stops the run
A Delay never stops a run by itself. A run that is waiting stops when the automation is paused or deleted, or when the step is deleted, before the wait ends. The run then shows as Cancelled and its reason names what changed. See [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Related
* [Setup](/reference/automations/steps/setup) holds the start delay, which waits before the run begins rather than between steps.
* [Filter](/reference/automations/steps/filter) after a Delay checks that the record still qualifies once the wait is over.
* [Automation steps overview](/reference/automations/overview) lists every step.
# Filter
Source: https://help.hiredata.com/reference/automations/steps/filter
The Filter step in a HireData automation: every condition operator, how rows and sets combine, unique constraints, and what a stopped run shows.
**Filter** decides whether the run continues. When the conditions pass the run moves to the next step; when they do not, the run stops here.
The drawer is headed **Filter** with tabs **Filters** and **Advanced**.
## Settings
* **Field**. The **Select field** box. Type to search: "2: Answer" finds "Question 2: Answer". The list holds the event's fields and the outputs of earlier steps.
* **Operator**. The **Select** box beside the field. Disabled until a field is chosen. The operators offered depend on the field's type, listed below.
* **Value**. A box that appears for operators that compare against something. **is empty** and **is not empty** have none.
* **Add Filter**. Adds a row to the same set.
* **Add New Set**. Starts a new set below the first.
* **AND / OR**. A toggle that appears between two rows, and another that appears between two sets. Default **AND**. Within a set it decides whether every row or any row must pass. Between sets it decides whether every set or any set must pass.
* **Unique Constraints**. On the **Advanced** tab. Pick fields, and the Filter passes only once for each combination of their values. With an identifier and a status field selected, a record passes for a given status once, however many events it produces with that status.
### Operators
| Field type | Operators |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Text | equals, not equals, is empty, is not empty, contains, does not contain, starts with, ends with, does not start with, does not end with |
| Number | equals, not equals, is empty, is not empty, greater than, less than, greater than or equal, less than or equal |
Fields that hold a range or a set of values also offer **between**, **one of**, and **not one of**.
### On the canvas
The card shows a **Filter** badge, the set number, and each row as field, operator, value.
## What it outputs
Nothing new. The variables available after a Filter are the same as before it.
On the run page a passed Filter carries the line "Completed" with the time. The timeline records "Filter: Run Moved", then "Filter: Completed" with each set marked **Valid** and the value it expected against the value it found.
## What stops the run
Conditions that do not pass. The timeline records "Filter: Cancelled" with the message "Filter not passed." followed by "Filter: Run Cancelled". Steps after the Filter show no status line, and in the runs list the run's **Step** column reads "Filter".
A Filter inside a Split stops only its own branch. See [Split](/reference/automations/steps/split).
Other reasons a run can stop are listed in [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Patterns
* **Guard the start.** A Filter as the first step stops runs the start cannot exclude on its own, such as a response with an empty answer to the question that matters.
* **Check again after a wait.** A Delay then a Filter confirms the record still qualifies once the wait is over. A candidate placed in the meantime never gets the follow-up.
* **Fire once per status.** A unique constraint on the record's id and its status field lets a status change through once, even when the app sends the same update more than once.
* **Choose Split for two outcomes.** A Filter ends the run on a no. When both yes and no need steps, use a [Split](/reference/automations/steps/split) with a Filter branch for each.
## Common mistakes
* **Saving a row without an operator.** The drawer saves it and the canvas shows the raw key `enums.conditions.undefined` in place of the operator. Open the Filter again and pick one.
* **Searching by number alone.** "Question 2" also matches "Question 12". Type part of the question's title as well.
* **Expecting a skipped step.** A Filter that does not pass cancels the run, it does not skip to the next step.
* **Mixing AND and OR without sets.** Rows in one set share one toggle. To combine "A and B" with "C", put A and B in one set, C in another, and set the toggle between the sets to **OR**.
## Related
* [Split](/reference/automations/steps/split) runs a Filter per branch instead of stopping the run.
* [Setup](/reference/automations/steps/setup) holds the start filter, which decides whether a run begins at all.
* [Run cancellation reasons](/knowledge-base/run-cancellation-reasons) explains where to read the message a stopped run leaves.
# Setup
Source: https://help.hiredata.com/reference/automations/steps/setup
The Start node of a HireData automation: the app, object, trigger, form, and delay that decide which event begins a run.
Every automation begins with the **Start** node. Clicking it opens a drawer headed **Setup**, where you name the event that begins a run. The drawer is the same whether the automation started from a template or from scratch. An event that matches the settings here starts one run; an event that does not match starts nothing.
For a new automation the drawer walks you through the app, the object, and the trigger in turn. After the first save it shows a summary with an **Edit** link beside each choice, and the **Next step** picker opens so you can add the first step.
## Settings
* **App**. The connected app whose events start the automation. The grid lists the apps in your workspace that offer triggers, so a connected app can be missing here when it only offers tasks. **HireData** is always present.
* **Connection**. The account the event arrives through. Shown for apps that connect through an account, such as Carerix, and omitted for HireData.
* **Object**. What the event is about. For HireData: **Conversation**, **Email**, **Person**, or **Response**.
* **Trigger**. The change to the object that starts a run. For a Response: **Completed**, **Created**, **Created or Updated**, or **Updated**. The choices are listed under the heading **When something happens**.
* **Config**. Extra settings the trigger needs. For a Response trigger it holds **Form** with an **All** switch. With **All** on, a response to any form starts a run. Switch it off and a **Select a form** box appears. Pick a form when you want to use its questions as variables in later steps; with **All** on, the questions are not offered.
* **Delay**. Present when the start waits for a date on the record, as an installed template does with "4 weeks after Candidate: Last Contact Date". The row reads the offset, such as **4 weeks after**, with an **Edit** link. This is the start delay. It is not a [Delay step](/reference/automations/steps/delay).
* **Filter**. Conditions the event must meet before a run starts, for the triggers that offer them. A HireData Response trigger has none. The run page lists the start filter in the event panel next to App, Object, and Trigger. It is not a [Filter step](/reference/automations/steps/filter).
The app cannot be changed once the automation exists. To move an automation to another app, create a new automation.
Saving writes the whole automation at once. A new automation is called "Blank Automation" until you rename it, and the name is kept only after Setup has been saved once.
### On the canvas
The Start node carries a **Start** badge, the object and trigger as its title, and the Config rows underneath, such as the form a Response trigger listens to.
## What it outputs
The event. Its fields are available as variables to every step that follows: the object's fields, and the answers of the selected form when the trigger is a Response.
On the run page the Start node carries the line "Run Started" with the time. Clicking it opens the event panel, headed with the app name and "Event", with tabs **Overview**, **Fields**, and **Related**. Overview lists **App**, **Connection**, **Object**, **Trigger**, and **Filter**, then the run's **Timeline**.
## What stops the run
Nothing at the Start node stops a run that has begun. What Setup decides is whether a run begins at all.
* An event that does not match the app, object, trigger, or form starts no run.
* An event that fails the start filter starts no run.
* A paused automation starts no run. Testing a paused automation returns "No run started for automation."
If a run you expected is missing, work through [Why didn't my automation run?](/knowledge-base/why-didnt-my-automation-run).
## Related
* [Automation steps overview](/reference/automations/overview) lists every step you can add after the Start node.
* [Filter](/reference/automations/steps/filter) stops a run that has already started.
* [Delay](/reference/automations/steps/delay) pauses a run between steps.
* [How to test an automation](/automations/how-to-test-an-automation) sends one record through the start without waiting for a real event.
# Automation safety limits
Source: https://help.hiredata.com/settings/automation-safety-limits
Configure automation safety limits in HireData to cap how many messages a contact receives, prevent runaway sends, and keep your recruitment outreach on track.
Safety limits in HireData prevent your automations from overwhelming contacts with excessive messaging. They help you maintain a balanced, professional outreach process while minimising errors. Read on for a breakdown of each safety limit and how to use them.
Landed here from a **Send Limits Exceeded** or **Send Limits Per Automation Exceeded** cancellation? See [Run Cancellation Reasons](/knowledge-base/run-cancellation-reasons) for the fix.
## Breakdown of the safety limits
### Prevent message overload
#### 1.1. Email send limits
* **Definition**: Limits the number of emails that can be sent to a single email address.
* **Purpose**: Prevents overloading a contact's inbox and avoids emails being flagged as spam.
* **Fully customisable**
#### 1.2. Conversation send limits
* **Definition**: Limits the number of conversations initiated per phone number.
* **Purpose**: Controls outreach frequency to avoid excessive messages and potential contact fatigue.
* **Fully customisable**
### Automation message limits
#### 2.1. Email send limit
* **Definition**: Limits the number of emails you can send to the same email with the same automation.
* **Purpose**: To prevent overloading the recipient with the same email in a short period of time.
* **Fully customisable**
#### 2.2. Conversation send limit
* **Definition**: Limits the number of conversations you can send to the same phone number with the same automation.
* **Purpose**: To prevent overloading the recipient with the same messages in a short period of time.
* **Fully customisable**
### Close unresponsive conversations
#### 3.1. Ignored (no reply)
* **Definition**: Automatically cancels a conversation if there’s no reply within the set time period
* **Purpose**: Prevents inactive conversations from remaining open when recipients don’t respond.
* **Fully customisable**
#### 3.2. Ghosted (stopped responding)
* **Definition**: Cancels a conversation if there’s no reply after a follow-up within the set time period.
* **Purpose**: Prevents stalled conversations from staying open when recipients stop responding mid-conversation.
* **Fully customisable**
### Avoid accidental restarts
#### 4.1. Cooling-off period
* **Definition**: Adds a buffer period after a conversation ends before a new one can start.
* **Purpose**: Prevents automatic restarts when a contact sends a new message too soon after a conversation has closed.
* **Fully customisable**
## How to adjust your safety limits
Go to **Settings** > **Safety Limits**.
Enter the maximum allowed messages or timeouts and use the dropdown menu to set the frequency (e.g., per day/week/month/quarter/half year/year) of each setting.
Click the **Save Changes** button to apply your changes immediately.
## Adjusting safety limits for an individual automation
Every automation in HireData can have its own set of Safety Limits. These limits define how many messages a single recipient can receive from this specific automation within a certain time period.
Inside each automation’s settings panel, you’ll find two types of limits:
* **Email Limit** – This limit determines how many emails the automation is allowed to send to the same email address within the selected time frame.
* **Conversation Limit** – This limit applies to automations that initiate conversations via WhatsApp. It defines how many new conversation attempts can be started for the same recipient within a given time period.
### How to set up the safety limits for individual automations
### What if you want no limits?
At the bottom of the Safety Limits panel, you’ll find an option called **Ignore all safety limits**. When enabled, the automation **bypasses all safety limits**, both automation-specific limits configured above and account-level safety limits.
Only use this option when you are fully confident that:
* The automation cannot trigger excessively
* The recipients expect multiple messages
* Your use case genuinely requires unrestricted sending
For most automations, we strongly recommend keeping the safety limits enabled.
# Brands
Source: https://help.hiredata.com/settings/brands
Set up brands in HireData with your logo, colours, and company details so every email, message, and form your automations send matches your identity.
This guide shows you how to add a brand to HireData. You'll set up basic company information (name, slogan, values, and location) and add your branding (logo, banner, and colour palette). If you'd rather watch than read, there's a video guide at the end.
## Step 1: Open the Brands menu
Open the Settings page in HireData and then navigate to the Brands menu.
If it's your first time doing this, you won't see any brands there because you haven't created them yet, so continue reading to learn how to do it.
## Step 2: Add your brand
To start, click the \[New Brand] button:
***2.1. Add the name of your brand***
***2.2. Include its location***
To do that, your company should have a Google Business profile because this is an integration with Google Maps. If your company's data is not there, you won't be able to add the location.
If your business already has an account, you can continue typing the brand name in the search bar. You will see one or a few results pop up, depending on whether your company has multiple addresses. In that case, it's important to add the main one, which will be its headquarters, and after that, you can add more locations if you want.
***2.3. Confirm creating your brand***
Click the \[Create Brand] button at the bottom of the page.
## Step 3: Set up the brand profile
This section shows you how to set up your brand profile: the general information to add, how to import a logo and banner for emails, reviewing the location, and adding links to social media accounts that appear in your communications.
### 3.1. General settings
***3.1.1. Check the brand name and add a slogan***
***3.1.2. Add an avatar***
This is typically the brand's logo, so click the \[Edit] icon and add it from your device.
***3.1.3. Add a banner***
Again, click the \[Edit] icon positioned on the banner's frame, and select the image from your device.
In some cases, the automatic shape might differ from the shape of your image. To fix this, select \[Crop shape] and then \[Custom] to adjust it.
*Where to find the \[Custom crop] button:*
*Adjusted banner:*
*Final banner and avatar:*
***3.1.4. Select a domain***
If you have already [added your domain](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails) in HireData, you can select it so it's connected to your brand.
***3.1.5. Add your company's website URL***
***3.1.6. Write the brand's values and mission***
***3.1.7. Review the information and save***
### 3.2. Email settings
In the email settings, you need to add a banner and logo which will be used in the campaigns you are going to create.
***3.2.1. Add email banner***
***3.2.2. Add email logo***
The logo image should be a PNG file with a transparent background.
**Pro tip:** Use a darker version of your logo because most email backgrounds are white and your logo won't be visible if it's in light colours. For example, if you have a white and a black version of your logo, always choose the black version for emails.
***3.2.3. Review and save***
### 3.3. Location
Make sure the location you've added is correct on the interactive map.
### 3.4. Socials
You can add as many of your company's social media accounts as you want, but be careful not to overuse this feature, as you don't want to overwhelm your campaign recipients.
## Step 4: Create a colour palette
Creating a colour palette for your brand in HireData allows you to incorporate your brand's colours into the design of your campaigns so that they are consistent with your business branding.
You can manually add them by typing the HEX colour codes or automatically extract the colours from one of the images you previously added, e.g. logo or banner.
If you decide to use this handy feature, double-check if the extracted colours are the same as your branding. If there is a difference, you can easily adjust them and then save the palette via the \[Save palette] button.
## Pro tip
Open one of the templates to see how the branding you've just created looks.
*Go to the Templates sub-menu and choose any template:*
*Select your brand to see it in action. You can also make it a default option for all of your campaigns:*
***
## Video guide
# Adding a default sender to your domains
Source: https://help.hiredata.com/settings/domains/adding-a-default-sender-to-your-domains
Add a default sender address to your verified HireData domains to improve email deliverability and give recruitment messages a consistent from address.
*To start sending emails from your account, you first need to add your domain and set a default sender. This ensures your messages will be delivered correctly and appear professional to recipients. Continue reading to learn how to do this in seconds.*
Navigate to the **Settings** menu and open the **Domains** page. You should first [add your domain](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails) and then open it to see the field to add the default sender of your emails.
There are two ways to add a default sender:
**1. Selecting a synced user from the drop-down menu**
**2. Manually typing their name and email address**
Note that the user who will be used to send emails from this domain should have the same email domain. If you have multiple domains in your account, each of them can have a different default sender; simply follow the steps explained in this guide.
# How to verify a domain in HireData to send emails
Source: https://help.hiredata.com/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails
Verify your domain in HireData with the right DNS records so you can start sending emails from your own address with strong deliverability and authentication.
*Verifying your domain in HireData is a crucial step to ensure you can send emails directly from HireData. Without domain verification, you will not be able to send emails or use it for your branding. Follow the steps below to complete the verification process.*
**Before you start:** the Email app must be installed before DNS records can be generated or verified. If clicking **Verify DNS** results in a 404 error or no response, see [Why Can't I Verify My DNS Records?](/knowledge-base/why-cant-i-verify-my-dns-records)
## Step 1: Add a new domain
Log in to your HireData account, open your settings, and then the [**Domains**](https://app.hiredata.com/settings/account/domains) page.
Click the **New Domain** button to add a new domain.
## Step 2: Enter domain details
After you click **New Domain**, a new screen will appear where you will need to fill in the domain details, including:
1. **Domain name**
2. **Default Sender Name** – this is the name that will appear as the sender in emails sent from HireData if this information is missing in the events' records received from your app.
3. **Default Sender Email** – this will be the default email address used when sending emails if this information is not available.
Click **Create Domain** and continue with the next step.
## Step 3: Generate DNS records
DNS (Domain Name System) records are like signposts that tell the internet where to find different services linked to your domain. When you verify your domain in HireData, you need to add specific DNS records to prove that you own the domain and allow us to send emails on your behalf.
These records include:
* **CNAME Records**: These link your domain to another domain, often used for verification.
* **DMARC TXT Record** (optional): This record helps protect your domain from email phishing, and unauthorized email use, improving email deliverability.
Without these records, email providers might block or mark your emails as spam. That’s why adding and verifying the DNS records is essential for smooth email delivery.
Simply click **Generate DNS Records** if they are not automatically generated.
## Step 4: Add DNS records to your domain provider
After you have the DNS records, you need to add them to your domain provider (e.g., GoDaddy, Cloudflare, Namecheap, etc.).
1. Navigate to the DNS Settings section on your provider's website.
2. Add the provided DNS records exactly as shown in HireData.
3. Save the changes.
Things to consider:
1. Some DNS providers require you to enter only the subdomain in the **Host/Name** field, without the full domain. For example, the provider might not accept the host value with "hiredata.com", so it can be removed.
2. Occasionally, DNS providers might automatically handle the trailing dot (`.`) at the end of the values, so you might need to delete it.
## Step 5: Verify DNS records
Return to the **Domains** page in HireData and click the **Verify DNS** button. If the DNS records have been correctly added, your domain will be verified.
Once your domain is verified, you will be able to send emails directly from HireData by using our built-in email templates or create custom ones to streamline your business communication.
If your domain is not verified, you will not be able to send emails via HireData. Make sure you complete the verification process to avoid any disruptions in your automations.
If you experience any issues with the verification, ensure your DNS records have been correctly added and allow some time for them to be processed. If problems persist, contact your domain provider or HireData support for assistance.
***
## Video guide
# How to change/reset your password
Source: https://help.hiredata.com/settings/how-to-change-reset-your-password
Change or reset your HireData password from account settings or the login screen to keep your recruitment workspace secure and regain access if locked out.
*If you've forgotten your password or simply want to update it for security reasons, you're in the right place. This guide will walk you through the steps to reset or change your password quickly and securely. Whether you're locked out or just taking proactive steps to protect your account, the process is simple and only takes a few minutes.*
## Changing your password while logged in
Navigate to the **Settings** menu and open your **Profile** page. Then, enter your new password, confirm it, and click \[Change Password].
## Resetting your password
Head to the [HireData log-in page](https://app.hiredata.com/login) and click the \[Forgot your Password?] redirect link.
Enter the email address you used to register in HireData and click \[Reset Password].
Then open your email inbox, where you should receive an email from us with a link to change your password.
💡 **Pro tip:** After changing your password, keep it safe in a password manager, such as Bitwarden, so you don't forget it.
# Locations
Source: https://help.hiredata.com/settings/locations
Add and manage business locations in HireData using the Google Maps integration, so vacancies and messages show the correct address for every office you run.
Set up one or more business locations in HireData using the Google Maps integration. To use it, your company must be listed on [Google Business](https://www.google.com/intl/en_uk/business/), so register your profile there before continuing.
## Step 1: Navigate to the Locations menu
Log in to your HireData profile, go to the settings menu located above your name and open the \[Locations] tab.
## Step 2: Add a new location
*2.1. Click the \[New Location] button:*
*2.2. Name the location:*
*2.3. Select its location from the results:*
*2.4. Click the \[Create location] button*
*2.5. Review the location*
## Pro tip
Once your location is added to your HireData account, you will automatically get a Share Google Review URL, which you can send to others to collect native Google reviews. These types of reviews always perform better as a result of Google's algorithm.
Finally, you can also [connect your brand to the location](/settings/brands). That way, the location of your business will be automatically displayed in the communication you use, e.g. emails, where necessary.
***
## Video guide
# Events: inspect payloads from connected apps
Source: https://help.hiredata.com/settings/logs/events
Learn how events work in HireData: how connected apps send them, where to find the event log, and how to inspect payloads to debug your automations.
When you connect your ATS (such as Carerix, Salesforce, or OTYS) to HireData, it starts sending events. Events are notifications that something has happened in your system. They trigger your automations, making them crucial to how HireData works in the background. This article explains how events work, where to find them, and how to analyse them when something doesn't go as expected.
## What is an event
An event is a signal sent from your connected app to HireData. It usually represents a specific action or change, for example, a new candidate being created, a vacancy being updated, a placement being completed, etc. These events are used to trigger the automations you've set up in HireData, and every event includes **Event Data**, **External Records and Runs.**
*Event example:*
## How to view event details
Navigate to the **Settings** menu and open the **Events** page to see a list of all events sent from your connected apps:
*Use the filters for a more organised view, for example, if you want to see the events coming from one of your apps:*
To explore an individual event, click the \[Details] button next to the event for a short overview or open the dropdown menu and click \[View].
This will open the event detail view, which includes:
* **Event Data** – a summarised view of the data received from your app.
To inspect the raw request body, open the event data and use the available code or JSON view. This helps you confirm exact field names and values received from the source app.
* **External Records** – additional fields from the source app, even if they aren't used in the automation.
* **Runs** – the runs created by this event and the automation associated with each one. You'll also see each run's status (e.g. Completed, Delayed, Cancelled).
## Replaying events
If an event doesn't trigger an automation as expected, or a run fails before completing its tasks, you can replay individual or multiple events to re-trigger automations and get things back on track.
When you replay an event, it can trigger runs across multiple automations at once. Before replaying, always check which automations and runs will be affected, especially if any of them include sending an email or a message. Replaying those without checking first could result in duplicate messages being sent to candidates or contacts.
### What happens when an event is replayed?
HireData reprocesses the selected event(s) and triggers the associated automations. The affected tasks will be executed as if the event had just occurred.
* **Event-based automations** – For automations that are triggered by a specific event (for example, a candidate reaching a certain stage), the replay will re-trigger the automation immediately based on the event data. If there was previously a created run, it will be replayed and a "Replay" label will show up.
* **Scheduled (one-time) automations** – For automations that run on a fixed date or schedule, replaying the event will not change or reschedule the automation's planned run date. The replay only re-evaluates whether the event matches the automation's conditions.
### How to replay events
There are three ways to get to the replay option, depending on what you need:
* **From the Events page (all events)** – Navigate to the **Events** page from the main menu. This gives you an overview of all events received by HireData.
* **From a specific automation** – Open the automation you want to investigate, then go to its **Events** page. This filters the view to only show events related to that automation.
* **From a single event** – Click directly on the event you want to replay to open its detail view.
To replay a **single event**, click the three-dot menu next to the event in the detail view or the **Events** list, and select **Replay** from the dropdown.
To replay **multiple events at once**, check the box next to each event you want to replay on the **Events** page or an automation's **Events** tab. Once one or more events are selected, a **Replay** button will appear at the top of the page. Click it to proceed.
To see which automations were previously triggered by the event, open the event and go to the **Runs** tab. This shows you the automations and their status from the last time the event was processed. Use this information to decide whether it's safe to proceed with the replay.
Check whether any of the listed automations include tasks like **Send Email/Message/Survey**. If they do, make sure you intend for those messages to be sent again before confirming.
Once you're confident, confirm the replay.
* **Always review the affected automations before confirming a replay.** One event can match multiple automations, and replaying it will trigger all of them.
* **Be extra cautious with automations that send emails or messages.** Replaying an event tied to those automations may send duplicate communications to candidates or contacts.
* **Use the automation-specific Events tab if you only want to replay within a single automation.** This gives you a more focused view and reduces the risk of unintentionally triggering unrelated automations.
* **Bulk replay is useful when multiple events failed at the same time**, for example, after a temporary sync issue. Instead of replaying one by one, you can select all affected events and replay them together.
## Troubleshooting events
If an automation didn't run as expected, or you're seeing unexpected data:
* Go to the **Runs** tab of the event and check if any runs were created.
* Click into the run to view logs and see if a step failed or was skipped.
* Compare the **Event Data** with the conditions in your automation to ensure it matches.
* Use the code or JSON data view to check for missing fields, different field names, or unexpected value formats.
If no run was created, the event may not have met the criteria of an active automation. See [Why Didn't My Automation Run?](/knowledge-base/why-didnt-my-automation-run) for a complete checklist.
### Still need help?
If you're unsure why an event didn't trigger your automation or want help interpreting the event data, feel free to contact our team at [support@hiredata.com](mailto:support@hiredata.com). If you do, please include:
* A link or the ID of the event;
* A link or the name of the automation you expected to be triggered;
* Any relevant steps or context that might help us investigate throughout.
# Runs: read automation timelines and step details
Source: https://help.hiredata.com/settings/logs/runs
Learn what runs are in HireData, how they capture each step of a triggered automation, and how to read run details to troubleshoot recruitment workflows.
*When an automation is triggered by an event from your connected app, e.g. Carerix, Salesforce, etc., a run is created. This run represents the full process that follows from the initial trigger to each step of your automation. This article walks through what runs are, how to find and read them, and how they can help you troubleshoot your automations.*
## What is a run
A run is the result of an automation being triggered. It shows the exact sequence of actions that took place after an event was received, for example, a filter being checked, a delay being completed, or an email being sent/conversation ended. Each run includes a full timeline of the steps taken, an **Overview**, **Fields**, and **Related** tabs.
Once a run is successfully completed, HireData adds a new task to the list in the **Task History** page.
## How to filter runs
Navigate to the **Settings** menu and open the **Runs** page to see a list of all runs:
Use the filters for a more organised view, for example, if you want to see the runs associated with one of your connected apps, or by narrowing them down by the state/stage they are currently in.
*Filtering runs by an app:*
*Filtering runs by their state:*
*Filtering runs by their sub-state:*
## How to view run details
To explore an individual run, click the \[Details] button next to the run for a short overview, or open the dropdown menu and click \[View Run].
This will open the run's detail view, which includes:
* **Overview** – a summarised view of the data received from your app.
* **Fields** – fields with the data in the event that triggered the automation and might have been used in the run.
* **Related** – the automation this run followed and the event that triggered it.
This detailed view also allows you to see exactly how your automation played out and whether each step succeeded.
For a cancelled **Send Email** step, open the step and read the exact message shown in **Overview**. For example, the message can be `Invalid sender email.` See [Run Cancellation Reasons](/knowledge-base/run-cancellation-reasons) for common cancellation messages and their fixes.
## Troubleshooting runs
If something didn’t happen as expected:
* Open the detailed view of the run to view logs and see if a step failed or was skipped.
* Open the **Fields** tab to confirm whether the data used in the run met your conditions. You can also compare the run with the original event (found via the **Related** tab) to understand what triggered it and confirm if it used the correct data.
For a broader diagnostic checklist, see [Why Didn't My Automation Run?](/knowledge-base/why-didnt-my-automation-run).
## Still need help?
If you're unsure why a run was cancelled or completed, or want help interpreting the run's steps, feel free to contact our team at [support@hiredata.com](mailto:support@hiredata.com). If you do, please include:
* A link or the ID of the run;
* Any relevant data or context that might help us investigate further.
# How to prevent user role changes during third-party sync
Source: https://help.hiredata.com/settings/prevent-user-role-changes-during-third-party-sync
Use the Enable Third-Party Sync setting to protect HireData user roles from being overwritten when your ATS syncs, so admins keep the right permissions.
*When HireData syncs with your ATS, it can automatically update user roles, which sometimes overwrites custom access you've set up manually. This article explains how to use the **Enable Third-Party Sync** setting to protect a user's role in HireData from being changed during sync, and when you'd want to do this.*
## What does this setting do?
By default, HireData syncs user roles from your ATS (e.g. Carerix) every night or when a sync is triggered manually. If a user has been given admin access in HireData but is not an admin in Carerix, that sync will reset them back to a regular user, removing their access.
Turning **off** the **Enable Third-Party Sync** setting for a specific user tells HireData: *"Don't touch this user's role during sync."* Their HireData role stays exactly as you've set it, regardless of what your app says.
* This is especially **useful for non-admin ATS users who need admin access in HireData**. For example, someone in Sales with a "Marketer" role in your app can be given admin access in HireData, and with sync disabled, that access won't be overwritten.
* This also **applies to users with Additional Roles** in Carerix. If a user has multiple roles across different labels within one Carerix environment, and one of those additional roles is not an admin, HireData may incorrectly reset them to a regular user during sync. Turning off this setting prevents that from happening.
For Carerix users: if the setting is turned off for a user who is an Admin in HireData, but has a different role in Carerix (e.g. User, Marketer, Sales), they won't be able to access the RMA menu items within Carerix, as they need to have admin permissions in Carerix specifically.
## Protecting a user's role
Go to **Settings** in the main navigation, then select **Users**. Find the user you want to configure and click their name to open their profile.
This setting is per user. You'll need to configure it individually for each person who needs their role protected.
Scroll down to the **Access Control** section on the user's profile page. Find the **Enable Third-Party Sync** toggle.
* **Toggle on** – This user's role *will* be updated automatically during syncs from your ATS.
* **Toggle off** – This user's role *will not* be changed by any sync, whether nightly or manually triggered.
Click **Save Settings** to apply.
Turning this setting off does not disconnect the user from your ATS. It only prevents their HireData role from being overwritten during sync.
# Setting a default language and AI tone of voice
Source: https://help.hiredata.com/settings/setting-a-default-language-and-ai-tone-of-voice
Set a default language and AI tone of voice in HireData so generated emails, messages, and content match your brand across every recruitment automation.
*Customizing your HireData account's localization settings ensures your communication aligns with your audience and brand. This guide walks you through configuring these settings and tailoring them to your specific needs.*
## Step 1: Open the Localization page
Navigate to the **Settings menu** within HireData and open the **Localization page**. There, you can select a default language for your templates and an AI tone of voice for your WhatsApp conversations.
## Step 2: Update the default localization settings
### 2.1. Set a default language
Click the **Language** box to open a broad list of the available languages.
*If the desired language is not immediately visible, use the search bar to find it quickly:*
### 2.2. Set a tone of voice
Click the **Tone of Voice** box to view the available options and select the tone that best matches your branding and communication needs.
## Step 3: Review and save
Double-check your selected language and tone of voice settings. Click the **Save** button to apply the changes.
## Set your own app language
The Localization page sets the language for the whole account. Each user picks the language of their own HireData interface separately.
Open **Settings**, then **Profile**, and go to **App language**. Choose a language and click **Save language**.
The default is **Automatic (browser language)**, which follows the language your browser asks for. You can also pick English, Nederlands, Deutsch, Français, Español, Italiano, or Português.
When no user setting applies and no browser language can be matched, HireData falls back to the account language from the Localization page.
This setting changes the HireData interface only. The language of the emails, messages, and content you send stays with the account default and the template you use. Translation of the interface is still in progress, so parts of the app remain in English.
# HTTP Request task
Source: https://help.hiredata.com/reference/automation-tasks/http-request-task
Send an HTTP request from a HireData automation. Import an OpenAPI spec or cURL command, authenticate, describe the response, test, and handle failures.
*Call an external API straight from an automation: import a specification or build the request by hand, authenticate it, describe what comes back, and use those values in later tasks.*
An automation can call an external API by itself. The **HTTP Request** task sends a request to an address you choose, with the authentication that endpoint expects, and makes the response available to the tasks that follow once you describe what it contains. You don't need a developer, and you don't need anything sitting in between.
If someone already handed you an API specification or a cURL command, you don't have to retype it. HireData can read it and fill the request in for you, which is where this page starts.
If you'd rather follow one complete example than look up fields one at a time, the cookbook walks a single request from trigger to response value: [Post an outcome to your own system](/knowledge-base/cookbook/post-an-outcome-to-your-own-system).
Looking for the other direction, where another tool sends data **into** HireData? That's a custom app trigger. See [Custom Apps](/apps/custom-apps/introduction).
## Where to find the task
The task picker groups tasks by category, and **HTTP Request** is filed under two of them. Both routes open the same task:
* **Add → HTTP Request**
* **Message → HTTP Request**
If you think of an outbound call as sending something, look under **Message**. The task is there too, so a call that isn't under **Add** hasn't gone missing.
Under **Add**, you'll find both **HTTP Request** and **Post Webhook**.
## Inside the task drawer
Adding the task opens a drawer that holds the whole request:
* The **header** carries the task's name and a control to edit it.
* Below the header, the **URL bar** with the method selector, offering `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, and `HEAD`.
* Five tabs: **Params**, **Body**, **Headers**, **Auth**, and **Advanced**.
* **Response** is not one of the tabs. It's a separate section beneath the tabbed area and is always visible.
* The footer carries **Import**, **Test**, **Cancel**, and **Save Task**.
A new task is titled **HTTP Request**, with the method set to `POST` and an empty URL behind the placeholder `https://api.example.com/v1/resource/`.
## Import a specification or a cURL command
The fastest way to fill in a request is to let HireData read it from a document you already have. Click **Import** in the drawer's footer to open the **Import** dialog, which offers three routes:
Paste the document straight into the box. The route is labelled "OpenAPI, Swagger, Postman, cURL or markdown", so anything in one of those formats works.
Choose the document from your computer, for when what you were sent isn't text you can copy. The route is labelled "A specification or collection file".
Give HireData the address the specification is published at and it retrieves the document for you. The route is labelled "Fetch a specification by URL".
### Formats HireData reads
Whichever route you use, the document has to be one HireData recognises:
* **OpenAPI 3.x** and **Swagger 2.0** specifications
* **Postman 2.1** collections
* A **cURL** command
* A **markdown** page that contains either a cURL command or a specification, which is often what a vendor's documentation page amounts to
Anything outside that list is refused rather than half-read, with "Only OpenAPI 3.x, Swagger 2.0 and Postman 2.1 documents are supported." An older Swagger or a Postman 1.0 export needs converting first. A specification that points at other files with external `$ref` references is also refused, so ask for a bundled single-file version.
### What an import fills in
Importing an API specification populates:
* The **method** and the **URL**, including the path segments the operation defines
* Any **query parameters** the operation takes, on the **Params** tab
* The **authentication type** on the **Auth** tab, taken from the specification's security scheme
* The **Description** on the [Advanced](#advanced-settings) tab
* Both trees in the [Response](#describe-the-response) section: the success response and the error response
Fill in your own key or token on the **Auth** tab afterwards, and treat the import as a starting point rather than a finished request.
### Importing a cURL command
A cURL command imports too, and it's often all a vendor's documentation gives you. It sets the method, the URL, the body, and the headers.
It also sets the credential, where the command carries one. An `Authorization: Bearer …` header becomes a **Bearer token** with the token filled in, and the header itself is dropped so it isn't sent twice. `-u user:password` — and a base64 `Authorization: Basic …` — becomes **Basic auth** with the username and password filled in.
So treat a cURL command you were sent as a credential, not just a snippet. If it came out of someone else's terminal, it may carry their key: check the **Auth** tab after importing and replace anything you shouldn't be holding.
The **Response** section stays empty afterwards. A cURL command describes only the request going out and carries no information about what comes back, so there's nothing for HireData to build the response trees from. If later tasks need values from the response, describe it yourself in the [Response](#describe-the-response) section.
### Documents with more than one operation
A specification usually describes a whole API rather than a single endpoint. When the document you import contains more than one operation, HireData shows you a list of the endpoints in it and asks which one this task should call, so handing over a complete specification is not a mistake.
This depends on the document, not on how you brought it in. The same list of endpoints appears whether you pasted the specification or fetched it **From URL**.
## Build the request by hand
An import needs a document to read. When all you have is an endpoint and the vendor's documentation, fill the request in yourself. These are the same tabs an import writes into, so this is also how you adjust an imported request. Credentials come last either way, under [Authentication](#authentication), with one exception. Importing a *specification* sets the authentication type and leaves the secret blank, because a security scheme describes how an endpoint authenticates without carrying anyone's key. A *cURL command* is different: it holds real credentials, and they're imported with it.
### Query and path parameters
The **Params** tab has two sections, **Query** and **Path**. They look alike and work differently.
**Query** rows are yours to fill in. Each row has:
* **Enabled**: a checkbox that turns the parameter on or off without deleting the row
* **Name**: the parameter's name, typed in
* **Value**: what to send, with a field picker beside it
* **Remove**: deletes the row outright
The URL bar and the **Query** rows are two views of the same thing. Paste a URL with a query string on the end and it splits into rows; add or edit a row and the query string in the URL bar updates to match. So you can work in whichever of the two you were given — a full URL from a vendor's documentation, or a table of parameters — without transcribing it into the other.
You don't name **Path** rows yourself. They come from the URL. Until the URL contains one, the section reads "Path parameters appear when the URL contains `{placeholder}` segments."
Wrap part of the path in curly braces and a row appears for it. Give the task this URL:
```text theme={null}
https://api.example.com/repos/{owner}/{repo}/issues
```
Two rows appear under **Path** straight away, `owner` and `repo`, each marked required with an asterisk. A URL ending in `/chats/{chat_id}/messages` gives you one row, `chat_id`.
So you express the endpoint's shape once, in the URL. Edit the URL and the rows follow it.
### Request body
The **Body** tab opens with one choice, `Form` or `Raw`: whether the body goes out as form fields or as a raw payload. That choice decides which controls sit beside it, so make it first.
**`Form`** offers two encodings, `Multipart form` and `Form URL encoded`, and a table of name and value rows. An endpoint that takes a form usually documents one of the two and rejects the other, so check which before you pick.
**`Raw`** offers four formats — `JSON`, `XML`, `Text`, and `GraphQL` — for an endpoint that documents XML or a GraphQL query rather than JSON. It adds a third control, `Builder` or `Code`: whether you build the body from typed properties or write it out yourself. Use whichever suits you. With nothing in it yet, the tab reads "No body properties yet" and points at both: "Add typed properties to build the request body, or switch to the raw editor."
There are two ways to nest, and the quick one is in the name: "Use dots in property names to nest objects, e.g. candidate.email."
A property named `candidate.email` therefore sends the address inside a `candidate` object:
```json theme={null}
{
"candidate": {
"email": "sofia@example.com"
}
}
```
The other way is structural. Give a property the type **Collection** — "A repeating list of objects, e.g. line items or attendees" — or make it an object, and it becomes a group row with an **Add child property** button on it. Build the shape out that way when the endpoint wants an array of things rather than one, which dotted names can't express. Every property also has **Edit property** and **Remove**.
A `GET` request doesn't send a body. Select `GET` and the whole tab becomes one line: "This request method does not send a body."
### Headers
Header rows have a **Name** and a **Value**. **Name** suggests known header names as you type. You can still type any name the endpoint needs. **Value** takes the same field picker as a query parameter's value.
For a header that carries an API key or a bearer token, use [Authentication](#authentication) instead. It has fields for both.
### Using fields from the automation
A request built entirely from fixed values sends the same thing on every run, which is rarely the point. Fields from the automation are what make each run send its own data, including values an earlier task produced.
There are two ways to insert one:
* The **field picker** beside a **Value**, which lists what's available
* Typing `{{` in the input itself. The picker opens as soon as you type it, and what you type between the braces searches the list, which is quicker when you already know roughly what the field is called
Either way the field is stored as a `{{field_key}}` token, which is what you'll see if you look at a value you've already filled in.
Fields can go into the URL, the parameters, the headers, and the body. Any part of the request can change from run to run.
## Authentication
The **Auth** tab is a segmented control with five options: `None`, `API key`, `Bearer token`, `Basic auth`, and `OAuth2`. Choose the one the endpoint's owner told you to use and its fields appear.
| Type | Fields |
| -------------- | -------------------------------------------------------------------------------------------------- |
| `API key` | **Key name**, **Send in**, **Key value** |
| `Bearer token` | **Token** |
| `Basic auth` | **Username**, **Password** |
| `OAuth2` | **Token URL**, **Client ID**, **Client secret**, **Scopes**, **Audience**, **Send credentials as** |
### API key
**Send in** decides where the key travels: as a `Header`, which is the default, or as a `Query parameter`. **Key name** is then the name of that header or that parameter. **Key value** is the key itself. Check which of the two the endpoint's documentation asks for, because a key in the wrong place reads to the endpoint like no key at all.
### OAuth2
These are the fields of the client credentials grant. HireData trades the **Client ID** and **Client secret** for a token at the **Token URL**, then sends that token with the request. There's no redirect URL and no consent screen involved, so if you're looking for one, it isn't missing.
The token is fetched once and kept. HireData reuses it while it's still valid and fetches a new one when it expires, so an automation running many times an hour isn't asking the token endpoint for a fresh token on every run. There's nothing for you to schedule or refresh.
**Scopes** are "Separated by spaces". **Send credentials as** chooses how the client ID and secret reach the token endpoint: in the `Request body`, which is the default, or as a `Basic auth header`. The token endpoint's documentation says which it expects.
Every authentication type shows the same line, and it's worth reading before you paste in a customer's secret: "Credentials are stored in this step's configuration and visible to anyone who can edit this automation."
Anyone who can edit the automation can read the key or token you enter. If you're setting this up on someone else's behalf, use a credential you're allowed to hold, scoped to no more than this request needs.
## Describe the response
The **Response** section sits beneath the tabs, always visible, because it's what the rest of the automation depends on: "Describe the expected response body to use its values as fields in later steps."
Three fields arrive whether you describe anything or not: the status code, the response body, and whether the call succeeded. What describing the response adds is the values *inside* the body, each as a field of its own. Until a value is described here, no later task can pick that value out on its own.
There are two trees, and you describe them separately:
* **Success response (2xx)**: what the endpoint returns when the call works
* **Error response (non-2xx)**: what it returns when the call doesn't
Build either one with **Add property**. A leaf property carries a **Label** and a key. The **Label** is the readable name you'll see downstream; the key is the name in the response body: "Canonical Name" for `canonical_name`. A property holding an object becomes a collapsible group, so a nested response reads as a tree rather than a flat list. Each property has **Edit property** and **Remove**.
The error tree carries a note of its own: "Available when the request fails — useful for logging when the automation continues on failure."
That's what it's for. If you've set the run to carry on past a failed request, describe the error body too, and a later task can record what the endpoint actually said instead of only that something went wrong.
### Fields you always get
Three fields exist on every HTTP Request task, described response or not:
| Field | What it holds |
| --------------------------------- | -------------------------------------------- |
| `: Response Status` | The HTTP status code, as a number |
| `: Response Body` | The response body, as text |
| `: Response Success` | Whether the call succeeded, as true or false |
Between them they answer "did it work, and what came back", which is enough for a later task that only needs to branch on success or log the raw reply. Describing the response is what saves a later task from reading that text and picking values out of it.
### Use a response value in a later task
A described property becomes a field on the tasks that follow, named after the request and the property's path:
`: `
The first half is the **Description** from the [Advanced](#advanced-settings) tab. The second is the property's position in the tree.
Take a request described as "Get brand context by domain". It returns `canonical_name` inside a `meta` object, and `description` inside an `identity` object. Later tasks get two fields to pick from:
* `Get brand context by domain: meta.canonical_name`
* `Get brand context by domain: identity.description`
Properties on the error tree carry an extra segment, so they can't collide with the success tree's:
`: Error: `
The description isn't cosmetic, then. It's the first half of every field name this task produces, so write a specific one before you describe the response. It's what you'll be reading in a field picker later.
## Test the request
**Test** in the drawer's footer sends the request now, so you find out it's wrong here rather than in a live run.
The dialog says what it does: "Sends the real request with the values below."
This is not a dry run. A `POST` you test is a `POST` the endpoint receives, and a `DELETE` deletes. Aim the test at a sandbox endpoint, or at values the endpoint's owner is happy for you to write, before you click **Send**.
The dialog opens on the method and the resolved URL, so you can read what it's about to call, with **Send** to fire it.
### Fill in the values
Below that, the dialog asks for one value per parameter, grouped into **Path**, **Query**, and **Body**. Only the groups your request actually has appear, so a request with no path or query parameters shows a **Body** group alone. Each input is labelled with the parameter's name, and each is editable on its own.
The inputs start from what the task is already configured to send. Anything you set to a fixed value arrives filled in, so a request built from literals can often be sent as it stands.
Two kinds of input come up blank:
* A parameter with no configured value. Path parameters are usually in this group, since they come from `{placeholder}` segments in the URL rather than from a row you typed a value into.
* A value bound to an automation field, unless that field happens to have a default value. The token is resolved against that default, and most fields carrying run data don't have one.
Type a literal into whatever's blank. The binding itself is unaffected. It still applies when the automation runs.
Reopening the dialog re-reads the task's configuration, so a literal you typed in for one test isn't there for the next.
### Check the outgoing request
The **Request** panel renders the outgoing call, with a format selector for cURL and a control to copy it. It masks secrets, so a bearer token reads:
```text theme={null}
-H 'Authorization: Bearer ***'
```
The same masking applies to the request recorded against a run, so a key or token doesn't end up sitting in the run's activity either. What isn't masked is the task's own configuration: anyone who can open the task can still read the credential you entered there. See [Authentication](#authentication).
### Read the result
After **Send**, a strip reports how it went: a status word, the HTTP code, and how long the call took: `Success`, `200`, `323 ms`. Beneath it, the full response body in a viewer labelled with the same status, with a control to copy it.
If you've already described the response, an **Outputs** section lists the values HireData pulled out of that body. That's the quickest check that your response tree matches the real reply: a property you described but that comes back missing shows up here, rather than in a run next week.
That body is exactly what the [Response](#describe-the-response) section wants. Testing first and copying the body out is the shortest way to a response tree that matches what the endpoint really returns, rather than what its documentation says it returns.
## Advanced settings
The **Advanced** tab holds the request's description and what should happen when the endpoint is slow or unavailable.
| Control | What it does | Default |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| **Description** | Describes what the request does. This is what titles the task everywhere else: in the automation, in a run, and in the field names it produces | Empty, behind the placeholder "Describe what this request does." |
| **Timeout (seconds)** | How long to wait for a response before giving up, so a slow endpoint doesn't stall the run | `30` |
| **Retries** | How many extra attempts to make after a failed request | `0` |
| **Backoff (seconds)** | How long to wait between those attempts | `2` |
**Backoff** is disabled while **Retries** is `0`. There's nothing to wait between yet, so raise **Retries** first and the field becomes editable.
## Decide what counts as a failure
The **Advanced** tab ends with two switches. They answer separate questions, and it's worth reading them that way rather than as one failure setting.
**Fail on error responses** is on by default: "Treat 4xx and 5xx responses as a failed task."
Turn it off when a non-2xx is a normal answer from this endpoint rather than a problem, such as a `404` from a lookup that simply found nothing. The task then completes, and what to do about the code is yours to decide in a later task.
**Continue automation on failure** is off by default: "The run continues with the next step even if this request fails."
Turn it on when the rest of the run is worth doing without this call. The request was a notification, not a prerequisite. Leave it off and a failed request ends the run there.
Between them they decide the fate of that expected `404`. Turn the first switch off and it was never a failure. Leave it on and turn the second on instead, and it's a failure the run survives. That's the case the [error response](#describe-the-response) tree is for.
## What the task looks like in a run
Open a run and a completed HTTP Request shows:
* Its **Description** as the title, the method and host beneath it — `GET api.example.com` — and the path below that
* **What will you provide?** and **What will you get back?**: the request you configured and the response you described
* A row of chips for the settings that shaped the call. The auth type, the timeout, and the retries are always there: `Bearer token`, `30s`, `No retries`. The rest appear only once you've turned them on: a backoff when retries are above `0`, `Ignores error statuses` when **Fail on error responses** is off, and `Continues on failure` when **Continue automation on failure** is on
The run's timeline carries two entries for the task, `HTTP Request: Run Moved` and `HTTP Request: Completed`, with the message "Http request succeeded."
## If a request comes back blocked
A request can come back blocked, with the message "The request was blocked — the destination is a private or internal address."
HireData doesn't call private or internal addresses. Check where the URL actually points, including when an automation field supplies part of it: a host that only resolves inside your own network isn't reachable from HireData.
If the destination is plainly public and you still see this, report it rather than working around it. The [support details](#need-more-help) below cover what to include.
## Existing Post Webhook tasks
**Post Webhook** is the other task for sending data out of HireData, and it's what the HTTP Request task replaces. Automations that already use it keep working exactly as they do now, and nothing about them needs changing by hand.
A one-off migration will convert those steps into HTTP Request tasks. It runs once, on our side, and it isn't something you trigger or prepare for. Build anything new as an HTTP Request task; leave what you already have alone.
## Need more help?
If a request isn't behaving as expected, contact our team at [support@hiredata.com](mailto:support@hiredata.com) and include:
* A link to the automation
* The task's method and URL, with any credentials removed
* What you expected the endpoint to return, and what it returned instead
# Follow a run
Source: https://help.hiredata.com/reference/automations/follow-a-run
Read one real HireData automation run from the Carerix event that started it to the task it created, screen by screen: event, run, run step, task, outcome.
The automation on this page listens for a Carerix candidate whose **Example text** field changes to a set value, finds that candidate, and adds a task to Carerix for the candidate's owner. One change in Carerix produced the event, run, run steps, and task below, and each section shows where that stage is on the screen and what it tells you.
## Event
The event is the change Carerix reported. It is the same event for every automation in the workspace.
What to read. The heading names the object and the trigger, **Candidate: Updated**. **Event Information** gives the app, the trigger, and the event date. **References** names the record the event is about, and **Related People** lists the person HireData matched to it. The **Data** tab is the payload as Carerix sent it. `EntityId` is the record id and `ChangedFields` lists what changed, here `additionalinfo`, the group that holds the Example text field. The **Changes** tab shows the new value of each changed field, and the **Runs** tab lists every run this event started.
What it tells you. One event can start several runs. This event started two, because two active automations in the workspace listen for Carerix candidate updates. The run you want is the one on the automation you are following.
Find events under **Settings** > **Events**. [Events: inspect payloads from connected apps](/settings/logs/events) explains the filters and the raw request view.
## Run
The run is the automation's work for this one event. Click the run's row on the event's **Runs** tab to open it.
What to read. The canvas is the automation drawn top to bottom, with a status line on the connector below every step the run reached. "Run Started: Today at 4:41 PM" sits under the Start card, "Completed: Today at 4:41 PM" under the Find task, and "Completed: Today at 4:42 PM" under Add Task once you scroll. A step with no line was never reached. The **Event** panel on the right opens by default. Its **Overview** repeats the Start settings that let this event through, **App**, **Connection**, **Object**, **Trigger**, and **Filter**, then the **Timeline**.
What it tells you. The timeline is the run in order. **Run Scheduled** and **Run Started** are the event arriving and the run beginning. Each step then writes two entries, first its status ("Find: Completed") and then what the run did next ("Find: Run Moved" to the following step, or "Add Task: Run Finished" when the last step is done). A run that stopped early ends with a "Cancelled" entry and a message instead.
The Runs list shows the same runs with their state and, for a stopped run, the step that stopped it. [Setup](/reference/automations/steps/setup) documents the Start node and the Event panel it opens on the run page.
## Step inputs and outputs
Click a task's name on the canvas to open its run step. The Find step shows what it found; the step after it shows what it received.
What to read. The Find step opens on a **Match found** line with the record's id and name. The arrow icon opens the record in Carerix. **Record Data** lists every field of the record as the app returned it, ids, names, salutations, the CV summary, dates, and more. Scroll the block to see them all. The **Run Moved** badge matches the step's last timeline entry, and **Completed** is its status. Unlike the Message and Update steps, this drawer has no **Overview** and **Fields** tabs.
What it tells you. The Add Task step's **Fields** tab lists the values it read from the run, each with the icon of the step that produced it and a type badge. **Find Candidate: Id** and **Find Candidate: Owner: Id** came from the Find step, which is the whole reason the Find sits before the Add Task. **Now** is the run's clock. Its value on this tab is the time you opened the drawer, not the time the task ran, so read the task's own times on the **Overview** tab instead.
[Find](/reference/automations/steps/find) documents the step and what an empty result does to the run.
## Task
The last step created a task in Carerix. Its run step shows what HireData wrote, and Carerix shows what arrived.
What to read. The **Overview** of an Add step links to the record it created, here **Taak (9077)**. Carerix supplies that label in the language of its account, so this Dutch sandbox says Taak where an English account says Task. **Status**, **When?**, and **Expires At** are the values Carerix stored. **When?** is one hour after the run, the offset set on the step, and **Expires At** is the run time. Both are timestamps as Carerix reports them, so they need not match the clock on the run page. **Content** is the subject and body the step wrote, and **Related Records** links the candidate and owner it attached.
What it tells you. Open the **Taak (9077)** link and Carerix shows the same task from its side. The status is **TO DO**, the time is one hour after the run, and the subject and body match the step's Content. Carerix records the task as modified by "Automated" rather than by a colleague.
[Add](/reference/automations/steps/add) documents the step and where the created record's fields appear.
## Outcome
The automation's own page sums up every run so far.
What to read. **Run Stats** on the left counts runs by state. The connectors between the steps count what each step did across all runs, "Looked up: 1x item" under the Find and "Added: 1x task" under the Add Task. Each count is a link to the Runs list filtered to that step and status.
What it tells you. Finished means every step completed and the run reached the end flag. A run that stopped early would count under a different state here, show "Cancelled" on the step that stopped it on the run page, and carry a message in the timeline. [Run cancellation reasons](/knowledge-base/run-cancellation-reasons) lists those messages and what to change before you start a new run.
# Find
Source: https://help.hiredata.com/reference/automations/steps/find
The Find category in a HireData automation: tasks that look up a record, an email address, or a company domain and hand the result to later steps.
**Find** looks for something that already exists. It is a category: choosing it opens a list headed **Find** with one entry per task, and **Back** returns to the picker.
Find appears in the picker only when a connected app offers a task in this category.
## Settings
Each task has its own drawer. The shared settings are what to look for and where: the object or source to search, and the field values that identify the record.
The tasks that fill the category in a workspace with Carerix and HireData connected:
| Task | App | What it finds |
| ------------- | -------- | ------------------------------------------------------------------------ |
| Find | Carerix | A Carerix record of the object you choose, matched on the fields you set |
| Find Email | HireData | An email address for a person, from their name and company domain |
| Search Domain | HireData | The web domain of a company, from its name |
### On the canvas
The card shows a **Task** badge, the task name with the connection under it, and a **Filter** block with the fields the task matches on.
## What it outputs
The record, address, or domain found. A Carerix Find opens on a **Match found** line with the record's id and name, linking to the record in Carerix, and a **Record Data** block that lists every field the record carries. Later steps use those fields under the task's name, so an Add task can attach the candidate a Find returned, and a Message task can address the email Find Email returned. [Follow a run](/reference/automations/follow-a-run) shows a Find step from a real run.
## What stops the run
A Find that returns nothing. The task card turns red with the line "Cancelled" and the time, and the timeline records the task name with "Cancelled" and the reason, such as "Search domain failure." for a Search Domain that found no domain. Steps after it show no status line. Open the card's **Fields** tab to see the values the task searched with.
Reasons are explained in [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Patterns
* **Find, then Update.** When the event comes from a form and the record lives in your ATS, Find the record on an id or email from the response, then [Update](/reference/automations/steps/update) it with the answers.
* **Find Email before Send Email.** Search Domain gives the company's domain, Find Email gives the person's address at it, and the Message step sends to that address.
* **Loop instead of Find for many.** Find returns one record. To act on every record that matches, use a [Loop](/reference/automations/steps/loop).
## Common mistakes
* **Matching on a field that is not unique.** A name matches more than one candidate. Match on an id or an email address.
* **Finding what the event already carries.** A Carerix event brings its record with it, and the Update task finds the record itself on the field you name. Add a Find only when the record is not in the event.
* **Treating no result as a skip.** An empty result cancels the run. If some events have nothing to find, put a [Filter](/reference/automations/steps/filter) before the Find so those runs stop with a clear reason.
## Related
* [Add](/reference/automations/steps/add) creates a record instead of finding one.
* [Update](/reference/automations/steps/update) changes the record a Find returned.
* [Loop](/reference/automations/steps/loop) retrieves every matching record and runs steps for each.
* [Task catalogue](/reference/automations/task-catalogue) lists every task per connected app.
# Loop
Source: https://help.hiredata.com/reference/automations/steps/loop
The Loop step in a HireData automation: which records it retrieves, the filter, stop on first success, the output variable, and how iterations run.
**Loop** repeats the steps inside it once per record. The drawer is headed **Loop** and opens with one option, **Custom**, described as "Loops through a selection of records." Choosing it leads to the object list, then the filter panel.
After you save, the **Next step** picker opens for the first step inside the loop.
## Settings
* **Select an object**. The record type to retrieve, with a **Search** box. Each entry names its connection underneath. With Carerix connected the list holds Candidates, Companies, Contacts, Emails, Lists, Matches, Meetings, Notes, Offices, Placements, Publications, Talent Pools, Tasks, Users, and Vacancies. HireData's own objects are not offered.
* **Filter**. Which records to retrieve, in the same rows and sets as a [Filter step](/reference/automations/steps/filter). The fields are the object's fields, each prefixed with the connection's icon. Leave it empty and the loop retrieves every record of the object.
* **Stop on first success**. **No** or **Yes**, default **No**. With **Yes** the loop ends after the first iteration that completes, so the steps inside run for one record at most.
* **Output Variable**. A name for the current record, placeholder `myLoopItem`. The help text reads "This variable will be used instead of the step's id for clarity when filled in" and its example updates as you type, so `candidate` gives `candidate.index`. Leave it empty and the variables are named after the step's id instead.
### On the canvas
The Loop draws a box with a **Loop** badge. Inside it sits the record card, with a line such as "Retrieve Candidates from Carerix", the connection name, and the filter, followed by the loop's own steps and a **+** to add more.
## What it outputs
For each iteration, under the output variable:
| Variable | Holds |
| ------------------------ | ------------------------------------------------------------- |
| `candidate.index` | The iteration number, counting from 0 |
| `candidate.item.` | A field of the current record, such as `candidate.item.email` |
Steps inside the loop read these alongside the event's fields. Steps after the loop do not: they see the variables that existed before the loop.
Each iteration is a sub-run. The runs list shows a row per sub-run, so the runs count for an automation with a Loop exceeds its events count. The parent run page folds the iterations into one diagram and its timeline records "Waiting." while they run.
## What stops the run
* A loop with no step inside it. The timeline records "Loop: Failed" with the message "Step not found." and the run ends there. The Loop box itself carries no status line.
* Records that cannot be retrieved. The Loop shows Cancelled with the message "Data lookup failed." Check the connection and the filter fields.
* A step inside the loop that stops. It stops that iteration's sub-run only; the other iterations and the steps after the loop continue.
See [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Patterns
* **Narrow the filter.** Filter on the record you mean, such as the candidate's id from the event, rather than retrieving every candidate and filtering inside the loop.
* **First match only.** Set **Stop on first success** to **Yes** and put a [Filter](/reference/automations/steps/filter) as the first step inside. The loop ends at the first record that passes.
* **Name the variable.** An output variable such as `vacancy` reads better than a step id in a prompt or an email template, and it survives when the step is rebuilt.
## Common mistakes
* **No filter.** The loop retrieves every record of the object and runs the inner steps for each. Add a filter before activating.
* **Reading loop variables after the loop.** They exist only inside it. Write what you need into a record with an [Update](/reference/automations/steps/update) task inside the loop.
* **Expecting to loop over text or a range.** The drawer offers records from a connected app only. To repeat over the lines of a text field or a fixed count, split the work another way, such as a [Prompt](/reference/automations/steps/prompt) with a List output.
## Related
* [Find](/reference/automations/steps/find) retrieves one record instead of many.
* [Split](/reference/automations/steps/split) also creates sub-runs, one per branch rather than one per record.
* [Filter](/reference/automations/steps/filter) documents the rows, sets, and operators the loop's filter shares.
# Message
Source: https://help.hiredata.com/reference/automations/steps/message
The Message category in a HireData automation: send an email, a WhatsApp message or survey, a Ratecard survey, or an HTTP request, and what stops a send.
**Message** sends something out. It is a category: choosing it opens a list headed **Message** with one entry per task, each marked with its app's icon, and **Back** returns to the picker.
Message appears in the picker only when a connected app offers a task in this category. Two entries can share a name, as the two **Send Survey** tasks below do. The icon tells them apart.
## Settings
Each task has its own drawer. The shared settings are the recipient, the sender or channel, and the content to send: a template, a form, or a request body. Send Email is a wizard with a progress bar whose final step, **Preview your email**, shows the rendered email under **Summary** and every setting under **Settings**.
The tasks that fill the category in a workspace with HireData, Ratecard, and WhatsApp connected:
| Task | App | What it sends |
| ------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| [Send Email](/reference/automations/tasks/send-email) | HireData | An email built from an email template, to a fixed address or a person from the event |
| Send Message | WhatsApp | A WhatsApp message from a message template |
| Send Survey | WhatsApp | A form as a WhatsApp conversation, one question at a time |
| Send Survey | Ratecard | A form as a Ratecard survey |
| [HTTP Request](/reference/automation-tasks/http-request-task) | HireData | A request to any external API |
| Post Webhook | HireData | The older form of HTTP Request. See [Existing Post Webhook tasks](/reference/automation-tasks/http-request-task#existing-post-webhook-tasks) |
### On the canvas
A Message task shows a **Task** badge, the task name, and what it will send. Send Email renders the template and lists Subject, Recipient, Sender, and Form.
## What it outputs
What the channel reports back. A delivered email completes with the message "Email delivered." A survey outputs the answers once the person replies, which is how a Filter after a WhatsApp survey can branch on an answer. An HTTP Request outputs the response you described. The run step's **Fields** tab lists the values the task used, such as the subject, recipient, and sender of an email.
A survey holds the run while it waits for the reply: the step shows Waiting and the timeline records "Message Sent" and, when the answer arrives, "Message Received".
## What stops the run
A send that the channel refuses. The task card turns red with the line "Cancelled" and the time, and the timeline records the task name with "Cancelled" and the message. In the runs list the **Step** column names the task, such as "HireData: Send Email".
The messages you are most likely to meet, each explained in [Run cancellation reasons](/knowledge-base/run-cancellation-reasons):
| Message | Meaning |
| ------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `Invalid sender email.` | The sender's domain is not verified in HireData |
| `Send Limits Exceeded` | The recipient reached an account-level limit under **Settings** > **Safety Limits** |
| `Send Limits Per Automation Exceeded` | The recipient reached a limit set in this automation's **Settings** |
| `Invalid config.` | The task is missing a setting it needs, such as a sender. Open the task and check every step of its wizard |
## Related
* [Automation safety limits](/settings/automation-safety-limits) explains the limits behind the two send-limit messages.
* [Send Email task](/reference/automations/tasks/send-email) documents the wizard and the Settings tab, including CC and BCC.
* [Task catalogue](/reference/automations/task-catalogue) lists every task per connected app.
* [HTTP Request task](/reference/automation-tasks/http-request-task) documents the request, authentication, and response settings.
* [Add](/reference/automations/steps/add) also lists HTTP Request, because a request can create a record as well as send one.
# Prompt
Source: https://help.hiredata.com/reference/automations/steps/prompt
The Prompt step in a HireData automation, the Ask AI drawer: intents, inputs, output fields, language, model settings, and what it returns.
**Prompt** asks an AI model to do something with the run's data and returns the answer as fields for later steps. The drawer is headed **Ask AI**. **Preview** in its footer runs the prompt against sample data before you save.
The drawer opens on the question **What should the AI do?** with eight intents. **Custom** writes the prompt from scratch; the other seven frame the prompt for one kind of job.
Choosing an intent other than **Custom** creates the output fields that intent usually returns, so you start from fields that already exist.
## Settings
* **What should the AI do?** The intent, as a select once chosen.
* **What will you provide to the AI?** Two tabs. **Input** holds the prompt box; type your instruction and insert variables into it. **Variables** lists fields to pass alongside the prompt without writing them into the text.
* **Hints for the AI (optional)**. Extra context, tone, or constraints, kept apart from the instruction.
* **What should the AI return?** The output fields. **Use an existing field** maps the answer onto a field the automation already knows. **Data source** returns a value from a data source. **Create custom** defines a new field. A saved field shows its name and description with buttons to edit or remove it.
* **Language**. The language of the answer, default **None**, which matches the language of the input.
* **Advanced**. Collapsed by default.
* **Step name**. Replaces the automatic name in the drawer header only. The canvas card and the variable names keep the automatic name. Every task drawer offers the same rename when you hover its name in the header.
* **Speed vs quality**. **Fast** (quick, lower cost), **Balanced**, or **Quality** (best results, slower).
* **Creativity**. **Precise** (consistent, factual), **Balanced**, or **Creative** (more varied).
* **Answer length**. **Short**, **Medium**, **Long**, or **Auto**.
### New output field
**Create custom** opens a two-step dialog.
* **Choose Field Type**. A **Search types...** box and the types in groups. Basics: Text, Number, Yes / No, List, ID. Date & Time: Date, Time, Datetime. People & Places: Email, Phone, Address, Country, Language, Locale, Timezone. Web & Media: URL, Domain, IP Address, Image, File, Color, Font. Advanced: Whole number, Decimal.
* **Configure your field**. **Name** is the label you see. **Reference as** is the variable name, default `text` for a Text field. **What is it for? (optional)** tells the model what to put in the field. **Save & New** saves and starts another; **Done** closes.
### On the canvas
The card shows a **Task** badge, "Ask AI" followed by the intent, the prompt text, a chip per output field, and the three Advanced values.
## What it outputs
One variable per output field, named by its **Reference as** value, under the task's name. Alongside them the task records whether the model answered, its reasoning, and an error message when it did not.
| Variable | Holds |
| -------------------- | --------------------------------------------------------- |
| `output.` | The value of that output field, such as `output.greeting` |
| `is_successful` | Whether the model returned an answer that fit the fields |
| `reasoning` | The model's account of how it reached the answer |
| `error_message` | Why it could not answer, empty on success |
The run step's **Fields** tab lists the values passed in and the values returned.
## What stops the run
An answer the model could not give. The task card shows Cancelled with the reason in the timeline, and the steps after it show no status line. Prompts that run but return an unexpected value do not stop the run; check the output in a [Filter](/reference/automations/steps/filter) when the next step depends on it.
See [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Patterns
* **Classify, then Split.** A **Classify** prompt with a List output, then a [Split](/reference/automations/steps/split) whose branches filter on the list value.
* **Extract into a record.** An **Extract** prompt with one output field per value, then an [Update](/reference/automations/steps/update) task that writes the fields to the record.
* **One sentence, not a whole email.** For a personalised line inside an email template, an [AI variable](/variables/ai-variables) in the template does the job without a step. Use the Prompt step when the answer has to be stored or has to steer the run.
## Common mistakes
* **A prompt with no variables.** Text alone gives the model nothing about this run. Insert the fields it needs into the **Input** box or add them on the **Variables** tab.
* **Two fields with the same Reference as.** The second overwrites the first. Give each output field its own reference.
* **Expecting a rename to change the card.** **Step name**, and the rename you reach by hovering a task's name in its drawer header, change the drawer header only.
* **Leaving Language on None for a fixed-language output.** The answer follows the input's language. Set the language when the record or template expects one.
## Related
* [AI variables](/variables/ai-variables) generate a value inside an email, form, or automation without a Prompt step.
* [Filter](/reference/automations/steps/filter) checks an output before the next step relies on it.
* [Update](/reference/automations/steps/update) writes output fields to a record.
# Split
Source: https://help.hiredata.com/reference/automations/steps/split
The Split step in a HireData automation: branches that each start with a Filter, sub-runs per branch, and how the run page draws them.
**Split** runs more than one path side by side. Each path begins with its own [Filter](/reference/automations/steps/filter), and the run follows every path whose Filter passes.
Split has no drawer of its own. Choosing it in the **Next step** picker highlights the entry and shows **Create Split** in the footer. **Create Split** places a Split with two empty Filter branches on the canvas and opens the first branch's Filter drawer straight away.
## Settings
* **Branch Filter**. Each branch is a Filter step with the settings a [Filter](/reference/automations/steps/filter) has. A branch's Filter cancels only that branch.
* **Add a path**. The **+** at the right edge of the Split box adds a third or later branch and opens its Filter drawer. **Cancel** in that drawer removes the new path.
* **Steps in a branch**. The **+** below each branch's Filter adds the branch's own steps.
* **Steps after the Split**. The **+** below the Split box adds the step that runs once every branch has finished.
The installed template preview labels a Split "Split / 2 paths".
### On the canvas
The Split is a box with a **Split** badge. The branch Filters sit side by side inside it, each with its own **+** below, and the box's own **+** follows underneath.
## What it outputs
Nothing of its own. Each branch reads the variables that existed before the Split. Steps after the Split see the variables as they were before it plus what the branches produced.
Each branch is a sub-run. The runs list shows a row per sub-run, so the runs count exceeds the events count. The parent run page folds them into one diagram: the Split box carries its own status line, each branch Filter carries "Completed" or "Cancelled", and each branch's task carries its own. The timeline records "Waiting." while the branches run and "Split: Completed" with "Sub runs completed." when they finish.
## What stops the run
* No branch passes. The Split shows Cancelled with the message "No valid paths found." and the steps after it never run.
* No branch has a step after its Filter. The Split shows Failed with the same message before any branch is checked.
* A step inside a branch stops. It cancels that branch's sub-run only. The other branches and the steps after the Split continue.
See [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Patterns
* **One branch per answer.** After a WhatsApp survey, a branch per answer value, each ending in the Update the answer calls for. The reactivation template does this with "Direct beschikbaar" and "Binnenkort beschikbaar".
* **A catch-all branch.** Give the last branch a Filter on the field **is not empty** so every run with an answer takes at least one path, and the specific branches handle the values you expect.
* **Common steps after the Split.** Put a step every path needs below the Split box once, rather than in every branch.
## Common mistakes
* **Overlapping conditions.** Branches are not exclusive. A record that passes two Filters runs both branches.
* **A branch with no steps.** A Filter with nothing after it is not a valid path and the Split fails.
* **Expecting a branch to stop the run.** A failing branch Filter cancels its own sub-run. The run continues with the other branches and the steps after the Split. For a hard stop, use a [Filter](/reference/automations/steps/filter) before the Split.
## Related
* [Filter](/reference/automations/steps/filter) documents the operators, rows, and sets each branch uses.
* [Loop](/reference/automations/steps/loop) also creates sub-runs, one per record rather than one per branch.
* [Run cancellation reasons](/knowledge-base/run-cancellation-reasons) explains where the message of a cancelled branch appears.
# Update
Source: https://help.hiredata.com/reference/automations/steps/update
The Update category in a HireData automation: tasks that change a record in a connected app, such as Carerix Update Object, and how a run shows the change.
**Update** changes something that already exists in a connected app. It is a category. When more than one connected app offers an Update task, choosing it opens a list headed **Update**; when one task fills the category, as Carerix's does on its own, choosing it opens that task's drawer directly.
Update appears in the picker only when a connected app offers a task in this category.
## Settings
* **Object**. The record type to change, in a search box and list. For Carerix: Activity, Appointment, Campaign, Candidate, Company, Contact, Email, List, Match, Meeting, News Letter, Note, Placement, Publication, System, Talent Pool, Task, User, Vacancy.
* **Matching field**. How the task finds the record to change. The canvas card reads it back as "Find a candidate by matching their Candidate: Id in Carerix with Candidate: Id".
* **Fields**. The fields to write and the value for each, a fixed value or a variable from the run. The card lists them under **Fields**, such as "Candidate: Available Date: Now".
The drawer is headed with the task name and the app's icon.
The tasks that fill the category:
| Task | App | What it changes |
| ------------- | ---------- | -------------------------------------- |
| Update Object | Carerix | Any field of the chosen Carerix object |
| Update Field | OTYS | A field of an OTYS record |
| Update Field | Vincere | A field of a Vincere record |
| Update Field | Salesforce | A field of a Salesforce record |
### On the canvas
The card shows a **Task** badge, the task name with the app, the sentence that names the matching field, and the fields it will write.
## What it outputs
The record as it is after the change. On the run page the task's drawer is headed with the app, the task, and the record id, such as "Carerix Update Match (ID: 7.18)", with badges counting **Field Updated** and **Run Moved** and a status badge. **Overview** lists the **Updated Object** with a link and each field's old and new value; a field that had no value reads "This field was empty before". **Fields** lists every value the task used, with its source icon and type.
An unresolved variable appears in the Fields tab as its raw text, such as `{{…evaluation.scoring.score}}`, which is how you spot a field that was written with a placeholder instead of a value.
## What stops the run
An update the app rejects, or a record the matching field does not find. The task card turns red with the line "Cancelled" and the time, and the timeline records the task name with "Cancelled" and the reason the app returned.
See [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Related
* [Find](/reference/automations/steps/find) looks a record up when it is not in the event.
* [Add](/reference/automations/steps/add) creates a record instead of changing one.
* [Prompt](/reference/automations/steps/prompt) produces the values an Update writes.
* [Task catalogue](/reference/automations/task-catalogue) lists every task per connected app.
# Task catalogue
Source: https://help.hiredata.com/reference/automations/task-catalogue
Every task a HireData automation can run, per connected app: its label in the step picker, its category, what it needs, and where it is explained.
A step is a node on the canvas. [Delay](/reference/automations/steps/delay), [Filter](/reference/automations/steps/filter), [Loop](/reference/automations/steps/loop), and [Split](/reference/automations/steps/split) shape the run and touch nothing outside it. A task is a step that acts on an app: it sends, creates, finds, or changes something, and the run records it under **Tasks**. [Add](/reference/automations/steps/add), [Find](/reference/automations/steps/find), [Message](/reference/automations/steps/message), and [Update](/reference/automations/steps/update) are the categories that hold tasks, and [Prompt](/reference/automations/steps/prompt) is a task of its own.
Which tasks you see depends on the apps connected to the workspace, not on your permissions. Recruitee, AFAS, and custom apps supply events only, so an automation can [start from Recruitee](/apps/recruitee/create-a-recruitee-automation-in-hiredata) but cannot write back to it.
Not every task has a page of its own yet. Where none exists, the reference column points to the closest page: the category page, a tutorial that uses the task, or the app's overview.
## HireData
Always present.
| Label | Category | Needs | Reference |
| ------------- | ------------ | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| Send Email | Message | An email template. A sender on a verified domain | [Send Email](/reference/automations/tasks/send-email) |
| HTTP Request | Add, Message | An endpoint that accepts the request | [HTTP Request](/reference/automation-tasks/http-request-task) |
| Post Webhook | Add, Message | Nothing new. The older form of HTTP Request | [Existing Post Webhook tasks](/reference/automation-tasks/http-request-task#existing-post-webhook-tasks) |
| Find Email | Find | A person's name and a company domain from the run | [Find](/reference/automations/steps/find) |
| Search Domain | Find | A company name from the run | [Find](/reference/automations/steps/find) |
| Ask AI | Prompt | Nothing beyond the run's data | [Prompt](/reference/automations/steps/prompt) |
## WhatsApp
| Label | Category | Needs | Reference |
| ------------ | -------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| Send Message | Message | A connected WhatsApp number and an approved message template | [How WhatsApp templates work](/apps/messaging/whatsapp/how-whatsapp-templates-work) |
| Send Survey | Message | A connected WhatsApp number and a form | [How to use forms in WhatsApp conversations](/apps/messaging/whatsapp/how-to-use-forms-in-whatsapp-conversations) |
## Carerix
| Label | Category | Needs | Reference |
| --------------- | -------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Find | Find | A Carerix connection | [Find](/reference/automations/steps/find) |
| Add Email | Add | A Carerix connection and a record to attach the email to | [Logging email messages on Carerix](/apps/carerix/logging-email-messages-on-carerix-with-hiredata) |
| Job Application | Add | A Carerix connection, a candidate, and a vacancy | [Create a Carerix automation](/apps/carerix/create-a-carerix-automation-in-hiredata) |
| Add Note | Add | A Carerix connection and a record to attach the note to | [Add an activity or item in Carerix](/apps/carerix/add-an-activity-or-item-in-carerix-with-hiredata) |
| Add Task | Add | A Carerix connection | [Schedule a task in Carerix](/apps/carerix/schedule-a-task-in-carerix-with-hiredata) |
| Update Object | Update | A Carerix connection | [Update fields in Carerix](/apps/carerix/update-fields-in-carerix-with-hiredata) |
## OTYS
| Label | Category | Needs | Reference |
| ---------------- | -------- | ------------------ | ----------------------------------------------------------------------------- |
| Task | Add | An OTYS connection | [Create an OTYS automation](/apps/otys/create-an-otys-automation-in-hiredata) |
| Activity or Item | Add | An OTYS connection | [Create an OTYS automation](/apps/otys/create-an-otys-automation-in-hiredata) |
| Update Object | Update | An OTYS connection | [Update](/reference/automations/steps/update) |
## Vincere
| Label | Category | Needs | Reference |
| ---------------- | -------- | -------------------- | ---------------------------------------------------------------------------------------------------- |
| Task | Add | A Vincere connection | [Schedule a task in Vincere](/apps/vincere/schedule-a-task-in-vincere-with-hiredata) |
| Activity or Item | Add | A Vincere connection | [Add an activity or item in Vincere](/apps/vincere/add-an-activity-or-item-in-vincere-with-hiredata) |
| Update Object | Update | A Vincere connection | [Update fields in Vincere](/apps/vincere/update-fields-in-vincere-with-hiredata) |
| Update GDPR | Update | A Vincere connection | [Update](/reference/automations/steps/update) |
## Salesforce
| Label | Category | Needs | Reference |
| ---------------- | -------- | ----------------------- | ------------------------------------------------------------ |
| Find | Find | A Salesforce connection | [Salesforce integration overview](/apps/salesforce/overview) |
| Task | Add | A Salesforce connection | [Salesforce integration overview](/apps/salesforce/overview) |
| Activity or Item | Add | A Salesforce connection | [Salesforce integration overview](/apps/salesforce/overview) |
| Update Object | Update | A Salesforce connection | [Update](/reference/automations/steps/update) |
## Ratecard
| Label | Category | Needs | Reference |
| ----------- | -------- | ------------------------------------------ | ------------------------------------------------------------- |
| Send Survey | Message | An active Ratecard connection and a survey | [Connect with Ratecard](/apps/ratecard/connect-with-ratecard) |
## Google Sheets
| Label | Category | Needs | Reference |
| ------- | -------- | -------------------------------------------------------- | --------------------------------------- |
| Add Row | Add | A Google Sheets connection and a spreadsheet to write to | [Add](/reference/automations/steps/add) |
# Send Email task
Source: https://help.hiredata.com/reference/automations/tasks/send-email
The Send Email task in a HireData automation: the seven-step wizard, the Settings tab with CC, BCC, and UTM, what the task outputs, and what stops a send.
**Send Email** sends an email built from one of your email templates to one address per run. It sits under **Message** in the **Next step** drawer, marked with the HireData icon.
The drawer is a wizard of up to seven steps with a progress bar. Two steps appear only when they have something to ask. **Select a brand** appears when the workspace has brands. **Set up your form** appears when the template holds a form. When you reopen a saved task, the wizard opens on the first step that still needs input, which for a finished task is **Preview your email**.
A search box and one card per email template, each with a live preview. Click a card to open the template in a preview dialog with its subject, the rendered email, **Edit Email**, a **Send test mail** button, a toggle that shows or hides variable values, and **Use template**. A template that carries a brand fills in the brand for you.
**Appears when** the workspace has at least one brand. A **Brands** search box and one card per brand with its colour strip. Click a card to see the template rendered in that brand, then **Use brand**.
Presets for the people the event carries, such as **Response (Respondent)**. Choosing one moves the wizard on. Switch on **Use fixed recipient** to send every run to the same address: pick a **User**, or leave it on None and type a **Name** and **Email**, then **Continue**.
The same choice for the sender, with **Use fixed sender**. In a scheduled automation the sender is always fixed and the switch is not shown.
**Subject**, prefilled from the template and open to variables, then one input per [variable](/reference/email-builder/variables) the template defines. A date, email, or phone variable offers the matching fields from the run in a select; a text variable takes typed text or a variable. **Objects** appears when the template or its form reads from a data source. **Continue** moves on. You reach this step after choosing a recipient or sender preset. **Continue** after a fixed sender goes straight to the preview, and the same fields wait under **Settings** > **Template**.
**Appears when** the template holds a form. **Prefill Questions** lists the form's questions so a run can answer them in advance. **Additional Fields** lists the form's custom fields. A form without questions or without custom fields says so in place of the list.
Two tabs. **Summary** shows the rendered email with **Subject**, **Recipient**, **Sender**, and **Form**; click the email to open the preview dialog. **Settings** lists every setting of the task, described below.
From **Set up your template** onwards a **Skip** button sits beside the step title. It moves to the next step without changing anything.
## Settings
The **Settings** tab of the last step holds one section per setting. Open a section to change it without walking the wizard again.
* **Template**. The subject and the template's variables, as in **Set up your template**.
* **Form**. The prefilled questions and additional fields, as in **Set up your form**.
* **Recipient**. **Use fixed recipient** with a **User** select, or **Name** and **Email** when no user is chosen. With the switch off, **Preset** names the person from the event and **Label** is the name the card shows for them, followed by the field mapping that decides which of the person's fields supply the name and address.
* **Sender**. The same controls for the sender. The address must belong to a domain verified in HireData. When it does not, HireData sends from the default sender of the brand's domain or the workspace domain if one is set, and stops the run with "Invalid sender email." if not.
* **CC** and **BCC**. Click **+** to add a copy recipient. Each entry has a **Name** and an **Address**. Both take a field from the run or typed text: type it and choose the **Create** option that appears under the box. Fill both before saving. **–** removes an entry. CC addresses are visible to everyone on the email; BCC addresses are not. A test send drops CC and BCC.
* **UTM Campaign**. **Campaign Name**, **Campaign Source**, **Campaign Medium**, **Campaign Term**, and **Campaign Content**, added to every link in the email. The placeholders show the template's own UTM values. Leave a field empty to keep the template's value.
* **Objects**. Shown when the template or its form reads from a data source. Picks the record each object refers to in this run, by **External ID**, by **Fields**, or by choosing a **Record**. An object marked with an asterisk is required: leave it empty and every run stops with "Required data reference missing."
### On the canvas
The card shows a **Task** badge, "Send Email", the rendered email, and rows for **Subject**, **Recipient**, **Sender**, and **Form**.
## What it outputs
The sent email. On the run page the task's card shows the email that went out; click it to read the message as the recipient saw it, with **Edit Form** and **Edit Email** links to its sources. Clicking the card itself opens the run step, headed **Send Email** with a **Completed** badge. Its **Overview** lists **To** and **From** with a name and address each, the **Subject**, and the value of every template variable. **Fields** lists every value the task read from the run.
Later steps can read the email's status. A [Filter](/reference/automations/steps/filter) after a [Delay](/reference/automations/steps/delay) can branch on whether the email was opened.
| Variable | Holds |
| --------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `email.status` | The latest status: Sent, Delivered, Bounced, Opened, or Clicked |
| `email.sent`, `email.delivered`, `email.opened`, `email.clicked`, `email.bounced` | Yes or No for each event the email has reached |
A delivered email completes the step with the message "Email delivered."
### Delivery figures
The automation's own page, the one that opens from the Automations list before you click into edit mode, adds the figures the run page lacks. They take a few seconds to load and disappear as soon as you enter edit mode.
* **Stats** on the Send Email card: **Sent**, **Delivered**, **Bounced**, **Opened**, and **Clicked**, each with a count and a percentage of sent.
* **Under the card**, one line per outcome with a link to the tasks behind it, such as "Sent: 1x email" and "Failed to send: 2x email".
* **Mail Stats** in the left panel: the same five figures added up across every Send Email step in the automation. **Run Stats** above it counts runs by state.
## What stops the run
A send that HireData refuses. The task card turns red with the line "Cancelled" and the time, and the timeline records "Send Email: Cancelled" with the message. In the runs list the **Step** column reads "HireData: Send Email".
| Message | Meaning |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `Invalid config.` | The task has no recipient or no sender. Open it and check **Recipient** and **Sender** under **Settings** |
| `Invalid sender email.` | The sender's domain is not verified and no default sender could stand in |
| `Send Limits Exceeded` | The recipient reached an account-level limit under **Settings** > **Safety Limits** |
| `Send Limits Per Automation Exceeded` | The recipient reached a limit set in this automation's **Settings** |
| `Email unsubscribed.` | The recipient is on the list under **Settings** > **Unsubscribes**. An address that bounced as unknown lands there too |
| `Required data reference missing.` | The template needs an object under **Settings** > **Objects** and none was chosen. The step shows Failed rather than Cancelled |
A recipient address that is not a valid email address, an address on your blocklist, or an address that email validation marked invalid also stops the run, each with its own message in the timeline. Reasons are explained in [Run cancellation reasons](/knowledge-base/run-cancellation-reasons).
## Related
* [Message](/reference/automations/steps/message) lists the other tasks that send something.
* [Email builder overview](/reference/email-builder/overview) documents the builder that makes the template this task sends.
* [Automation safety limits](/settings/automation-safety-limits) explains the two send-limit messages.
* [How to verify a domain in HireData to send emails](/settings/domains/how-to-verify-a-domain-in-hiredata-to-send-emails) fixes "Invalid sender email."
* [Task catalogue](/reference/automations/task-catalogue) lists every task per connected app.
# Button
Source: https://help.hiredata.com/reference/email-builder/blocks/button
The Button block in the HireData email builder: the URL it opens, the size and corner presets, and how to write the text on it.
A Button block is a call to action that opens a URL. Add it from the **Blocks** menu of a section or a column.
A new button arrives reading "Click Me". Click it in the email and type over it.
## How it renders
The button comes out as a link styled to look like a button, at the width and alignment you set, on a row of its own. **Width: Full** stretches it across the section; in a column it stretches across the column.
## Settings
* **URL** is the address the button opens. The box takes a variable, so a button can point at a link that changes per recipient.
* **Background color** and **Color** sit side by side and style the button and its text.
* **Size** is **Small**, **Medium**, or **Large**. It moves the text size and the padding together, from 12 pixel text in a tight box to 24 pixel text in a generous one.
* **Rounded corners** is **None**, **Normal**, **Large**, or **Full**, which runs from square through to a pill.
* **Width** is **Auto**, which fits the button to its text, or **Full**, which stretches it across whatever holds it.
* **Alignment** is left, centre, or right, and does nothing at **Full** width.
* **Text** holds **Font Family** with a weight selector, **Size**, **Letter Spacing**, and **Line Height**.
* **Spacing** holds two controls.
* **Margin**, the gap above and below the button.
* **Padding**, the space between the text and the button's edge.
* **Border** holds **Border color**, **Border width**, and **Border radius**.
**Size** and **Text** both set the font size, and whichever you touch last wins. Picking a **Size** rewrites the size in **Text**, so set the size first and adjust it afterwards if you want a value the three presets do not offer.
The words on a button are the link text, and they are all a screen reader announces. "Read the reference" or "Book your slot" tells someone what happens. "Click here" and "Read more" tell them nothing, and a recipient skipping through the email hears a list of identical links. Say what is on the other side.
## Limits
HireData supports `http`, `https`, `mailto`, and `tel` addresses, and a variable that resolves to one of them. The **URL** box does not check what you type, so a mistyped scheme reaches the recipient as a dead link. Test the email before you send it.
An email template sent to the HireData API with any other scheme is rejected with "Builder links and images must use a supported URL scheme or a HireData variable."
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Paragraph](/reference/email-builder/blocks/paragraph) covers links inside body text, which take the same schemes.
* [Form](/reference/email-builder/blocks/form) draws its own buttons, and points them at a form rather than a URL.
* [Variables](/reference/email-builder/variables) covers the tokens the **URL** box takes.
# Two Columns
Source: https://help.hiredata.com/reference/email-builder/blocks/columns
The Two Columns block in the HireData email builder: the five layouts, the gap, what each column can hold, and how the pair behaves on a phone.
A Two Columns block puts two columns side by side inside one section. Each column holds its own blocks, so it is how you get a picture beside a paragraph, or a paragraph beside a button.
Add it from a section's **Blocks** menu. It arrives with both columns already in it.
## How it renders
The two columns divide the width of the section between them, minus the padding and the gap, in the proportion **Layout** sets.
On a screen narrower than 480 pixels they stop being columns. The left one renders first at full width, the right one underneath it, and the gap becomes vertical space. Put the thing you most want read in the left column, because on a phone that is the thing at the top.
## Settings
* **Background color** fills both columns.
* **Layout** sets the split: **50-50**, **60-40**, **40-60**, **66-33**, or **33-66**. The first number is the left column.
* **Gap** is the space between the two columns, a slider and a box from 0 to 48 pixels.
* **Column 1 Blocks** and **Column 2 Blocks** are two separate lists, one per column, each with the usual **+**, **−**, and drag handle.
* **Margin** is the gap above and below the pair.
* **Padding** is the gap inside each column, around its blocks.
## Limits
A Two Columns block always holds exactly two columns. Nothing adds a third and nothing removes one, the **Blocks** lists on either column only add blocks inside that column, and the breadcrumb skips the column level entirely. Three columns side by side is not a layout the email builder can make.
A column takes fewer kinds of block than a section does. Its menu offers Paragraph, Heading, Image, Socials, Button, and HTML. It has no Two Columns, no Form, and no Signature, so columns never nest.
Outside the builder the rule is enforced on the way in. An email template sent to the HireData API with a columns block that does not hold exactly two columns is rejected with "A columns block must contain exactly two column blocks."
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Section](/reference/email-builder/sections) is the only block a Two Columns can go in.
* [Template](/reference/email-builder/template#how-an-email-nests) explains where the column level sits and why you never see it.
* [Image](/reference/email-builder/blocks/image) behaves differently in a column, where it takes the column's width.
# Form
Source: https://help.hiredata.com/reference/email-builder/blocks/form
The Form block in the HireData email builder: buttons that answer one of your form questions from inside the email, and what each question type turns into.
A Form block puts one question from one of your forms straight into the email. The recipient answers by clicking a button, which opens the form with that answer already filled in. It is how a feedback email gets a reply in one click rather than two.
Add it from a section's **Blocks** menu. A column cannot hold one.
## How it renders
What the block puts in the email depends on the type of the leading question.
* **Net Promoter Score** renders eleven buttons, 0 to 10, whatever range the question itself carries.
* **Opinion Scale** renders one button per point on its own range, with the question's end labels underneath in capitals.
* **Multiple Choice** and **Dropdown** render one button per option.
* Everything else renders a single call to action reading "Give Feedback". Click it in the email to write your own wording.
The star and emoji rating variants that [only an integration can add](/reference/forms/overview) draw one button per value as well, a star or an emoji in place of a number. Thumbs and slider get the single call to action.
Each button is its own column, so on a screen narrower than 480 pixels the row stops fitting and the buttons stack one per line. A Net Promoter Score question becomes eleven stacked buttons on a phone, which is worth seeing in the preview before you send it.
The block renders in the language of the form it points at, not in the language of the email. An English template bound to a Dutch form puts Dutch buttons in the email. Check the canvas before you send.
## Settings
* **Form** picks the form to point at. The list searches every form in the workspace.
* **Leading Question** picks the question the buttons answer. Hidden questions and ending screens are left out of the list.
* **Background color** and **Color** style the buttons.
* **Show Question** puts the question's own wording above the buttons, or leaves it out.
* **Size** is **Small**, **Medium**, or **Large**, which sets the text size and the padding together.
* **Rounded corners** is **None**, **Normal**, **Large**, or **Full**, from square to a full pill.
* **Width** is **Auto**, **Half**, **Full**, or **Custom**, which opens a slider from 35 to 100 per cent.
* **Alignment** is left, centre, or right.
* **Text** holds **Font Family** with a weight selector, **Size**, **Letter Spacing**, and **Line Height**.
* **Spacing** holds two controls.
* **Margin**, the gap above and below the buttons.
* **Padding**, the space between the label and each button's edge.
* **Border** holds **Border color**, **Border width**, and **Border radius**.
**Form** and **Leading Question** belong to the email rather than to the block. Add a second Form block and it arrives already pointing at the same form and the same question, and changing either one changes both blocks.
## Limits
* A choice question renders its **first five options only**. A sixth option gets no button, no warning, and no sign in the canvas that it is missing. Reorder the question so the five that matter come first, or point the block at a shorter question.
* A Net Promoter Score question is always 0 to 10 here. Whatever range the question carries is ignored.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Form builder overview](/reference/forms/overview) covers the forms a Form block can point at.
* [Net Promoter Score and Opinion Scale](/reference/forms/fields/net-promoter-score-and-opinion-scale) is the question type behind the eleven buttons.
* [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) is the question type capped at five buttons.
* [Section](/reference/email-builder/sections) is the only block a Form can go in.
* [Translations](/reference/email-builder/translations) covers the rating labels and call to action a Form block offers per language.
# Heading
Source: https://help.hiredata.com/reference/email-builder/blocks/heading
The Heading block in the HireData email builder: the six levels, the default size each one gives you, and what a level does and does not mean in a sent email.
A Heading block is a line of text set larger than the body around it. Add it from the **Blocks** menu of a section or a column, which offers **Heading 1**, **Heading 2**, and **Heading 3**.
## How it renders
A heading comes out of the email builder as a styled line of text. It is not wrapped in an HTML heading tag, so the level you pick does not mark the line as a heading for a screen reader. Treat the level as a size preset, and pick it for the size you want rather than for the outline it implies.
That leaves the wording to carry the structure. Write headings that read as headings on their own, and keep them short enough to scan.
The breadcrumb reads **Heading** with no number, so it will not tell you which level you are on. The **Size** box will.
## Settings
* **Font Family** picks the typeface, with a weight selector beside it. It starts on the brand's heading font, which is a separate setting from the brand's body font.
* **Size** is a slider and a box, 8 to 48 pixels.
* **Color** sets the text colour.
* **Alignment** is left, centre, or right.
* **Advanced** holds three controls.
* **Letter Spacing**, 0 to 10.
* **Line Height**, 1 to 2.
* **Margin**, the gap above and below the heading.
There is no level control on the panel. To change a heading's level, click into it in the email and press **Cmd + Alt** and a number on a Mac, or **Ctrl + Alt** and a number on Windows. All six levels work, including the three the menu does not offer.
Each level carries its own default size, and switching level resets **Size** to it.
| Level | Default size |
| --------- | ------------ |
| Heading 1 | 32 px |
| Heading 2 | 24 px |
| Heading 3 | 19 px |
| Heading 4 | 16 px |
| Heading 5 | 13 px |
| Heading 6 | 11 px |
Type `{{` in a heading to drop in a variable.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Paragraph](/reference/email-builder/blocks/paragraph) shares the same text controls and adds a link colour.
* [Section](/reference/email-builder/sections) is the band a heading sits in.
* [Variables](/reference/email-builder/variables) covers the picker, the fallbacks, and what a missing value looks like.
# HTML
Source: https://help.hiredata.com/reference/email-builder/blocks/html
The HTML block in the HireData email builder: a code editor for markup of your own, the font size HireData adds to it, and the character limit.
An HTML block drops markup you write yourself into the email. Use it for the thing the other blocks cannot do. Add it from the **Blocks** menu of a section or a column.
## How it renders
HireData drops your markup into the email untouched, with one exception it has to make.
The email is built with MJML, which sets the font size of anything it did not lay out itself to zero. Text pasted into an HTML block would arrive invisible. So before sending, HireData walks your markup and adds `font-size: 16px` to any `body`, `table`, `p`, `span`, or `a` element that does not already carry one. It also wraps loose text in a `span` at the same size.
Set a font size yourself and HireData leaves it alone. That is the way to get any size other than 16 pixels out of an HTML block.
Paste a whole HTML document and only what is inside `` survives. Paste something the parser cannot read at all and it goes through exactly as written.
An HTML block carries no [translations](/reference/email-builder/translations). What you write in it goes out unchanged in every language the email is sent in.
## Settings
There are no settings. The panel is the editor, with line numbers down the left. Type or paste your markup and it appears in the email as you go.
The block does not style anything for you. Colours, fonts, and spacing that the other blocks take from the brand are yours to write out.
## Limits
An email template sent to the HireData API is refused if an HTML block runs past 100,000 characters. The editor counts nothing for you, so a paste that large is worth trimming before it becomes someone else's problem.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Section](/reference/email-builder/sections) and [Two Columns](/reference/email-builder/blocks/columns) both accept an HTML block.
* [Paragraph](/reference/email-builder/blocks/paragraph) is the block to reach for first, because it takes the brand's fonts and colours without being told.
* [Translations](/reference/email-builder/translations) explains why an HTML block is the one thing you cannot translate.
# Image
Source: https://help.hiredata.com/reference/email-builder/blocks/image
The Image block in the HireData email builder: picking a picture from the media library or a variable, sizing it, and where its alt text comes from.
An Image block puts a picture in the email. Add it from the **Blocks** menu of a section or a column.
## How it renders
The image goes into the email as a plain picture, sized by **Width** and **Height** and aligned by **Alignment**.
Inside a column it ignores **Width** and takes the width of the column instead, so a picture in a 40 per cent column comes out at 40 per cent of the section. That is what makes a picture beside a paragraph line up.
The block sets no maximum for the file size or the pixel dimensions of what you pick. A photograph straight off a phone goes out at its full weight, so scale it down before you upload it.
## Settings
* **Image** opens the media library, with **Upload media** for a new file and two tabs for what is already there. **Fields** lists the variables that carry an image, such as a brand logo or a sender avatar. Pick one of those and the picture changes with whoever the email is about.
* **Width** is **Auto**, which keeps the picture at its own size, or **Full**, which stretches it to fill whatever holds it.
* **Alignment** is left, centre, or right, and does nothing at **Full** width.
* **Height** is **Auto**, **Full**, or **Custom**, which opens a slider from 10 to 300 pixels.
* **Border radius** rounds the corners: **None**, **Normal**, **Large**, or **Custom** for a value per corner.
Alt text is not on this panel. It belongs to the picture, so you set it in the media library. Open **Image**, click the picture, and fill in **Alt text** on the card that opens. It falls back to the image title when you leave it empty, which is why an upload named `image.png` is worth renaming.
A picture from the **Fields** tab is the exception. Both boxes are read-only there, so a brand logo or a sender photo carries the variable's title as its alt text and cannot be given anything else.
Write alt text that says what the picture is for, not what it looks like. A recipient whose client blocks images sees that line instead of the picture, and blocked images are the normal case rather than the exception.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Adding images to your emails](/apps/messaging/emails/adding-images-to-your-emails) walks through the media library.
* [Two Columns](/reference/email-builder/blocks/columns) is where an image takes its width from the column.
* [Variables](/reference/email-builder/variables) covers the tokens behind the **Fields** tab.
* [Signature](/reference/email-builder/blocks/signature) has its own picture, sized and cropped for you.
# Paragraph
Source: https://help.hiredata.com/reference/email-builder/blocks/paragraph
The Paragraph block in the HireData email builder: body text, its font and colour settings, the formatting menu, and the link colour it can override.
A Paragraph block is body text. You edit it by clicking the words in the email and typing, the same way you would in a document.
Add it from the **Blocks** menu of a section or a column. Both offer it first.
## How it renders
The paragraph becomes a block of text the full width of whatever holds it, wrapping at that width.
Select words in the email and a small menu appears over them. It holds bold, underline, italic, strikethrough, a text colour, and a link. The three dots at the end hold subscript and superscript.
A link you add from that menu can be a web address, an email address, or a phone number. HireData accepts `http`, `https`, `mailto`, and `tel`.
## Settings
* **Font Family** picks the typeface, with a weight selector beside it running from Ultra Light to Heavy. The brand's own fonts sit at the top of the list, above the rest.
* **Size** is a slider and a box, 8 to 48 pixels. New paragraphs start at 16.
* **Color** sets the text colour and starts on the brand's surface text colour.
* **Alignment** is left, centre, or right.
* **Links** holds two controls for the links in this paragraph only. Both offer **Inherit**, which hands the decision back to the [template](/reference/email-builder/template#settings), and that is what a new paragraph uses.
* **Link color**.
* **Underlined**, **Inherit**, **Yes**, or **No**.
* **Advanced** holds three controls.
* **Letter Spacing**, 0 to 10.
* **Line Height**, 1 to 2.
* **Margin**, the gap above and below the paragraph.
Type `{{` anywhere in a paragraph to drop in a variable.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Heading](/reference/email-builder/blocks/heading) is the same text controls at a heading level.
* [Template](/reference/email-builder/template#settings) sets the link colour a paragraph inherits.
* [Variables](/reference/email-builder/variables) covers the picker, the fallbacks, and what a missing value looks like.
* [Button](/reference/email-builder/blocks/button) is the block to use when the link is the point.
# Signature
Source: https://help.hiredata.com/reference/email-builder/blocks/signature
The Signature block in the HireData email builder: a picture beside a block of sign-off text, what you can change about it, and what is fixed.
A Signature block is a picture beside a block of sign-off text. It is the usual way to close an email, with the sender's name, email address, and website under a "Kind regards".
Add it from a section's **Blocks** menu. A column cannot hold one.
## How it renders
The signature is a fixed two-column layout. The picture goes in a 125 pixel column on the left, cropped to a circle at 100 by 100 pixels, and the text fills the column beside it.
Leave **Image** empty and the picture column disappears. The text then runs the full width of the section, which is the layout to use for a plain text sign-off.
Every line is a [paragraph](/reference/email-builder/blocks/paragraph), so each one carries its own font, size, colour, and alignment. Select a line and the breadcrumb reads `Template > Sections > Signature > Paragraph`.
## Settings
* **Image** opens the media library. Pick an uploaded picture, or a variable such as the sender's avatar or the brand logo, which then changes with whoever sends the email.
* **Color** sets the text colour for the whole signature.
* **Background color** sets the colour behind it.
* **Blocks** lists the lines of the signature, one row per paragraph. The rows drag to reorder and nothing else. There is no **+** and no **−**.
* **Spacing** holds **Margin**, the space above and below the block. It has no padding and no width.
You add and remove lines in the email rather than on the panel. Click at the end of a line and press **Enter** for a new one, and delete a line the way you would delete any other text.
## Limits
The layout is the one thing you cannot touch. There is no setting for the column widths, for putting the picture on the right, for squaring off the circle, or for a second picture. If you need a different shape, build it out of a [Two Columns](/reference/email-builder/blocks/columns) block instead.
The **Blocks** list holds paragraphs and nothing else. A signature cannot contain a button, an image, or a heading.
A signature image set to the sender's avatar resolves per sender, so the same template sends a different photograph for every colleague who uses it. Point it at the brand logo instead when the email should not carry a face.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Paragraph](/reference/email-builder/blocks/paragraph) is the block every signature line is made of.
* [Image](/reference/email-builder/blocks/image) is the block for a picture you want to size yourself.
* [Two Columns](/reference/email-builder/blocks/columns) is the way to build a sign-off the signature block cannot.
* [Variables](/reference/email-builder/variables) covers the sender and brand tokens a signature usually carries.
# Socials
Source: https://help.hiredata.com/reference/email-builder/blocks/socials
The Socials block in the HireData email builder: a row of social icons, the per-link URL and icon, and how HireData picks an icon from the address.
A Socials block is a row of social icons, one per link. It is the usual way an email points at your accounts, and it usually sits in the last section. Add it from the **Blocks** menu of a section or a column.
Each icon in the row is a **Social**, a block of its own that holds one address and one picture. You add and remove them from the parent Socials block rather than from any menu.
## How it renders
HireData reads the address and picks the icon from it, so a `linkedin.com` link gets the LinkedIn mark without you choosing one. An address it does not recognise gets a plain web icon.
It also fixes addresses that are not links. A bare email address becomes a `mailto:` link and a bare phone number becomes a `tel:` link, so an icon can dial or open a mail client.
The label beside an icon is text in the email rather than a setting. Click it in the canvas and type, and use **Text** on the parent block to size it. Leave it empty and the row is icons alone.
## Settings
The Socials block carries the settings for the row.
* **Alignment** puts the row left, centre, or right.
* **Icon Size** is a slider and a box, in pixels.
* **Socials** is the list of links, each row labelled with its address. **+** adds another Social straight away, with no menu, because Social is the only thing the block takes. **−** removes one and the handle reorders them.
* **Spacing** holds two controls.
* **Margin**, the space above and below the row.
* **Gap**, the space between the icons.
* **Text** holds **Size**, which sets the size of the label beside an icon. There is no colour control here.
Click a row in the **Socials** list and the panel moves down to that one link.
* **URL** takes the address. The box also offers every variable in the workspace that carries a URL, a phone number, or an email address, so a link can follow the brand rather than being typed in.
* **Icon** replaces the picture with one of your own. The cross beside the label clears it and hands the choice back to HireData.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Section](/reference/email-builder/sections) is the band a Socials row usually closes.
* [Button](/reference/email-builder/blocks/button) is the block for a link you want people to click, rather than a row of footers.
* [Variables](/reference/email-builder/variables) covers the tokens the **URL** box offers.
# Email builder overview
Source: https://help.hiredata.com/reference/email-builder/overview
A tour of the HireData email builder: the canvas and the settings panel, how you add a block, every block type, the toolbar, the theme, and saving.
An email template is a message you write once and send many times, in an automation or a newsletter. Open **Settings**, then **Emails** under **Templates**, and click **New Email**. Pick **Blank Email** or one of the ready-made templates, and the new template opens in the builder.
This page maps the builder. For a walkthrough that takes one email from blank to ready, read [Setting up an email template in HireData](/apps/messaging/emails/setting-up-an-email-template-in-hiredata).
## The builder at a glance
The builder has three parts.
* The **Subject** box across the top. It is the line the recipient sees in their inbox, and it takes variables.
* The email itself on the left. Click any text in it and type. Click any block to select it.
* The settings panel on the right, showing the settings of whatever you last selected.
Click a block's text and you select that block, so the panel fills with the block's own settings. To select the **section** that holds it, click beside the block instead, to the left or right of the text. Sections are not outlined in the canvas, so aim for the band of background colour a section fills.
A template holds sections, and a section holds the blocks the recipient reads. [Template](/reference/email-builder/template) explains how the three levels nest, how you move between them, and why you never add one and cannot delete it.
A breadcrumb above the settings names everything that contains the selected block. Select a line of a signature and all four levels appear.
## Adding a block
Every settings panel that can contain other blocks lists them under **Blocks**, numbered, in the order they appear in the email. Each row carries three controls.
* The **+** adds a new block below that row. Where the container accepts more than one kind of block, it opens a menu of them.
* The **−** deletes that block.
* The handle on the left drags the block up and down the list.
Click a block's own row to select it and open its settings. [The breadcrumb](/reference/email-builder/template#the-breadcrumb) walks back out. Click **Sections** for the settings of the section that holds the block, and **Template** for the settings of the email as a whole. The email on the left does not change. Only the panel does.
## Choosing a block
Two entries in the list cover more than one block. A **Two Columns** block arrives with its two columns already inside it, and a **Socials** block holds one child per network you link.
| Block | Where you can add it | What it puts in the email |
| ------------------------------------------------------ | -------------------- | --------------------------------------------------------------------- |
| [Section](/reference/email-builder/sections) | Template | a band across the email, with its own background, padding, and border |
| [Paragraph](/reference/email-builder/blocks/paragraph) | Section or column | body text |
| [Heading](/reference/email-builder/blocks/heading) | Section or column | a heading, at the level you pick |
| [Two Columns](/reference/email-builder/blocks/columns) | Section | two columns side by side, each holding its own blocks |
| [Form](/reference/email-builder/blocks/form) | Section | buttons that answer a question from one of your forms |
| [Image](/reference/email-builder/blocks/image) | Section or column | a picture from your media library, or one held in a variable |
| [Socials](/reference/email-builder/blocks/socials) | Section | a row of social icons, one per link |
| [Button](/reference/email-builder/blocks/button) | Section or column | a call to action that opens a URL |
| [HTML](/reference/email-builder/blocks/html) | Section or column | markup you write yourself |
| [Signature](/reference/email-builder/blocks/signature) | Section | a picture beside a block of sign-off text |
A column takes fewer kinds of block than a section. It cannot hold a Two Columns, a Form, or a Signature.
## The toolbar
The toolbar runs along the top of the builder, from **Save** to the four drawer buttons on the right.
**Save** stores your changes.
Two buttons follow it:
* The eye opens a [preview](/reference/email-builder/testing#the-preview) of the finished email, at mobile, tablet, or desktop width, with a language picker and a **Copy Preview URL** button. Its tooltip warns that it saves the email first.
* The paper plane opens [Test Email](/reference/email-builder/testing#sending-a-test-email). It sends the email to you with realistic values filled in.
**Brand** picks the brand the email's colours, fonts, and logo come from.
Two toggles follow the brand selector:
* **Show variable values** is a display toggle for the canvas. To read an email with real values in it, use the [preview](/reference/email-builder/testing#the-preview).
* **Show code editor** opens the generated markup. It appears only for accounts that may edit templates directly.
Four buttons at the end open drawers over the email:
* **Show variable list** lists the variables this email can use, and adds ones of your own. See [Variables](/reference/email-builder/variables).
* **Manage Template** publishes the open email to the shared template library. It appears only for accounts that maintain that library.
* **Show objects** links records such as a vacancy or a match to the email. Their fields then become [variables](/reference/email-builder/variables#bringing-in-a-records-fields) you can write into it.
* **Manage Languages** sets the email's default language and its [translations](/reference/email-builder/translations).
## Brand and theme
Every colour and font in a new email starts as a value from the brand you pick in **Brand**. The panel names the value rather than showing a hex code, such as "Theme: Palette Surface Color".
Switch **Brand** and the whole email restyles, blocks you already wrote included. Replace one of those values with a colour of your own and that one control stops following the brand. See [Template](/reference/email-builder/template#brand-theme-and-metadata) for the settings that decide it, and for the difference between switching brand and setting a theme.
## Saving
The email builder does not save as you type. **Save** saves. The preview button and **Send test email** each save before they run, so either of those commits whatever you have changed. See [Testing](/reference/email-builder/testing).
Try to leave the builder with unsaved changes and a warning appears. It offers to **Save** them, or to **Discard** them and carry on.
Reload the page or close the tab instead and your browser asks you to confirm before you lose them.
## Related
* [Setting up an email template in HireData](/apps/messaging/emails/setting-up-an-email-template-in-hiredata) walks one email from blank to ready.
* [Adding images to your emails](/apps/messaging/emails/adding-images-to-your-emails) covers the media library.
* [Variables](/reference/email-builder/variables) covers the picker, the fallbacks, and what a missing value looks like.
* [Translations](/reference/email-builder/translations) covers sending one email in several languages.
* [Testing](/reference/email-builder/testing) covers the preview, the test send, and what neither of them proves.
* [Form builder overview](/reference/forms/overview) covers the forms a Form block can point at.
# Sections
Source: https://help.hiredata.com/reference/email-builder/sections
Sections in the HireData email builder: the band that holds the blocks a recipient reads, with its own background, spacing, width, and border.
A section is a band across the email. It holds the blocks a recipient reads, and it carries the background, the padding, and the border behind them. Every block in an email sits in one, so a section is the level you are working at whenever you are not inside a block.
Sections are the only thing a [Template](/reference/email-builder/template) holds, and the **Template** panel is the only place you add one. Open **Blocks** there and click the **+** on any row. No menu opens, because a section is the only thing a Template takes. No section's own menu offers a Section either, so sections never nest.
The builder labels a section **Sections**, plural, wherever it names one, which is worth knowing before you go looking for a row that says which section you are on. [The breadcrumb](/reference/email-builder/template#the-breadcrumb) covers that.
## How it renders
The email body is 600 pixels wide. A section fills that width edge to edge, and its blocks sit in a column inside the padding you set.
A section with several blocks renders as a stack of rows that share one background. The border and the rounded corners belong to the section rather than to any row. The top border and the top corners land on the first block, the bottom border and the bottom corners on the last, and the rows in between run straight.
## Settings
* **Background color** fills the band. It starts on the brand's surface colour, which the control names rather than showing as a hex code.
* **Background image** takes a picture from the media library through **Choose image**, and it sits behind the whole band. The same picker offers the variables that carry an image, so the background can follow the brand.
* **Blocks** lists what the section holds, in order. **+** opens the menu of blocks you can add, **−** deletes a row, and the handle on the left drags it.
* **Spacing** holds three controls.
* **Margin** is the gap outside the band: **None**, **Normal**, **Large**, or **Custom** for a top and a bottom value in pixels.
* **Padding** is the gap inside it, with the same four choices and a box per side.
* **Width** sets how wide the blocks inside the section run: **Default**, **Large**, **Full**, or **Custom**, which opens a slider from 640 to 1240 pixels.
* **Border** holds three controls.
* **Border color** is a colour picker.
* **Border width** is **None**, **Normal**, **Large**, or **Custom** for a value per side.
* **Border radius** is the same four choices, for a value per corner.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the builder, the toolbar, the theme, and every block type.
* [Template](/reference/email-builder/template) is the only place a section can go.
* [Two Columns](/reference/email-builder/blocks/columns) splits one section into two.
* [Variables](/reference/email-builder/variables) covers the image tokens the **Background image** picker offers.
# Template
Source: https://help.hiredata.com/reference/email-builder/template
The root of a HireData email. How Template, sections, and blocks nest, how the breadcrumb moves between them, and the settings that apply to the whole email.
Template is the email itself. It sits at the root of everything you build in the email builder, it holds the sections, and its settings apply to every block inside them.
You never add a Template and you cannot delete one. No menu in the builder offers a Template, and no **Blocks** list contains one. Every email has exactly one from the moment you create it, which is why the breadcrumb always starts there.
## How an email nests
Three levels, and one exception.
* **Template** holds sections and nothing else. The **Blocks** list on the Template panel adds a section without opening a menu, because a section is the only thing it takes.
* A **section** is a band across the email. It holds the blocks a recipient reads: paragraph, heading, Two Columns, form, image, socials, button, HTML, and signature.
* A **Two Columns** block is the exception. It sits inside a section, arrives with exactly two columns already in it, and each column holds its own blocks. A column takes fewer kinds of block than a section does: no Two Columns, no Form, no Signature.
[Choosing a block](/reference/email-builder/overview#choosing-a-block) lists every block and where you can put it.
## The breadcrumb
The settings panel is headed by a breadcrumb naming everything that contains the block you selected. Select a line of a signature and you get all four levels.
Every level except the one you are on is a button. Click **Sections** for the section holding the block, and **Template** for the email as a whole. The email on the left does not move. Only the panel changes.
Two things about it are worth knowing before they trip you up.
* **A single section is labelled "Sections", plural.** It reads that way in the breadcrumb and on every row of the Template **Blocks** list, so a list of five sections is five rows all reading "Sections". The plural is the label for the block type rather than a count, and it never tells you which section you are on. The email on the left does.
* **There is no column level.** Select a block inside a column and the breadcrumb runs `Template > Sections > Two Columns` and then straight to the block. A column has no settings panel of its own, so nothing is missing from the chain.
## Settings
Click **Template** in the breadcrumb and the panel fills with the settings for the whole email. It is the one level you cannot reach by clicking the email itself, because clicking beside a block selects the section rather than the template.
* **Background color** sits behind every section, so it is what a recipient sees around them and in the gaps between them. It starts on the brand's background colour, which the control names rather than showing as a hex code.
* **Links** holds **Link color** and **Underlined**. Both apply to every link in the email. A paragraph can override either one, and its own **Links** group offers **Inherit** as a third choice so it can hand the decision back.
* **Blocks** lists the sections in the order they appear. Drag a row to move a section, **+** adds one below it, and **−** deletes it with everything inside.
* **Theme** is the styling that blocks you add from now on will start with. See [Brand, theme, and metadata](#brand-theme-and-metadata).
* **Metadata** holds **UTM Campaign**. See [Brand, theme, and metadata](#brand-theme-and-metadata).
## Brand, theme, and metadata
Three settings decide how an email is styled, and they reach different blocks. Getting them the wrong way round is the usual reason a change lands somewhere you did not expect.
* **Brand**, in the toolbar, restyles the **whole email**. Every colour and font still set to a theme value changes at once, in blocks you wrote weeks ago as much as in blocks you add next. Switching a fixture from one brand to another moved its section background, its button colour, and its heading colour together.
* **Theme**, in the Template settings, reaches **only blocks you add afterwards**. The panel says so itself: "Will be applied to newly added blocks." Set the section background there and every section you add from then on starts with it. Sections already in the email keep what they have.
* **A value you set on a block yourself** reaches **that block alone**, and takes it out of the brand's reach for good. The control stops naming a theme value and shows your colour instead, and a later brand switch leaves it where you put it.
So the panel tells you which is which. A control reading "Theme: Palette Surface Color" is still following the brand. One reading `#ff0000` is not.
**Metadata** below it holds **UTM Campaign**, five boxes named **Campaign Source**, **Campaign Medium**, **Campaign Name**, **Campaign Term**, and **Campaign Content**. HireData tags every link in a sent email whether or not you fill them in, so these set the values rather than switching tagging on.
## Related
* [Email builder overview](/reference/email-builder/overview) covers the canvas, the toolbar, the theme, and saving.
* [Section](/reference/email-builder/sections) is the band that holds everything a recipient reads.
* [Two Columns](/reference/email-builder/blocks/columns) explains the one block that nests further.
* [Paragraph](/reference/email-builder/blocks/paragraph) covers the per-block link colour that overrides the template.
# Testing
Source: https://help.hiredata.com/reference/email-builder/testing
Check a HireData email before it goes out: the preview and its three widths, the Links panel, sending yourself a test email, and what testing cannot tell you.
The builder gives you two ways to look at an email before anyone else does: a preview, and a test send to your own inbox. This page covers both, and ends with what neither of them proves.
## The preview
The eye button in the toolbar opens the preview. Its tooltip warns you that it saves the email first, so opening a preview commits whatever you have changed.
The preview loads the email's own public address rather than rendering it inside the builder, so what you see is the finished email rather than the canvas.
The template's name sits at the top left. The controls run from the middle of the header across to the right edge.
* **Copy Preview URL**, the first button, copies a link you can send to a colleague.
* The three buttons after it switch between **mobile**, **tablet**, and **desktop**.
* The refresh button reloads the email.
* The language picker appears once the template has a [translation](/reference/email-builder/translations), and switches the preview between them.
### Links
A **Links** panel down the side lists every link in the email, in order, and a **UTM Campaign** card under it repeats the [campaign parameters](/reference/email-builder/template#brand-theme-and-metadata) HireData adds to all of them. Hover a row and that link is outlined in the preview, with a popover showing the full address and the parameters on it.
This is the quickest check in the builder. A link with the wrong address, or a button pointing at a variable that resolved to nothing, shows up here in seconds.
### What the preview fills in
The preview resolves your variables against your own account, because you are the only person HireData knows is reading it. So a value that is blank for you appears blank here, and a token that is not a variable at all appears exactly as you typed it. See [What a recipient actually sees](/reference/email-builder/variables#what-a-recipient-actually-sees).
Open the **Copy Preview URL** link somewhere you are not signed in and the same email fills those fields with invented sample data instead. Use that link to show a colleague the layout, not to check the wording of a personalised line.
## Sending a test email
The paper-plane button opens **Test Email**. It saves the email first, then sends it to you with plausible values in place of a real recipient's.
* **First name**, **Last name**, and **Email** are all optional. Leave them and HireData uses your own. Fill them in to send the test somewhere else, or to see how a longer name sits in the layout.
* **Language** appears once the template has a translation, and picks which one to send.
* **Objects** appears when the email links [records](/reference/email-builder/variables#bringing-in-a-records-fields), or when it is bound to a [form](/reference/email-builder/blocks/form) that does. Each card takes either made-up **Fields** or a real **Record**, and **Auto fill** picks a record for you.
**Send test email** raises a **Test mail scheduled!** notification and closes the modal. The email arrives a moment later.
An object marked with a red asterisk needs a record, whatever the line under the group says about leaving it empty. Leave one out and the send fails with a **Failed to send test email** notification naming the first object it is missing, by key rather than by label: "Required data reference \[job] is missing."
## Before you send
Six things worth doing in this order.
1. **Read the subject line.** It is the first thing a recipient sees, it takes variables like everything else, and it is the easiest line to leave half-written.
2. **Check the canvas for stray braces.** A plain variable that HireData recognises is a chip, so one still showing `{{` and `}}` is either a typo or a token carrying a [modifier](/variables/modifiers), which stays plain text on purpose. Read each one and make sure it is the second kind. See [Variables](/reference/email-builder/variables).
3. **Walk the Links panel.** Every link, including the ones inside a Form block and the unsubscribe link in the footer.
4. **Look at the email at mobile width.** Columns stack and buttons reflow, and a line that fits on a desktop can break badly.
5. **Check each language.** Switch the preview's language picker through every translation you have written.
6. **Send yourself a test email and read it in your mail client.** It is the only step that shows you an actual inbox.
## What testing does not tell you
The builder has no Gmail preview, no Outlook preview, and no dark-mode preview. HireData does not model any email client, so nothing here predicts how one will render your email. A test send to your own address, opened in the client your recipients use, is the only check that does.
The three preview sizes resize the preview window to roughly a phone, a tablet, and the width of your screen. They change the width and nothing else, so what they show you is how your email reflows, not how a given device renders it. The narrow view is narrower than most phones, which makes it a strict test: a layout that holds together there will hold together on a real one.
Stacking at narrow widths is standard behaviour from MJML, the framework HireData builds the email with. HireData does not set the width at which it happens and offers no control over it. What you can control is what stacks: see [Two Columns](/reference/email-builder/blocks/columns#how-it-renders).
## Related
* [Variables](/reference/email-builder/variables) explains what the preview is showing you where a value is missing.
* [Translations](/reference/email-builder/translations) covers the language picker in the preview and the test modal.
* [Email builder overview](/reference/email-builder/overview) covers the toolbar and saving.
* [Two Columns](/reference/email-builder/blocks/columns) is the block whose behaviour changes most between the preview widths.
# Translations
Source: https://help.hiredata.com/reference/email-builder/translations
Send one HireData email in several languages: managing languages, what the builder offers for translation, and which language a recipient gets.
One email template can go out in several languages. Write it once in a default language, then add a translation for each other language you send in. HireData picks the right one per recipient.
## Manage Languages
The language button at the end of the toolbar opens **Localization**.
* **Default language** is the language the email is written in. It is what a recipient gets when nothing better is available.
* **Auto Translate** decides what happens when a recipient's language has no translation. See [Which language a recipient gets](#which-language-a-recipient-gets).
* **Translations** lists what you have written so far, with **New Translation** below it.
## What the builder offers for translation
Open a translation and you get one box per piece of translatable content, labelled with the path to the block it belongs to, such as `Template > Sections > Signature > Paragraph: Content`. Above each box sits the original, so you can see what you are translating.
The builder offers:
* The **Subject**.
* The template's **Name**, which is internal.
* [Paragraph](/reference/email-builder/blocks/paragraph) and [heading](/reference/email-builder/blocks/heading) text.
* The words on a [Button](/reference/email-builder/blocks/button).
* The paragraphs inside a [Signature](/reference/email-builder/blocks/signature).
* A [Form](/reference/email-builder/blocks/form) block's call to action and its three rating labels.
Four things never appear, so plan around them.
* An [Image](/reference/email-builder/blocks/image) and its alt text.
* An [HTML](/reference/email-builder/blocks/html) block. What you write in it goes out unchanged in every language.
* A [Socials](/reference/email-builder/blocks/socials) row.
* **Anything inside a [Two Columns](/reference/email-builder/blocks/columns) block.** A paragraph in a section is offered; the same paragraph moved into a column is not. If a passage has to be translated, keep it out of the columns.
## Writing a translation
Click **New Translation**, pick the **Language**, and fill the boxes in.
**Create AI translation** fills every box at once. It keeps your variable chips where they are and translates the words around them, so `Hi {{recipient.first_name}},` comes back as `Hoi {{recipient.first_name}},` rather than losing the name. Read what it wrote before you keep it, and edit any box you disagree with.
The button at the foot of the drawer saves the translation on its own, without saving the rest of the template. It reads **Create** on a new translation and **Update** on one you reopened. **Cancel** closes the drawer without saving.
## Which language a recipient gets
HireData looks for a translation in the recipient's language.
* **It finds one.** The recipient reads that translation.
* **It finds none and Auto Translate is Disabled.** The recipient reads the default language. Nothing breaks, and nothing warns you.
* **It finds none and Auto Translate is Enabled.** HireData writes the translation with AI at send time and keeps it, so the next recipient in that language gets the same wording.
Auto Translate is **Disabled** on a new template. Turn it on for an email that goes to an audience you do not control, such as a newsletter. Leave it off when the wording matters enough that you want to read it first.
The [preview](/reference/email-builder/testing) has a language picker once a template has at least one translation, and it lists the default language alongside the translations. It is the fastest way to read a translation in place.
## Changing or deleting a translation
Click a language in the **Translations** list to reopen it. The language cannot be changed, and the AI button now reads **Rewrite translations with AI**, which rewrites what is already there rather than filling in the gaps.
The bin button beside it deletes the translation. HireData asks first.
Deleting a translation does not touch the email. Recipients in that language fall back to the default language, or to a fresh AI translation if Auto Translate is on.
## Related
* [Testing](/reference/email-builder/testing) covers the preview's language picker and the test send.
* [Variables](/reference/email-builder/variables) explains the chips that survive translation.
* [Template](/reference/email-builder/template) covers the settings that apply to the email in every language.
* [Two Columns](/reference/email-builder/blocks/columns) is the block whose contents are not offered for translation.
# Variables
Source: https://help.hiredata.com/reference/email-builder/variables
Personalise a HireData email with variables: the picker, where they work, adding one of your own, what a recipient sees when a value is missing, and fallbacks.
A variable is a placeholder HireData fills in when the email goes out. Write `{{recipient.first_name}}` once and every recipient reads their own name.
The email builder shows a variable as a chip carrying its label, not its value. `{{recipient.first_name}}` reads **Recipient: First Name** on the canvas, and the chip behaves as one object rather than as the characters it stands for.
## Inserting a variable
Type `{{` and a picker opens under the cursor. Each row gives the variable's label, its `{{key}}`, and the kind of value it holds.
Keep typing to narrow the list. The search is forgiving. Type `frist` and **Recipient: First Name** still comes up.
Press Enter or click a row and the token turns into a chip.
## Where variables work
Anywhere you can type into an email, and in several places you cannot.
* The **Subject** box, which is the line a recipient reads in their inbox.
* [Paragraph](/reference/email-builder/blocks/paragraph) and [heading](/reference/email-builder/blocks/heading) text.
* A link's address. Select some text, click the link button in the bubble menu, and the popover offers a dropdown of every variable that holds a URL, including `{{template::unsubscribe_url}}`.
* The **URL** box on a [Button](/reference/email-builder/blocks/button) and on each [Social](/reference/email-builder/blocks/socials) row.
* A picture. The media library's **Fields** tab lists the variables that carry an image, for both the [Image](/reference/email-builder/blocks/image) block and the [Signature](/reference/email-builder/blocks/signature).
* A colour. Colour controls pick from the brand's colour variables by name, which is what "Theme: Palette Primary Color" means. See [Brand, theme, and metadata](/reference/email-builder/template#brand-theme-and-metadata).
## The variable list
The curly-brackets button in the toolbar opens **Variables**, a drawer listing everything this email can use. Search by label or key. Where HireData already knows a value, the card shows it, so you can tell `{{brand.name}}` from `{{account.name}}` without guessing.
Variables you added yourself sit at the top, each marked with a sparkle, and the `{{` picker puts the same ones first. Click one to reopen its settings.
## Adding your own variable
The **+** beside the search box opens a **Variables** dialog: your **Fields** down the left, and on the right the types you can choose from, in six groups. They run from **Text**, **Number**, and **Yes / No** through **Email**, **Phone**, and **Address** to **Color**, **Font**, and **JSON**. **Search types** narrows the list.
Pick a type and four settings open beside it.
* **Name** is what the chip reads on the canvas.
* **Default value** is what HireData writes in when nothing else supplies one. The control matches the type you picked.
* **Reference as** is the key you type between the braces. It fills itself in from the name.
* **What is it for?** is an optional note for whoever opens the template next.
**Save changes** keeps them. A variable you add belongs to this email alone, so **Save** the template before you leave.
A variable of your own earns its keep when one value belongs in several places. Put your phone number in a `{{phone}}` variable and write that into the signature, the footer, and the body, and changing the number afterwards is one edit rather than three.
Deleting a variable does not clear it out of the email. Every chip that used it turns back into plain `{{key}}` text and stays where it is, so the key goes out with its braces showing. Delete the variable, then find each place you used it.
**AI variable** is the first type in the dialog. Rather than look a value up, it works one out for each recipient from an instruction you write. See [AI variables](/variables/ai-variables).
## Bringing in a record's fields
The database button in the toolbar opens **Objects**, which links a record type to the email: a candidate, a vacancy, a match. Link one and every field on that record joins the variable list, addressed by the object's key, as in `{{candidate.first_name}}`.
[Objects](/reference/forms/objects) explains what an object is and what linking one does. It is written for the form builder, which offers more settings per object, but the records and their keys are the same.
## What a recipient actually sees
Three things can happen to a token, and only one of them is what you meant.
* **The variable resolves.** HireData has a value and writes it in.
* **The variable resolves to nothing.** The recipient has no phone number on file, so `{{recipient.phone_number}}` comes out as an empty space. "Call us on ." is the classic way this shows up.
* **There is no such variable.** HireData leaves a key it does not recognise exactly as you typed it. The recipient reads `{{recipient.favourite_biscuit}}`, braces and all.
The builder tells you which of the three you are heading for. A key it recognises becomes a chip. A key it does not stays as plain text, braces showing, and reaches the inbox that way.
The one exception is a token carrying a [modifier](#giving-a-variable-a-fallback). That stays plain text however good the key is, because the picker only ever inserts a bare key. So braces on the canvas mean one of two things: a variable you got wrong, or a modifier working as intended.
A token you paste in from somewhere else is the usual source of the third case. Paste it, then check it turned into a chip.
## Giving a variable a fallback
Add the `default` modifier and HireData uses your words instead of leaving a gap.
```text theme={null}
Hi {{ recipient.first_name | default: "there" }},
```
It fires in both of the failure cases above: when the value is blank, and when the key does not exist at all. The email above reads "Hi Sofia," for Sofia and "Hi there," for everyone whose first name is missing.
A chip cannot be edited. It is one object on the canvas rather than the characters it stands for, so there is nowhere to put a modifier. Type the whole token by hand instead, braces and all, and let the picker open and close around you. What you typed stays plain text rather than becoming a chip, which is what a modifier looks like when it is right. Read it back in the preview.
`default` is one of a long list. See [Modifiers](/variables/modifiers) for the rest, and for chaining several together.
## Related
* [Testing](/reference/email-builder/testing) is where you find out what your variables resolve to.
* [Variables](/variables/introduction) covers the `{{ }}` syntax across forms, messages, and automations as well as email.
* [Modifiers](/variables/modifiers) lists everything you can do to a value on its way into the email.
* [AI variables](/variables/ai-variables) work out a value per recipient instead of looking one up.
* [Objects](/reference/forms/objects) covers the records whose fields become variables.
* [Translations](/reference/email-builder/translations) keeps your variables intact in every language.
# Data sources
Source: https://help.hiredata.com/reference/forms/data-sources
Fill a HireData form's Multiple Choice or Dropdown question from a saved list instead of typed options, and what changes when you edit a shared list.
A data source is a saved list your workspace keeps in one place, drawn from your own records or from a connected app. Point a [Multiple Choice or Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) question at one and its options come from that list rather than from options you type into the field. Six forms asking which office someone wants then share one list, and adding the seventh office is a single edit.
## Point a question at a data source
Open the question and click **Add Data Source** above the options. The **Data Sources** window lists every source the workspace has. Each card carries a badge naming the list it reads, plus a **Filters** badge when the source narrows that list. **Add Data Source** in the window's header builds a new one from a workspace entity or from a connected app.
Click a card to see what the source maps, then **Select Data Source** to attach it.
The options you typed disappear while a source is attached, and a question holds one source at a time. **Remove Data Source** detaches it and puts an empty pair of options back, so anything you typed before is gone for good.
Attaching a source also collapses the per-option auto replies into one **Auto reply (on answer)**, sent whichever option the respondent picks. There is no way to write a different WhatsApp reply per country when the countries come from a list.
## What a source maps
The pencil next to **Select Data Source** opens the source itself. Every setting here decides how a record turns into an option.
* **Name** is what the source is called in the library. It is the only setting you type. The rest are pickers listing the fields the records carry.
* **Label** is the field the respondent reads. Get this wrong and your options are a column of IDs.
* **Description** adds a second line under the label where there is room for one. **None** leaves it off.
* **Value** is the field stored with the answer, usually the record's ID rather than its name.
* **Avatar** puts an image beside the label. Only image fields are offered, so most sources have nothing to pick.
## Filters
**Add New Set** starts a set of conditions. Each row picks a field, a condition, and a value, and **Add Filter** adds another row to the set. **Add New Set** again gives you a second set.
Filters are what make a source worth saving. Every country in the world is rarely the list you want to put in front of a candidate. The handful you recruit in usually is.
## One source, every question that uses it
A data source belongs to the workspace, not to the form. **Save** in the editor rewrites it for every question in every form pointing at it, and there is no per-form copy to fall back on. Before you narrow a source's filters, work out who else is reading it.
The records themselves are read when the form runs. A record added to the underlying list turns up as a new option without anyone opening the form builder.
## Related
* [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) is the only field type that takes a data source.
* [Objects](/reference/forms/objects) links a record to the form and turns its fields into variables.
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
# Criteria
Source: https://help.hiredata.com/reference/forms/evaluation/criteria
Check HireData form answers against must-have and nice-to-have requirements, with answer rules or with AI, and get one verdict back per response.
Criteria answers one question about a response: does this person meet what the role needs? You mark each question you care about as a must-have or a nice-to-have, say what a good answer looks like, and HireData returns a single verdict.
It is the evaluator to reach for when some answers are disqualifying. A candidate without a driving licence cannot do a driving job, and Criteria says so without anyone reading the response.
## Switch it on
Switch **Criteria** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview#enable-order), then click **Criteria** to open it. Every question in the form appears underneath with a switch of its own. A question is only checked once you switch it on here.
## Settings per question
Switch a question on and its settings open.
* **How important is this requirement?** with **Must-have** and **Nice-to-have**. A failed must-have rejects the response. A failed nice-to-have only downgrades it.
* **How to evaluate?** with **Use answer rules** and **Evaluate with AI**.
* **What answer(s) do you expect?**, on the rules side, holding the conditions the answer has to satisfy.
* The note box, labelled **What should AI look for?**. It steers the AI and is ignored by rules. See [one note per question](/reference/forms/evaluation/overview#one-note-per-question).
### Expected answers
A condition reads ` `. The question is fixed: a rule on this question can only test this question's answer. Pick the operator, then the value.
**Add condition** adds a second condition and an **All** and **Any** switch above it. **All** needs every condition to match. **Any** needs one. Both apply to the whole set, not to one pair.
Leave the conditions empty and the question is skipped, whatever its switch says. A question with nothing to compare cannot pass or fail.
### Operators
The type of the question decides the operators. This is a longer list than [logic](/reference/forms/logic#operators) offers, so a question logic cannot branch on can still be a criterion.
| Field types | Operators |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Short and Long Text](/reference/forms/fields/short-and-long-text), [Email](/reference/forms/fields/email), [Phone Number](/reference/forms/fields/phone-number), [Website](/reference/forms/fields/website) | is equal to, is not equal to, contains, does not contain, starts with, ends with, does not start with, does not end with, is empty, is not empty |
| [Number](/reference/forms/fields/number), [Currency](/reference/forms/fields/currency), [Net Promoter Score and Opinion Scale](/reference/forms/fields/net-promoter-score-and-opinion-scale), [Date](/reference/forms/fields/date), [Time](/reference/forms/fields/time), [Datetime](/reference/forms/fields/datetime) | is equal to, is not equal to, is greater than, is less than, is greater than or equal to, is less than or equal to, is empty, is not empty |
| [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) | is equal to, is not equal to, is one of, is not one of, is empty, is not empty |
| [Yes/No](/reference/forms/fields/yes-no) | is equal to, is not equal to, is empty, is not empty |
| [File Upload](/reference/forms/fields/file-upload) | text operators on the file name, its type, and its address, numeric operators on its size |
Dates are the useful surprise. The **Logic** tab can only ask whether a date was given, but a criterion can ask whether the start date falls before the day you need someone.
A File Upload question offers a second picker above the operator, for which part of the file to read: **Answer Name**, **Answer File Name**, **Answer Mime Type**, **Answer Size**, and **Answer Url**. A rule never reads what is inside the file. Only the AI does.
## Evaluating with AI
Switch to **Evaluate with AI** and the conditions disappear. The model gets the question, the answer, and your note, and decides whether the answer meets the requirement. It also returns a sentence of reasoning, which [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows under the answer.
Use AI for free text and files, where the wording varies and no rule fits. Keep rules for answers with a fixed set of values. A Yes/No or a choice question needs no interpretation, and a rule is faster, cheaper, and repeatable.
A [File Upload](/reference/forms/fields/file-upload) question set to AI sends the attachment to the model. JPEG, PNG, GIF, WebP, and PDF files are read, up to five files and 10 MB per response. Anything else is judged on its file name alone.
## The verdict
Every question you switched on and configured votes. HireData then picks the verdict in this order.
1. **Does not meet criteria**, when an answered must-have failed.
2. **Incomplete**, when a question you switched on has no answer.
3. **Partially meets criteria**, when every must-have passed and an answered nice-to-have failed.
4. **Meets criteria**, when everything passed.
A missing answer is not a failure. A candidate who never reached a must-have question is **Incomplete**, so a rejection always means the person answered and the answer fell short. Watch for this on questions behind a [logic](/reference/forms/logic) jump, which some respondents never see.
The verdict is available to automations as `{{form_response.evaluation.screening}}`, which stores `passed`, `passed_with_restrictions`, `rejected`, or `incomplete`.
## Related
* [Form evaluation overview](/reference/forms/evaluation/overview) covers the five evaluators and the order you switch them on in.
* [Scoring](/reference/forms/evaluation/scoring) ranks the responses that pass.
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows the verdict per question against the answers that produced it.
* [Screen and score applicants with a pre-screening form](/knowledge-base/cookbook/pre-screening-form) builds a form around this evaluator.
# Generated fields
Source: https://help.hiredata.com/reference/forms/evaluation/generated-fields
Define custom output fields on a HireData form and let AI fill them from the whole response, then read the generated values in an automation.
Generated fields is the odd one out on the **Evaluation** tab. The other evaluators judge answers you already collected. This one produces values that were never asked for.
You define the outputs you want, the AI reads the finished response, and each output comes back filled. A form that never asks "how should we contact you?" can still return a preferred contact channel, because one of the answers mentioned it.
## What it is not
The outputs are new. They are not the form's questions, and they do not touch them.
* Defining an output does not add a question, change a question, or write into an answer.
* An output is not tied to one question. Every output is filled from the whole response.
* Switching **Generated fields** on does not put a switch on any question card, because there is nothing to switch on per question.
Think of it as one AI pass over the completed response, returning a small record you designed.
## Switch it on
**Generated fields** is the last block on the **Evaluation** tab. Switch it on, then click it to open the settings. There is nothing to enable per question.
* **Hints for the AI (optional)** is one instruction for the whole set. It is the place to say what to do when the answers do not cover an output, which otherwise gets guessed at.
* **What should the AI return?** lists the outputs, in the order the AI is asked for them. The arrows on a row move it, the pencil edits it, and the bin removes it.
Switch the evaluator on and add nothing and nothing is generated. The list needs at least one output before it runs.
## Adding an output
Three buttons sit under the list.
**Create custom** opens **New output field**, a two-step panel. Step 1 chooses the type, with a search box and groups for the basics, dates and times, contact details, and web and media types. Step 2 is the configuration.
* **Name** is the label you see in results and in the variable picker.
* **Reference as** is the key an automation uses. It fills in from the name and has to be unique in the form, with no spaces or curly braces.
* **What is it for? (optional)** tells the AI what the value means. Write it. It does more for the result than the name does.
* **Options** appears for a **List** output. Add at least one, and the AI has to pick from them instead of writing free text. It is the way to get a value your automation can branch on.
**Done** adds the output. **Save & New** adds it and keeps the panel open for the next one.
**Suggest with AI** reads the form's questions and your hints and proposes up to three outputs, then adds them straight to the list. Treat them as a starting point and edit the ones you keep.
**Data source** opens the [data source](/reference/forms/data-sources) library. Pick a source and the output can only hold one of that list's items, so the AI has to match the response to a value your workspace already maintains. A data source output has no pencil: change the list, not the output.
## When it runs and what it sees
Generated fields runs after Criteria, Scoring, and Skills, over every answer in the response plus their results. That order is the point of it. An output can be filled from the score or the verdict as well as from the answers. That is how you get a one-line reason for a rejection or a next step that depends on the rating.
## Reading the values
Every output appears under **Generated fields** in [Test & Evaluate](/reference/forms/testing/test-and-evaluate), and again in the **Automation variables** list with the key to copy.
In an automation, an output is `{{form_response.evaluation.ai_output.}}`, so the `preferred_contact` output is `{{form_response.evaluation.ai_output.preferred_contact}}`. See [Variables](/variables/introduction).
## Related
* [Form evaluation overview](/reference/forms/evaluation/overview) covers the five evaluators and the order you switch them on in.
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows the generated values from a run you control.
* [Data sources](/reference/forms/data-sources) explains the lists a data source output draws on.
# Form evaluation overview
Source: https://help.hiredata.com/reference/forms/evaluation/overview
The five evaluators on a HireData form's Evaluation tab: what each one decides, what it hands back, and the order you have to switch them on in.
A form collects answers. The **Evaluation** tab turns a finished response into something a recruiter can act on: a verdict, a score, a skill, a summary, or any value you ask the AI for.
The tab is the third one above the field list, after **Content** and **Logic**. It holds five evaluators, each a card with a switch and an information icon that explains it. Switch one on, then click its name to open its settings.
## The five evaluators
| Evaluator | What it does | What you get back |
| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Summary | Writes the finished response up for internal use. There is nothing to configure. | A short paragraph. |
| [Criteria](/reference/forms/evaluation/criteria) | Checks each selected answer against the requirement you set for it, must-have or nice-to-have. | One verdict for the response: **Meets criteria**, **Partially meets criteria**, **Does not meet criteria**, or **Incomplete**. |
| [Scoring](/reference/forms/evaluation/scoring) | Awards points for each selected answer, up to a maximum you set per question. | A percentage and the score range it falls in. |
| [Skills](/reference/forms/evaluation/skills) | Weighs the answers that point to each skill you listed. | A percentage per skill, and the strongest one. |
| [Generated fields](/reference/forms/evaluation/generated-fields) | Fills in outputs you define, reading the whole response. | One value per output you defined. |
Summary and Generated fields work on the response as a whole. Criteria, Scoring, and Skills work question by question, so each one needs a second switch on every question you want it to look at.
## Switch it on for the form first
The order catches people out. A question's evaluator switch does nothing on its own.
1. Open the **Evaluation** tab and switch the evaluator on for the form.
2. Click the evaluator's name to open it. Every question in the form appears underneath with a switch of its own.
3. Switch on the questions you want it to look at, and configure each one.
A question's **Criteria**, **Scoring**, or **Skills** switch is ignored while the form-level switch is off. Switch the evaluator off for the form and the per-question switches stay as you left them, but nothing is evaluated.
The same per-question switches also appear on the question card in the **Content** tab, so you can configure a question without leaving it. They only appear there once the form-level switch is on, which is the other half of the same rule.
## Which questions can be evaluated
Every field type except [Ending Screen](/reference/forms/fields/ending-screen) and [Redirect URL](/reference/forms/fields/redirect-url). The two endings collect nothing, so there is nothing to evaluate.
What differs by type is how precisely a rule can read the answer. A [Yes/No](/reference/forms/fields/yes-no) answer is one of two known values. A [File Upload](/reference/forms/fields/file-upload) answer can only be tested on its file name, type, and size. Each evaluator page carries the operator table for its rules.
## Rules or AI
Criteria, Scoring, and Skills each ask **How to evaluate?** per question, with two answers.
* **Use answer rules** compares the answer against conditions you write. The same answer always gives the same result, and no AI call is made.
* **Evaluate with AI** hands the question, the answer, and your note to the model, which decides. Use it for free text, where a rule cannot tell a good answer from a poor one.
Rules are the default on every type except [Short and Long Text](/reference/forms/fields/short-and-long-text), where Criteria starts on the AI.
### One note per question
The box at the bottom of a question's evaluator settings takes an instruction for the AI. Its label changes with the evaluator you opened it from: **What should AI look for?**, **How should AI award points?**, **What skill signals should AI look for?**
The box is one note per question, shared by all three. Write it under Criteria and the same text appears under Scoring and Skills. Keep it about the answer rather than about one evaluator.
## When each evaluator runs
A response is evaluated when it is completed, and again in [Test & Evaluate](/reference/forms/testing/test-and-evaluate) while you are building. The steps run in this order.
1. Every rule-based question is evaluated. No AI is involved.
2. The questions set to **Evaluate with AI** go to the model in one call.
3. The per-question results become the verdict, the score, and the skill percentages.
4. Generated fields runs last, over the whole response plus the results from step 3.
Generated fields running last is what lets it use them. An output field can be filled from the score or the verdict as well as from the answers.
## Where the results go
* In the builder, [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows every result against the answers that produced it.
* On a submitted response, the results are stored with it. **Export CSV** and **Export Excel** in the builder's three-dot menu add a column per result, including one per skill and one per generated field.
* In an automation, each result is a variable, such as `{{form_response.evaluation.scoring.band.label}}`. **Test & Evaluate** lists them all under **Automation variables**, with the value from the run in front of you. See [Variables](/variables/introduction).
## Related
* [Criteria](/reference/forms/evaluation/criteria), [Scoring](/reference/forms/evaluation/scoring), [Skills](/reference/forms/evaluation/skills), and [Generated fields](/reference/forms/evaluation/generated-fields) cover the four evaluators you configure.
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) runs the evaluators against a response you make up.
* [Screen and score applicants with a pre-screening form](/knowledge-base/cookbook/pre-screening-form) builds one form that uses Criteria, Scoring, and Summary together.
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
# Scoring
Source: https://help.hiredata.com/reference/forms/evaluation/scoring
Award points for form answers with rules or with AI, turn the total into a percentage, and label it with a score range such as Low, Medium, or High.
Scoring turns a response into a number. You decide how many points each question is worth and when they are awarded, and HireData converts the total into a percentage and labels it with a range.
Criteria tells you who is out. Scoring tells you who to call first.
## Score ranges
Switch **Scoring** on for the form and it starts with three ranges: **Low** at 0, **Medium** at 50, and **High** at 80. Click **Scoring** to open them.
Each range has a **Label** and a **Minimum score (%)**. A response lands in the highest range whose minimum it clears, so 82% is High and 79% is Medium. **Add range** adds another, and the bin removes one. Give every range a label and a different minimum between 0 and 100.
Keep one range at 0. A score below every minimum gets a percentage and no label, which reads as a missing result rather than a low one.
## Settings per question
Click **Scoring**, switch a question on, and its settings open.
* **How many points is this question worth?**, the most this question can add.
* **How to evaluate?** with **Use answer rules** and **Evaluate with AI**.
* **When should points be awarded?**, on the rules side, holding one or more rules.
* The note box, labelled **How should AI award points?**.
### Rules
A rule is a set of conditions plus **How many points should be awarded?**. A condition reads ` ` and can only test this question's answer. **Add condition** adds a second one and an **All** and **Any** switch above it, and **Add rule** adds another rule underneath.
The operators are the same set Criteria offers, and the field type decides them: text operators on the text and contact types, comparisons on the numeric, rating, and date types, **is one of** on Multiple Choice and Dropdown, and file metadata on File Upload. See [the operator table](/reference/forms/evaluation/criteria#operators).
Every matching rule pays out, and the total is then capped at the question's maximum. Two rules that both match a five-year answer, one worth 20 and one worth 10, award 20 on a question worth 20. Overlapping bands are safe as long as the maximum is right. That is what lets you write "5 years or more, 20 points" above "3 years or more, 10 points" and stop thinking about the gap.
Leave **How many points is this question worth?** empty and the maximum becomes the sum of the rule points, so nothing can go over 100%.
### Evaluating with AI
Switch to **Evaluate with AI** and the rules disappear. The model reads the answer and your note and returns a number between zero and the question's maximum, with a sentence of reasoning.
Set the maximum before switching a question to AI. AI scoring needs a maximum above zero, and the whole evaluation fails with an error while it is empty.
## How the percentage is worked out
Only the questions you switched on and configured take part. HireData adds up the points they earned, divides by the sum of their maximums, and rounds to two decimals.
A form with a 10-point question and a 20-point question is scored out of 30. Earn 10 and 20 and the response scores 100%.
An unanswered question scores zero and still counts its maximum, so a half-finished response scores low rather than scoring well on what it did answer. That is usually what you want. When it is not, put the scored questions early in the form, ahead of any [logic](/reference/forms/logic) jump that could step over them.
Automations read the result as `{{form_response.evaluation.scoring.score}}` for the percentage, and `{{form_response.evaluation.scoring.band.label}}` for the range label.
## Related
* [Form evaluation overview](/reference/forms/evaluation/overview) covers the five evaluators and the order you switch them on in.
* [Criteria](/reference/forms/evaluation/criteria) decides who qualifies at all.
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows the points each question earned.
* [Screen and score applicants with a pre-screening form](/knowledge-base/cookbook/pre-screening-form) builds a form around this evaluator.
# Skills
Source: https://help.hiredata.com/reference/forms/evaluation/skills
List the skills a HireData form should assess, weight the answers that point to each one, and read back the strongest skill in the response.
Skills works out what a response is mostly telling you. You list the skills the role cares about, say which answers point to each one and how strongly, and HireData returns a percentage per skill and names the strongest.
Criteria and Scoring both judge. Skills sorts. It is the evaluator for a pool of candidates who all qualify, where the question is who to put in front of which client.
## The skills list
Switch **Skills** on for the form, then click **Skills** to open **Which skills do you want to assess?**. Add one row per skill.
Each row has the **Skill name**, a gear, and a bin. The gear opens **Description (optional)**, a sentence explaining what the skill means. The description is the AI's only guide to what counts, so write it when any question is set to **Evaluate with AI**. **Add skill** adds a row.
Removing a skill also removes it from every question that pointed to it. There is no undo, so check which questions use a skill before you delete it.
## Settings per question
Click **Skills**, switch a question on, and its settings open.
* **How to evaluate?** with **Use answer rules** and **Evaluate with AI**.
* **When should skill impact be applied?**, on the rules side, holding one or more rules.
* The note box, labelled **What skill signals should AI look for?**.
### Rules and skill impact
A rule is a set of conditions plus one or more skill impacts. A condition reads ` ` and can only test this question's answer. **Add condition** adds a second one and an **All** and **Any** switch above it.
The operators are the same set Criteria offers, and the field type decides them: text operators on the text and contact types, comparisons on the numeric, rating, and date types, **is one of** on Multiple Choice and Dropdown, and file metadata on File Upload. See [the operator table](/reference/forms/evaluation/criteria#operators).
Each impact has **Which skill does this answer indicate?** and **How much should it contribute?**. **Add skill impact** points the same rule at a second skill, so one answer can count towards two. **Add rule** adds another rule, which is how one question gives different weights to different answers.
### Evaluating with AI
Switch to **Evaluate with AI** and the rules disappear. The model reads the answer, your note, and the skill descriptions, and returns a weight per skill.
Add at least one skill to the form before switching a question to AI. AI skill assessment has nothing to weight without them, and the whole evaluation fails with an error.
## How the percentages are worked out
Weights are not scores. HireData adds up the weight each skill collected across the whole response, then gives each skill its share of that total, so the percentages add up to 100.
One answer worth 2 to Availability and one worth 1 to Communication makes Availability 66.67% and Communication 33.33%. Both numbers say where the signal came from, not how good the candidate is. The **strongest skill** is the highest percentage.
That relative maths has a consequence worth planning for. Weighting one skill heavily in many questions drowns the others out, whatever the answers say. Keep the weights comparable and spread them across the questions that genuinely indicate each skill.
Automations read `{{form_response.evaluation.profiling.primary_skill.key}}` and `{{form_response.evaluation.profiling.primary_skill.percentage}}`. Every skill you configured also gets its own percentage variable, so a rule can act on one skill without it having to win.
## Related
* [Form evaluation overview](/reference/forms/evaluation/overview) covers the five evaluators and the order you switch them on in.
* [Criteria](/reference/forms/evaluation/criteria) and [Scoring](/reference/forms/evaluation/scoring) judge a response rather than sorting it.
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) shows a bar per skill and the badges on the questions that feed them.
# Currency
Source: https://help.hiredata.com/reference/forms/fields/currency
The currency field in a HireData form. It is a number field with a symbol in front of it, offering Euro, Dollar, Pound, Swiss Franc, Yen, and Rupee.
Currency is a Number field with a symbol in front of the box. Use it for a salary expectation, an hourly rate, or a budget. Logic and the evaluators treat the answer as a plain number, so everything a Number field can do, a Currency field can do too.
It sits in the **Numeric** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Currency adds five of its own.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Value** and **Maximum Value**, the ends of the range you accept.
* **Currency Symbol**, one of **Euro**, **Dollar**, **Pound**, **Swiss Franc**, **Yen**, or **Rupee**.
* **Steps**, the size of one step.
The symbol is decoration on the box. HireData stores the number and does not convert between currencies, so a form that has to handle several of them needs a separate question asking which one the respondent meant.
## What it stores
A number, without the symbol.
## Logic operators
| Operator | Matches when |
| --------------------------- | -------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| is greater than | the answer is above the value |
| is less than | the answer is below the value |
| is greater than or equal to | the answer is the value or above |
| is less than or equal to | the answer is the value or below |
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card. A salary ceiling is a sensible **Criteria** must-have: above the number, the candidate is out of range.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Number](/reference/forms/fields/number) is the same field without a symbol.
# Date
Source: https://help.hiredata.com/reference/forms/fields/date
The date field in a HireData form. It gives the respondent a calendar picker and can only be branched on with the has response operator.
Date gives the respondent a `dd/mm/yyyy` box with a calendar picker beside it. Use it for a start date, a notice period end, or any single day.
It sits in the **Temporal** group of the **Add Content** palette.
## Settings
Date adds nothing to the [settings every field shares](/reference/forms/overview#settings-every-field-shares). There is no earliest or latest day to set. A date the respondent should not be able to pick has to be caught after the answer arrives, either by an evaluator or by an automation.
## What it stores
A date and time. All three temporal types share one value, and Date fills in the day.
## Logic operators
The operator picker is fixed at **has response** and cannot be changed.
You cannot branch on how early or late a date is. A rule can ask whether the respondent gave a date at all, and nothing more. To act on the day itself, use [Criteria](/reference/forms/evaluation/criteria) or an automation.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card. A start date is a good **Criteria** must-have, and it is the way to test a date that logic cannot reach.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Time](/reference/forms/fields/time) and [Datetime](/reference/forms/fields/datetime) are the other two Temporal fields.
# Datetime
Source: https://help.hiredata.com/reference/forms/fields/datetime
The datetime field in a HireData form. It asks for a day and a time in one answer and can only be branched on with the has response operator.
Datetime asks for a day and a time in one answer. Use it when both halves matter, such as an interview slot, and use [Date](/reference/forms/fields/date) when the day is enough.
It sits in the **Temporal** group of the **Add Content** palette.
## Settings
Datetime adds nothing to the [settings every field shares](/reference/forms/overview#settings-every-field-shares). There is no window to set and no working-hours limit.
## What it stores
A date and time. All three temporal types share one value, and Datetime fills in both halves.
## Logic operators
The operator picker is fixed at **has response** and cannot be changed. A rule can ask whether the respondent gave a slot, not whether it falls in the window you wanted.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Date](/reference/forms/fields/date) and [Time](/reference/forms/fields/time) are the other two Temporal fields.
# Email
Source: https://help.hiredata.com/reference/forms/fields/email
The email field in a HireData form. It checks the address is well formed and takes the same placeholder, length, and pattern settings as a text field.
Email is a single-line box that has to hold an email address. The respondent sees an @ mark in the empty box, and an address that is not well formed does not pass.
It sits in the **Contact Info** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Email adds the same four a text field has.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Length** and **Maximum Length**, counted in characters.
* **Validation Pattern**, a regular expression the answer has to match, on top of the address check.
The message a respondent sees when the address is malformed sits under **Validation** in [Languages and translations](/reference/forms/overview#localization), as **Invalid Email**.
## What it stores
Text, the address as the respondent typed it.
## Logic operators
| Operator | Matches when |
| ---------------- | ----------------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| starts with | the answer begins with the value |
| ends with | the answer ends with the value |
| contains | the value appears somewhere in the answer |
| does not contain | the value appears nowhere in the answer |
**ends with** is the useful one here. A rule reading `if email ends with @yourcompany.com` tells an internal respondent apart from an external one.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card. An address rarely says anything about a candidate, so most forms leave all three off here.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Phone Number](/reference/forms/fields/phone-number) and [Website](/reference/forms/fields/website) are the other two Contact Info fields.
* [Short Text and Long Text](/reference/forms/fields/short-and-long-text) is the same box with no format check.
# Ending Screen
Source: https://help.hiredata.com/reference/forms/fields/ending-screen
The last screen of a HireData form. It shows a title and description, and can carry a button that sends the respondent on, with an optional timer.
An ending screen is where a respondent lands when the form is over. It shows a title, an optional description, and an optional button.
The **Content** tab collects endings in their own **Endings** group at the bottom of the field list, apart from the questions. A form can hold several of them, and that is the point. A logic rule can send a strong candidate to one ending and everyone else to another.
It sits in the **Ending** group of the **Add Content** palette. The button at the bottom left of the card switches it to a [Redirect URL](/reference/forms/fields/redirect-url).
## Settings
An ending has fewer settings than a question, because nobody answers it.
* **Title**, up to 255 characters. This is what other field types call **Question**.
* **Description**, up to 1024 characters.
* **Image**, with the same placement selector every field has.
* **Button**, a switch in the footer.
Turning **Button** on adds two settings and a second switch.
* **Button Text**, the label on the button. The box shows "Submit Form" as its placeholder.
* **Redirect URL**, the address the button opens.
* **Redirect timer**, a switch that adds a **Timer** in seconds, so the respondent is sent to the address on their own after that many seconds rather than waiting for a click.
There is no **Display & requirements** button, no auto reply, and no evaluator switch. An ending is not a question, so none of them apply.
## What it stores
Nothing. An ending has no input.
## Logic operators
None. An ending has no **Add Rule** button in the **Logic** tab, because an ending is where the form stops. Rules on the questions point at endings, not the other way round.
## Evaluation
An ending screen carries no evaluator switches. The AI evaluators read the answers, and an ending has none.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Redirect URL](/reference/forms/fields/redirect-url) is the other ending, with no screen at all.
* [Logic](/reference/forms/logic) explains sending different respondents to different endings.
# File Upload
Source: https://help.hiredata.com/reference/forms/fields/file-upload
The file upload field in a HireData form. Choose whether the respondent can attach more than one file, and which file types you accept.
File Upload gives the respondent a drop area reading **Drop Files Here**, with "Click here or drop files to upload them" underneath. It is how a form collects a CV, a certificate, or a portfolio.
It sits in the **Other** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). File Upload adds two of its own.
* **Multiple**, **Yes** or **No**, which decides whether the respondent can attach more than one file.
* **File type**, one preset from **Any**, **Image**, **Audio**, **Video**, **Media**, **PDF**, **Document**, **Powerpoint**, **Word Document**, **Sheet**, and **Archive**.
**File type** is a preset, not a list you write, so a form that wants a PDF or a Word document has to accept **Document** and sort it out later. There is no size limit to set.
The wording of the drop area is translatable. It sits under **Settings** in [Languages and translations](/reference/forms/overview#localization), as **Upload title** and **Upload description**.
## What it stores
The uploaded files, with the file name and type of each one.
## Logic operators
The operator picker is fixed at **has response** and cannot be changed. A rule can ask whether the respondent attached anything, which is enough to send a candidate without a CV somewhere else.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Languages and translations](/reference/forms/overview#localization) is where you reword the drop area.
# Multiple Choice and Dropdown
Source: https://help.hiredata.com/reference/forms/fields/multiple-choice-and-dropdown
The option field in a HireData form. Multiple Choice lists the options, Dropdown hides them in a menu, and both can take their options from a data source.
Multiple Choice and Dropdown are one field type with a switch between them. Multiple Choice lists every option on the screen, so the respondent sees all of them at once. Dropdown puts them behind a menu, which is the better shape once the list gets long.
Both sit in the **Choice** group of the **Add Content** palette. The button at the bottom left of the card switches between them.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). The options themselves and three more settings belong to this type.
* **Options**, the list the respondent picks from.
* **Add Data Source**, above the list, which fills the options from a saved list your workspace already keeps instead of options you type. See [Data sources](/reference/forms/data-sources).
* **Conversational Button Text**, the label on the button that opens the list in a WhatsApp conversation. The box shows "Choose" as its placeholder.
* **Placeholder**, on Dropdown only, the text in the closed menu before anything is picked.
* The footer button reading **Single Answer** opens **Answer selection**, which holds one switch, **Allow multiple answers**. Turn it on and the respondent can pick more than one option.
Each option row has the option text, a gear, a plus, and a minus. The gear opens that option's **Auto reply (on answer)**, the WhatsApp message sent when this option is chosen. The plus adds a row underneath and the minus removes one. A choice field needs two options, so the minus disappears once only two are left.
The same field as a Dropdown, which adds a **Placeholder**:
## What it stores
The chosen options, as a list. A single-answer field stores a list of one.
## Logic operators
| Operator | Matches when |
| --------------- | -------------------------------------------- |
| has response | the respondent picked anything |
| is equal to | the answer is the option you picked |
| is not equal to | the answer is any other option |
| is one of | the answer is any of the options you picked |
| is not one of | the answer is none of the options you picked |
**is one of** is the one that saves rules. Three options that all lead to the same follow-up need one rule, not three.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
A choice field is the easiest to score, because you already know every answer it can give. Points per option is a rule you can write once and trust.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Data sources](/reference/forms/data-sources) explains filling the options from a saved list.
* [Yes/No](/reference/forms/fields/yes-no) is the field to use for a plain yes or no.
# Net Promoter Score and Opinion Scale
Source: https://help.hiredata.com/reference/forms/fields/net-promoter-score-and-opinion-scale
The rating field in a HireData form. Net Promoter Score is a fixed 0 to 10 scale, and Opinion Scale lets you set the ends and label them.
Net Promoter Score and Opinion Scale are one field type with a switch between them. The respondent picks a point on a row of numbers, and the form stores the number they picked.
**Net Promoter Score** is the standard question, fixed at 0 to 10, with **NOT LIKELY AT ALL** under one end and **EXTREMELY LIKELY** under the other. You cannot change the range or the labels.
**Opinion Scale** is the same row with the ends and the labels in your hands. Use it for satisfaction, confidence, or any rating where 0 to 10 is more room than the question needs.
Both sit in the **Rating** group of the **Add Content** palette. The button at the bottom left of the card switches between them.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Net Promoter Score adds one setting of its own.
* **Conversational Button Text**, the label on the button that opens the scale in a WhatsApp conversation.
Opinion Scale adds four more.
* **Scale**, the first and last point. The first is **0** or **1**, and the last goes up to **10**.
* **Min label**, **Mid label**, and **Max label**, up to 50 characters each, printed under the start, middle, and end of the row.
* The footer button reading **Order: Normal** opens **Rating order**, which holds one switch, **Reverse order**, described as "Show rating options from highest to lowest."
The same type switched to Opinion Scale, which adds the **Scale** and label settings:
## What it stores
A number, the point the respondent picked.
## Logic operators
| Operator | Matches when |
| --------------------------- | -------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| is greater than | the answer is above the value |
| is less than | the answer is below the value |
| is greater than or equal to | the answer is the value or above |
| is less than or equal to | the answer is the value or below |
A rating is the field most worth branching on. `if score is less than or equal to 7 then go to "What could we do better?"` sends the unhappy respondents down a follow-up path and lets everyone else finish.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
A rating and **Scoring** fit together: 9 or 10 earns full points, 7 or 8 earns some, and the rest earn none.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Number](/reference/forms/fields/number) is the field to use for a number the respondent types.
* [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) is the field to use for named answers rather than a scale.
# Number
Source: https://help.hiredata.com/reference/forms/fields/number
The number field in a HireData form, with minimum, maximum, and step settings, and the full set of comparison operators in conditional logic.
Number takes a plain number: years of experience, hours a week, how many of something. It is one of only two types logic can compare, which makes it the field to reach for when a rule has to weigh an answer rather than match it.
It sits in the **Numeric** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Number adds four of its own.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Value** and **Maximum Value**, the ends of the range you accept.
* **Steps**, the size of one step. Set it to 1 to insist on whole numbers.
The messages a respondent sees when an answer falls outside the range sit under **Validation** in [Languages and translations](/reference/forms/overview#localization), as **Min Number** and **Max Number**.
## What it stores
A number.
## Logic operators
| Operator | Matches when |
| --------------------------- | -------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| is greater than | the answer is above the value |
| is less than | the answer is below the value |
| is greater than or equal to | the answer is the value or above |
| is less than or equal to | the answer is the value or below |
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
Number suits **Scoring** better than any other type. A threshold gives full points, a lower one gives some, and everything below gives none, all from the value itself.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Currency](/reference/forms/fields/currency) is the same field with a symbol on it.
* [Net Promoter Score and Opinion Scale](/reference/forms/fields/net-promoter-score-and-opinion-scale) is a number the respondent picks off a scale.
# Phone Number
Source: https://help.hiredata.com/reference/forms/fields/phone-number
The phone number field in a HireData form, with the placeholder, length, and validation pattern settings a text field has, and how to enforce a format.
Phone Number is a single-line box for a telephone number. The respondent sees a handset mark in the empty box.
It sits in the **Contact Info** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Phone Number adds the same four a text field has.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Length** and **Maximum Length**, counted in characters.
* **Validation Pattern**, a regular expression the answer has to match.
There is no phone-specific validation message, so **Validation Pattern** is how you insist on a format. If your process needs numbers in international form, ask for it in the **Description** and back it with a pattern.
## What it stores
Text, the number as the respondent typed it. HireData does not reformat it.
## Logic operators
| Operator | Matches when |
| ---------------- | ----------------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| starts with | the answer begins with the value |
| ends with | the answer ends with the value |
| contains | the value appears somewhere in the answer |
| does not contain | the value appears nowhere in the answer |
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card. A number is rarely worth evaluating, so most forms leave all three off here.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Email](/reference/forms/fields/email) and [Website](/reference/forms/fields/website) are the other two Contact Info fields.
* [How to use forms in WhatsApp conversations](/apps/messaging/whatsapp/how-to-use-forms-in-whatsapp-conversations) explains where the auto replies go.
# Redirect URL
Source: https://help.hiredata.com/reference/forms/fields/redirect-url
The Redirect URL ending in a HireData form. It sends the respondent straight to an address you set, such as a booking page, instead of showing a screen.
Redirect URL is an ending with no screen. The respondent reaches it and the browser sends them to the address you set. The builder preview says so plainly: "This field redirects the user automatically and won't have a display."
Use it to hand someone over to a booking page, a job board, or your own site once the form is done.
Like the other ending, it lives in the **Endings** group at the bottom of the **Content** tab's field list. It sits in the **Ending** group of the **Add Content** palette, and the button at the bottom left of the card switches it to an [Ending Screen](/reference/forms/fields/ending-screen).
## Settings
One, and it is the whole field.
* **Redirect URL**, up to 255 characters, the address to send the respondent to.
There is no title, no description, no image, and no button, because the respondent never sees the field. If you want them to read something before they go, use an [Ending Screen](/reference/forms/fields/ending-screen) with **Button** and **Redirect timer** on instead.
## What it stores
Nothing.
## Logic operators
None. An ending has no **Add Rule** button in the **Logic** tab. Point a rule on a question at this ending to send someone here.
## Evaluation
A Redirect URL carries no evaluator switches.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Ending Screen](/reference/forms/fields/ending-screen) is the other ending, with a screen and an optional button.
* [Logic](/reference/forms/logic) explains sending different respondents to different endings.
# Short Text and Long Text
Source: https://help.hiredata.com/reference/forms/fields/short-and-long-text
The free-text field in a HireData form. Short Text gives a one-line box, Long Text a taller one, and both accept length and pattern rules.
Short Text and Long Text are one field type with a switch between them. Short Text gives the respondent a single-line box. Long Text gives a taller box, which is what you want for a reason, an explanation, or anything you intend the AI evaluators to read.
Both sit in the **Text** group of the **Add Content** palette. The button at the bottom left of the card switches between them.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Short Text and Long Text add four of their own.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Length** and **Maximum Length**, counted in characters.
* **Validation Pattern**, a regular expression the answer has to match. The box shows `/^[a-zA-Z0-9 ]*$/` as an example.
The messages a respondent sees when an answer breaks one of these rules sit under **Validation** in [Languages and translations](/reference/forms/overview#localization), as **Min Text**, **Max Text**, and **Invalid Pattern**.
The same field switched to Long Text, with Criteria and Skills on:
## What it stores
Text, exactly as the respondent typed it.
## Logic operators
| Operator | Matches when |
| ---------------- | ----------------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| starts with | the answer begins with the value |
| ends with | the answer ends with the value |
| contains | the value appears somewhere in the answer |
| does not contain | the value appears nowhere in the answer |
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
Long Text is the field the AI has the most to work with, because the answer is prose rather than one value. It is the field to point **Skills** at, and the one where a **Criteria** check is worth handing to the AI instead of writing a rule.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Email](/reference/forms/fields/email), [Phone Number](/reference/forms/fields/phone-number), and [Website](/reference/forms/fields/website) are the same box with a format check on it.
* [Creating a form in HireData](/content/creating-a-form-in-hiredata) walks one form from blank to published.
# Time
Source: https://help.hiredata.com/reference/forms/fields/time
The time field in a HireData form. It gives the respondent a clock picker and can only be branched on with the has response operator.
Time gives the respondent a `--:-- --` box with a clock picker beside it. Use it for a time of day with no date attached, such as when someone would rather be called.
It sits in the **Temporal** group of the **Add Content** palette.
## Settings
Time adds nothing to the [settings every field shares](/reference/forms/overview#settings-every-field-shares). There is no earliest or latest time to set, and no way to offer a fixed set of slots. If you want the respondent to pick from a shortlist, use [Multiple Choice](/reference/forms/fields/multiple-choice-and-dropdown) instead and write the slots as options.
## What it stores
A date and time. All three temporal types share one value, and Time fills in the clock time.
## Logic operators
The operator picker is fixed at **has response** and cannot be changed. A rule can ask whether the respondent gave a time, not how early it is.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Date](/reference/forms/fields/date) and [Datetime](/reference/forms/fields/datetime) are the other two Temporal fields.
* [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) is the field to use for a fixed set of slots.
# Website
Source: https://help.hiredata.com/reference/forms/fields/website
The website field in a HireData form. It asks for a web address and takes the placeholder, length, and pattern settings a text field has.
Website is a single-line box for a web address, which is what most forms use to collect a LinkedIn or portfolio link.
It sits in the **Contact Info** group of the **Add Content** palette.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares). Website adds the same four a text field has.
* **Placeholder**, up to 255 characters, shown in the empty box.
* **Minimum Length** and **Maximum Length**, counted in characters.
* **Validation Pattern**, a regular expression the answer has to match, on top of the address check.
The message a respondent sees when the address is malformed sits under **Validation** in [Languages and translations](/reference/forms/overview#localization), as **Invalid URL**.
## What it stores
Text, the address as the respondent typed it.
## Logic operators
| Operator | Matches when |
| ---------------- | ----------------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer is exactly the value |
| is not equal to | the answer is anything else |
| starts with | the answer begins with the value |
| ends with | the answer ends with the value |
| contains | the value appears somewhere in the answer |
| does not contain | the value appears nowhere in the answer |
**contains** is the one to reach for. A rule reading `if website contains linkedin.com` separates a profile link from a personal site.
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card. The evaluators read the address as text and do not open it.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Email](/reference/forms/fields/email) and [Phone Number](/reference/forms/fields/phone-number) are the other two Contact Info fields.
* [Short Text and Long Text](/reference/forms/fields/short-and-long-text) is the same box with no format check.
# Yes/No
Source: https://help.hiredata.com/reference/forms/fields/yes-no
The yes or no field in a HireData form, drawn as a checkbox or a toggle, with a separate WhatsApp auto reply for the Yes and the No answer.
Yes/No asks a question with two answers. **Checkbox** draws a box the respondent ticks. **Toggle** draws a switch they slide. The two behave the same and store the same value, so pick whichever suits the question.
It sits in the **Choice** group of the **Add Content** palette. The button at the bottom left of the card switches between the two.
## Settings
The card carries the [settings every field shares](/reference/forms/overview#settings-every-field-shares), with one difference. Instead of the single **Auto reply (on answer)** most types have, Yes/No gives each answer its own WhatsApp message.
* **Auto reply (Yes)**, sent when the answer is Yes.
* **Auto reply (No)**, sent when the answer is No.
There is nothing else to set. You cannot relabel the two answers. If you need wording of your own, such as "Full licence" against "Provisional", use [Multiple Choice](/reference/forms/fields/multiple-choice-and-dropdown) with two options.
The same field switched to Toggle:
## What it stores
Yes or No.
## Logic operators
| Operator | Matches when |
| --------------- | -------------------------------------- |
| has response | the respondent answered at all |
| is equal to | the answer matches the one in the rule |
| is not equal to | the answer is the other one |
## Evaluation
Switch **Criteria**, **Scoring**, or **Skills** on for the form in the [Evaluation tab](/reference/forms/evaluation/overview) and each one gets a switch on this card.
Yes/No is the cleanest field to hang a **Criteria** must-have on, because the answer is one of two known values and needs no interpretation. "Do you have a driving licence?" is either met or not.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Logic](/reference/forms/logic) covers the operators, the branching patterns, and what to check when a rule does not fire.
* [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) handles two answers in your own words, or more than two.
* [Display and requirements](/reference/forms/overview#display-and-requirements) explains what counts as an answer.
# Logic
Source: https://help.hiredata.com/reference/forms/logic
Conditional logic in a HireData form: how a rule reads, which operators each field type offers, and what to check when a rule does not fire.
A form with no logic runs straight down the list. Everyone answers every question and everyone lands on the same ending. The **Logic** tab is where you change that. Each rule you write decides where one answer sends the respondent next.
Logic only moves people. It cannot reveal a question halfway through, and it cannot change an answer. To keep a question out of the form entirely, use **Hidden**. To switch one off for a single vacancy or candidate, see [Configuring a form per record](/content/configuring-a-form-per-record).
## Where the rules live
The **Logic** tab sits above the field list, between **Content** and **Evaluation**. Every question gets an **Add Rule** button and a footer target, and the rules you write belong to that question.
Endings sit below the **Endings** divider and get neither. Nothing follows an ending, so a rule on one would have nowhere to point.
## Anatomy of a rule
A rule reads `if then go to `.
* **if** starts the condition. The question picker offers this question and the ones above it, never a later one and never an ending, so a rule cannot read an answer nobody has given yet.
* The operator list comes from the question's type. See [Operators by field type](#operators).
* The value box holds whatever the operator compares against. **has response** compares nothing, so no box appears beside it.
* **Add Condition** puts a second condition in the same rule. The rule fires only when every condition matches. For alternatives, write a second rule instead.
* **then go to** picks the destination. Every field is offered except this one and anything set to **Hidden**, so a rule can send someone backwards as well as forwards.
* **Delete Rule** removes the rule and its conditions.
Under the rules sits the footer target, reading **All other cases go to** once the question has a rule and **Always go to** when it has none. A question can carry as many rules as it needs.
## How HireData picks the next field
Once a respondent answers a question, HireData reads that question's rules from top to bottom and follows the first one whose conditions all match. If none match, it follows the footer target. If there is no footer target, the respondent goes on to the next field in the list.
Order is what people get wrong. A broad rule above a narrow one always wins, so put the narrow rule first.
## Operators by field type
The type of the question in the condition decides the operators. Each field page explains what its operators match.
| Field types | Operators |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| [Short Text and Long Text](/reference/forms/fields/short-and-long-text), [Email](/reference/forms/fields/email), [Phone Number](/reference/forms/fields/phone-number), [Website](/reference/forms/fields/website) | has response, is equal to, is not equal to, starts with, ends with, contains, does not contain |
| [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) | has response, is equal to, is not equal to, is one of, is not one of |
| [Yes/No](/reference/forms/fields/yes-no) | has response, is equal to, is not equal to |
| [Number](/reference/forms/fields/number), [Currency](/reference/forms/fields/currency), [Net Promoter Score and Opinion Scale](/reference/forms/fields/net-promoter-score-and-opinion-scale) | has response, is equal to, is not equal to, is greater than, is less than, is greater than or equal to, is less than or equal to |
| [Date](/reference/forms/fields/date), [Time](/reference/forms/fields/time), [Datetime](/reference/forms/fields/datetime), [File Upload](/reference/forms/fields/file-upload) | has response |
| [Ending Screen](/reference/forms/fields/ending-screen), [Redirect URL](/reference/forms/fields/redirect-url) | no rules |
The fifth row is the one that catches people out. Date, Time, Datetime, and File Upload questions can only ask whether an answer arrived. Their operator picker is greyed out, because there is nothing else to choose, so you cannot branch on one date falling before another.
## Patterns
### Branch on a choice
The everyday case. One option leads somewhere the others do not.
Multiple Choice and Dropdown are the only types that offer **is one of**, and its value box takes several options at once. Three answers that all lead to the same follow-up are one rule, not three.
### Branch on a Yes/No
Same shape, two answers. The value box offers Yes and No.
### Ask a follow-up only when the last question was answered
**has response** is the operator for optional questions. It matches whatever the answer was, so long as there is one.
### Require two answers at once
**Add Condition** puts both conditions in one rule, and both have to match.
A question the respondent never reached has no answer, so a condition reading it cannot match and the whole rule stays quiet.
### Send different respondents to different endings
Point the rule at one ending and the footer target at another.
### Skip a block of questions
A question with no rules can still jump. Set **Always go to** and everyone who answers it lands on the same later question, whatever they said.
## Required questions and logic
A required question has to be answered before the respondent can move on, which means its rules only run once there is an answer to test.
## When a rule does not fire
Work down this list when a rule does nothing, or sends people somewhere you did not intend.
* **A rule above it matched first.** HireData stops at the first match. Move the narrow rule above the broad one.
* **The rule needed every condition.** All the conditions in one rule have to match. Split them into two rules to get either-or.
* **The condition reads a question the respondent skipped.** A jump that steps over a question leaves it unanswered, so any later condition on it fails and the footer target applies.
* **The question is required and the answer was No, off, or 0.** See the warning above.
* **The rule fired and sent them backwards.** A target can be a question the respondent has already passed, and nothing stops them going round the same questions twice. Try any backwards jump in **Interactive Preview** before you publish.
* **You wrote the rule on the wrong question.** Rules live on the question being answered, not on the destination.
[Interactive Preview](/reference/forms/testing/previews) in the right-hand panel runs the same logic the published form runs, so it is the fastest way to check a route. [Test & Evaluate](/reference/forms/testing/test-and-evaluate) fills in a whole response at once, which is better for checking the evaluators than the branching.
## Related
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
* [Objects](/reference/forms/objects) and [Data sources](/reference/forms/data-sources) cover the records and lists a form can draw on.
* [Creating a form in HireData](/content/creating-a-form-in-hiredata) walks one form from blank to published.
# Objects
Source: https://help.hiredata.com/reference/forms/objects
Linking records such as a vacancy or a match to a HireData form, the settings each link carries, and why the first object decides which records it serves.
An object is a type of record a connected app syncs into HireData, such as a vacancy, a candidate, or a match. Linking one to a form tells the form which record it is about, which is what turns a generic questionnaire into one that names the role the candidate applied for.
## Open the panel
The third of the five drawer buttons in the toolbar opens **Objects**.
The panel lists the objects already linked to this form, then **Available objects** with everything else the workspace can offer. The **+** on a row links it. **Search objects** filters a long list.
## What linking an object gives you
Every field on the linked record becomes a variable. You can write it into any text setting the form has, including the question, the description, a placeholder, and an option label, so a question can open with the job title rather than "this role".
The variable list in the toolbar shows them all. Each one is named after the object's label and addressed by its key.
For the syntax, see [Variables](/variables/introduction).
The link also ties the responses to the record. A collection of that type gets a **Forms** tab listing the forms linked to it, and every record gets a **Responses** tab holding what came back. See [Configuring a form per record](/content/configuring-a-form-per-record).
## Settings per object
Click a linked object to open it.
* **Label** names the object in the variable list, which is where "Vacancy: Job Title" comes from. Change it whenever you like.
* **Key** is the first part of the variable itself, as in `{{job.jobTitle}}`. HireData sets the key when you link the object and locks it afterwards, so pick the object you want rather than planning to rename it later.
* **Required** decides what happens when nothing supplies a record. See [What Required does](#required).
* **Remove** unlinks the object. Its variables stop resolving, so check every question that used one.
* The up and down arrows move the object through the list. Which object sits at the top changes what the form can do, so read [The first object decides the configuration](#first-object) before you use them.
## The first object decides the configuration
The object at the top of the list is the form's main object, and it decides which records you can configure the form for. Put Vacancy first and you can switch questions on and off per vacancy. Objects below it still supply their variables and still tie the response to their record, but you cannot configure the form against them.
Reordering the list therefore changes more than the panel. Read [Configuring a form per record](/content/configuring-a-form-per-record) before you move the top object on a form that is already in use.
## What Required does
**Required** matters when an automation sends the form. If the run has no record for a required object, the task fails and nothing goes out, which is better than sending a form whose questions have gaps where the job title should be.
The form's own page is more forgiving. Open a public form with nothing supplying the record and it still loads. Every variable from that object resolves to nothing.
Turn **Required** off for an object that only adds context, such as a match the form can do without.
## Related
* [Data sources](/reference/forms/data-sources) fills a question's options from a saved list.
* [Configuring a form per record](/content/configuring-a-form-per-record) switches questions on and off per vacancy.
* [Variables](/variables/introduction) covers the syntax for writing a variable into a question.
* [Form builder overview](/reference/forms/overview) covers the builder, the shared settings, and every field type.
# Form builder overview
Source: https://help.hiredata.com/reference/forms/overview
A tour of the HireData form builder: the Content, Logic, and Evaluation tabs, the toolbar drawers, every field type, and the settings every field shares.
A form is a set of questions someone answers on the web or in a WhatsApp conversation. Open the **Forms** page from **Settings** and click **New Form**. Pick **Blank Form** or one of the [templates](#templates), and the new form opens in the builder.
This page maps the builder. For a walkthrough that takes one form from blank to published, read [Creating a form in HireData](/content/creating-a-form-in-hiredata).
## The builder at a glance
The builder has three parts.
The left column lists the form's fields in the order a respondent meets them. Above the list sit the **Content**, **Logic**, and **Evaluation** tabs, and the **+** button that opens the **Add Content** palette.
The right column previews the form, with its own **Interactive Preview**, **Conversational Preview**, and **Test & Evaluate** tabs.
The bar across the top holds the form name and the toolbar.
### Content tab
The **Content** tab holds the fields and their settings. Click a field to open its card, and drag it by the handle on the left to change the order.
The **+** button opens the **Add Content** palette. It groups the entries by category and repeats the most used ones under **Recommended**. **Find a field type** searches the list.
### Logic tab
The **Logic** tab decides where a respondent goes next. Every question gets an **Add Rule** button and a footer target, and a rule reads `if then go to `.
See [Logic](/reference/forms/logic) for the operators each field type offers, the branching patterns worth copying, and what to check when a rule does not fire.
### Evaluation tab
The **Evaluation** tab turns a finished response into something a recruiter can act on. It holds five evaluators, each with a switch: **Summary**, **Criteria**, **Scoring**, **Skills**, and **Generated fields**.
Switch one on here and, for the three that work question by question, it also gets a switch on every field card, so you can configure it without leaving the **Content** tab.
See [Evaluation](/reference/forms/evaluation/overview) for what each evaluator decides, what it hands back, and the order you have to switch them on in.
### Preview panel
**Interactive Preview** walks the web form, running the same logic the public form runs. **Conversational Preview** shows the chat version. **Test & Evaluate** fills in a whole response and runs the evaluators over it.
See [Previews](/reference/forms/testing/previews) and [Test & Evaluate](/reference/forms/testing/test-and-evaluate).
## The toolbar
The toolbar runs along the top right of the builder, from **Save** to the three-dot menu.
**Save** stores your changes. The eye button next to it saves the form and opens it in a [preview window](/reference/forms/testing/previews#the-preview-window) over the builder.
**Publish** makes the form available to respondents. It reads **Withdraw** once the form is published.
**Brand** picks the brand the form's colours come from, and **Reset to default** returns the form to your account's brand.
Five buttons to the right open drawers over the preview:
* **Show variable list** lists the variables the form can use, each with its type and current value, and a **Search** box to filter them. See [Variables](/variables/introduction).
* **Manage Template** publishes the open form to the shared template library. It appears only for accounts that maintain that library, so most workspaces never see it. See [Templates](#templates).
* **Show objects** links records such as a vacancy or a match to the form. See [Objects](/reference/forms/objects).
* **Manage Languages** sets the form's default language and its translations. See [Languages and translations](#localization).
* **Settings** holds the theme and the public toggle. See [Theme and publishing](#theme-and-publishing).
The three-dot menu at the end offers **Preview**, **Duplicate**, **Publish**, **Archive**, **Export CSV**, **Export Excel**, and **Delete**.
## Choosing a field type
The palette shows more entries than there are field types. Short Text and Long Text, Multiple Choice and Dropdown, and Net Promoter Score and Opinion Scale are each one type with two settings, switched in the field card's footer.
Every row below has a page of its own, covering that type's settings, what it stores, the operators logic offers for it, and what the AI evaluators can do with it.
| Field type | Group | Stores |
| ---------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------- |
| [Short Text and Long Text](/reference/forms/fields/short-and-long-text) | Text | text |
| [Email](/reference/forms/fields/email) | Contact Info | text |
| [Phone Number](/reference/forms/fields/phone-number) | Contact Info | text |
| [Website](/reference/forms/fields/website) | Contact Info | text |
| [Date](/reference/forms/fields/date) | Temporal | a date and time |
| [Time](/reference/forms/fields/time) | Temporal | a date and time |
| [Datetime](/reference/forms/fields/datetime) | Temporal | a date and time |
| [Yes/No](/reference/forms/fields/yes-no) | Choice | Yes or No |
| [Multiple Choice and Dropdown](/reference/forms/fields/multiple-choice-and-dropdown) | Choice | the chosen options |
| [Number](/reference/forms/fields/number) | Numeric | a number |
| [Currency](/reference/forms/fields/currency) | Numeric | a number |
| [Net Promoter Score and Opinion Scale](/reference/forms/fields/net-promoter-score-and-opinion-scale) | Rating | a point on the scale, 0 to 10 for Net Promoter Score |
| [File Upload](/reference/forms/fields/file-upload) | Other | the uploaded files |
| [Ending Screen](/reference/forms/fields/ending-screen) | Ending | nothing |
| [Redirect URL](/reference/forms/fields/redirect-url) | Ending | nothing |
The type also decides which operators a rule can use on that question. [Logic](/reference/forms/logic#operators) has the full table.
Every field type except the two endings can feed the AI evaluators: Criteria, Scoring, and Skills. See [Evaluation](/reference/forms/evaluation/overview).
A few more field types exist than the palette offers: Range, Color, and the Star, Thumbs, Emoji, and Slider variants of a rating. Only an integration such as the HireData API can add them. If one turns up in a form you did not build, it works, but the builder has no settings card for it.
## Settings every field shares
Click a field to open its card. The settings every field shares sit at the top and bottom, with the type's own settings in between.
* **Question**, up to 255 characters. Ending screens call this **Title**.
* **Description**, up to 1024 characters, shown under the question.
* **Image**, with a placement selector that defaults to **Above the Input Field**. The other placements are **Left Side of Field**, **Right Side of Field**, **Right Half of the Page**, **Left Half of the Page**, and **Background**.
* A **Criteria**, **Scoring**, and **Skills** switch, one for each evaluator you turned on for the form.
* A footer holding the button that opens [Display & requirements](#display-and-requirements), and the type switch for the types that come in two flavours: Short Text and Long Text, Yes/No's Checkbox and Toggle, Multiple Choice and Dropdown, Net Promoter Score and Opinion Scale.
Two more settings appear on most, but not all, field types. Both are messages for forms answered in a WhatsApp conversation:
* **Auto reply (on answer)** is sent as soon as the respondent answers the question. Yes/No replaces it with a reply per answer, and Multiple Choice and Dropdown move it onto each option.
* **Auto reply (on invalid answer)** appears once **Required** is on. The builder describes it as the message sent when a required question is answered incorrectly.
Text settings such as **Question**, **Description**, and the placeholders accept variables, so a question can address the respondent by name or mention the vacancy. Some variables only become available after you link their object to the form, see [Objects and data sources](#objects-and-data-sources). For the syntax, see [Variables](/variables/introduction).
Redirect URL has none of this. It is a single field for the address.
## Display and requirements
The button at the bottom right of a field card opens **Display & requirements**. Its label tells you the current state of the field: **Optional**, **Required**, **Hidden**, or **Always included**.
**Hidden**, "Hide this field from respondents."
A hidden field is skipped as the respondent moves through the form, and logic rules cannot jump to it. Its stored answer stays available to automations, which is how you carry a value such as a reference or an ID through a form without asking for it.
**Required**, "Require respondents to answer this field."
An asterisk appears on the question label, and the respondent cannot continue until the field has an answer.
**Always include**, "Prevent configurations from disabling this field. This will make the field required."
Turning it on turns **Required** on too. Nobody can then switch the field off for an individual record, so the form serves it every time. Use it for the questions your process cannot do without. See [Configuring a form per record](/content/configuring-a-form-per-record).
Turning **Hidden** on clears **Required** and **Always include** and locks both. A field the respondent never sees cannot be answered, so it cannot be required either.
### What counts as an answer
An empty text box, an empty number box, no option chosen, and no file attached all count as no answer. The web form then shows a message under the question, such as "This field is required and cannot be empty."
In a conversational form, **Auto reply (on invalid answer)** is the message sent back when a required field receives no usable answer.
## Objects and data sources
**Show objects** in the toolbar links records to the form. Link a vacancy and its fields become variables you can write into any question, and the object at the top of the list decides which records you can configure the form for. See [Objects](/reference/forms/objects).
**Add Data Source** on a Multiple Choice or Dropdown field fills its options from a list your workspace already keeps, instead of options you type. The list belongs to the workspace, so editing it changes every question that uses it. See [Data sources](/reference/forms/data-sources).
## Theme and publishing
The **Settings** drawer controls how the form looks and who can reach it.
The drawer opens with **Make form public**, "Public forms can be anonymously answered by anyone with the form's URL." Leave it off and the form only opens for a respondent you sent it to. The theme settings follow:
* **Logo**, the image at the top of the form. It starts as your brand logo, and the cross next to the label removes it.
* **Alignment**, which puts the question text and inputs on the left, in the centre, or on the right.
* **Font Family**, the typeface the form uses.
* **Text Color**, the colour of the form's text.
* **Scale**, which sizes the text and inputs: **Default**, **Large**, or **Extra Large**.
* **Input**, a section holding the answer boxes' **Variant** (**Solid**, **Soft**, or **Outline**), **Color**, **Background Color**, **Button Color**, and **Button Text Color**.
* **Background**, a section holding a **Background Image** and a background **Color**.
* **Button Text**, the label on the button that moves the respondent on. It reads "Ok" until you change it.
* **Border radius**, offering **None**, **Normal**, **Large**, and **Custom**.
Every colour starts as a value from the selected brand, shown as a name such as "Theme: Palette Background Text Color". Change one and it applies to this form only, so a form matches your brand until you decide it should not.
## Languages and translations
**Manage Languages** in the toolbar sets the form's **Default language** and lists its translations. The default language is the one you wrote the questions in.
Click **New Translation** to add one. Pick the **Language**, then either translate by hand or click **Create AI translation**, which fills the whole form for you.
A translation covers three groups:
* **Settings**, the form **Name**, the **Button text**, the **Powered by** line, and the **Upload title** and **Upload description** of a file upload.
* **Fields**, every field in the form. Each one holds its **Question** and **Description**, plus whatever text its type adds, such as a rating's **Min Label** and **Max Label**, a choice field's **Conversational button text**, and its options with their auto replies.
* **Validation**, the messages a respondent sees when an answer does not pass, such as **Field Is Required**, **Invalid Email**, and **Max Number**.
Each entry shows the source text above an empty box. Leave a box empty and the form falls back to the default language for that string.
Respondents switch language with the picker at the top of the form. To set the language your workspace writes in, see [Setting a default language and AI tone of voice](/settings/setting-a-default-language-and-ai-tone-of-voice).
## Templates
Click **New Form** and a gallery opens with **Blank Form** as the first card. The rest are ready-made recruitment forms such as **Job Application (Pre-Intake)**, **Intake**, **Rejection**, and **Net Promoter Score (NPS)**, each with a description of what it asks and a tag for the record it suits. The **Candidate** and **Contact** chips at the top filter the gallery.
Picking a template copies its fields into a new form, and everything in the copy is yours to change.
If your account maintains the shared template library, the **Manage Template** button in the toolbar turns the open form into a template. **Configure Template** asks for a **Title**, a **Description**, and **Tags**, offers to write all three with AI, and puts the template in the gallery when you click **Enable**. **Feature Template** promotes it to the top.
# Previews
Source: https://help.hiredata.com/reference/forms/testing/previews
Try a HireData form before you publish it: the web preview, the WhatsApp chat preview, and the preview window behind the eye button.
The right-hand panel of the builder is a working copy of the form. Two of its tabs run the form the way a respondent meets it, and the third runs the evaluators over a response you make up. This page covers the first two. For the third, see [Test & Evaluate](/reference/forms/testing/test-and-evaluate).
## Interactive Preview
**Interactive Preview** is the web form, with your theme, your logo, and the questions in the order the [logic](/reference/forms/logic) decides. Answer a question and click **Next** and you land where a respondent would land, which makes it the fastest way to check a route.
* The language picker at the top right starts on the form's default language and lists its [translations](/reference/forms/overview#localization).
* The arrows at the bottom move between questions without answering them, along the route the logic would take rather than down the field list.
* Clicking a question in the **Content** tab jumps the preview to that question, so the card you are editing is the one you are looking at.
Nothing you do here creates a response. Answers you type in the preview are thrown away.
## Conversational Preview
**Conversational Preview** is the same form as a WhatsApp conversation. It starts on a short setup screen.
* The language picker sets the language the conversation runs in.
* **Objects** holds test values for the records the form links, so a question that greets someone by name has a name to use. It only appears on a form with linked [objects](/reference/forms/objects).
* **Optional first message** is what the tester says before the form starts. The sparkle button writes one for you.
* **Start Testing** opens the conversation.
Once it starts, the form messages you one question at a time, with a button where the web form would show a list or a scale.
**Suggest reply** writes a plausible answer into the composer as the tester, which is quicker than inventing answers yourself and good enough to exercise the branching. **Restart** clears the conversation and takes you back to the setup screen.
This is the preview to use before sending a form over WhatsApp. It is where you find out that a question reads oddly as a chat message, or that the [auto replies](/reference/forms/overview#settings-every-field-shares) fire in the wrong place.
## The preview window
The eye button next to **Save** in the toolbar is the other way to open the form. It saves the form first, then opens the preview in a window over the builder.
The window loads the form's own preview address, so it renders exactly as a respondent's browser would rather than inside the builder's layout. Across the top sit a copy button for the preview link, a **mobile**, **tablet**, and **desktop** switcher, a refresh button, and the language picker.
Use it for two things the builder panel cannot do: checking the form at phone width, and sending the link to a colleague. Submissions at the preview address are not stored either, so a colleague can walk the whole form without leaving a response behind.
A form configured for a record has a third preview. Open the record, click **Preview**, and the form renders with that record's values filled in. See [Configuring a form per record](/content/configuring-a-form-per-record).
## Related
* [Test & Evaluate](/reference/forms/testing/test-and-evaluate) fills a whole response and runs the evaluators over it.
* [Logic](/reference/forms/logic) covers the rules the previews run, and what to check when one does not fire.
* [Form builder overview](/reference/forms/overview) covers the builder, the toolbar, and the theme.
# Test & Evaluate
Source: https://help.hiredata.com/reference/forms/testing/test-and-evaluate
Fill a whole HireData form response, let AI invent one for you, and read the verdict, score, skills, summary, and generated fields it produces.
**Test & Evaluate** is the third tab of the preview panel, and the fastest way to see what the [evaluators](/reference/forms/evaluation/overview) actually do. You give it a response, it runs Criteria, Scoring, Skills, Summary, and Generated fields over it, and shows every result next to the answer that produced it.
Use it whenever you change an evaluator. A rule that looks right on the card is often wrong the first time it meets an answer.
## Filling in the answers
The tab lists every question except the endings, as a compact input. Badges after the question label say what the evaluators will do with it: **Must** or **Nice** from [Criteria](/reference/forms/evaluation/criteria), and one badge per skill the question feeds.
Type the answers yourself, or let the AI write them. **Autofill with AI** fills every question in one go, and the chevron beside it picks the kind of respondent to imitate.
* **Random answers** is plausible but uninformed. Good for a first look.
* **Ideal candidate** answers the way someone who meets every criterion would.
* **Borderline candidate** aims at the middle, which is where a scoring mistake shows.
* **Unqualified candidate** should come back rejected. If it does not, a must-have is not doing its job.
* **Partially completed** leaves questions unanswered, which is how you check an **Incomplete** verdict.
The scenarios are not generic. The autofill sends your questions and your evaluation rules to the model, so "ideal" means ideal for this form's criteria, and "unqualified" is aimed at failing them.
The evaluation runs on its own as soon as there is an answer, and again a moment after you change one. There is no button to click. **Reset answers** at the bottom clears everything.
Running an evaluation saves the form first. Any unsaved change in the builder is committed the moment the evaluation runs, so do not use this tab to look at a change you were still deciding about.
## Reading the results
The results appear under the answers, starting with one panel per evaluator you switched on. Each panel shows the headline result, and clicking one opens its detail underneath.
**Criteria** groups the questions under **Must-have** and **Nice-to-have**, with a tick or a cross, the answer, and the expected answer where you wrote one. A question judged by AI carries an AI chip and the model's one-line reasoning, which is the fastest way to see whether your note landed.
**Scoring** shows the percentage, the points tally, and what each question earned out of its own maximum.
**Skills** shows a bar per skill. **Summary** and **Generated fields** sit below the panels, so they stay in view whichever detail you have open.
A grey **No result yet** is what the panels show before you enter an answer. If one stays grey after a run, that evaluator had nothing to work with. The usual cause is a question switched on with no rules written, which leaves the evaluator with no question to judge.
## Automation variables
**Automation variables** at the bottom lists every value this response makes available to an automation, with the variable to copy and the result from the run in front of you.
This is the list to build an automation against. Reading `passed` next to `{{form_response.evaluation.screening}}` tells you the exact value to compare, which guessing does not. See [Variables](/variables/introduction).
## What it does not do
A run here creates no response. The form's results are untouched, the response count does not move, and nothing reaches an automation. The evaluation is real, the response is not.
If none of Criteria, Scoring, and Skills is on for the form, the tab shows an **Enable Criteria**, **Enable Scoring**, and **Enable Skills** button in place of the result panels. Each one switches that evaluator on for the form without leaving the tab. See the [Evaluation tab](/reference/forms/evaluation/overview) for what to configure next.
## Related
* [Form evaluation overview](/reference/forms/evaluation/overview) covers the five evaluators and the order you switch them on in.
* [Previews](/reference/forms/testing/previews) run the form itself, as a web page or as a chat.
* [Screen and score applicants with a pre-screening form](/knowledge-base/cookbook/pre-screening-form) uses this tab to check a form end to end.
# AI variables
Source: https://help.hiredata.com/variables/ai-variables
Generate a per-recipient line inside HireData emails, forms, and automations with AI variables, and learn when a normal variable or modifier fits better.
A normal variable **looks up** a value. An AI variable **works one out**.
Where `{{ candidate.first_name }}` reads a field and drops it in, an AI variable runs a short instruction against the record and inserts what it produces. It is the tool for the line that has to be different every time: an opener that ties someone's background to a vacancy, or a birthday wish that does not read like a mail merge.
You use it exactly like any other variable:
```text theme={null}
{{ celebration }}
We hope you take some time today to celebrate.
```
In the editor it appears as a chip, marked with the AI sparkle so you can tell it apart from a normal variable at a glance:
## Where you can add one
You can create AI variables in **email templates**, **forms**, and **automations**. The automation builder also offers presets, so a variable you use often does not have to be rebuilt by hand.
WhatsApp message templates can *reference* variables, but the variable list there is read-only. You cannot create an AI variable from the message builder. Define it on the automation that sends the message instead.
## When to use one
Reach for an AI variable when all three are true:
* the output has to be **derived**, not looked up;
* a fixed line with a fallback would read badly, because the value genuinely has to change per person;
* being slightly off is survivable; nobody makes a decision based on it.
Good candidates: a personalised opener, a re-engagement hook for a dormant candidate, a non-generic birthday line, or a tone rewrite of a fixed paragraph.
## When to use something else
Most personalisation is not an AI problem. Before adding an AI variable, check whether a plain variable or a [modifier](/variables/modifiers) already does the job. They are faster, cheaper, and cannot be wrong.
| You want | Use this instead |
| ------------------------------------------------ | ------------------------------------------------------- |
| A name, title, date, salary, or any stored value | A normal variable |
| A date formatted for the recipient's locale | `format_date` |
| A default when a field is empty | The [`default`](/variables/modifiers#fallback) modifier |
| Consistent casing or currency | `uppercase`, `format_currency` |
Never let an AI variable invent a fact. Dates, rates, salaries, contract terms, start dates, legal or GDPR status, and anything that reads as a commitment must come from a field. If the field is empty, the honest answer is to leave it out or use a fallback, not to let a model fill the gap. A generated sentence that invents a start date is a false statement sent to a candidate in your name.
## Setting one up
Open the variables panel with the `{}` control in the builder toolbar. Existing variables are listed with their key and type, so an AI one is easy to spot:
Choose **Add**, then pick **AI variable** from the **Intelligent** group:
### Choosing what the AI should do
Before anything else, the editor asks what kind of job this variable is doing. There are seven modes, each shown as a tile with a one-line description:
| Mode | What it is for |
| ----------- | ---------------------------------------------------- |
| `Custom` | Write your own prompt from scratch |
| `Extract` | Pull structured data out of text or documents |
| `Summarize` | Condense long content into key points |
| `Classify` | Categorize content into predefined groups |
| `Write` | Generate or rewrite content in a chosen tone |
| `Translate` | Convert text from one language to another |
| `Analyze` | Examine content for insights, sentiment, or patterns |
The mode is not locked in. Once you pick one, the tiles collapse into a compact dropdown, and you can change it whenever you like. Reopen the variable and choose a different mode under **What should the AI do?**. The rest of the form adjusts to match.
### The rest of the editor
| Field | What it does |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name** | The human label, shown on the variable chip in your content. |
| **What should the AI do?** | The mode you chose, now as a dropdown. Change it here at any time. |
| **What will you provide to the AI?** | Two tabs. **Input** is a free-text prompt. **Variables** attaches specific fields with **Add Field**. See [Giving it something to work from](#giving-it-something-to-work-from). |
| **Hints for the AI** (optional) | Extra context, tone, or constraints, kept separate from the main instruction. |
| **What should the AI return?** | The output type: `Text`, `Rich text`, `Number`, `Yes / No`, `List`, `Date`, and the rest of the standard field types. |
| **Language** | The output language. The default, `None — match the input language`, follows the data it is given. |
| **More options** | **Reference as** is the key you type in content: `celebration` becomes `{{celebration}}`. **What is it for?** is an optional description. |
An AI variable does not have to produce prose. Because you choose the return type, one can just as well resolve to a `Yes / No`, a `Number`, or a value from a `List`, which is what the `Classify` and `Extract` modes are for. The [warning above](#when-to-use-something-else) still applies: deriving a value from data in the record is fine, inventing one is not.
## Giving it something to work from
The instruction alone is rarely enough. The model needs the record. There are two ways to hand it over, and they can be combined.
### Inline in the prompt
Type `{{` anywhere in the **Input** box and a picker appears, listing every variable available to this template with its key and its type. Keep typing to filter, then choose one to insert it:
So a birthday wish that greets the recipient by name reads:
```text wrap theme={null}
Write a friendly, single-sentence birthday wish, maximum 20 words, for {{recipient.first_name}}. Vary the wording so it does not sound templated. No emoji. Do not open with "Happy birthday". If the name is missing, write a general wish with no name.
```
Each token is replaced with that recipient's value before the instruction reaches the model, so for Sofia the model is asked for a wish *for Sofia* rather than for `{{recipient.first_name}}`.
### The Variables tab
Switch to the **Variables** tab and choose **Add Field** to attach fields instead of naming them in the prompt. Each row is a searchable picker over the same list of variables, and the `−` button removes one.
Attaching a field hands its value to the model without you having to mention it in the instruction. It also makes the variable's inputs obvious to whoever opens it next, which is worth doing once the prompt gets long.
### Why the inputs matter
The fields you reference, by either method, are the variable's **inputs**, and inputs are what decide when it is worked out again. Give it the fields it genuinely depends on rather than describing them in prose. See [Limitations](#limitations).
## Writing the instruction
A usable instruction names its shape and its limits. Let the dedicated controls do the work they are there for: set the output language in the **Language** control rather than describing it in the prompt, and set the return type rather than asking for one:
> Write a friendly, single-sentence birthday wish, maximum 20 words. Vary the wording so it does not sound templated. No emoji. Do not open with "Happy birthday". If the recipient's name is missing, write a general wish with no name.
That last sentence matters most. Say what to do when the data is missing, or the model will invent something to fill the space.
**Longer instructions are not better instructions.** Constraints do more work than description. State the maximum length, the tone, what it must not do, and what to produce when the source data is thin.
## Limitations
**It resolves once per send, then repeats.** The value is generated the first time the variable is referenced and reused for every other mention in the same message, so `{{ celebration }}` twice in one email gives you the same sentence twice, not two attempts. It is worked out again when its inputs change, which is what makes it per-recipient. A variable with no inputs attached has nothing to vary on.
**A stored default is not a safety net.** For an AI variable, the default value is the slot the generated value is written into, not a fallback you can set. If the model returns nothing, the variable resolves to nothing. To guarantee something lands on the page, use the [`default`](/variables/modifiers#fallback) modifier where you reference it:
```text theme={null}
{{ celebration | default: "We hope you have a lovely day." }}
```
**A valid template can still send with a hole in it.** Validation checks that a placeholder is *known*, not that it will have a value when the message goes out. So this template:
```text theme={null}
{{ celebration }}
We hope you take some time today to celebrate.
```
can validate perfectly and still arrive as an email that opens with a blank line, followed by "We hope you take some time today to celebrate." The template is not broken. The variable produced nothing.
**Test sends behave differently from real ones.** On a test send, every custom variable referenced in the body needs an explicit, non-empty value that you supply. Stored values are deliberately not substituted. A clean test therefore proves the copy works; it does not prove the variable will resolve in production.
If a recipient reports a message with a missing sentence, an empty greeting, or a stray fragment, check which variables are AI variables before assuming the copy is wrong.
## Before you send
Confirm the value reads well and stays inside your length limit.
This is where AI variables fail. Check that a thin record produces something acceptable rather than a hallucinated detail or an empty line.
Tone and formality do not transfer between languages. A line that reads warm in English can read overfamiliar in Dutch.
Ask whether a candidate would be embarrassed, confused, or misled by this sentence. If the answer is maybe, tighten the constraints or use a fixed line.
## Related
* [Variables](/variables/introduction) — the basics and where variables work
* [Modifiers](/variables/modifiers) — deterministic formatting, defaults, and casing
* [Setting a default language and AI tone of voice](/settings/setting-a-default-language-and-ai-tone-of-voice)
* [Why didn't my automation run?](/knowledge-base/why-didnt-my-automation-run)
# Variables
Source: https://help.hiredata.com/variables/introduction
Use HireData variables to personalise emails, WhatsApp messages, forms, and automations with candidate data pulled straight from your connected apps.
With variables you can drop live data, like a candidate's name, a job title, or a salary, straight into your emails, WhatsApp messages, forms, and automations.
## What a variable looks like
A variable is a field key wrapped in double curly braces:
```text theme={null}
Hi {{ candidate.first_name }}, thanks for applying to {{ job.title }}!
```
When this is sent to a candidate named Sofia applying for a Backend Engineer role, it becomes:
```text theme={null}
Hi Sofia, thanks for applying to Backend Engineer!
```
The spaces inside the braces are optional:
* `{{candidate.first_name}}` and `{{ candidate.first_name }}` behave the same.
## Where you can use variables
You can use variables anywhere you write content that gets sent or stored:
* **Email** — subjects and bodies
* **WhatsApp** — messages and templates
* **Forms** — questions and follow-up logic
* **Automations** — field mappings and scheduled tasks
## Providing a fallback
If a field is empty for a particular record, the variable is replaced with nothing. To show a default instead, use the [`default`](/variables/modifiers#fallback) modifier:
```text theme={null}
Hi {{ candidate.first_name | default: "there" }}!
```
If the candidate has no first name, this sends "Hi there!".
## Transforming values with modifiers
Variables can do more than insert raw data. A **modifier** changes how the value appears. It can uppercase text, format a date, round a number, and much more. You add a modifier with a pipe (`|`):
```text theme={null}
{{ candidate.first_name | uppercase }} → SOFIA
{{ job.salary | format_currency: "EUR" }} → €65,000.00
{{ application.created_at | format_date: "d M Y" }} → 14 Mar 2026
```
You can chain several modifiers, and each one acts on the result of the previous:
```text theme={null}
{{ candidate.last_name | lowercase | capitalise }}
```
See the full list on the [Modifiers](/variables/modifiers) page.
## Generating a value instead of looking one up
Every variable above **reads** a value that already exists. When the value has to be worked out fresh for each recipient — a personal opener, a non-generic birthday line — use an [AI variable](/variables/ai-variables) instead.
Never let one invent a fact. Dates, salaries, and contract terms belong in a normal variable.
# Modifiers
Source: https://help.hiredata.com/variables/modifiers
Use HireData modifiers to transform variable values inside automations: change case, format dates and numbers, build conditions, and clean up candidate data.
Modifiers change how a [variable](/variables/introduction) value appears when your content is sent. Add one with a pipe (`|`) after the field.
## How modifiers work
A modifier goes after the field, separated by a pipe:
```text theme={null}
{{ candidate.first_name | uppercase }} → SOFIA
```
Add more pipes to apply modifiers in order, from left to right:
```text theme={null}
{{ candidate.first_name | lowercase | capitalise }} → sofia → Sofia
```
Some modifiers take extra values after a colon, separated by commas:
```text theme={null}
{{ job.title | truncate_chars: 20 }} → Senior Software Engin...
{{ description | replace: "old", "new" }} → This is my new job
```
Arguments can be:
* **Text** — wrap it in quotes: `"EUR"`, `"there"`
* **Numbers** — write them plainly: `20`, `2`
* **Another field** — reference it by key: `highlight: candidate.first_name`
Many modifiers have shorter aliases. For example, `upper` works the same as
`uppercase`, and `gt` the same as `greater_than`. Aliases are shown in
brackets in the tables below.
## Fallback
| Modifier | What it does | Example |
| ---------------- | ------------------------------------------------ | ------------------------------------------ |
| `default: value` | Shows `value` when the field is empty or missing | `{{ name \| default: "there" }}` → `there` |
## Text
| Modifier | What it does | Example |
| ------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- |
| `uppercase` (`upper`) | Uppercases the text | `sofia` → `SOFIA` |
| `lowercase` (`lower`) | Lowercases the text | `SOFIA` → `sofia` |
| `capitalise` | Capitalises every word | `john doe` → `John Doe` |
| `title_case` | Capitalises the first word only | `john doe` → `John doe` |
| `camel_case` | Formats as camelCase | `john doe` → `johnDoe` |
| `pascal_case` | Formats as PascalCase | `john doe` → `JohnDoe` |
| `snake_case` | Joins the words with underscores | `john doe` → `john_doe` |
| `kebab_case` | Joins the words with hyphens | `john doe` → `john-doe` |
| `dot_case` | Joins the words with dots | `john doe` → `john.doe` |
| `slug` | Makes a web-friendly version for links | `John Doe!` → `john-doe` |
| `initials` | Takes the initials | `John Doe` → `JD` |
| `trim` | Removes spaces from both ends | ` hi ` → `hi` |
| `trim_start` | Removes leading spaces | ` hi` → `hi` |
| `trim_end` | Removes trailing spaces | `hi ` → `hi` |
| `append: text` | Adds text to the end | `Doe` + `append: "!"` → `Doe!` |
| `prepend: text` | Adds text to the start | `Doe` + `prepend: "Mr "` → `Mr Doe` |
| `concat: a, b, …` (`combine`) | Joins the value with one or more texts or fields | `first \| concat: " ", last` → `John Doe` |
| `replace: find, with` | Replaces all matches | `replace: "o", "0"` on `john` → `j0hn` |
| `replace_first: find, with` | Replaces the first match | `j0hn doe` |
| `replace_last: find, with` | Replaces the last match | `john d0e` |
| `remove: text` | Removes all matches | `remove: " "` on `john doe` → `johndoe` |
| `remove_first: text` | Removes the first match | |
| `remove_last: text` | Removes the last match | |
| `truncate_chars: length` | Shortens to a number of characters, adding `…` | `truncate_chars: 5` on `Engineering` → `Engin...` |
| `truncate_words: count` | Shortens to a number of words, adding `…` | `truncate_words: 2` on `one two three` → `one two...` |
| `excerpt: phrase` | Shows a snippet around a matching phrase | |
| `substring: start, length` (`substr`) | Takes part of the text by position | `substring: 0, 5` on `Engineering` → `Engin` |
| `word: index` | Takes a single word (starting at 0) | `word: 1` on `one two three` → `two` |
| `word_count` (`words`) | Counts the words | `one two three` → `3` |
| `length` (`len`, `size`, `count`) | Counts the characters | `Sofia` → `5` |
| `lines` | Splits text into separate lines | |
| `wrap: width` | Wraps text to a line width | |
| `pad_left: length, char` | Pads the start to a length | `pad_left: 3, "0"` on `5` → `005` |
| `pad_right: length, char` | Pads the end to a length | `pad_right: 3, "x"` on `5` → `5xx` |
| `repeat: times` | Repeats the text | `repeat: 3` on `ab` → `ababab` |
| `mask: char, start, length` | Hides part of the text | `mask` on `secret` → `******` |
| `redact` | Hides sensitive data, keeping a hint | `john@acme.com` → `j***@acme.com` |
| `highlight: term` | Highlights matching words in the text | highlights `term` in the text |
| `ascii` (`transliterate`) | Replaces accented letters with plain ones | `José` → `Jose` |
| `escape_html` | Shows HTML characters as plain text | `` → `<b>` |
| `strip_html` | Removes any HTML tags | `hi` → `hi` |
| `markdown_to_html` | Turns Markdown into formatted text | `**hi**` → `hi` |
| `sprintf: format` (`format`) | Formats text or numbers with a pattern | `sprintf: "%05.2f"` on `3.1` → `03.10` |
## Contact and locale
| Modifier | What it does | Example |
| ---------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------- |
| `link` | Turns a value into a clickable link (email → `mailto:`, phone → `tel:`, web → anchor) | `a@b.com` → `a@b.com` |
| `format_phone: region` | Formats a phone number internationally | `06 12345678` → `+31612345678` |
| `country_name` | Shows the country name for a code | `NL` → `Netherlands` |
| `language_name` | Shows the language name for a code | `nl` → `Dutch` |
## Numbers
| Modifier | What it does | Example |
| ---------------------------------------- | --------------------------------------------- | -------------------------------------------------- |
| `round: decimals` | Rounds to a number of decimals | `round: 2` on `3.14159` → `3.14` |
| `ceil` | Rounds up | `3.1` → `4` |
| `floor` | Rounds down | `3.9` → `3` |
| `absolute` | Removes the minus sign | `-7` → `7` |
| `add: n` | Adds a number | `add: 10` on `5` → `15` |
| `subtract: n` | Subtracts a number | `subtract: 3` on `5` → `2` |
| `multiply_by: n` | Multiplies | `multiply_by: 2` on `5` → `10` |
| `divide_by: n` | Divides | `divide_by: 2` on `5` → `2.5` |
| `modulo: n` | The remainder after dividing | `modulo: 2` on `5` → `1` |
| `min: n` | Sets a lowest allowed value | `min: 0` on `-3` → `0` |
| `max: n` | Sets a highest allowed value | `max: 100` on `120` → `100` |
| `clamp: min, max` | Keeps a value within a range | `clamp: 0, 10` on `15` → `10` |
| `format_number: decimals` | Formats with thousands separators | `1000000` → `1,000,000` |
| `format_currency: currency` | Formats as money | `format_currency: "EUR"` on `65000` → `€65,000.00` |
| `format_percentage: decimals` | Formats as a percentage | `75` → `75%` |
| `ordinal_number` | Adds the ordinal suffix | `3` → `3rd` |
| `abbreviate: decimals` | Shortens large numbers | `1200` → `1.2K` |
| `spell_number` | Writes the number in words | `42` → `forty-two` |
| `negate` | Flips the sign | `5` → `-5` |
| `sign` | Tells you if it's negative, zero, or positive | `-7` → `-1` |
| `pow: exponent` (`power`) | Raises to a power | `pow: 2` on `5` → `25` |
| `sqrt` (`square_root`) | The square root | `16` → `4` |
| `to_fixed_number: decimals` (`to_fixed`) | Always shows this many decimals | `to_fixed_number: 2` on `3.1` → `3.10` |
| `file_size` (`format_bytes`) | Human-readable file size | `1024` → `1 KB` |
## Dates and times
Date formats use standard date tokens such as `d` (day), `m` (month), `Y` (year), `H` (hour), and `i` (minute).
| Modifier | What it does | Example |
| ------------------------------------ | ------------------------------------ | ---------------------------------------- |
| `format_date: format` | Formats a date | `format_date: "d-m-Y"` → `14-03-2026` |
| `format_relative_date` | Shows the date relative to now | `4 months ago` |
| `date_add: interval` | Adds time to a date | `date_add: "3 days"` |
| `date_subtract: interval` | Subtracts time from a date | `date_subtract: "1 week"` |
| `age` | Whole years since the date | birthdate → `34` |
| `diff_in_years: to` | Years between two dates | |
| `diff_in_months: to` | Months between two dates | |
| `diff_in_weeks: to` | Weeks between two dates | |
| `diff_in_days: to` | Days between two dates | |
| `diff_in_hours: to` | Hours between two dates | |
| `diff_in_minutes: to` | Minutes between two dates | |
| `diff_in_seconds: to` | Seconds between two dates | |
| `start_of: unit` | Start of the day, week, month, etc. | `start_of: "month"` → first of the month |
| `end_of: unit` | End of the day, week, month, etc. | `end_of: "month"` → last of the month |
| `is_past` | True if the date is in the past | |
| `is_future` | True if the date is in the future | |
| `is_today` | True if the date is today | |
| `is_weekend` | True if the date is a weekend | |
| `day_name` | Name of the weekday | `Thursday` |
| `month_name` | Name of the month | `January` |
| `quarter` | Quarter of the year (1–4) | `1` |
| `week` (`week_of_year`) | Week number of the year | `3` |
| `add_business_days: n` | Adds days, skipping weekends | |
| `to_timezone: zone` (`tz`) | Converts to a timezone | `to_timezone: "Europe/Amsterdam"` |
| `to_timestamp` (`unix`, `timestamp`) | The date as a numeric timestamp | |
| `iso8601` (`iso_date`) | The date in standard ISO-8601 format | `2026-03-14T09:00:00+00:00` |
The units for `start_of` and `end_of` are `year`, `quarter`, `month`, `week`, `day`, `hour`, `minute`, and `second`.
## Lists and structured data
These work on fields that contain a list of values.
| Modifier | What it does | Example |
| ------------------------- | --------------------------------------------------- | ----------------------------- |
| `first` | First item | |
| `last` | Last item | |
| `nth: index` (`at`) | Item at a position (starting at 0) | `nth: 1` → second item |
| `join: separator` | Joins items into text | `join: ", "` → `php, sql, go` |
| `split: separator` | Splits text into a list | `split: ","` |
| `count` (`length`) | Number of items | |
| `sort: direction` | Sorts the items (`asc` or `desc`) | |
| `sort_by: key, direction` | Sorts items by a key | |
| `unique` (`distinct`) | Removes duplicates | |
| `reverse` | Reverses the order | |
| `slice: start, length` | Takes part of the list | |
| `sum` | Adds up the numbers | `[3, 1, 2]` → `6` |
| `avg` (`average`) | Average of the numbers | `[3, 1, 2]` → `2` |
| `get: key` | Picks one value out by its name | `get: "skills"` |
| `pluck: key` (`column`) | Pulls one field from every item in the list | `pluck: "name"` |
| `keys` | Lists the field names | |
| `values` | Lists the values | |
| `parse_json` | Reads JSON data so you can use list modifiers on it | |
| `to_json` | Turns the value into JSON text | |
## Conditions and logic
Conditions return true or false. Pair them with `boolean_label` to show a friendly label, or combine them with `and`, `or`, and `not`.
| Modifier | What it does | Example |
| ---------------------------------- | --------------------------------------- | ------------------------------------------------------ |
| `equals: value` (`eq`) | True if equal | `{{ stage \| equals: "offer" }}` |
| `not_equals: value` (`ne`, `neq`) | True if not equal | |
| `greater_than: n` (`gt`) | True if greater than | |
| `less_than: n` (`lt`) | True if less than | |
| `greater_than_or_equal: n` (`gte`) | True if greater than or equal | |
| `less_than_or_equal: n` (`lte`) | True if less than or equal | |
| `between: min, max` | True if within the range | `between: 0, 10` |
| `is_empty` (`empty`) | True if the field is empty | |
| `is_not_empty` (`not_empty`) | True if the field has a value | |
| `contains: text` | True if it contains the text | |
| `does_not_contain: text` | True if it does not contain the text | |
| `starts_with: text` | True if it starts with the text | |
| `ends_with: text` | True if it ends with the text | |
| `does_not_start_with: text` | True if it does not start with the text | |
| `does_not_end_with: text` | True if it does not end with the text | |
| `one_of: a, b, …` (`in`) | True if it matches any value | `one_of: "offer", "hired"` |
| `not_one_of: a, b, …` (`not_in`) | True if it matches none | |
| `and: (condition)` | True if both sides are true | `gt: 80 \| and: (stage \| equals: "offer")` |
| `or: (condition)` | True if either side is true | |
| `not` | Flips true and false | `equals: "hired" \| not` |
| `boolean_label: yes, no` | Shows a label for true/false | `gt: 80 \| boolean_label: "Strong", "Weak"` → `Strong` |
A condition combined with a label is a common pattern:
```text theme={null}
{{ score | greater_than: 80 | boolean_label: "Strong candidate", "Needs review" }}
```