<!-- BusyBot node reference — https://busybot.net/tools/copper/ -->

> Node: Copper (`copper`) · Action · v1
> Category: Marketing · Credentials: Copper API (`copperApi`)
> Updated: 2026-08-16

# Copper

> Manage CRM records in Copper (companies, leads, opportunities, people, projects, tasks, users, customer sources).

## Overview

Copper (formerly ProsperWorks) is a CRM built for Google Workspace. Use this node to create, read, update and delete records across eight resource types: companies, leads, opportunities, people, projects, tasks, users and customer sources. Companies, leads, opportunities, people, projects and tasks support the full create / get / get many / update / delete set, while users and customer sources are read-only and support Get Many only. Authentication uses your Copper API key together with the email address of the Copper user that key belongs to.

**Category:** Marketing  
**Tool Name:** `copper`  
**Version:** 1

**Appearance:** Icon: `lucide-CircleDollarSign` | Color: `#F09839`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Copper API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/copper-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Company | `company` |
| Customer Source | `customerSource` |
| Lead | `lead` |
| Opportunity | `opportunity` |
| Person | `person` |
| Project | `project` |
| Task | `task` |
| User | `user` |

### Operations

The operations available depend on the resource you select.

**Company**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new company. |
| Delete | `delete` | Delete a company by ID. |
| Get | `get` | Retrieve a single company by ID. |
| Get Many | `getAll` | Retrieve many companies, with optional filters. |
| Update | `update` | Update an existing company by ID. |

**Customer Source**

| Operation | Value | Description |
|-----------|-------|-------------|
| Get Many | `getAll` | Retrieve the customer sources defined in your Copper account. |

**Lead**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new lead. |
| Delete | `delete` | Delete a lead by ID. |
| Get | `get` | Retrieve a single lead by ID. |
| Get Many | `getAll` | Retrieve many leads, with optional filters. |
| Update | `update` | Update an existing lead by ID. |

**Opportunity**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new opportunity. |
| Delete | `delete` | Delete an opportunity by ID. |
| Get | `get` | Retrieve a single opportunity by ID. |
| Get Many | `getAll` | Retrieve many opportunities, with optional filters. |
| Update | `update` | Update an existing opportunity by ID. |

**Person**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new person. |
| Delete | `delete` | Delete a person by ID. |
| Get | `get` | Retrieve a single person by ID. |
| Get Many | `getAll` | Retrieve many people, with optional filters. |
| Update | `update` | Update an existing person by ID. |

**Project**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new project. |
| Delete | `delete` | Delete a project by ID. |
| Get | `get` | Retrieve a single project by ID. |
| Get Many | `getAll` | Retrieve many projects, with optional filters. |
| Update | `update` | Update an existing project by ID. |

**Task**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new task. |
| Delete | `delete` | Delete a task by ID. |
| Get | `get` | Retrieve a single task by ID. |
| Get Many | `getAll` | Retrieve many tasks, with optional filters. |
| Update | `update` | Update an existing task by ID. |

**User**

| Operation | Value | Description |
|-----------|-------|-------------|
| Get Many | `getAll` | Retrieve the users in your Copper account. |

### Parameters

Every parameter accepts `{{ … }}` expressions, including the values you place inside Additional Fields, Update Fields and Filters, so record data can be taken straight from the incoming item.

#### Company: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the company to create. |
| Additional Fields | `collection` | No | `{}` | Optional company fields to send with the create request. |
| — Address | `fixedCollection` | No | `{}` | Address of the company. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Details | `string` | No | — | Description of the company to create. |
| — Email Domain | `string` | No | — | Email domain used by the company. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the company. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Company: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | ID of the company to delete. |

#### Company: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | ID of the company to retrieve. |

#### Company: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Country | `string` | No | — | ISO 3166 alpha-2 country code to filter by. |
| — Name | `string` | No | — | Name of the company to filter by. |

#### Company: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Company ID | `string` | Yes | — | ID of the company to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the company. Anything you leave out is left as it is. |
| — Address | `fixedCollection` | No | `{}` | Address of the company. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Details | `string` | No | — | Description to set for the company. |
| — Name | `string` | No | — | Name to set for the company. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the company. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Customer Source: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Lead: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the lead to create. |
| Additional Fields | `collection` | No | `{}` | Optional lead fields to send with the create request. |
| — Address | `fixedCollection` | No | `{}` | Address of the lead. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Email | `fixedCollection` | No | `{}` | Email address for the lead. Nest the values under `emailFields`. |
| — — Email | `string` | No | — | Email address. |
| — — Category | `string` | No | — | Category label for this email address. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the lead. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Lead: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | ID of the lead to delete. |

#### Lead: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | ID of the lead to retrieve. |

#### Lead: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Country | `string` | No | — | Name of the country to filter by. |
| — Name | `string` | No | — | Name of the lead to filter by. |

