Pipedrive
Use LicenseKit with Pipedrive when a won deal should provision a customer, order, and software license.
Who This Is For
- teams that use Pipedrive as their sales pipeline
- developers connecting won-deal events to license fulfillment
- support and success teams that need license status visible from a deal record
When To Use This
Use the Pipedrive integration when Pipedrive should remain the CRM and LicenseKit should issue access after revenue is won.
Do not use it as subscription management or billing.
How It Works
The integration receives Pipedrive deal-change webhook events and provisions when a deal becomes won.
Provisioning behavior:
- create or reuse a LicenseKit customer with stable Pipedrive-derived metadata
- create or reuse a LicenseKit order with
external_system = "pipedrive" - create a LicenseKit license linked to the customer and order
- store the deal-to-license mapping for idempotency and panel display
- show LicenseKit status in a Pipedrive JSON panel on the deal detail view
The repo includes:
cmd/pipedrive-integrationinternal/integrations/pipedriveinternal/integrations/pipedrive/panel_schema.json
Key Routes
GET /oauth/installGET /oauth/callbackPOST /pipedrive/webhookGET /pipedrive/panel/dealGET /healthz
Configuration Shape
bash
PIPEDRIVE_INTEGRATION_ADDR=":8090"
PIPEDRIVE_PUBLIC_BASE_URL="https://your-public-integration-host"
PIPEDRIVE_CLIENT_ID="..."
PIPEDRIVE_CLIENT_SECRET="..."
PIPEDRIVE_REDIRECT_URL="https://your-public-integration-host/oauth/callback"
PIPEDRIVE_PANEL_BASIC_USER="licensekit-panel"
PIPEDRIVE_PANEL_BASIC_PASSWORD="..."
PIPEDRIVE_WEBHOOK_BASIC_USER="licensekit-webhook"
PIPEDRIVE_WEBHOOK_BASIC_PASSWORD="..."
LICENSEKIT_BASE_URL="https://api.licensekit.dev"
LICENSEKIT_API_TOKEN="..."
LICENSEKIT_PRODUCT_ID="prod_..."
LICENSEKIT_POLICY_ID="pol_..."
LICENSEKIT_DEFAULT_TERM_DAYS="365"For production, replace the local state file with encrypted durable storage if the integration is operated beyond private app trials.
Common Mistakes
- treating every deal update as a provisioning event instead of checking for
won - exposing panel or webhook routes without the configured auth
- losing idempotency by not preserving the Pipedrive company, host, and deal IDs
- expecting Pipedrive to enforce runtime access after the license has been issued