Acumatica · Customization

Acumatica Lead Screen — A Deep Dive

Acumatica Lead Screen — A Deep Dive is the screen the user actually lives in. Every other piece of Acumatica — the workflows, the reports, the integrations — exists to feed this.

John Kihiu12 min read

Leads (CR301000) is the entry point of Acumatica CRM's sales pipeline, built on LeadMaint over the CRLead DAC. Unlike Customer, Vendor, and Employee, a Lead is deliberately not a BAccount — it's a lighter-weight record designed to be thrown away or converted, and that conversion step (Lead into Contact, Business Account, and optionally Opportunity) is the defining mechanic of the screen.

Conversion is the core feature

The "Convert Lead" action doesn't just change a status — it creates new records (a Contact, a Business Account if one doesn't already match, and optionally an Opportunity) and links the original Lead to them. Any customization that adds required fields to CRLead needs to consider what happens to those values at conversion time: fields don't automatically carry over to the new Contact/BAccount unless explicitly mapped, which is the single most common gap in lead-customization projects.

Key tabs

Extending LeadMaint

Duplicate detection is the most common substantial customization here — Acumatica's built-in duplicate check on convert is useful but often not enough for high-volume lead sources (web forms, marketing automation feeds), so teams add a stricter match (on email domain, phone format, or a normalized company name) before allowing conversion to proceed, rather than relying solely on the default matching.

C# · GRAPH EXTENSION
public class LeadMaint_Extension : PXGraphExtension<LeadMaint>
{
    [PXOverride]
    public void ConvertLead(Action baseMethod)
    {
        CRLead row = Base.Lead.Current;
        var existing = PXSelect<Contact,
            Where<Contact.eMail, Equal<Required<Contact.eMail>>>>
            .Select(Base, row.EMail).RowCast<Contact>().FirstOrDefault();

        if (existing != null)
            throw new PXSetPropertyException("A contact with this email already exists — merge manually before converting.");

        baseMethod();
    }
}

Custom fields and tabs via the Customization Project Editor

Adding a field to CRLead is routine, but as noted, it won't propagate to the Contact/BAccount created on conversion without explicit mapping — either through Acumatica's field-mapping configuration for conversion (where supported) or a graph extension override of the conversion action that copies the value across after the base method runs.

Common validation and event-handler use cases

Beyond duplicate checks: enforcing lead source and campaign attribution fields are populated before a lead can be marked "Qualified," auto-assigning leads to a sales rep based on territory rules encoded in a custom field, and firing a business event to a marketing automation platform when a lead's status changes, so external systems stay in sync without a full two-way integration.

Gotchas

A converted Lead still exists as a record — it's marked converted and linked, not deleted — so reporting on "total leads" needs to account for the fact that converted and unconverted leads coexist in the same table. Re-converting or un-converting isn't a supported clean operation; treat conversion as a one-way door when designing validation around it. And because a Lead predates any BAccount/Contact, custom validation that assumes those related records exist (looking up a Contact by BAccountID, for instance) will throw on records that are still leads.

Map fields explicitly at conversion

Any custom field on CRLead that matters after the lead becomes a Contact or Business Account needs an explicit copy step. There's no implicit inheritance the way there is between CustomerClass and Customer — conversion creates genuinely new records.

Wrapping up

The Lead screen is defined by what happens when it stops being a lead. Customizations here need to think in two phases — the pre-conversion lead and whatever it becomes — rather than treating CRLead as a permanent, standalone entity.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.