Reference · Tools

Agile CRM

Manage contacts, companies, and deals in Agile CRM with full CRUD operations, dynamic filtering, and deal pipeline management.

Action Marketing v1

The Agile CRM node lets you create, retrieve, update, and delete contacts, companies, and deals directly from a BusyBot workflow. You can, for example, automatically create a deal and set its milestone whenever a form submission arrives, or pull a filtered list of contacts and route them through an email sequence. Deals carry full pipeline fields — name, milestone, expected value, probability, and close date.

Node type
Action
Parameters
55
Outputs
Output, Error
Credentials
Agile CRM API

Agile CRM

Manage contacts, companies, and deals in Agile CRM.

Overview

Agile CRM is a customer relationship management platform. This node works with three resources — contacts, companies and deals — and covers the full create, get, get many, update and delete cycle on each. Contact and company lists can be filtered dynamically, either by building conditions in the editor or by supplying raw JSON filter rules, and the results can be sorted, simplified and paginated. Deals carry their own pipeline fields: name, milestone, expected value, probability and close date.

Category: Marketing
Tool Name: agile_crm
Version: 1

Appearance: Icon: lucide-CircleDollarSign | Color: #64b9c4

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Agile CRM API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Companycompany
Contactcontact
Dealdeal

Operations

The operation list depends on the resource you select.

Contact

OperationValueDescription
CreatecreateCreate a new contact
DeletedeleteDelete a contact
GetgetGet a contact
Get ManygetAllGet many contacts
UpdateupdateUpdate contact properties

Company

OperationValueDescription
CreatecreateCreate a new company
DeletedeleteDelete a company
GetgetGet a company
Get ManygetAllGet many companies
UpdateupdateUpdate company properties

Deal

OperationValueDescription
CreatecreateCreate a new deal
DeletedeleteDelete a deal
GetgetGet a deal
Get ManygetAllGet many deals
UpdateupdateUpdate deal properties

Parameters

Contact: Create

ParameterTypeRequiredDefaultDescription
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM contacts API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Field values to set on the new contact. (shown when JSON Parameters is false)
— Address (addressOptions)fixedCollectionNo{}Contact address.
— — TypeoptionsYesThe kind of address.
Options: home, postal, office
— — Address (address)stringYesFull address.
— CompanystringNoCompany name.
— Email (emailOptions)fixedCollectionNo{}Contact email.
— — TypeoptionsYesThe kind of email address.
Options: work, personal
— — Email (email)stringYesEmail address.
— First NamestringNoContact first name.
— Last NamestringNoContact last name.
— Lead ScorenumberNoLead score of contact.
— Star ValueoptionsNoRating of contact (Max value 5).
Options: 0, 1, 2, 3, 4, 5
— Phone (phoneOptions)fixedCollectionNo{}Contact phone numbers.
— — TypeoptionsYesThe kind of phone number.
Options: home, homeFax, main, mobile, other, work, workFax
— — NumberstringYesPhone number.
— TagsstringNo[]Unique identifiers added to contact for easy management. Accepts several values.
— TitlestringNoProfessional title.
— WebsitefixedCollectionNo{}Contact websites.
— — TypeoptionsYesThe kind of website or profile link.
Options: facebook, feed, flickr, github, googlePlus, linkedin, skype, twitter, url, xing, youtube
— — URLstringYesWebsite URL.
— Custom PropertiesfixedCollectionNo{}Custom properties to set on the contact.
— — NamestringYesProperty name.
— — Sub TypestringNoProperty sub type.
— — ValuestringNoProperty value.

Contact: Delete

ParameterTypeRequiredDefaultDescription
Contact IDstringYesID of contact to delete. Supports expressions.

Contact: Get

ParameterTypeRequiredDefaultDescription
Contact IDstringYesUnique identifier for a particular contact. Supports expressions.

