Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →

Knowledge base Drupal Automation and webhooks

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 20 February 2024

  • drupal
  • dynamics-365
  • crm
  • lead-capture
  • marketing-automation
  • office365
  • utm-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

  1. Configure Azure AD app with Dynamics 365 permissions
  2. Create custom Drupal module for CRM integration
  3. Implement Dynamics 365 Web API client
  4. Create Webform handler for lead capture
  5. Implement UTM parameter tracking
  6. Build field mapping configuration UI
  7. Add lead qualification workflows
  8. Implement duplicate detection logic
  9. Create custom entity form widgets
  10. 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

Read next

  • Drupal · Automation and webhooks

    Microsoft Planner Task Automation

    Create Planner tasks from Drupal events with two-way sync, custom dashboards using Drupal Views and Charts for project tracking.

  • Drupal · Automation and webhooks

    Microsoft To-Do Task Automation

    Automate task creation using Drupal Rules or event subscribers with two-way sync for task status updates reflected in Drupal.

  • Drupal · Automation and webhooks

    Teams Chat Bot & Notifications Module

    Create outbound triggers from Drupal events, inbound slash commands via webhook, and adaptive card templates for rich, branded messages in Microsoft Teams.

Back to the knowledge base