Contact Task¶
Overview¶
The Contact Task manages contact records in your CRM - get contact details, add new contacts, or edit existing ones. Use it to maintain accurate contact information, link contacts to clients, and keep your CRM data up-to-date.
When to use this task:
- Retrieve contact information
- Add new contacts to existing clients
- Update contact details
- Link/unlink contacts from clients
- Validate contact data
- Manage contact relationships
- Build contact databases
- Sync contact information
Key Features:
- Four actions: Get, Get Contacts, Add, Edit
- Auto-validates emails and phone numbers
- Auto-formats phone numbers to E.164
- Links contacts to client records
- Supports contact unlinking
- Triggers global CRM events
- Returns comprehensive contact data
Quick Start¶
Get Contact:
1. Add Contact task
2. Select Action: Get
3. Enter a Contact ID, or add matching items (email, cell number, …)
4. Save
Get Contacts (all matches):
1. Add Contact task
2. Select Action: Get Contacts
3. Add matching items (e.g. Email Domain: acme.com)
4. Loop over the contact_ids output
5. Save
Add Contact:
1. Add Contact task
2. Select Action: Add
3. Enter contact details
4. Link to Client ID (required)
5. Save
Edit Contact:
Configuration¶
Builder fields¶
The Field column is the label as it appears in the task builder; Key is the name the value is stored under and referenced by.
| Field | Key | Type | Default | Notes |
|---|---|---|---|---|
| Action | Action |
select | get |
Options: Get Contact · Get Contacts · Add Contact · Edit Contact |
| Find the contact by | Contact ID + match_* rows |
contact-match-rows | – | Only shown when Action is get. See Finding the contact |
| Find contacts by | match_* rows |
contact-match-rows | – | Only shown when Action is get_contacts. The same items minus Contact ID, returning every match |
| Contact ID | Contact ID |
text | – | Only shown when Action is edit |
| Client ID | Client ID |
text | – | Only shown when Action is add, edit |
| First Name | User Name |
text | – | Only shown when Action is add, edit |
| Last Name | User Surname |
text | – | Only shown when Action is add, edit |
User Email |
text | – | Only shown when Action is add, edit |
|
| Cell Number | User Cell Number |
text | – | Only shown when Action is add, edit |
| Landline Number | User Landline Number |
text | – | Only shown when Action is add, edit |
| Notes | Notes |
textarea | – | Only shown when Action is add, edit |
| Custom Fields | custom_fields |
contact-custom-fields | – | Only shown when Action is add, edit |
Action Selection¶
Get Contact:
Retrieves all contact information.
Finding the contact (Get)¶
Get Contact can find the contact by several fields. Contact ID is always the first item; add more with Add matching item. A contact must match every item you fill in. Blank items are ignored, so leave the Contact ID blank to find the contact by the other items only.
This differs from Match to Client
Match to Client tries its criteria in order and stops at the first one that finds a client, so later criteria are fallbacks. The Contact task combines its items instead: each one you add narrows the search. An item that cannot be used — a variable that did not resolve, a value that is not a valid email, phone number, contact ID or option of the field — stops the lookup entirely and the run text says which item and why. Dropping the item instead would widen the search and return a contact the workflow never asked for. A blank item is different: it is simply ignored.
| Item | Key | Matches |
|---|---|---|
| Contact ID | Contact ID |
The contact with that ID. Given a comma-separated list, the first ID in it. Get only — an ID names one contact, so Get Contacts ignores it |
match_user_email |
Exact email address (not case sensitive) | |
| Email Domain | match_user_email_domain |
Everyone at the same domain. Takes acme.com or a whole address |
| Cell Number | match_user_cell_number |
Same number in E.164, digits-only or local form; falls back to the last 9 digits |
| Landline Number | match_user_landline_number |
As Cell Number |
| A contact custom field | match_contact_field_id_<id> |
Text, number, checkbox, single select and multi select. See below |
finds the most recently added contact who is at acme.com and has VIP ticked.
Custom fields use the same Direct / Variable control as the rest of the builder. A checkbox offers
Yes / No, a select offers its options, and a multi select lets you pick several — a contact holding any
of them matches. Switch to Variable to map a value in instead; the value is read the same way the Add and
Edit actions read it, so a variable resolving to Yes, to an option's name, or to its ID all match.
Unlike Match to Client, this finds contacts that are not linked to any client. When several contacts match
every item, the most recently added one is used and the run text says how many matched. The matched_by
output lists the items that were matched on.
Tasks built before matching existed only have a Contact ID, so they run exactly as before.
A list of IDs names the first one
contact_ids — from Get Contacts or from Match to Client — can be dropped
straight onto Contact ID, and the task uses the first ID in the list. The run text says which one
it used. Use a Loop when you want each of them, not just the first.
Get Contacts:
Returns every contact matching all the items, as contact_ids — a comma-separated list of contact
IDs, newest first. Each item you add narrows the list, so one item on its own returns the widest set.
It returns IDs only. To act on each contact, feed contact_ids to a Loop task and put a Get
Contact task inside the loop, with the loop's item as its Contact ID.
At most 500 contacts are returned. When more match, the 500 most recently added are returned and the run text says so.
Add Contact:
Action: Add
Client ID: {{task_13001_client_id}}
First Name: {{task_55001_first_name}}
Surname: {{task_55001_last_name}}
Email: {{task_55001_email}}
Cell: {{task_55001_phone}}
Creates new contact linked to client.
Edit Contact:
Updates existing contact fields. Only the fields you fill in are changed — a blank First Name, Last Name, Email, Cell Number, Landline Number or Notes leaves the contact's current value as it is, including when a mapped variable resolves to nothing. To fill in just a birthday, set the Contact ID, add that one custom field, and leave everything else blank.
Custom fields work like Edit Client: only the ones you add are touched, and an added custom field whose value is blank clears that field. When the value comes from a variable that is sometimes empty, put an If task before the Contact task so a missing value does not clear one already on the contact.
Contact Fields¶
First Name:
User Surname (Last Name):
Email:
Auto-validated. Invalid emails are rejected.
Cell (Mobile):
Auto-formatted to E.164. Invalid numbers rejected.
Landline:
Auto-formatted to E.164.
Position:
Job title or role.
Notes:
Client Linking¶
Link to Client (Add action):
Required for Add action.
Change Client Link (Edit action):
Move contact to different client.
Unlink from Client (Edit action):
Removes client link entirely.
Outputs¶
| Field | Type | Example | Notes |
|---|---|---|---|
contact_id |
number | 881 |
The contact acted on. |
matched_by |
string | email, vip |
The matching items the contact was found on. |
contact_ids |
string | 881,874,802 |
Get Contacts only: comma-separated contact IDs, newest first. |
contact_count |
number | 3 |
Get Contacts only: how many IDs were returned. |
contact_name |
string | Jane |
First name. Empty string when unset. |
contact_surname |
string | Doe |
Surname. |
contact_email |
string | jane@example.com |
|
contact_cell_number |
string | +27825550111 |
|
contact_landline_number |
string | +27115550100 |
|
contact_notes |
string | Prefers email |
|
contact_receive_invoices |
boolean | true |
Whether the contact receives invoices. |
contact_email_unsubscribe |
boolean | false |
true means they have opted out of email. Check this before sending. |
contact_sms_unsubscribe |
boolean | false |
true means they have opted out of SMS. |
custom_fields |
array | [{…}] |
The contact's custom fields, when the action returns them. |
run |
boolean | true |
|
run_text |
string | Contact retrieved. |
Honour the unsubscribe flags
contact_email_unsubscribe and contact_sms_unsubscribe are returned so a workflow can respect
them. Branch on them with an If Statement before an Email or
SMS task.
Real-World Examples¶
Check whether someone has opted out before messaging¶
Schedule
└─ Contact get the contact
└─ If Statement {{task_28001_contact_email_unsubscribe}} is false
└─ Email send the campaign
Add a contact to a client¶
Correct a contact's details¶
Best Practices¶
Email Validation¶
- Validate before submission - Check email format
- Handle invalid gracefully - Use If task to check success
- Unique emails - One email per contact (system enforced)
- Business emails preferred - Personal emails for individuals
Phone Numbers¶
- Use Phone Formatter first - Ensure consistent format
- Include country code - For international contacts
- Validate before submit - Invalid numbers are rejected
- Multiple numbers - Use cell and landline fields
Contact Linking¶
- Always link to client - Contacts need client association
- Verify client exists - Use Match to Client first
- Handle unlink carefully - Empty Client ID removes link
- One primary contact - Mark most important contact clearly
Data Quality¶
- Required fields - First name, last name, and client ID (for Add)
- Clean data - Trim whitespace, fix case
- Validate before create - Check for duplicates
- Update regularly - Keep contact info current
Troubleshooting¶
Contact Not Created¶
Check:
- Valid Client ID provided?
- Client exists in system?
- Email format valid?
- Phone number valid?
- First name and surname provided?
Debug: Check workflow logs for validation errors
Email Already Exists¶
Issue: Cannot create contact with duplicate email
Cause: Another contact already has this email
Solution:
- Use Match to Client to find existing contact first
- Update existing contact instead of creating new
- Verify email is unique before creation
Phone Number Invalid¶
Issue: Contact not created due to phone validation
Cause: Phone number format not recognized
Solution: Use Phone Formatter first
Contact Not Unlinked¶
Issue: Contact still linked after edit
Cause: Client ID field not properly emptied
Solution: Ensure Client ID field is completely blank (not "null" string)
Update Not Saving¶
Issue: Edit action doesn't update fields
Cause: Contact ID invalid or missing
Solution: Verify contact exists first with Get action
Frequently Asked Questions¶
Can I create contact without client?¶
No. All contacts must be linked to a client. Create client first with New Client.
Can I add multiple contacts to one client?¶
Yes. Run Contact task multiple times with same Client ID or use Loop.
How do I change a contact's email?¶
Use Edit action with Contact ID and new Email field.
Can I merge duplicate contacts?¶
No. This task doesn't merge. Handle duplicates manually in CRM or via custom code.
What happens to contact when client is deleted?¶
Contact remains but becomes orphaned. Re-link to different client.
Can I add custom fields?¶
No. Use Edit Client task to add custom fields to the client record.
How do I make a contact the primary contact?¶
System uses first created contact as primary. No specific "primary" flag in this task.
Can I get all contacts for a client?¶
Use Match to Client: its contact_ids output is a comma-separated list of every contact linked to the client.
Related Tasks¶
- New Client - Create client before adding contacts
- Match to Client - Find client or contact by criteria
- Edit Client - Update client information
- Phone Formatter - Format phones before adding
- Loop - Add multiple contacts in batch
- If Task - Conditional contact operations