Contact: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)
FilteroptionsNononeHow to filter contacts.
Options: none, manual (Build Manually), json
Must MatchoptionsNoanyFilterWhether any or all filter conditions must match. (shown when Filter is manual)
Options: anyFilter (Any Filter), allFilters (All Filters)
SimplifybooleanNofalseWhether to return a simplified version of the response instead of the raw data.
FiltersfixedCollectionNo{}Filter conditions to match contacts against. Add one row per condition. (shown when Filter is manual)
— FieldstringNoAny searchable field.
— Condition TypeoptionsNoEQUALSHow the field is compared to the value.
Options: AFTER, BEFORE, BETWEEN, EQUALS, LAST, NOTEQUALS, ON
— ValuestringNoThe value to compare the field against.
— Value 2stringNoThe second value, closing a range. (shown when Condition Type is BETWEEN)
Filters (JSON)stringNoRaw JSON filter rules. See Agile CRM REST API docs for format. (shown when Filter is json)
OptionscollectionNo{}Extra options applied to the query.
— SortfixedCollectionNo[]Sort the returned records.
— — DirectionoptionsNoASCThe sorting direction.
Options: ASC (Ascending), DESC (Descending)
— — FieldstringNoThe sorting field.

Contact: Update

ParameterTypeRequiredDefaultDescription
Contact IDstringYesUnique identifier for a particular contact. Supports expressions.
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM contacts API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Field values to change on the contact. (shown when JSON Parameters is false)
— Address (addressOptions)fixedCollectionNo{}Contact address.
— — TypeoptionsYesThe kind of address.
Options: home, office, postal
— — Address (address)stringYesFull address.
— CompanystringNoCompany name.
— Email (emailOptions)fixedCollectionNo{}Contact email.
— — TypeoptionsYesThe kind of email address.
Options: work, personal
— — Email (email)stringYesEmail address.
— First NamestringNoContact first name.
— Last NamestringNoContact last name.
— Lead ScorenumberNoLead score of contact.
— Star ValueoptionsNoRating of contact (Max value 5).
Options: 0, 1, 2, 3, 4, 5
— Phone (phoneOptions)fixedCollectionNo{}Contact phone numbers.
— — TypeoptionsYesThe kind of phone number.
Options: home, homeFax, main, mobile, other, work, workFax
— — NumberstringYesPhone number.
— TagsstringNo[]Unique identifiers added to contact for easy management. Accepts several values.
— TitlestringNoProfessional title.
— WebsitefixedCollectionNo{}Contact websites.
— — TypeoptionsYesThe kind of website or profile link.
Options: facebook, feed, flickr, github, googlePlus, linkedin, skype, twitter, url, xing, youtube
— — URLstringYesWebsite URL.
— Custom PropertiesfixedCollectionNo{}Custom properties to set on the contact.
— — NamestringYesProperty name.
— — Sub TypestringNoProperty sub type.
— — ValuestringNoProperty value.

Company: Create

ParameterTypeRequiredDefaultDescription
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM companies API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Field values to set on the new company. (shown when JSON Parameters is false)
— Address (addressOptions)fixedCollectionNo{}Company address.
— — TypeoptionsYesThe kind of address.
Options: postal, office
— — Address (address)stringYesFull address.
— Email (email)stringNoCompany email.
— NamestringNoCompany name.
— Phone (phone)stringNoCompany phone.
— Star ValueoptionsNoRating of company (Max value 5).
Options: 0, 1, 2, 3, 4, 5
— TagsstringNo[]Unique identifiers added to company for easy management. Accepts several values.
— WebsitefixedCollectionNo{}Company websites.
— — TypeoptionsYesThe kind of website or profile link.
Options: facebook, feed, flickr, github, googlePlus, linkedin, skype, twitter, url, xing, youtube
— — URLstringYesWebsite URL.
— Custom PropertiesfixedCollectionNo{}Custom properties to set on the company.
— — NamestringYesProperty name.
— — Sub TypestringNoProperty sub type.
— — ValuestringNoProperty value.

Company: Delete

ParameterTypeRequiredDefaultDescription
Company IDstringYesID of company to delete. Supports expressions.

Company: Get

ParameterTypeRequiredDefaultDescription
Company IDstringYesUnique identifier for a particular company. Supports expressions.

