---
title: "Copper API: pricing, rate limits & MCP | ONEGTMLAB"
description: "Copper API: Google Workspace-native CRM with a Developer API v1 (leads, people, companies, opportunities, projects, tasks, activities, custom fields)…"
canonical: https://www.onegtmlab.dev/tool-directory/crm/copper
---

# Copper API: pricing, rate limits & MCP | ONEGTMLAB

[](/)

[

Book a call

](/book)

![](/_astro/copper.CFmJ3qY-.svg)

API review

# Copper API review

Google Workspace-native CRM with a Developer API v1 (leads, people, companies, opportunities, projects, tasks, activities, custom fields), lead upsert, small bulk endpoints (10 records), search, and webhooks that are never retried. Best for google Workspace teams that want a simple CRM inside Gmail.

Verified 25 Oct 2026 · 8 endpoints listed

[

See pricing

](#pricing)[

Copper API docs

](https://developer.copper.com/introduction/requests.html)

At a glance

Category

CRM

Pricing model

Per seat

Free tier

No free plan

Entry price

$23/mo, billed annually Basic

Auth

API key

Official MCP

No official server

Best for

Google Workspace teams that want a simple CRM inside Gmail

[copper.com ↗](https://www.copper.com)[Pricing page ↗](https://www.copper.com/pricing)

## What a call costs

The actions you pay for, as Copper prices them.

Action

Cost

Atomically update the lead matching given criteria or create it. Match on name, email or a custom field (match.field\_name 'custom' with custom\_field\_definition\_id + value; the field must be available on Leads and filterable). 0 matches = create, 1 = update, >1 = 422 with matching IDs, >30 = 422 without IDs

none

Fetch a person by email (email is the unique key for People)

none

List/search people with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

List/search companies with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

List/search leads with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

List/search opportunities with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

Bulk create companies (beta Bulk API; email domains must not overlap existing companies, else those records fail)

none

Create a webhook subscription. type: lead, person, company, opportunity, project, task (overview also lists activity\_log); event: new, update, delete

none

## Pricing, plan by plan

US dollars, as Copper's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier No free plan. 14-day free trial, no credit card; signup is Google-only ('Continue with Google', Copper only works with Gmail & Google Workspace).

### Basic

$29/mo

billed monthly

$23/mo

billed annually

per seat; 2,500 contact limit; 25 custom fields; no Leads or Sales opportunities objects

No API

### Professional

$69/mo

billed monthly

$59/mo

billed annually

per seat; 15,000 contact limit; 50 custom fields; workflows, bulk email, integrations

API included

### Business

$134/mo

billed monthly

$99/mo

billed annually

per seat; unlimited contacts and custom fields; email series, custom reports, Okta SSO

API included

## Rate limits

All API calls: 180 requests per minute on a rolling window, 429 when exceeded.

More on limitsLess

Bulk APIs: additional 3 requests/second and max 10 records per request. Webhook notifications: 600 per minute and 1,800 per 10 minutes per account.

## How to get an API key

Copper uses API key. The steps below follow Copper's own docs.

1.  Create a Copper account. API access starts on the Professional plan.
2.  Copper web app > System settings > API Keys > GENERATE API KEY; OAuth 2.0 for partner integrations
3.  Send it with every request: headers: X-PW-AccessToken: <API key>, X-PW-Application: developer\_api, X-PW-UserEmail: <email of key owner>, Content-Type: application/json.
4.  Make a first call: Atomically update the lead matching given criteria or create it. Match on name, email or a custom field (match.field\_name 'custom' with custom\_field\_definition\_id + value; the field must be available on Leads and filterable). 0 matches = create, 1 = update, >1 = 422 with matching IDs, >30 = 422 without IDs. Keep the key in an environment variable, never in the command.
    
    ```
    curl -X PUT "https://api.copper.com/developer_api/v1/leads/upsert" \
      -H "X-PW-AccessToken: $COPPER_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{}'
    ```
    

## Where the docs live

What

Where

Documentation

[developer.copper.com](https://developer.copper.com/)

API reference

[developer.copper.com/introduction/requests.html](https://developer.copper.com/introduction/requests.html)

OpenAPI spec

[developer.copper.com/download/copper\_postman\_collection.json](https://developer.copper.com/download/copper_postman_collection.json)

Changelog

[developer.copper.com/introduction/changelog.html](https://developer.copper.com/introduction/changelog.html)

Base URL

`https://api.copper.com/developer_api/v1`

SDKs

Embedded integration SDK (for apps inside Copper)

## Strengths and limits

### Where it fits

-   Google Workspace teams that want a simple CRM inside Gmail
-   Upserting leads by a match field or custom field (PUT /leads/upsert)
-   People and companies with platform-enforced unique keys (person email, company email domain)

### Where it falls short

-   Bulk loads: 180 requests/minute overall, bulk endpoints max 10 records per request and 3 requests/second
-   Reliable event delivery: webhooks fire at most once and are never retried
-   Deep exports through search: search returns only the first 100,000 records
-   Copper Basic plan users: the pricing table shows 'API & Embedded integration SDK' (and Leads) only on Professional and Business

### Worth knowing

-   Webhooks are fire-once: no retries on any failure, so a down endpoint loses events; reconcile with periodic search. Source: [developer.copper.com/webhooks/overview.html](https://developer.copper.com/webhooks/overview.html)
-   Bulk endpoints accept only 10 records (422 'Request size too large, limit is 10') and have their own 3 req/s cap. Source: [developer.copper.com/companies/bulk-company-create.html](https://developer.copper.com/companies/bulk-company-create.html)
-   Three auth headers are required on every call, including X-PW-UserEmail of the key owner. Source: [developer.copper.com/introduction/requests.html](https://developer.copper.com/introduction/requests.html)
-   Company email domain and person email are unique keys; a bulk company create fails for any record whose email\_domains overlap an existing company. Source: [developer.copper.com/companies/bulk-company-create.html](https://developer.copper.com/companies/bulk-company-create.html)
-   Search stops at the first 100,000 records regardless of pagination. Source: [developer.copper.com/introduction/pagination.html](https://developer.copper.com/introduction/pagination.html)

4 moreShow fewer

-   API domain moved from api.prosperworks.com to api.copper.com. Source: [developer.copper.com](https://developer.copper.com/)
-   No API on the Basic plan: 'API & Embedded integration SDK' is ticked only for Professional and Business. Source: [copper.com/pricing](https://www.copper.com/pricing) (rendered comparison table)
-   Signup is Google-only, so every Copper account (and the X-PW-UserEmail header value) is a Google Workspace/Gmail identity.
-   The official MCP is announced for a November 2026 beta (Claude only, read-only); until then only third-party connectors exist, which Copper notes run on an admin API key. Source: [copper.com/mcp](https://www.copper.com/mcp)

## Who should use it

Use Copper for

Google Workspace teams that want a simple CRM inside Gmail

Look elsewhere for

Bulk loads: 180 requests/minute overall, bulk endpoints max 10 records per request and 3 requests/second

## If Copper is not the answer

Other CRM tools in this directory, each with its own review.

[

![](/_astro/attio.CoO4UDxn_Zx1tGp.webp)

Attio

CRM

Free planOfficial MCP

Best for start-ups and agencies wanting a free/cheap CRM with API, webhooks and MCP on every plan.

Attio API review →](/tool-directory/crm/attio)[

![](/_astro/close.BGAid65p.svg)

Close

CRM

From $9/moOfficial MCP

Best for inside-sales teams that call and email from the CRM.

Close API review →](/tool-directory/crm/close)[

![](/_astro/folk.B0kqszAJ_29Kdhq.webp)

folk

CRM

From $24/moOfficial MCP

Best for agencies, VCs and founder-led teams that want a simple CRM their agents can write to.

folk API review →](/tool-directory/crm/folk)

## Before you build

Four things to settle first, each read off Copper's own pages.

-   **Confirm the API is on your plan**API access starts on the Professional plan. Free tier: No free plan.
    
-   **Keep the key out of your code**API key. It is sent as: headers: X-PW-AccessToken: <API key>, X-PW-Application: developer\_api, X-PW-UserEmail: <email of key owner>, Content-Type: application/json.
    
-   **Design around the rate limit**All API calls: 180 requests per minute on a rolling window, 429 when exceeded.
    
-   **Know the catch before you scale**Webhooks are fire-once: no retries on any failure, so a down endpoint loses events; reconcile with periodic search. Source: [developer.copper.com/webhooks/overview.html](https://developer.copper.com/webhooks/overview.html)
    

## Want us to build it for you?

Tell us what you want Copper to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

[

Book a call

](/book)[

See case studies

](/case-studies)

Read from [copper.com/pricing](https://www.copper.com/pricing), [developer.copper.com/introduction/requests.html](https://developer.copper.com/introduction/requests.html) and [developer.copper.com/introduction/authentication.html](https://developer.copper.com/introduction/authentication.html). Verified 25 Oct 2026.

All 8 endpointsFor developers: method, path, what it does and what it costs.

**Base URL:** `https://api.copper.com/developer_api/v1`

**Bulk and async:** Beta Bulk APIs (since 2023-08-22): bulk create for people, companies, leads, opportunities (added 2025-01-09) and activities; bulk update for people, companies and leads only. Max 10 records per request, extra 3 requests/second limit, response order matches request order. Source: [developer.copper.com/companies/bulk-company-create.html](https://developer.copper.com/companies/bulk-company-create.html); [developer.copper.com/introduction/changelog.html](https://developer.copper.com/introduction/changelog.html) (verified 2026-10-25)

**Webhooks:** Yes. Up to 100 active subscriptions per account; 600 notifications/min and 1,800 per 10 min; up to 30 record IDs per notification; https only; optional secret and custom headers; fired at most once and NEVER retried regardless of response. Source: [developer.copper.com/webhooks/overview.html](https://developer.copper.com/webhooks/overview.html) (verified 2026-10-25)

Filter endpoints

8 endpoints

Method

Path

What it does

Cost

PUT

`/leads/upsert`

Atomically update the lead matching given criteria or create it. Match on name, email or a custom field (match.field\_name 'custom' with custom\_field\_definition\_id + value; the field must be available on Leads and filterable). 0 matches = create, 1 = update, >1 = 422 with matching IDs, >30 = 422 without IDs

none

POST

`/people/fetch_by_email`

Fetch a person by email (email is the unique key for People)

none

POST

`/people/search`

List/search people with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

POST

`/companies/search`

List/search companies with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

POST

`/leads/search`

List/search leads with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

POST

`/opportunities/search`

List/search opportunities with filters (AND across criteria; some fields filter on empty, assignee\_ids -2 = unassigned)

none

POST

`/companies/bulk_create`

Bulk create companies (beta Bulk API; email domains must not overlap existing companies, else those records fail)

none

POST

`/webhooks`

Create a webhook subscription. type: lead, person, company, opportunity, project, task (overview also lists activity\_log); event: new, update, delete

none

[](/)

© 2026 ONEGTMLAB Private Limited. All rights reserved.

COMPANY

[

Why Us

](/#why-us)[

Process

](/#timeline)[

Blogs

](/blogs)[

About

](/about)[

Clients

](/clients)[

Free resources

](/free-resources)[

Newsletter

](/newsletter)

Services

[

GTM Engineering

](/ai-gtm-engineering)[

Account-Based Marketing

](/services/account-based-marketing)[

Paid Media

](/services/paid-media)[

Content Engineering

](/linkedin-personal-branding)[

RevOps

](/services/revops)[

SEO, AEO & GEO

](/services/seo-aeo-geo)[

All services

](/services)

![](/_astro/wordmark-3d.CMEfGdYr.svg)