#### Lead: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Lead ID | `string` | Yes | — | ID of the lead to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the lead. Anything you leave out is left as it is. |
| — Address | `fixedCollection` | No | `{}` | Address of the lead. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Details | `string` | No | — | Description to set for the lead. |
| — Email | `fixedCollection` | No | `{}` | Email address for the lead. Nest the values under `emailFields`. |
| — — Email | `string` | No | — | Email address. |
| — — Category | `string` | No | — | Category label for this email address. |
| — Name | `string` | No | — | Name to set for the lead. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the lead. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Opportunity: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the opportunity to create. |
| Customer Source ID (`customerSourceId`) | `string` | No | — | ID of the customer source that generated this opportunity. |
| Primary Contact ID (`primaryContactId`) | `string` | No | — | ID of the primary contact associated with this opportunity. |

#### Opportunity: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | ID of the opportunity to delete. |

#### Opportunity: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | ID of the opportunity to retrieve. |

#### Opportunity: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Company IDs | `string` | No | — | Comma-separated IDs of the primary companies to filter by. |
| — Customer Source IDs | `string` | No | — | Comma-separated IDs of the customer sources to filter by. |

#### Opportunity: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Opportunity ID | `string` | Yes | — | ID of the opportunity to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the opportunity. Anything you leave out is left as it is. |
| — Customer Source ID (`customer_source_id`) | `string` | No | — | ID of the customer source associated with this opportunity. |
| — Name | `string` | No | — | Name to set for the opportunity. |
| — Primary Contact ID (`primary_contact_id`) | `string` | No | — | ID of the primary contact for this opportunity. |

#### Person: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the person to create. |
| Additional Fields | `collection` | No | `{}` | Optional person fields to send with the create request. |
| — Address | `fixedCollection` | No | `{}` | Address of the person. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Details | `string` | No | — | Description to set for the person. |
| — Email Domain | `string` | No | — | Email domain used by the person. |
| — Emails | `fixedCollection` | No | `{}` | Email addresses for the person. Nest the values under `emailFields`. |
| — — Email | `string` | No | — | Email address. |
| — — Category | `string` | No | — | Category label for this email address. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the person. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Person: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Person ID | `string` | Yes | — | ID of the person to delete. |

#### Person: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Person ID | `string` | Yes | — | ID of the person to retrieve. |

#### Person: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Name | `string` | No | — | Name of the person to filter by. |

#### Person: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Person ID | `string` | Yes | — | ID of the person to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the person. Anything you leave out is left as it is. |
| — Address | `fixedCollection` | No | `{}` | Address of the person. Nest the values under `addressFields`. |
| — — Street | `string` | No | — | Street address. |
| — — City | `string` | No | — | City. |
| — — State | `string` | No | — | State or region. |
| — — Postal Code | `string` | No | — | Postal or ZIP code. |
| — — Country | `string` | No | — | ISO 3166 alpha-2 country code |
| — Details | `string` | No | — | Description to set for the person. |
| — Email Domain | `string` | No | — | Email domain used by the person. |
| — Emails | `fixedCollection` | No | `{}` | Email addresses for the person. Nest the values under `emailFields`. |
| — — Email | `string` | No | — | Email address. |
| — — Category | `string` | No | — | Category label for this email address. |
| — Name | `string` | No | — | Name to set for the person. |
| — Phone Numbers | `fixedCollection` | No | `{}` | Phone numbers for the person. Nest the values under `phoneFields`. |
| — — Number | `string` | No | — | Phone number. |
| — — Category | `string` | No | — | Category label for this phone number. |

#### Project: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the project to create. |
| Additional Fields | `collection` | No | `{}` | Optional project fields to send with the create request. |
| — Assignee ID | `string` | No | — | ID of the user who will own the project. |
| — Details | `string` | No | — | Description of the project to create. |
| — Status | `options` | No | `Open` | Status to set for the project. |
| | | | | Options: `Completed`, `Open` |

#### Project: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID | `string` | Yes | — | ID of the project to delete. |

#### Project: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID | `string` | Yes | — | ID of the project to retrieve. |

#### Project: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Name | `string` | No | — | Name of the project to filter by. |

#### Project: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID | `string` | Yes | — | ID of the project to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the project. Anything you leave out is left as it is. |
| — Assignee ID | `string` | No | — | ID of the user who will own the project. |
| — Details | `string` | No | — | Description to set for the project. |
| — Name | `string` | No | — | Name to set for the project. |
| — Status | `options` | No | `Open` | Status to set for the project. |
| | | | | Options: `Completed`, `Open` |

#### Task: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name | `string` | Yes | — | Name of the task to create. |
| Additional Fields | `collection` | No | `{}` | Optional task fields to send with the create request. |
| — Assignee ID | `string` | No | — | ID of the user who will own the task. |
| — Details | `string` | No | — | Description of the task to create. |
| — Priority | `options` | No | `High` | Priority to set for the task. |
| | | | | Options: `High`, `None` |
| — Status | `options` | No | `Open` | Status to set for the task. |
| | | | | Options: `Completed`, `Open` |