Company: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)
FilteroptionsNononeHow to filter companies.
Options: none, manual (Build Manually), json
Must MatchoptionsNoanyFilterWhether any or all filter conditions must match. (shown when Filter is manual)
Options: anyFilter (Any Filter), allFilters (All Filters)
SimplifybooleanNofalseWhether to return a simplified version of the response instead of the raw data.
FiltersfixedCollectionNo{}Filter conditions to match companies against. Add one row per condition. (shown when Filter is manual)
— FieldstringNoAny searchable field.
— Condition TypeoptionsNoEQUALSHow the field is compared to the value.
Options: AFTER, BEFORE, BETWEEN, EQUALS, LAST, NOTEQUALS, ON
— ValuestringNoThe value to compare the field against.
— Value 2stringNoThe second value, closing a range. (shown when Condition Type is BETWEEN)
Filters (JSON)stringNoRaw JSON filter rules for company search. (shown when Filter is json)
OptionscollectionNo{}Extra options applied to the query.
— SortfixedCollectionNo[]Sort the returned records.
— — DirectionoptionsNoASCThe sorting direction.
Options: ASC (Ascending), DESC (Descending)
— — FieldstringNoThe sorting field.

Company: Update

ParameterTypeRequiredDefaultDescription
Company IDstringYesUnique identifier for a particular company. Supports expressions.
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM companies API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Field values to change on the company. (shown when JSON Parameters is false)
— Address (addressOptions)fixedCollectionNo{}Company address.
— — TypeoptionsYesThe kind of address.
Options: postal, office
— — Address (address)stringYesFull address.
— Email (email)stringNoCompany email.
— Star ValueoptionsNoRating of company (Max value 5).
Options: 0, 1, 2, 3, 4, 5
— TagsstringNo[]Unique identifiers added to company for easy management. Accepts several values.
— NamestringNoCompany name.
— Phone (phone)stringNoCompany phone.
— WebsitefixedCollectionNo{}Company websites.
— — TypeoptionsYesThe kind of website or profile link.
Options: facebook, feed, flickr, github, googlePlus, linkedin, skype, twitter, url, xing, youtube
— — URLstringYesWebsite URL.
— Custom PropertiesfixedCollectionNo{}Custom properties to set on the company.
— — NamestringYesProperty name.
— — Sub TypestringNoProperty sub type.
— — ValuestringNoProperty value.

Deal: Create

ParameterTypeRequiredDefaultDescription
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Close DatedateTimeYesClosing date of deal. (shown when JSON Parameters is false)
Expected ValuenumberYes1Expected monetary value of deal. (shown when JSON Parameters is false)
MilestonestringYesMilestone/stage of deal (e.g. “Negotiation”, “Won”, “Lost”). (shown when JSON Parameters is false)
NamestringYesName of deal. (shown when JSON Parameters is false)
ProbabilitynumberYes50Expected probability of closing (0-100). (shown when JSON Parameters is false)
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM deals API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Optional extras to attach to the new deal. (shown when JSON Parameters is false)
— Contact IDsstringNo[]Unique contact identifiers to associate with the deal. Accepts several values.
— Custom DatafixedCollectionNo{}Custom properties to set on the deal.
— — NamestringYesProperty name.
— — ValuestringNoProperty value.

Deal: Delete

ParameterTypeRequiredDefaultDescription
Deal IDstringYesID of deal to delete. Supports expressions.

Deal: Get

ParameterTypeRequiredDefaultDescription
Deal IDstringYesUnique identifier for a particular deal. Supports expressions.

Deal: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)

Deal: Update

ParameterTypeRequiredDefaultDescription
Deal IDstringYesID of deal to update. Supports expressions.
JSON ParametersbooleanNofalseWhether to pass all fields as raw JSON.
Additional Fields (additionalFieldsJson)jsonNoObject of values to set as described in the Agile CRM deals API. Supply it as a JSON string. (shown when JSON Parameters is true)
Additional Fields (additionalFields)collectionNo{}Field values to change on the deal. (shown when JSON Parameters is false)
— Expected ValuenumberNoExpected monetary value of deal.
— NamestringNoName of deal.
— ProbabilitynumberNo50Expected probability of closing (0-100).
— Contact IDsstringNo[]Unique contact identifiers. Accepts several values.
— Custom DatafixedCollectionNo{}Custom properties to set on the deal.
— — NamestringYesProperty name.
— — ValuestringNoProperty value.

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The Agile CRM response is merged onto the input item JSON — the fields you sent in survive unless the record uses the same key — and binary data is forwarded unchanged.

Get, Create, Update and Delete produce exactly one output item per input item. Get Many fans out for all three resources: one output item per record returned, so a single input item that matches 40 contacts leaves 40 items. A Get Many that matches nothing produces no output items for that input item.

