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
- Details — identity and firmographic fields (company, title, source) collected before qualification.
- Address — captured independently from any Contact/BAccount, since neither exists yet for a fresh lead.
- Activities — the same shared CRM activity structure used on Cases and Opportunities.
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.
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.
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.
Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.