Pipedrive
Pipedrive is a sales CRM. Datafly Signal creates Person records server-side (API v2 POST /api/v2/persons) when a visitor submits a lead form or signs up, with name, email and phone.
Why route Pipedrive through Datafly Signal
- Records come from your server, not the browser. They reach Pipedrive even when a tracker blocker or a failed page unload would have dropped a client-side call, and no form integration or browser tag is needed.
- Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
- One consent decision governs every destination. Pipedrive is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Get your Pipedrive credentials
Copy your API token
In Pipedrive open Settings > Personal preferences > API and copy your personal API token. The token acts as its user, so use a user that can add contacts.
Configuration
| Field | Required | Description |
|---|---|---|
api_token | Yes | Your personal Pipedrive API token (Settings > Personal preferences > API). Sent in the x-api-token header. The token acts as the user it belongs to, so use a user that can add contacts. |
Management UI setup
- Go to Integrations in the sidebar and open the Integration Library tab.
- Find Pipedrive under CRM and click Install.
- Choose a preset, enter the fields above and click Install Integration.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/pipedrive/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Pipedrive",
"variant": "default",
"config": {
"api_token": "your_api_token"
},
"delivery_mode": "server_side"
}'What Signal sends
An example request, rendered from the default preset for generate_lead:
POST https://api.pipedrive.com/api/v2/persons
{
"emails": [
{
"label": "work",
"primary": true,
"value": "neill@example.com"
}
],
"name": "Neill Mcfixture",
"phones": [
{
"label": "work",
"primary": true,
"value": "+447700900123"
}
]
}| Field | Source |
|---|---|
name | The name trait, else first and last name. Required by Pipedrive: an event without a name is not sent. |
emails | [{value, primary: true, label: "work"}], the email trimmed and lower-cased. |
phones | [{value, primary: true, label: "work"}], the phone in E.164. |
Pipedrive is your own CRM and has no hashed identifier, so name, email and phone are sent in plain text. An event with neither an email nor a phone is not sent. The API token travels in the x-api-token header, never in the URL.
Presets
| Preset | Signal events |
|---|---|
Lead Capture (default) | generate_lead, sign_up |
B2B / SaaS (saas) | generate_lead, demo_requested, sign_up |
Insurance (insurance) | quote_requested, generate_lead |
Automotive (automotive) | test_drive_booked, dealer_contacted, generate_lead |
Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.
Notes and limits
- Pipedrive’s API creates a new person on every call; there is no upsert. The presets map one-off lead events, not
identify(which fires on every login). Use Pipedrive’s Merge duplicates if a visitor converts twice. - Custom fields use per-account keys; add them on the installed integration under
custom_fields.<key>.
Consent
Assign the consent category you use for this processing when you install Pipedrive, so an event is delivered only when the visitor has granted it. Signal never writes a cookie-banner choice into Pipedrive’s contact permissions (marketing_status): consent to cookies is not consent to be emailed, called or messaged. Record communication opt-in and opt-out in Pipedrive.
Verify it’s working
- Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
- Confirm a 2xx response from Pipedrive.
- Find the record in Pipedrive and check it arrived.
Troubleshooting
| Symptom | Resolution |
|---|---|
401 | The API token is wrong or revoked. |
403 | The token’s user cannot add contacts. |
| Nothing sent for an event | The visitor had no name, or neither an email nor a phone, in identify() traits. |