A contact or company record arrives with an id and a properties array; every other field is whatever Agile CRM returns for that record:

{
  "orderId": "A-1042",
  "id": 5723456789012345,
  "properties": [
    { "type": "SYSTEM", "name": "first_name", "value": "John" },
    { "type": "SYSTEM", "name": "last_name", "value": "Doe" },
    { "type": "SYSTEM", "subtype": "work", "name": "email", "value": "john.doe@acme.com" }
  ]
}

With Simplify on, that properties array is flattened into top-level keys alongside id, which is far easier to address downstream:

{
  "orderId": "A-1042",
  "id": 5723456789012345,
  "first_name": "John",
  "last_name": "Doe",
  "email": "john.doe@acme.com"
}

What lands per operation:

Resource / OperationOutput item
Contact, Company — get, createThe record, merged onto the input item.
Contact, Company — getAllOne item per matching record. Simplify flattens each record’s properties; leave it off for the raw record.
Contact, Company — updateThe response of the last update stage that ran, or nothing at all when no updatable field was supplied — in which case the item passes through unchanged.
Deal — get, create, updateThe deal record, merged onto the input item.
Deal — getAllOne item per deal returned.
Any resource — deleteAgile CRM returns an empty body, so the item passes through unchanged. Use it to confirm the delete ran rather than to read the deleted record.

Records returned by a paginated Get Many (Return All on) may also carry a cursor field on the last record of each page. Ignore it downstream — it is Agile CRM’s paging marker, not part of the record.

Reference the result downstream by expression, for example {{ $json.id }} or, with Simplify on, {{ $json.email }}.

Usage Examples

  • Create a new contact in Agile CRM
  • Get all companies from Agile CRM
  • Update a deal milestone in Agile CRM
  • Delete a contact by ID
  • Filter contacts by email in Agile CRM

Example Configuration

Create a contact from an upstream item, with a work email, a phone number and tags:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "create",
    "jsonParameters": false,
    "additionalFields": {
      "firstName": "{{ $json.firstName }}",
      "lastName": "{{ $json.lastName }}",
      "company": "{{ $json.company }}",
      "title": "Operations Manager",
      "starValue": 4,
      "tags": ["prospect", "qualified"],
      "emailOptions": {
        "emailProperties": [
          { "subtype": "work", "email": "{{ $json.email }}" }
        ]
      },
      "phoneOptions": {
        "phoneProperties": [
          { "subtype": "mobile", "number": "{{ $json.phone }}" }
        ]
      }
    }
  }
}

Find contacts whose email matches the current item and that are tagged as qualified, newest first, returning simplified records:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "filterType": "manual",
    "matchType": "allFilters",
    "simple": true,
    "filters": {
      "conditions": [
        { "field": "email", "condition_type": "EQUALS", "value": "{{ $json.email }}" },
        { "field": "tags", "condition_type": "EQUALS", "value": "qualified" }
      ]
    },
    "options": {
      "sort": {
        "sort": { "direction": "DESC", "field": "created_time" }
      }
    }
  }
}

Update a contact’s name and lead score by passing the raw contact payload as a JSON string:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "contactId": "{{ $json.contactId }}",
    "jsonParameters": true,
    "additionalFieldsJson": "{\"properties\":[{\"type\":\"SYSTEM\",\"name\":\"last_name\",\"value\":\"Smith\"}],\"lead_score\":85}"
  }
}

Create a company with a postal address and a custom property:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "company",
    "operation": "create",
    "jsonParameters": false,
    "additionalFields": {
      "name": "{{ $json.accountName }}",
      "email": "{{ $json.accountEmail }}",
      "phone": "{{ $json.accountPhone }}",
      "starValue": 5,
      "tags": ["enterprise"],
      "addressOptions": {
        "addressProperties": [
          { "subtype": "postal", "address": "{{ $json.address }}" }
        ]
      },
      "customProperties": {
        "customProperty": [
          { "name": "Industry", "subtype": "TEXT", "value": "Software" }
        ]
      }
    }
  }
}

