# Pipedrive

![pipedrive_logotype_light.png](https://assets.relyanceuat.xyz/images/docs/6565394570893/6564990349069.png)
Pipedrive is a web-based sales customer relationship management (CRM) solution. It also serves as an account-management tool with the ability to assist with marketing and the entire sales process. Pipedrive streamlines every action involved in converting a potential deal into a successful sale.

In order to integrate Pipedrive with Relyance AI you will need a **Pipedrive Subdomain** and complete an **Oauth2** flow.

#### In Pipedrive:

1. Login to your Pipedrive account.
2. When logged into your Pipedrive instance, you should have a url that looks something like this:[https://relyance-sandbox.pipedrive.com](#)

![Pipedrive-1.png](https://assets.relyanceuat.xyz/images/docs/6565394570893/6565187641101.png)

3. In the above example “relyance-sandbox” is what you need to copy. This is your **Pipedrive Subdomain**.

#### In the Relyance AI application:

1. Login to your Relyance account.
2. Navigate to the **Settings** Menu in the bottom left-hand side.
3. Select **Integrations**.
4. Click on the **Vendor Integration** tab.
5. Find the **Pipedrive** integration card and click it to open its connections.
6. Under **Authentication Method**, choose **Oauth2 / App Token**.
8. Click the **Process DSRs** checkbox if processing DSRs.
9. Paste the **Pipedrive Subdomain** into the respective field.

![Pipedrive-DSR-1.png](https://assets.relyanceuat.xyz/images/docs/6565394570893/13956797806605.png)

10. Click **Authenticate**.
11. This will bring up a login page on the Pipedrive site:

![Pipedrive-3.png](https://assets.relyanceuat.xyz/images/docs/6565394570893/6565379209101.png)

12. Login to Pipedrive and follow any prompts to accept the connection.
13. At this point, you should see the following result on the Vendor Integrations page:

![Pipedrive-4.png](https://assets.relyanceuat.xyz/images/docs/6565394570893/6565387093389.png)

14. Congratulations, you are now connected to **Pipedrive**.

<!-- failure-modes:begin (generated from the integration catalog; do not hand-edit) -->

## If the connection reports Connected but returns nothing

These are the ways this integration comes back empty without reporting an error. Generated from the integration catalog, so it tracks what the connection actually asks for.

1. **A feature you enabled returns nothing.** Some scopes belong to a feature rather than to the connection: **Data subject requests** needs `contacts:full`, `users:read`, `deals:read`, `mail:read`. Turning the feature on after the connection exists does not widen the grant it already holds, so re-authenticate the connection.
2. **Authorised, then empty.** The connection carries an authorisation, not a password: it stops returning data if the account that granted it loses access, its own permissions narrow, or the grant is revoked at the vendor. None of that reports an error here -- the connection keeps its last status until the next scan.
3. **Check the address fields before suspecting the credentials.** **Pipedrive Subdomain** identifies which tenant, region or host to talk to. A wrong value there fails authentication and looks exactly like a bad secret.

<!-- failure-modes:end -->

<!-- terraform-examples:begin (generated from the integration catalog; do not hand-edit) -->

## Manage this integration with Terraform

Connections for this integration can be managed as code with the [Relyance Terraform provider](https://registry.terraform.io/providers/Relyance/relyance/latest). Non-secret fields go in `auth.params`; secret fields go in `auth.secrets_wo`, which is write-only — never stored in Terraform state. Rotate secrets by bumping `auth.secrets_wo_version`.

The **OAuth (browser authorization)** method uses a browser authorization flow, so the connection is created in the Relyance app. Manage it in Terraform afterwards by importing it (`terraform import relyance_integration_connection.example pipedrive/<connection_id>`) or reading it with the `relyance_integration_connection` data source.

<!-- terraform-examples:end -->
