Journal
How a website lead gets into Bitrix24
5 min
I break down three working ways to send a lead from a website to Bitrix24: CRM form, open channel widget, and webhook from your own backend. I explain why you should test the chain with a test lead and save the source with UTM. For my Next.js site, a webhook is more appropriate than a heavy widget that slows down the page.
What a person expects from the phrase "lead directly to CRM"
When people say "lead directly to CRM", they usually mean that after clicking a button on the website, the data is not lost but ends up in the manager's working list. It's as if you dropped a letter into a mailbox and it automatically sorted itself into folders and got marked with the right color.
In reality, between the form on the website and the card in Bitrix24 there is a chain: the browser sends data, the server or a third-party service receives it, transforms it, and passes it to the CRM. If even one link is silent, the lead won't arrive, and you'll only find out when the client calls asking "why aren't you responding?"
Therefore, it's important not just to connect some method, but to test the entire path with a test lead and make sure that the card contains not only the name and phone number but also the traffic source. Otherwise, in a month you won't be able to understand which advertising brings leads and which just burns the budget.
CRM form: fast, but you depend on the vendor
The simplest way is to use the ready-made CRM form from Bitrix24. You create the form in the interface, get the code, and paste it on the website. Outwardly it looks like a regular form, but the data goes directly to the CRM, bypassing your server.
The mechanism is similar to renting a cell in someone else's office: you don't need to build your own building, but you depend on the owner's schedule and rules. The form code is embedded on your page, but the processing of submission and data storage happen on Bitrix24 servers. You don't fully control its behavior: styles, loading speed, and availability depend on the vendor.
In practice, this is convenient when you need to quickly launch lead collection without a programmer. But if the site is already running and you want to control every pixel, the CRM form can become a limitation. Besides, not all website builders allow inserting such code without extra hassle.
Widget: convenient for the manager, heavy for the site's first screen
The open channel widget is a chat that hangs in the corner of the site and allows the visitor to write to a messenger or leave contacts. For the manager, it's convenient: all inquiries fall into one window, and you can respond directly from Bitrix24.
But the widget has a cost: it pulls scripts, styles, and connections to the vendor's servers. On slow mobile internet or a cheap smartphone, this can slow down the loading of the first screen. Imagine that a turnstile was attached to the door of your store, which first checks the passport of every incoming person — it seems safe, but the queue grows.
For my Next.js site, where speed and control over the code are important, a heavy widget is often not justified. It's better to leave a lightweight form and send data via webhook, and use the widget only if you really need real-time chat.
Webhook from your backend: lead, source, idempotency
A webhook is when your server sends data to Bitrix24 via an HTTP request. You write a form handler on your backend, validate the data, add the source and UTM tags, and then send a request to the address provided by Bitrix24.
It's like a courier you hired yourself: he knows your address, takes the package from the client, and delivers it to the right office, recording where the client came from along the way. You control every step and can add duplicate protection — idempotency, so that the same lead is not created twice if the user clicks the button several times.
In practice, for Next.js this is the most flexible option: you write an API route that accepts form data, validates it, saves it to your database if necessary, and sends it to Bitrix24. For idempotency, you can generate a unique request key on the client and pass it to Bitrix24, and on the CRM side check whether a lead with such a key already exists. If the website builder has no API, that's a platform limitation, not a reason to parse the admin panel — you risk breaking everything at the first update.
How to know the connection is alive: one test lead in the right funnel
After connecting any method, don't rely on the words "it should work". Send one test lead from a real device, as a client would: fill out the form, click the button, and track where it appears in Bitrix24.
Check not only the fact of appearance but also the content: name, phone, comment, and most importantly — the source and UTM tags. If you run advertising, without this data you can't distinguish a lead from contextual advertising from a lead from social networks. It's like receiving a package without a return address: it arrived, but from whom is unclear.
If the lead didn't arrive, look for the problem along the chain: did the browser send the request? Did the server accept it? Did Bitrix24 return an error? Often the culprit is not the webhook itself but an incorrect data format or a missing required field. One test lead in the right funnel is the minimum check that saves hours of troubleshooting later.
Use the CRM form from Bitrix24: create it in the interface, copy the code, and paste it on the website. Data will go directly to the CRM, but you are limited by the form's capabilities and depend on the vendor's servers.
A webhook doesn't load extra scripts on the page, you fully control data sending, and you can add validation, source, and duplicate protection. The widget is convenient for chat but slows down loading and depends on external servers.
Send a test lead and trace the entire chain: browser, your server, request to Bitrix24. Check the data format, required fields, and API response. Often the problem is an incorrect webhook URL or a missing required field.
To understand which advertising brings leads. Without this data, you can't distinguish a client from contextual advertising from a client from social networks and will spend budget blindly.