Integrations / Pipedrive
Pipedrive
Sales CRM: deals, people, notes and activities. Works against the connected company's own Pipedrive host (API v2).
10 actions
OAuth 2
5 read5 write
Calls api.pipedrive.com
Connect
const conn = await setu.connections.initiate({ userId: "user_1", toolkit: "pipedrive" });
console.log(conn.connectUrl); // show this to your user
await conn.waitUntilActive();Permissions requested
| Scope | Why it is requested |
|---|---|
base | Identify the connected Pipedrive user and company |
deals:read | Read deals |
deals:full | Create and update deals and attach notes to them |
contacts:read | Read people and organizations |
contacts:full | Create and update people and organizations |
activities:full | Create activities such as calls and tasks |
search:read | Search across deals, people and organizations |
Actions
Add notewritepipedrive.add_noteAdd a note (HTML allowed) to a deal, person, organization or lead. At least one of deal_id, person_id, org_id or lead_id is required.
Needs scope: deals:full
| Input | Type | Description | |
|---|---|---|---|
content | string | Required | Note text, HTML allowed |
deal_id | integer | Optional | Deal id |
person_id | integer | Optional | Person id |
org_id | integer | Optional | Organization id |
lead_id | string | Optional | Lead id (UUID) |
await setu.execute({
userId: "user_1",
action: "pipedrive.add_note",
input: {
"content": "<content>"
},
});Create activitywritepipedrive.create_activitySchedule an activity (call, meeting, task, email) with a subject, type, due date and optional linked deal, person or organization.
Needs scope: activities:full
| Input | Type | Description | |
|---|---|---|---|
subject | string | Required | Activity title |
type | string | Optional | Activity type key, e.g. call, meeting, task, deadline, email, lunch |
due_date | string | Optional | YYYY-MM-DD |
due_time | string | Optional | HH:MM:SS (UTC) |
deal_id | integer | Optional | Linked deal id |
org_id | integer | Optional | Linked organization id |
note | string | Optional | Free-text note |
done | boolean | Optional | Mark as already done |
await setu.execute({
userId: "user_1",
action: "pipedrive.create_activity",
input: {
"subject": "<subject>"
},
});Create dealwritepipedrive.create_dealCreate a deal. Only the title is required; link a person or organization by id and pick a pipeline and stage if needed.
Needs scope: deals:full
| Input | Type | Description | |
|---|---|---|---|
title | string | Required | Deal title |
value | number | Optional | Deal value |
currency | string | Optional | Three-letter currency code |
person_id | integer | Optional | Linked person id |
org_id | integer | Optional | Linked organization id |
pipeline_id | integer | Optional | Pipeline id |
stage_id | integer | Optional | Stage id |
status | string | Optional | |
expected_close_date | string | Optional | YYYY-MM-DD |
await setu.execute({
userId: "user_1",
action: "pipedrive.create_deal",
input: {
"title": "<title>"
},
});Create personwritepipedrive.create_personCreate a person (contact) with a name and optional emails, phone numbers and organization.
Needs scope: contacts:full
| Input | Type | Description | |
|---|---|---|---|
name | string | Required | Full name |
emails | array of object | Optional | Email objects, e.g. [{value, primary, label}] |
phones | array of object | Optional | Phone objects, e.g. [{value, primary, label}] |
org_id | integer | Optional | Organization id |
await setu.execute({
userId: "user_1",
action: "pipedrive.create_person",
input: {
"name": "<name>"
},
});Get dealreadpipedrive.get_dealGet one deal by id with its title, value, status, stage and linked person and organization.
Needs scope: deals:read
| Input | Type | Description | |
|---|---|---|---|
id | integer | Required | Deal id |
await setu.execute({
userId: "user_1",
action: "pipedrive.get_deal",
input: {
"id": 1
},
});Get personreadpipedrive.get_personGet one person by id with their name, emails, phone numbers and organization.
Needs scope: contacts:read
| Input | Type | Description | |
|---|---|---|---|
id | integer | Required | Person id |
await setu.execute({
userId: "user_1",
action: "pipedrive.get_person",
input: {
"id": 1
},
});List dealsreadpipedrive.list_dealsList deals, optionally filtered by status (open, won, lost, deleted), person, organization, pipeline or stage.
Needs scope: deals:read
| Input | Type | Description | |
|---|---|---|---|
status | string | Optional | |
person_id | integer | Optional | Only deals of this person |
org_id | integer | Optional | Only deals of this organization |
pipeline_id | integer | Optional | Only deals in this pipeline |
stage_id | integer | Optional | Only deals in this stage |
limit | integer | Optional | Max results, up to 500 |
cursor | string | Optional | Cursor from additional_data.next_cursor |
await setu.execute({
userId: "user_1",
action: "pipedrive.list_deals",
input: {},
});List peoplereadpipedrive.list_personsList people (contacts), optionally for one organization. Use search_items to find a person by name or email.
Needs scope: contacts:read
| Input | Type | Description | |
|---|---|---|---|
org_id | integer | Optional | Only people of this organization |
limit | integer | Optional | Max results, up to 500 |
cursor | string | Optional | Cursor from additional_data.next_cursor |
await setu.execute({
userId: "user_1",
action: "pipedrive.list_persons",
input: {},
});Search deals, people and organizationsreadpipedrive.search_itemsSearch Pipedrive by text across deals, people, organizations and more. Returns matching items with type, id and name.
Needs scope: search:read
| Input | Type | Description | |
|---|---|---|---|
term | string | Required | Search text, at least 2 characters |
item_types | string | Optional | Comma-separated: deal, person, organization, product, lead, project (default all) |
limit | integer | Optional | Max results, up to 100 |
await setu.execute({
userId: "user_1",
action: "pipedrive.search_items",
input: {
"term": "<term>"
},
});Update dealwritepipedrive.update_dealUpdate fields of a deal by id, for example to move it to another stage or mark it won or lost. Only the fields you pass change.
Needs scope: deals:full
| Input | Type | Description | |
|---|---|---|---|
id | integer | Required | Deal id |
title | string | Optional | Deal title |
value | number | Optional | Deal value |
currency | string | Optional | Three-letter currency code |
person_id | integer | Optional | Linked person id |
org_id | integer | Optional | Linked organization id |
pipeline_id | integer | Optional | Pipeline id |
stage_id | integer | Optional | Stage id |
status | string | Optional | |
expected_close_date | string | Optional | YYYY-MM-DD |
await setu.execute({
userId: "user_1",
action: "pipedrive.update_deal",
input: {
"id": 1
},
});