Add a Lead via Web Form
Scope:
crmWho can execute the method: users with permission to create leads in CRM
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect the MCP server so the assistant can utilize the official REST documentation.
You can place a form on your website to collect potential client data. When a client fills out the form, their information will be sent to the CRM, allowing you to process the request.
Setting up the form consists of two steps.
-
Place the form on an HTML page. It will send data to the handler.
-
Create a file to process the data. The handler will accept and prepare the data, then create a lead using the crm.lead.add method.
1. Creating the Web Form
In Bitrix24, you can automatically create a contact and company from a lead. To make the form suitable for various cases, we will make it universal. For a contact, you need to specify the first name and last name, and for a company, the name. We will create a web form on the website with five fields:
-
NAME— first name, required, -
LAST_NAME— last name, -
COMPANY_TITLE— company name, -
EMAIL— email address, -
PHONE— phone number.
When submitted, the form sends data to the handler form.php.
<form id="form_to_crm" method="POST" action="form.php">
<!-- First Name (required field) -->
<input type="text" name="NAME" placeholder="First Name" required>
<!-- Last Name -->
<input type="text" name="LAST_NAME" placeholder="Last Name">
<!-- Company Name -->
<input type="text" name="COMPANY_TITLE" placeholder="Company Name">
<!-- Email -->
<input type="text" name="EMAIL" placeholder="Email">
<!-- Phone -->
<input type="text" name="PHONE" placeholder="Phone">
<!-- Submit Button -->
<input type="submit" value="Submit">
</form>
<!-- Include jQuery for AJAX request -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#form_to_crm').on('submit', function(el) {
el.preventDefault(); // Prevent default form submission
var formData = $(this).serialize(); // Collect form data
// Send data to the server
$.ajax({
'method': 'POST',
'dataType': 'json',
'url': 'form.php', // Handler file
'data': formData,
success: function(data) {
alert(data.message); // Show result
}
});
});
});
</script>
2. Creating the Form Handler
To process the values from the form fields and add a lead to the CRM, we will create the handler form.php.
To add a lead, we will use the crm.lead.add method. In the fields object, we will pass the fields:
-
TITLE— lead title, which can be composed of the first name and last name, -
NAME— lead's first name, -
LAST_NAME— lead's last name, -
COMPANY_TITLE— company name, -
PHONE— phone number, -
EMAIL— email address.
We will obtain the field values from the form. The system stores phone and email as an array of objects crm_multifield, so they need to be formatted as an array.
-
If a value exists, we add it as the first element
VALUEin the array, and the second value specifies the typeVALUE_TYPE, for example:-
WORK— for phone, -
HOME— for email.
-
-
If no value exists, we pass an empty array.
Check which required fields are configured for leads in your Bitrix24. All required fields must be passed to the crm.lead.add method.
<?php
require_once('crest.php');
// Retrieve and sanitize data from the form
$sName = htmlspecialchars($_POST["NAME"]);
$sLastName = htmlspecialchars($_POST["LAST_NAME"]);
$sCompanyTitle = htmlspecialchars($_POST["COMPANY_TITLE"]);
$sPhone = htmlspecialchars($_POST["PHONE"]);
$sEmail = htmlspecialchars($_POST["EMAIL"]);
// Format phone and email for Bitrix24 in crm_multifield format
$arPhone = (!empty($sPhone)) ? array(array('VALUE' => $sPhone, 'VALUE_TYPE' => 'WORK')) : array();
$arEmail = (!empty($sEmail)) ? array(array('VALUE' => $sEmail, 'VALUE_TYPE' => 'HOME')) : array();
// Create lead title from first name and last name
$sTitle = 'From website: ' . trim($sName . ' ' . $sLastName);
// If there is a company name, add it after the first and last name
if (!empty($sCompanyTitle)) {
$sTitle .= ' — ' . $sCompanyTitle;
}
// Send data to Bitrix24
$result = CRest::call(
'crm.lead.add',
[
'fields' => [
'TITLE' => $sTitle, // Lead title
'NAME' => $sName, // First Name
'LAST_NAME' => $sLastName, // Last Name
'COMPANY_TITLE' => $sCompanyTitle, // Company Name
'PHONE' => $arPhone, // Phone
'EMAIL' => $arEmail, // Email
]
]
);
// Check the result and output the message
if(!empty($result['result'])){
echo json_encode(['message' => 'Lead added']);
} elseif(!empty($result['error_description'])){
echo json_encode(['message' => 'Lead not added: '.$result['error_description']]);
} else {
echo json_encode(['message' => 'Lead not added']);
}
?>