#### Task: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task to delete. |

#### Task: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task to retrieve. |

#### Task: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters | `collection` | No | `{}` | Narrow the search before results are returned. |
| — Assignee IDs | `string` | No | — | Comma-separated IDs of assignees to filter by. |
| — Project IDs | `string` | No | — | Comma-separated IDs of projects to filter by. |

#### Task: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID | `string` | Yes | — | ID of the task to update. |
| Update Fields | `collection` | No | `{}` | Fields to change on the task. Anything you leave out is left as it is. |
| — Assignee ID | `string` | No | — | ID of the user who will own the task. |
| — Details | `string` | No | — | Description to set for the task. |
| — Name | `string` | No | — | Name to set for the task. |
| — Priority | `options` | No | `High` | Priority to set for the task. |
| | | | | Options: `High`, `None` |
| — Status | `options` | No | `Open` | Status to set for the task. |
| | | | | Options: `Completed`, `Open` |

#### User: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `5` | Max number of results to return. _(shown when Return All is `false`)_ |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The Copper record is **merged onto the input item JSON** — the fields the API returns are spread over the incoming item, so anything your upstream nodes put on the item is still there unless Copper returns a field with the same name. Binary data on the input item is forwarded unchanged.

Item counts depend on the operation:

- **Create, Get, Update and Delete** produce exactly one output item per input item.
- **Get Many** (`getAll`, on every resource — company, customerSource, lead, opportunity, person, project, task and user) **fans out**: one output item per record returned. An input item that matches ten companies leaves ten output items; an input item that matches nothing leaves no output items at all, so a downstream node may see fewer items than it received.

The node does not add fields of its own — the merged fields are whatever the Copper API returns for that resource, which for records includes the record `id` you need for later Get, Update and Delete calls. A typical Get Many item looks like this:

```json
{
  "orderRef": "SO-4192",
  "id": 12345678,
  "name": "Acme Corporation",
  "email_domain": "acme.com",
  "details": "Leading technology company",
  "date_created": 1765432100,
  "date_modified": 1765432900
}
```

Here `orderRef` came in on the item and the rest came back from Copper. Reference the result downstream by expression, for example `{{ $json.id }}`.

Failures do not merge anything onto the item: with error handling set to **continue** or **errorPort** a failed item is replaced by an error item instead.

## Usage Examples

- Create a new company in Copper CRM
- List all leads from Copper
- Update a person record in Copper
- Delete an opportunity by ID in Copper
- Get all tasks assigned to a user in Copper

## Example Configuration

Create a company with an address and a phone number taken from the incoming item:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "company",
    "operation": "create",
    "name": "{{ $json.companyName }}",
    "additionalFields": {
      "details": "{{ $json.summary }}",
      "email_domain": "{{ $json.domain }}",
      "address": {
        "addressFields": {
          "street": "{{ $json.street }}",
          "city": "{{ $json.city }}",
          "state": "{{ $json.state }}",
          "postal_code": "{{ $json.postcode }}",
          "country": "US"
        }
      },
      "phone_numbers": {
        "phoneFields": {
          "number": "{{ $json.phone }}",
          "category": "work"
        }
      }
    }
  }
}
```

List up to 25 companies in a single country, one output item per company:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "company",
    "operation": "getAll",
    "returnAll": false,
    "limit": 25,
    "filterFields": {
      "country": "US"
    }
  }
}
```

Create an opportunity and link it to an existing contact and customer source:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "opportunity",
    "operation": "create",
    "name": "{{ $json.dealName }}",
    "customerSourceId": "{{ $json.sourceId }}",
    "primaryContactId": "{{ $json.contactId }}"
  }
}
```

Update a person, adding an email address and refreshing the description:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "person",
    "operation": "update",
    "personId": "{{ $json.id }}",
    "updateFields": {
      "details": "Synced from the signup form on {{ $datetime.now }}",
      "emails": {
        "emailFields": {
          "email": "{{ $json.email }}",
          "category": "work"
        }
      }
    }
  }
}
```

Create a follow-up task and assign it to a Copper user:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "task",
    "operation": "create",
    "name": "Follow up with {{ $json.contactName }}",
    "additionalFields": {
      "assignee_id": "{{ $json.ownerId }}",
      "details": "Call back about {{ $json.dealName }}",
      "priority": "High",
      "status": "Open"
    }
  }
}
```

Fetch every user in the account so you can map names to assignee IDs:

```json
{
  "type": "copper",
  "parameters": {
    "resource": "user",
    "operation": "getAll",
    "returnAll": true
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Use Copper to manage CRM records (companies, leads, opportunities, people, projects, tasks) in Copper CRM for Google Workspace.