Acumatica · Customization

Acumatica CRM — Lead to Cash Process

A walk through the Acumatica CRM lead-to-cash process — lead capture, qualification, opportunity, quote, order, invoice, payment — with the screens and automations that close the loop with sales.

John Kihiu12 min read

The reason to run CRM inside Acumatica instead of bolting on a separate system is one word: continuity. A lead becomes a contact and business account, the account grows opportunities, an opportunity produces a quote, the quote becomes a sales order, the order ships and invoices, and the invoice posts to AR — all in one database, one security model, one audit trail. No sync jobs, no duplicate customer masters, no "which system is right" arguments. But that continuity only materializes if you configure the handoffs deliberately, and the handoffs are where every implementation I've done needed real work.

Stage 1: Lead → contact + business account

Leads (CR301000) are deliberately lightweight — a name, a company, a source. The important design decision is your qualification workflow: what has to be true before a lead converts? Acumatica's conversion action creates a contact and, optionally, a business account of type Prospect. The classic mistake is converting too eagerly and flooding Business Accounts with junk prospects that later collide with real customer records. I configure the lead workflow so conversion is only available from a Qualified state, and I put duplicate validation (built into CRM configuration) in blocking mode on both email and account name — cleaning duplicate business accounts after the fact is miserable because documents hang off them.

Stage 2: Opportunity → quote

Opportunities (CR304000) carry the pipeline: stage, probability, amount, and crucially products — line items with inventory IDs, quantities and prices. Whether teams fill in products or just a total amount is the fork in the road. If sales only types a number, the downstream automation dies here, because a quote and a sales order need lines. Getting salespeople to build product lines on the opportunity is an adoption battle, but it's the one battle worth fighting; everything after it is configuration.

From an opportunity you create a sales quote (CR304500), which snapshots the products, applies real pricing (price classes, discounts, taxes via the tax zone), and becomes the printable/emailable document. Quotes version properly — a revised quote supersedes the old one on the opportunity — and the approval map can require sign-off above a discount threshold, which I've wired for clients who kept discovering rogue 30% discounts at invoice time.

Prospect vs customer conversion timing

A business account of type Prospect cannot receive a sales order. The "Convert to Customer" step — assigning a customer class, terms, credit limit — is the real gate between CRM and ERP. Decide who owns that step (sales ops? finance?) and put it in the workflow explicitly. Implementations that leave it implicit get sales orders blocked at month-end and angry reps.

Stage 3: Quote → sales order → shipment → invoice

Converting a won quote creates the sales order with lines, prices and discounts intact. From there it's standard distribution: allocation, shipment (SO302000), confirm, prepare invoice, release to AR. Two configuration points matter for the CRM-to-cash seam:

Automating the seams

The handoffs are also where small customizations pay off. A favorite: when an opportunity is marked Won, validate it actually has products before allowing the stage change. Ten lines in a graph extension:

C#
public class OpportunityMaintExt : PXGraphExtension<OpportunityMaint>
{
    protected virtual void _(Events.RowPersisting<CROpportunity> e)
    {
        var row = e.Row;
        if (row == null || row.StageID != "W") return;   // Won

        CROpportunityProducts product =
            SelectFrom<CROpportunityProducts>
            .Where<CROpportunityProducts.quoteID
                .IsEqual<@P.AsGuid>>
            .View.SelectSingleBound(Base, null, row.QuoteNoteID);

        if (product == null)
            throw new PXRowPersistingException(
                nameof(CROpportunity.stageID), row.StageID,
                "An opportunity cannot be Won without product lines.");
    }
}

Business events cover the notification layer: opportunity idle in a stage for 14 days, quote expiring, first order for a converted customer. These are configuration, not code, and they're what makes the pipeline feel alive to a sales manager.

Reporting across the whole funnel

Because everything shares one database, a Generic Inquiry can join leads to opportunities to orders to invoices and answer questions bolt-on CRMs answer only with export gymnastics: actual revenue by lead source, quote-to-order conversion by salesperson, average days from qualification to first payment. Build the funnel GI early — it's the artifact that convinces the sales team the data entry is worth it.

Wrapping up

Lead-to-cash in Acumatica is less a feature than a chain of well-defined handoffs: qualify before converting, force product lines before Won, gate the prospect-to-customer step explicitly, and let standard distribution carry it home. Configure the seams, automate the nagging with business events, and the single-database continuity does the rest.

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.