# Insightly

> Keep Insightly CRM up to date from your workflows: create, update and find contacts, organizations, leads and opportunities, add tasks and notes, and delete records.

App · CRM Systems · 15 actions. Web page: https://docs.lodol.com/docs/integrations/insightly

## Actions

### Add note

Log a note on a contact, organization, lead, opportunity or project.

**Inputs**

- Record type (`record_type`, text, required): What the note is about. One of: `contact`, `organization`, `lead`, `opportunity`, `project`.
- Record (`record_id`, text, required): Which one. Pick it, or pass its id from an earlier step.
- Title (`title`, text, required): A short summary.
- Note (`body`, text): The note itself.

**Outputs**

- `BODY` (text): The note itself.
- `DATE_CREATED_UTC` (text): When it was added (UTC).
- `NOTE_ID` (number): The note's id.
- `TITLE` (text): Title.

**Example output**

```json
{
  "BODY": "Wants the annual plan; decision by end of quarter.",
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "NOTE_ID": 87654321,
  "TITLE": "Discovery call"
}
```

### Create contact

Add a person to Insightly, optionally at an organization.

**Inputs**

- First name (`first_name`, text, required): First name.
- Last name (`last_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Phone number.
- Mobile phone (`mobile_phone`, text): Mobile phone number.
- Job title (`job_title`, text): Job title.
- Organization (`organization_id`, text): The organization. Pick one, or pass an ORGANISATION_ID from an earlier step.
- Background (`background`, text): Background notes about the contact.
- Birthday (`birthday`, date): Date of birth.
- LinkedIn (`linkedin_url`, text): LinkedIn profile URL.
- Street (`street`, text): The contact's street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Tags (`tags`, list): Tags to put on the contact.
- Custom fields (`custom_fields`, object): Values for your own contact fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ADDRESS_MAIL_CITY` (text): City.
- `ADDRESS_MAIL_COUNTRY` (text): Country.
- `ADDRESS_MAIL_POSTCODE` (text): Postal code.
- `ADDRESS_MAIL_STATE` (text): State or region.
- `ADDRESS_MAIL_STREET` (text): Street.
- `BACKGROUND` (text): Background notes.
- `CONTACT_ID` (number): The contact's id, which Update contact and Add note take.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_OF_BIRTH` (text): Date of birth.
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `EMAIL_ADDRESS` (text): Email address.
- `FIRST_NAME` (text): First name.
- `LAST_NAME` (text): Last name.
- `ORGANISATION_ID` (number): The organization the contact works for.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `PHONE_MOBILE` (text): Mobile phone.
- `SOCIAL_LINKEDIN` (text): LinkedIn profile.
- `TAGS` (list): The record's tags.
- `TITLE` (text): Job title.

**Example output**

```json
{
  "CONTACT_ID": 312345678,
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "EMAIL_ADDRESS": "ada@example.com",
  "FIRST_NAME": "Ada",
  "LAST_NAME": "Lovelace",
  "ORGANISATION_ID": 176543210,
  "OWNER_USER_ID": 1234567,
  "PHONE": "+1 415 555 0100",
  "TAGS": [
    {
      "TAG_NAME": "customer"
    }
  ],
  "TITLE": "Head of Engineering"
}
```

### Create lead

Add a lead: someone who might become a customer. Status and source default to your account's defaults.

**Inputs**

- Last name (`last_name`, text, required): Last name.
- First name (`first_name`, text): First name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Phone number.
- Company (`company`, text): The company they work for.
- Job title (`job_title`, text): Job title.
- Website (`website`, text): Website, e.g. https://example.com.
- Industry (`industry`, text): Industry.
- Employee count (`employee_count`, number): How many people the company employs. At least 0.
- Rating (`rating`, number): How promising the lead is, 1 to 5 stars. From 1 to 5.
- Description (`description`, text): What the lead is about.
- Status (`lead_status_id`, text): The lead's status. Leave empty for your account's default.
- Source (`lead_source_id`, text): Where the lead came from. Leave empty for your account's default.
- Assigned to (`assigned_to`, text): The Insightly user responsible for it.
- Street (`street`, text): The lead's street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Tags (`tags`, list): Tags to put on the lead.
- Custom fields (`custom_fields`, object): Values for your own lead fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `CONVERTED` (true/false): True once the lead has been converted.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `EMAIL` (text): Email address.
- `EMPLOYEE_COUNT` (number): Number of employees.
- `FIRST_NAME` (text): First name.
- `INDUSTRY` (text): Industry.
- `LAST_NAME` (text): Last name.
- `LEAD_DESCRIPTION` (text): Description.
- `LEAD_ID` (number): The lead's id.
- `LEAD_RATING` (number): Rating, 1 to 5.
- `LEAD_SOURCE_ID` (number): Where the lead came from.
- `LEAD_STATUS_ID` (number): The lead status.
- `ORGANISATION_NAME` (text): Company name.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `RESPONSIBLE_USER_ID` (number): The user the lead is assigned to.
- `TAGS` (list): The record's tags.
- `TITLE` (text): Job title.
- `WEBSITE` (text): Website.

**Example output**

```json
{
  "CONVERTED": false,
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "EMAIL": "grace@example.com",
  "FIRST_NAME": "Grace",
  "LAST_NAME": "Hopper",
  "LEAD_ID": 45678901,
  "LEAD_RATING": 4,
  "LEAD_SOURCE_ID": 2345678,
  "LEAD_STATUS_ID": 3456789,
  "ORGANISATION_NAME": "Compilers Inc",
  "OWNER_USER_ID": 1234567,
  "TAGS": []
}
```

### Create opportunity

Add a deal you're working on, optionally with an organization and a contact.

**Inputs**

- Name (`name`, text, required): The opportunity's name.
- Details (`details`, text): What the deal is about.
- Organization (`organization_id`, text): The organization. Pick one, or pass an ORGANISATION_ID from an earlier step.
- Contact (`contact_id`, text): The main contact for the deal.
- State (`state`, text): Where the deal stands. One of: `OPEN`, `WON`, `LOST`, `SUSPENDED`, `ABANDONED`.
- Value (`value`, number): What the deal is worth (per period, for a per-period bid). At least 0.
- Currency (`currency`, text): The currency of the value. Leave empty for your account's currency.
- Bid type (`bid_type`, text): How the value is charged. One of: `Fixed Bid`, `Per Hour`, `Per Day`, `Per Week`, `Per Month`, `Per Year`.
- Bid duration (`bid_duration`, number): For a per-period bid, how many periods (e.g. 6 for 6 months). At least 1.
- Probability (`probability`, number): The chance of winning it, 0 to 100 (%). From 0 to 100.
- Expected close date (`forecast_close_date`, date): When you expect it to close.
- Category (`category_id`, text): The opportunity's category.
- Assigned to (`assigned_to`, text): The Insightly user responsible for it.
- Tags (`tags`, list): Tags to put on the opportunity.
- Custom fields (`custom_fields`, object): Values for your own opportunity fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ACTUAL_CLOSE_DATE` (text): When it closed.
- `BID_AMOUNT` (number): The value of the deal.
- `BID_CURRENCY` (text): Currency code, e.g. USD.
- `BID_DURATION` (number): How many hours, days... a per-period bid covers.
- `BID_TYPE` (text): Fixed Bid, or Per Hour, Day, Week, Month or Year.
- `CATEGORY_ID` (number): Its category.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `FORECAST_CLOSE_DATE` (text): When it is expected to close.
- `OPPORTUNITY_DETAILS` (text): Details.
- `OPPORTUNITY_ID` (number): The opportunity's id.
- `OPPORTUNITY_NAME` (text): Name.
- `OPPORTUNITY_STATE` (text): OPEN, WON, LOST, SUSPENDED or ABANDONED.
- `OPPORTUNITY_VALUE` (number): The total value Insightly works out.
- `ORGANISATION_ID` (number): The organization it is with.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PIPELINE_ID` (number): Its pipeline.
- `PROBABILITY` (number): Chance of winning, 0 to 100.
- `RESPONSIBLE_USER_ID` (number): The user it is assigned to.
- `STAGE_ID` (number): Its pipeline stage.
- `TAGS` (list): The record's tags.

**Example output**

```json
{
  "BID_AMOUNT": 12000,
  "BID_CURRENCY": "USD",
  "BID_TYPE": "Fixed Bid",
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "FORECAST_CLOSE_DATE": "2026-12-31 00:00:00",
  "OPPORTUNITY_ID": 23456789,
  "OPPORTUNITY_NAME": "Analytical Engines - annual plan",
  "OPPORTUNITY_STATE": "OPEN",
  "OPPORTUNITY_VALUE": 12000,
  "ORGANISATION_ID": 176543210,
  "OWNER_USER_ID": 1234567,
  "PROBABILITY": 60,
  "RESPONSIBLE_USER_ID": 1234567,
  "TAGS": []
}
```

### Create organization

Add a company or other organization to Insightly.

**Inputs**

- Name (`name`, text, required): The organization's name.
- Phone (`phone`, text): Phone number.
- Website (`website`, text): Website, e.g. https://example.com.
- Background (`background`, text): Background notes about the organization.
- LinkedIn (`linkedin_url`, text): LinkedIn profile URL.
- Street (`street`, text): The organization's billing street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Tags (`tags`, list): Tags to put on the organization.
- Custom fields (`custom_fields`, object): Values for your own organization fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ADDRESS_BILLING_CITY` (text): City.
- `ADDRESS_BILLING_COUNTRY` (text): Country.
- `ADDRESS_BILLING_POSTCODE` (text): Postal code.
- `ADDRESS_BILLING_STATE` (text): State or region.
- `ADDRESS_BILLING_STREET` (text): Street.
- `BACKGROUND` (text): Background notes.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `ORGANISATION_ID` (number): The organization's id, which a contact or opportunity can be linked to.
- `ORGANISATION_NAME` (text): Name.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `SOCIAL_LINKEDIN` (text): LinkedIn page.
- `TAGS` (list): The record's tags.
- `WEBSITE` (text): Website.

**Example output**

```json
{
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "ORGANISATION_ID": 176543210,
  "ORGANISATION_NAME": "Analytical Engines Ltd",
  "OWNER_USER_ID": 1234567,
  "PHONE": "+1 415 555 0101",
  "TAGS": [],
  "WEBSITE": "https://example.com"
}
```

### Create task

Add a to-do, optionally about a contact, organization, lead, opportunity or project. It's assigned to you unless you pick someone else.

**Inputs**

- Title (`title`, text, required): What needs doing.
- Details (`details`, text): More detail.
- Due date (`due_date`, date): When it's due.
- Start date (`start_date`, date): When to start it.
- Status (`status`, text): Default: Not started. One of: `NOT STARTED`, `IN PROGRESS`, `WAITING`, `DEFERRED`, `COMPLETED`.
- Priority (`priority`, text): How urgent it is. One of: `1` (Low), `2` (Medium), `3` (High).
- Category (`category_id`, text): The task's category.
- Assigned to (`assigned_to`, text): The Insightly user responsible for it.
- Reminder (`reminder`, date and time): When Insightly should remind the person it's assigned to.
- Related to (`related_type`, text): What kind of record the task is about, if any. One of: `contact`, `organization`, `lead`, `opportunity`, `project`.
- Related record (`related_id`, text): Which record the task is about.

**Outputs**

- `COMPLETED` (true/false): True once done.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `DETAILS` (text): Details.
- `DUE_DATE` (text): When it is due.
- `OPPORTUNITY_ID` (number): The opportunity it is about, if any.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PRIORITY` (number): 1 (low), 2 (medium) or 3 (high).
- `PROJECT_ID` (number): The project it is about, if any.
- `RESPONSIBLE_USER_ID` (number): The user it is assigned to.
- `START_DATE` (text): When it starts.
- `STATUS` (text): NOT STARTED, IN PROGRESS, WAITING, DEFERRED or COMPLETED.
- `TASK_ID` (number): The task's id.
- `TITLE` (text): Title.

**Example output**

```json
{
  "COMPLETED": false,
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "DUE_DATE": "2026-09-25 00:00:00",
  "OWNER_USER_ID": 1234567,
  "PRIORITY": 2,
  "RESPONSIBLE_USER_ID": 1234567,
  "STATUS": "NOT STARTED",
  "TASK_ID": 98765432,
  "TITLE": "Send Ada the proposal"
}
```

### Delete record

Permanently delete a contact, organization, lead, opportunity, project, task or note. Deleting one that's already gone succeeds.

**Inputs**

- Record type (`record_type`, text, required): What to delete. One of: `contact`, `organization`, `lead`, `opportunity`, `project`, `task`, `note`.
- Record (`record_id`, text, required): Which one. Pick it, or pass its id from an earlier step.

**Outputs**

- `already_deleted` (true/false): True if it was already gone (Insightly answered 404) rather than deleted by this step.
- `deleted` (true/false): True once the record is gone.
- `record_id` (number): The id deleted.
- `record_type` (text): The kind of record deleted.

**Example output**

```json
{
  "already_deleted": false,
  "deleted": true,
  "record_id": 312345678,
  "record_type": "contact"
}
```

### Find contacts

Look up contacts by email, name, phone or another field, or by tag.

**Inputs**

- Search by (`search_by`, text): The contact field to match. Leave empty to list every contact. One of: `EMAIL_ADDRESS` (Email), `FIRST_NAME` (First name), `LAST_NAME` (Last name), `PHONE`, `PHONE_MOBILE` (Mobile phone), `TITLE` (Job title), `ORGANISATION_ID` (Organization ID), `TAG`.
- Value (`value`, text): The value to look for. It has to match exactly.
- Changed since (`updated_after`, date and time): Only contacts changed after this moment. Can't be combined with a tag search.
- Limit (`limit`, number): How many to return, 1 to 500. Default 100. From 1 to 500.
- Skip (`skip`, number): Skip this many matches first, to get the next page. At least 0.

**Outputs**

- `count` (number): How many contacts matched (in this page).
- `first` (object): The first matching contact, or empty when none matched. Handy for a follow-up step that updates it.
- `records` (list): The matching contacts.

**Example output**

```json
{
  "count": 1,
  "first": {
    "CONTACT_ID": 312345678,
    "CUSTOMFIELDS": [],
    "DATE_CREATED_UTC": "2026-09-21 16:42:49",
    "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
    "EMAIL_ADDRESS": "ada@example.com",
    "FIRST_NAME": "Ada",
    "LAST_NAME": "Lovelace",
    "ORGANISATION_ID": 176543210,
    "OWNER_USER_ID": 1234567,
    "PHONE": "+1 415 555 0100",
    "TAGS": [
      {
        "TAG_NAME": "customer"
      }
    ],
    "TITLE": "Head of Engineering"
  },
  "records": [
    {
      "CONTACT_ID": 312345678,
      "CUSTOMFIELDS": [],
      "DATE_CREATED_UTC": "2026-09-21 16:42:49",
      "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
      "EMAIL_ADDRESS": "ada@example.com",
      "FIRST_NAME": "Ada",
      "LAST_NAME": "Lovelace",
      "ORGANISATION_ID": 176543210,
      "OWNER_USER_ID": 1234567,
      "PHONE": "+1 415 555 0100",
      "TAGS": [
        {
          "TAG_NAME": "customer"
        }
      ],
      "TITLE": "Head of Engineering"
    }
  ]
}
```

### Find leads

Look up leads by email, name, company or phone, or by tag.

**Inputs**

- Search by (`search_by`, text): The lead field to match. Leave empty to list every lead. One of: `EMAIL`, `FIRST_NAME` (First name), `LAST_NAME` (Last name), `ORGANISATION_NAME` (Name), `PHONE`, `TAG`.
- Value (`value`, text): The value to look for. It has to match exactly.
- Changed since (`updated_after`, date and time): Only leads changed after this moment. Can't be combined with a tag search.
- Limit (`limit`, number): How many to return, 1 to 500. Default 100. From 1 to 500.
- Skip (`skip`, number): Skip this many matches first, to get the next page. At least 0.

**Outputs**

- `count` (number): How many leads matched (in this page).
- `first` (object): The first matching lead, or empty when none matched. Handy for a follow-up step that updates it.
- `records` (list): The matching leads.

**Example output**

```json
{
  "count": 1,
  "first": {
    "CONVERTED": false,
    "CUSTOMFIELDS": [],
    "DATE_CREATED_UTC": "2026-09-21 16:42:49",
    "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
    "EMAIL": "grace@example.com",
    "FIRST_NAME": "Grace",
    "LAST_NAME": "Hopper",
    "LEAD_ID": 45678901,
    "LEAD_RATING": 4,
    "LEAD_SOURCE_ID": 2345678,
    "LEAD_STATUS_ID": 3456789,
    "ORGANISATION_NAME": "Compilers Inc",
    "OWNER_USER_ID": 1234567,
    "TAGS": []
  },
  "records": [
    {
      "CONVERTED": false,
      "CUSTOMFIELDS": [],
      "DATE_CREATED_UTC": "2026-09-21 16:42:49",
      "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
      "EMAIL": "grace@example.com",
      "FIRST_NAME": "Grace",
      "LAST_NAME": "Hopper",
      "LEAD_ID": 45678901,
      "LEAD_RATING": 4,
      "LEAD_SOURCE_ID": 2345678,
      "LEAD_STATUS_ID": 3456789,
      "ORGANISATION_NAME": "Compilers Inc",
      "OWNER_USER_ID": 1234567,
      "TAGS": []
    }
  ]
}
```

### Find opportunities

Look up deals by name, state or organization, or by tag.

**Inputs**

- Search by (`search_by`, text): The opportunity field to match. Leave empty to list every opportunity. One of: `OPPORTUNITY_NAME` (Name), `OPPORTUNITY_STATE` (State (Open, Won, Lost, Suspended or Abandoned)), `ORGANISATION_ID` (Organization ID), `TAG`.
- Value (`value`, text): The value to look for. It has to match exactly.
- Changed since (`updated_after`, date and time): Only opportunities changed after this moment. Can't be combined with a tag search.
- Limit (`limit`, number): How many to return, 1 to 500. Default 100. From 1 to 500.
- Skip (`skip`, number): Skip this many matches first, to get the next page. At least 0.

**Outputs**

- `count` (number): How many opportunities matched (in this page).
- `first` (object): The first matching opportunity, or empty when none matched. Handy for a follow-up step that updates it.
- `records` (list): The matching opportunities.

**Example output**

```json
{
  "count": 1,
  "first": {
    "BID_AMOUNT": 12000,
    "BID_CURRENCY": "USD",
    "BID_TYPE": "Fixed Bid",
    "CUSTOMFIELDS": [],
    "DATE_CREATED_UTC": "2026-09-21 16:42:49",
    "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
    "FORECAST_CLOSE_DATE": "2026-12-31 00:00:00",
    "OPPORTUNITY_ID": 23456789,
    "OPPORTUNITY_NAME": "Analytical Engines - annual plan",
    "OPPORTUNITY_STATE": "OPEN",
    "OPPORTUNITY_VALUE": 12000,
    "ORGANISATION_ID": 176543210,
    "OWNER_USER_ID": 1234567,
    "PROBABILITY": 60,
    "RESPONSIBLE_USER_ID": 1234567,
    "TAGS": []
  },
  "records": [
    {
      "BID_AMOUNT": 12000,
      "BID_CURRENCY": "USD",
      "BID_TYPE": "Fixed Bid",
      "CUSTOMFIELDS": [],
      "DATE_CREATED_UTC": "2026-09-21 16:42:49",
      "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
      "FORECAST_CLOSE_DATE": "2026-12-31 00:00:00",
      "OPPORTUNITY_ID": 23456789,
      "OPPORTUNITY_NAME": "Analytical Engines - annual plan",
      "OPPORTUNITY_STATE": "OPEN",
      "OPPORTUNITY_VALUE": 12000,
      "ORGANISATION_ID": 176543210,
      "OWNER_USER_ID": 1234567,
      "PROBABILITY": 60,
      "RESPONSIBLE_USER_ID": 1234567,
      "TAGS": []
    }
  ]
}
```

### Find organizations

Look up organizations by name, website or phone, or by tag.

**Inputs**

- Search by (`search_by`, text): The organization field to match. Leave empty to list every organization. One of: `ORGANISATION_NAME` (Name), `WEBSITE`, `PHONE`, `TAG`.
- Value (`value`, text): The value to look for. It has to match exactly.
- Changed since (`updated_after`, date and time): Only organizations changed after this moment. Can't be combined with a tag search.
- Limit (`limit`, number): How many to return, 1 to 500. Default 100. From 1 to 500.
- Skip (`skip`, number): Skip this many matches first, to get the next page. At least 0.

**Outputs**

- `count` (number): How many organizations matched (in this page).
- `first` (object): The first matching organization, or empty when none matched. Handy for a follow-up step that updates it.
- `records` (list): The matching organizations.

**Example output**

```json
{
  "count": 1,
  "first": {
    "CUSTOMFIELDS": [],
    "DATE_CREATED_UTC": "2026-09-21 16:42:49",
    "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
    "ORGANISATION_ID": 176543210,
    "ORGANISATION_NAME": "Analytical Engines Ltd",
    "OWNER_USER_ID": 1234567,
    "PHONE": "+1 415 555 0101",
    "TAGS": [],
    "WEBSITE": "https://example.com"
  },
  "records": [
    {
      "CUSTOMFIELDS": [],
      "DATE_CREATED_UTC": "2026-09-21 16:42:49",
      "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
      "ORGANISATION_ID": 176543210,
      "ORGANISATION_NAME": "Analytical Engines Ltd",
      "OWNER_USER_ID": 1234567,
      "PHONE": "+1 415 555 0101",
      "TAGS": [],
      "WEBSITE": "https://example.com"
    }
  ]
}
```

### Update contact

Change a contact's details. Only the fields you fill in change.

**Inputs**

- Contact (`contact_id`, text, required): The contact. Pick one, or pass a CONTACT_ID from an earlier step.
- First name (`first_name`, text): First name.
- Last name (`last_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Phone number.
- Mobile phone (`mobile_phone`, text): Mobile phone number.
- Job title (`job_title`, text): Job title.
- Organization (`organization_id`, text): The organization. Pick one, or pass an ORGANISATION_ID from an earlier step.
- Background (`background`, text): Background notes about the contact.
- Birthday (`birthday`, date): Date of birth.
- LinkedIn (`linkedin_url`, text): LinkedIn profile URL.
- Street (`street`, text): The contact's street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Add tags (`add_tags`, list): Tags to add. The contact's existing tags are kept.
- Custom fields (`custom_fields`, object): Values for your own contact fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ADDRESS_MAIL_CITY` (text): City.
- `ADDRESS_MAIL_COUNTRY` (text): Country.
- `ADDRESS_MAIL_POSTCODE` (text): Postal code.
- `ADDRESS_MAIL_STATE` (text): State or region.
- `ADDRESS_MAIL_STREET` (text): Street.
- `BACKGROUND` (text): Background notes.
- `CONTACT_ID` (number): The contact's id, which Update contact and Add note take.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_OF_BIRTH` (text): Date of birth.
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `EMAIL_ADDRESS` (text): Email address.
- `FIRST_NAME` (text): First name.
- `LAST_NAME` (text): Last name.
- `ORGANISATION_ID` (number): The organization the contact works for.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `PHONE_MOBILE` (text): Mobile phone.
- `SOCIAL_LINKEDIN` (text): LinkedIn profile.
- `TAGS` (list): The record's tags.
- `TITLE` (text): Job title.

**Example output**

```json
{
  "CONTACT_ID": 312345678,
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "EMAIL_ADDRESS": "ada@example.com",
  "FIRST_NAME": "Ada",
  "LAST_NAME": "Lovelace",
  "ORGANISATION_ID": 176543210,
  "OWNER_USER_ID": 1234567,
  "PHONE": "+1 415 555 0100",
  "TAGS": [
    {
      "TAG_NAME": "customer"
    }
  ],
  "TITLE": "Head of Engineering"
}
```

### Update lead

Change a lead's details or status. Only the fields you fill in change.

**Inputs**

- Lead (`lead_id`, text, required): The lead. Pick one, or pass a LEAD_ID from an earlier step.
- Last name (`last_name`, text): Last name.
- First name (`first_name`, text): First name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Phone number.
- Company (`company`, text): The company they work for.
- Job title (`job_title`, text): Job title.
- Website (`website`, text): Website, e.g. https://example.com.
- Industry (`industry`, text): Industry.
- Employee count (`employee_count`, number): How many people the company employs. At least 0.
- Rating (`rating`, number): How promising the lead is, 1 to 5 stars. From 1 to 5.
- Description (`description`, text): What the lead is about.
- Status (`lead_status_id`, text): The lead's status. Leave empty for your account's default.
- Source (`lead_source_id`, text): Where the lead came from. Leave empty for your account's default.
- Assigned to (`assigned_to`, text): The Insightly user responsible for it.
- Street (`street`, text): The lead's street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Add tags (`add_tags`, list): Tags to add. The lead's existing tags are kept.
- Custom fields (`custom_fields`, object): Values for your own lead fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `CONVERTED` (true/false): True once the lead has been converted.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `EMAIL` (text): Email address.
- `EMPLOYEE_COUNT` (number): Number of employees.
- `FIRST_NAME` (text): First name.
- `INDUSTRY` (text): Industry.
- `LAST_NAME` (text): Last name.
- `LEAD_DESCRIPTION` (text): Description.
- `LEAD_ID` (number): The lead's id.
- `LEAD_RATING` (number): Rating, 1 to 5.
- `LEAD_SOURCE_ID` (number): Where the lead came from.
- `LEAD_STATUS_ID` (number): The lead status.
- `ORGANISATION_NAME` (text): Company name.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `RESPONSIBLE_USER_ID` (number): The user the lead is assigned to.
- `TAGS` (list): The record's tags.
- `TITLE` (text): Job title.
- `WEBSITE` (text): Website.

**Example output**

```json
{
  "CONVERTED": false,
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "EMAIL": "grace@example.com",
  "FIRST_NAME": "Grace",
  "LAST_NAME": "Hopper",
  "LEAD_ID": 45678901,
  "LEAD_RATING": 4,
  "LEAD_SOURCE_ID": 2345678,
  "LEAD_STATUS_ID": 3456789,
  "ORGANISATION_NAME": "Compilers Inc",
  "OWNER_USER_ID": 1234567,
  "TAGS": []
}
```

### Update opportunity

Change a deal's details, or mark it won or lost. Only the fields you fill in change.

**Inputs**

- Opportunity (`opportunity_id`, text, required): The opportunity. Pick one, or pass an OPPORTUNITY_ID from an earlier step.
- Name (`name`, text): The opportunity's name.
- Details (`details`, text): What the deal is about.
- Organization (`organization_id`, text): The organization. Pick one, or pass an ORGANISATION_ID from an earlier step.
- State (`state`, text): Where the deal stands. One of: `OPEN`, `WON`, `LOST`, `SUSPENDED`, `ABANDONED`.
- Value (`value`, number): What the deal is worth (per period, for a per-period bid). At least 0.
- Currency (`currency`, text): The currency of the value. Leave empty for your account's currency.
- Bid type (`bid_type`, text): How the value is charged. One of: `Fixed Bid`, `Per Hour`, `Per Day`, `Per Week`, `Per Month`, `Per Year`.
- Bid duration (`bid_duration`, number): For a per-period bid, how many periods (e.g. 6 for 6 months). At least 1.
- Probability (`probability`, number): The chance of winning it, 0 to 100 (%). From 0 to 100.
- Expected close date (`forecast_close_date`, date): When you expect it to close.
- Category (`category_id`, text): The opportunity's category.
- Assigned to (`assigned_to`, text): The Insightly user responsible for it.
- Add tags (`add_tags`, list): Tags to add. The opportunity's existing tags are kept.
- Custom fields (`custom_fields`, object): Values for your own opportunity fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ACTUAL_CLOSE_DATE` (text): When it closed.
- `BID_AMOUNT` (number): The value of the deal.
- `BID_CURRENCY` (text): Currency code, e.g. USD.
- `BID_DURATION` (number): How many hours, days... a per-period bid covers.
- `BID_TYPE` (text): Fixed Bid, or Per Hour, Day, Week, Month or Year.
- `CATEGORY_ID` (number): Its category.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `FORECAST_CLOSE_DATE` (text): When it is expected to close.
- `OPPORTUNITY_DETAILS` (text): Details.
- `OPPORTUNITY_ID` (number): The opportunity's id.
- `OPPORTUNITY_NAME` (text): Name.
- `OPPORTUNITY_STATE` (text): OPEN, WON, LOST, SUSPENDED or ABANDONED.
- `OPPORTUNITY_VALUE` (number): The total value Insightly works out.
- `ORGANISATION_ID` (number): The organization it is with.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PIPELINE_ID` (number): Its pipeline.
- `PROBABILITY` (number): Chance of winning, 0 to 100.
- `RESPONSIBLE_USER_ID` (number): The user it is assigned to.
- `STAGE_ID` (number): Its pipeline stage.
- `TAGS` (list): The record's tags.

**Example output**

```json
{
  "BID_AMOUNT": 12000,
  "BID_CURRENCY": "USD",
  "BID_TYPE": "Fixed Bid",
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "FORECAST_CLOSE_DATE": "2026-12-31 00:00:00",
  "OPPORTUNITY_ID": 23456789,
  "OPPORTUNITY_NAME": "Analytical Engines - annual plan",
  "OPPORTUNITY_STATE": "OPEN",
  "OPPORTUNITY_VALUE": 12000,
  "ORGANISATION_ID": 176543210,
  "OWNER_USER_ID": 1234567,
  "PROBABILITY": 60,
  "RESPONSIBLE_USER_ID": 1234567,
  "TAGS": []
}
```

### Update organization

Change an organization's details. Only the fields you fill in change.

**Inputs**

- Organization (`organization_id`, text, required): The organization. Pick one, or pass an ORGANISATION_ID from an earlier step.
- Name (`name`, text): The organization's name.
- Phone (`phone`, text): Phone number.
- Website (`website`, text): Website, e.g. https://example.com.
- Background (`background`, text): Background notes about the organization.
- LinkedIn (`linkedin_url`, text): LinkedIn profile URL.
- Street (`street`, text): The organization's billing street address.
- City (`city`, text): City.
- State (`state`, text): State, province or region.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Add tags (`add_tags`, list): Tags to add. The organization's existing tags are kept.
- Custom fields (`custom_fields`, object): Values for your own organization fields in Insightly. Fields left empty aren't changed.

**Outputs**

- `ADDRESS_BILLING_CITY` (text): City.
- `ADDRESS_BILLING_COUNTRY` (text): Country.
- `ADDRESS_BILLING_POSTCODE` (text): Postal code.
- `ADDRESS_BILLING_STATE` (text): State or region.
- `ADDRESS_BILLING_STREET` (text): Street.
- `BACKGROUND` (text): Background notes.
- `CUSTOMFIELDS` (list): The record's custom field values.
- `DATE_CREATED_UTC` (text): When it was created (UTC).
- `DATE_UPDATED_UTC` (text): When it was last changed (UTC).
- `ORGANISATION_ID` (number): The organization's id, which a contact or opportunity can be linked to.
- `ORGANISATION_NAME` (text): Name.
- `OWNER_USER_ID` (number): The user who owns the record.
- `PHONE` (text): Phone.
- `SOCIAL_LINKEDIN` (text): LinkedIn page.
- `TAGS` (list): The record's tags.
- `WEBSITE` (text): Website.

**Example output**

```json
{
  "CUSTOMFIELDS": [],
  "DATE_CREATED_UTC": "2026-09-21 16:42:49",
  "DATE_UPDATED_UTC": "2026-09-21 16:42:49",
  "ORGANISATION_ID": 176543210,
  "ORGANISATION_NAME": "Analytical Engines Ltd",
  "OWNER_USER_ID": 1234567,
  "PHONE": "+1 415 555 0101",
  "TAGS": [],
  "WEBSITE": "https://example.com"
}
```
