Kommo + Stripe: Automatic Payment Links from the Pipeline Without Manual Entry
There is no native integration between Kommo and Stripe. The Kommo Marketplace does not include an official Stripe connector, and Stripe does not integrate with Kommo through its own App Marketplace. In practice, sales managers either create payment links manually in the Stripe Dashboard and paste them into a message to the client, or transfer the deal amount manually to another tool. Both approaches are sources of errors and delays.
A custom integration solves this differently: when a deal moves to the “Invoice Sent” stage, a Stripe Payment Link is created automatically with the amount from the deal field, the link appears in the deal card and is sent to the client, and the payment status is updated in Kommo via webhook.
Why There Is No Native Integration
Stripe builds its ecosystem around developers: their App Marketplace includes connectors for ecommerce platforms (Shopify, WooCommerce), SaaS tools (Salesforce, HubSpot), and accounting systems. Stripe does not prioritize CRM integrations with smaller platforms — the use cases are too different.
Kommo, for its part, has marketplace integrations with payment systems primarily for the post-Soviet market (TBC Bank, PayU). Stripe is absent from their priorities.
Zapier/Make provide a partial workaround: a trigger on stage change -> create a Payment Link via the Stripe API action. But this approach has specific limitations:
— Zapier cannot read custom deal fields for the payment amount
— Zapier may miss the Stripe webhook on successful payment under an unstable connection
— There is no mechanism for updating a specific field in the Kommo card upon receiving a payment_intent.succeeded event
What the Custom Integration Can Do
Payment Link creation on trigger:
— The manager moves the deal to the “Awaiting Payment” stage
— Digital Pipeline triggers a webhook to the custom backend
— Backend reads the amount from the deal field (price), client name from the contact
— Creates a Stripe Payment Link via POST /v1/payment_links with the required amount and metadata (kommo_lead_id)
— Writes the payment link URL to a custom deal field
— Optionally: sends the link to the client via WhatsApp or email from Kommo
Stripe webhook processing:
— On successful payment, Stripe sends payment_intent.succeeded
— Backend verifies the signature (Stripe-Signature header + webhook secret)
— Finds the deal in Kommo by kommo_lead_id from the metadata
— Updates the “Payment Status” field -> “Paid”, records the date and amount
— Optionally: automatically moves the deal to the next stage
Partial payments and subscriptions:
— Stripe supports payment_link with subscription_data — for recurring payments
— On each successful charge (invoice.payment_succeeded) — updates the field in Kommo
— Overdue (invoice.payment_failed) — creates a task for the manager in Kommo
Technical Architecture
Kommo Digital Pipeline (stage -> webhook)
↓
Backend (Node.js / Python)
-> Kommo API: GET /api/v4/leads/{id} (read amount, contact)
-> Stripe API: POST /v1/payment_links
{ line_items: [{ price_data: { unit_amount, currency }, quantity: 1 }],
metadata: { kommo_lead_id: "...", kommo_contact_id: "..." },
after_completion: { type: "redirect", redirect: { url: "..." } } }
-> Kommo API: PATCH /api/v4/leads/{id} (write link URL)
Stripe Webhook -> Backend
event: payment_intent.succeeded
-> verify Stripe-Signature
-> extract kommo_lead_id from metadata
-> Kommo API: PATCH /api/v4/leads/{id} (payment status, date, amount)
Idempotency: on repeated webhook delivery (Stripe guarantees at-least-once delivery) — check payment_intent.id in the custom field. If already present — skip.
Link creation errors: if Stripe returned an error (no product, wrong currency) — create a task for the manager in Kommo with the error text, do not fail silently.
Custom Fields in Kommo for the Integration
Several fields need to be created in the deal for the integration to work:
| Field | Type | Purpose |
|---|---|---|
| Stripe Payment Link | URL | Payment link |
| Payment Status | List | Not Issued / Awaiting / Paid / Overdue |
| Payment Date | Date | Filled automatically |
| Stripe Payment Intent ID | Text | For idempotency |
| Amount Due | Number | If different from the deal amount |
The “Amount Due” field is needed if the Payment Link is created for a different amount than the deal’s price (for example, a 50% prepayment).
Real-World Case
A case for an ecommerce agency (development services, 6 managers):
— Deals with an average ticket of $2,000–15,000
— Before integration: the manager created the link manually in Stripe, copied it into a message to the client -> 5–10 minutes per invoice, frequent errors in the amount
— After: when moved to “Awaiting Payment” — the link appears in the card within 3 seconds, the manager clicks “Send” -> WhatsApp with a pre-filled message
— Payment status updates automatically -> the manager sees “Paid” without logging into the Stripe Dashboard
Time to issue an invoice: from 5–10 minutes to 30 seconds. Amount errors: zero (the field is pulled from the deal, not entered manually).
Who This Is Relevant For
A Kommo + Stripe integration makes sense if:
— The company accepts payment in foreign currency (USD, EUR, GBP) from international clients
— The ticket is above $500 — manual link creation each time is unjustifiable
— It is important to see payment status directly in the CRM without switching to Stripe
— A recurring model is used (subscriptions, retainers)
If payments are accepted in local currency — consider integrating Kommo with local payment systems.
For companies on HubSpot, a similar task has its own pitfalls — see HubSpot + Stripe: Hidden Fees and Native Integration Limitations.
Frequently Asked Questions
Can you integrate Kommo + Stripe via Zapier?
Partially. Zapier can create a Payment Link on stage change — if the amount is fixed or stored in a standard field. But Zapier cannot reliably handle Stripe webhooks as a trigger for updating Kommo: webhook triggers in Zapier are unstable under high load, there is no signature verification, and there is no logging of missed events. A custom endpoint is required for production use.
Does Stripe support multiple currencies?
Yes. When creating a Payment Link, you can specify any currency supported by Stripe (200+ currencies). In the Kommo integration: if the deal has a “Currency” field — the backend uses it when creating the link. If not — the default currency of the Stripe account is used.
What happens if the client did not pay the link?
Stripe Payment Links do not have a built-in expiration (but can be deactivated manually via the API). In a custom integration, a task is usually added in Kommo after N days from link creation if the payment status has not changed: “Remind the client about payment.”
How does the integration handle a partial refund?
Stripe sends a charge.refunded event on a refund. The backend processes it the same way as payment_intent.succeeded — updates the field in Kommo: status -> “Refunded”, refund amount. The manager sees this in the deal card without logging into Stripe.
Is PCI certification required for such an integration?
No. The client enters their card payment details directly on the Stripe-hosted page — your backend never touches card data. Stripe handles PCI DSS compliance. Your responsibility: store the Stripe Secret Key in a secure storage (env variables, AWS Secrets Manager) and do not log it.
Summary
- There is no native Kommo + Stripe integration and none is planned
- Zapier provides a partial solution, not suitable for production due to unreliable webhook handling
- Custom integration: Payment Link is created automatically -> payment status is updated in Kommo via Stripe webhook
- Key technical considerations: Stripe-Signature verification, idempotency, error handling with a task in Kommo
- Typical implementation timeline — 2–3 weeks
If you accept payments via Stripe and manage deals in Kommo — describe your workflow and volume. Exceltic.dev will assess the complexity and propose a specific solution.