Page through every company matching a raw JSON filter:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "company",
    "operation": "getAll",
    "returnAll": true,
    "simple": true,
    "filterType": "json",
    "filterJson": "{\"rules\":[{\"LHS\":\"name\",\"CONDITION\":\"EQUALS\",\"RHS\":\"Tech Solutions Inc\"}]}"
  }
}

Open a deal for the account on the current item and link it to a contact:

{
  "type": "agile_crm",
  "parameters": {
    "resource": "deal",
    "operation": "create",
    "jsonParameters": false,
    "name": "{{ $json.accountName }} annual license",
    "expectedValue": 50000,
    "probability": 75,
    "milestone": "Negotiation",
    "closeDate": "2026-03-15T00:00:00.000Z",
    "additionalFields": {
      "contactIds": ["{{ $json.contactId }}"],
      "customData": {
        "customProperty": [
          { "name": "Deal Source", "value": "Referral" }
        ]
      }
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Manage contacts, companies, and deals in Agile CRM — create, read, update, delete records and filter contacts with dynamic conditions.

Parameter Dependencies Summary

  1. Resource selection: the operation list changes with the resource value — each resource offers Create, Delete, Get, Get Many and Update.
  2. ID parameters: contactId, companyId and dealId are required for get, delete and update. When the parameter is left empty, the node falls back to a field of the same name on the incoming item, so {{ $json.contactId }} and a bare contactId field both work.
  3. Pagination: limit only appears when returnAll is false. With returnAll on, the node pages through the whole result set for you.
  4. Filtering: matchType and filters only appear when filterType is manual; filterJson only when it is json. Filtering is available on contact and company Get Many only — deal Get Many takes returnAll and limit and nothing else.
  5. Field input: additionalFields (structured) versus additionalFieldsJson (raw) is chosen by jsonParameters. The raw variant is parsed as JSON text, so pass it as a JSON string, not as an object.
  6. Deal fields: closeDate, expectedValue, milestone, name and probability are set directly on deal Create and only when jsonParameters is false. Deal Update carries the equivalents inside additionalFields instead.

Behavior notes

  • Manual filters need at least one condition. Selecting Build Manually and leaving Filters empty fails the item rather than returning everything.
  • Contact and company updates are applied in stages — properties, lead score, tags, then star value. If a later stage fails, the earlier changes stay applied and the error names the stage that failed, so re-running an update is the safe recovery.
  • Lead Score is applied on update only. Setting it in the structured Additional Fields of a contact Create has no effect; set the contact’s score with a follow-up Update, or pass the raw payload with JSON Parameters on.
  • Get Many fans out. Downstream nodes see one item per record, not one item holding an array — no Split Out node is needed.

Frequently asked questions

What credentials do I need to connect this node to Agile CRM?

You need an Agile CRM API credential, configured in BusyBot as the 'agileCrmApi' credential type. Set this up once in your BusyBot credentials store and then select it in the node's credential field. Without it, all operations will fail at the authentication stage.

Can I filter contacts or companies when fetching a list, and does filtering work the same way for deals?

Filtering is available on Contact Get Many and Company Get Many only — Deal Get Many does not support it. For contacts and companies, you can either build filter conditions manually in the editor (using the 'manual' filter type) or supply a raw JSON string (using the 'json' filter type). If you choose the manual mode, you must add at least one condition; leaving Filters empty will fail the item rather than return everything.

If I set Lead Score in the Additional Fields when creating a contact, will it be saved?

No. Lead Score has no effect when set through the structured Additional Fields on a contact Create operation. To set a contact's score, either run a follow-up Update operation after creation, or pass the full payload as raw JSON by enabling the JSON Parameters toggle on the Create.

What happens if a contact or company update partially fails partway through?

Updates are applied in stages — properties first, then lead score, tags, and finally star value. If a later stage fails, the changes from earlier stages are already written and will not be rolled back. The error message will name the stage that failed, so you can identify what did not apply and re-run the update safely from that point.

Do I need to pass a contact, company, or deal ID explicitly, or can the node pick it up from the incoming data?

For Get, Delete, and Update operations, the relevant ID field (contactId, companyId, or dealId) is required but does not have to be typed in manually. If you leave the field empty, the node will automatically read a matching field of the same name from the incoming item — so an upstream item that already carries a 'contactId' property will wire through without any extra expression.

Build with the Agile CRM node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Agile CRM API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.