← All articles
CRM Integration
Dynamics 365 CRM Lead Capture
Auto-create CRM leads on form submit with UTM tracking, custom entity forms surfaced in Drupal for seamless lead management.
Published February 20, 2024
drupaldynamics-365crmlead-capturemarketing-automationoffice365utm-tracking
Overview
Dynamics 365 CRM integration transforms your Drupal site into a powerful lead generation machine. This solution automatically captures leads from web forms, preserves marketing attribution through UTM parameters, and provides seamless access to CRM data within the Drupal interface.
Features
- Automatic lead creation from form submissions
- UTM parameter tracking and attribution
- Custom CRM entity forms in Drupal
- Bi-directional data synchronization
- Lead scoring and qualification
- Campaign tracking integration
- Duplicate detection and merging
- Real-time CRM data access
Technical Details
Technologies: Dynamics 365 Web API, Microsoft Dataverse, Drupal Webform module, Drupal Form API, OAuth 2.0, JavaScript SDK
Requirements:
- Drupal 9.x or 10.x with Webform module
- Dynamics 365 Sales or Customer Service
- Azure AD app registration
- Dynamics 365 API permissions
- SSL certificate for production
API Endpoints:
Create lead: POST /api/data/v9.2/leads
Update lead: PATCH /api/data/v9.2/leads({lead-id})
Query leads: GET /api/data/v9.2/leads?$filter=...
Associate entities: POST /api/data/v9.2/leads({lead-id})/leadtoopportunity_association/$ref
Implementation
- Configure Azure AD app with Dynamics 365 permissions
- Create custom Drupal module for CRM integration
- Implement Dynamics 365 Web API client
- Create Webform handler for lead capture
- Implement UTM parameter tracking
- Build field mapping configuration UI
- Add lead qualification workflows
- Implement duplicate detection logic
- Create custom entity form widgets
- Add comprehensive error handling and logging
<?php
// Example: Webform handler for Dynamics 365 lead capture
namespace Drupal\dynamics_integration\Plugin\WebformHandler;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\WebformSubmissionInterface;
/**
* @WebformHandler(
* id = "dynamics_lead_capture",
* label = @Translation("Dynamics 365 Lead Capture"),
* category = @Translation("CRM"),
* description = @Translation("Captures form submissions as Dynamics 365 leads"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class DynamicsLeadCaptureHandler extends WebformHandlerBase {
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
$values = $webform_submission->getData();
$dynamics_client = \Drupal::service('dynamics_integration.client');
// Extract UTM parameters from session
$session = \Drupal::request()->getSession();
$utm_params = $session->get('utm_tracking', []);
// Build lead data
$lead_data = [
'firstname' => $values['first_name'],
'lastname' => $values['last_name'],
'emailaddress1' => $values['email'],
'telephone1' => $values['phone'] ?? '',
'companyname' => $values['company'] ?? '',
'description' => $values['message'] ?? '',
// UTM tracking fields
'cr96c_utm_source' => $utm_params['utm_source'] ?? '',
'cr96c_utm_medium' => $utm_params['utm_medium'] ?? '',
'cr96c_utm_campaign' => $utm_params['utm_campaign'] ?? '',
'cr96c_utm_content' => $utm_params['utm_content'] ?? '',
// Lead source
'leadsourcecode' => 3, // Web
'websiteurl' => \Drupal::request()->getSchemeAndHttpHost(),
];
try {
// Create lead in Dynamics 365
$lead = $dynamics_client->createLead($lead_data);
// Store CRM ID for reference
$webform_submission->setElementData('crm_lead_id', $lead['leadid']);
$webform_submission->save();
\Drupal::logger('dynamics_integration')->info(
'Created Dynamics 365 lead: @id',
['@id' => $lead['leadid']]
);
} catch (\Exception $e) {
\Drupal::logger('dynamics_integration')->error(
'Failed to create Dynamics 365 lead: @message',
['@message' => $e->getMessage()]
);
// Continue processing - don't fail form submission
}
}
}
Use Cases
- B2B lead generation campaigns
- Contact form lead qualification
- Event registration and follow-up
- Newsletter signup lead nurturing
- Multi-touch attribution tracking
Benefits
- Automated lead capture eliminates manual entry
- Complete marketing attribution data
- Real-time CRM data synchronization
- Improved lead response times
- Better campaign ROI measurement
- Reduced data entry errors
- Seamless marketing and sales alignment