Kaizen 224 - Quote-driven Deal Reconciliation Using Zoho CRM Functions and Automation

Kaizen 224 - Quote-driven Deal Reconciliation Using Zoho CRM Functions and Automation


Hello everyone!
Welcome back to another instalment in the Kaizen series.

This post covers quote-driven deal reconciliation, emphasizing Functions and Automation to address practical sales challenges.

Business Challenge

Sales organizations often mark deals as Closed Won before commercial transactions fully conclude. Quotes generate promptly upon closure, yet businesses typically provide a brief window such as one week for renegotiation or payment. During this period, currency fluctuations, payment delays, and risk thresholds can significantly alter the final deal value.

This Kaizen demonstrates how Zoho CRM Functions and Automation work together to reconcile deal financials with quote activity over time. Sales, finance, and operations teams can thus access accurate, policy-compliant values.
Here is a typical sequence:
  1. Deal closes with Closed Won status
  2. Quote generates immediately
  3. Customer receives grace period (e.g., one week) for payment or adjustments
Key factors during this window:
  1. Exchange rates fluctuate
  2. Payments may succeed or fail
  3. Business absorbs limited losses(up to 10%, for example)
  4. Major variances trigger renegotiation
CRM must reflect actual outcomes rather than initial closure assumptions. Quotes serve as the authoritative commercial record, with final deal values depending on execution timing. This approach captures intermediate and final financial states to enable automated decisions and audits.

Key business scenarios covered

Scenario 1: Payment is made during the grace period

  1. Quote is generated on day 0
  2. Customer completes payment on day 7
  3. Exchange rate has changed since quote generation

Business Requirement

The business wants to calculate the actual payable amount using the exchange rate on the payment day and store it explicitly in CRM.

Outcome

The realized value is captured and stored, ensuring that reports and downstream systems reflect the true commercial result.

Scenario 2: Acceptable loss threshold (10%)

  1. Exchange rate movement results in a loss
  2. The business is willing to absorb losses up to 10%
  3. Loss exceeds the acceptable threshold

Business requirement

If the loss exceeds the defined tolerance, the quote should move to renegotiation instead of being accepted automatically.

Outcome

CRM enforces pricing policy consistently, without manual intervention or subjective judgment.

Scenario 3: Significant currency fluctuations

  1. Exchange rate volatility is unusually high
  2. Even if loss is within limits, risk exposure is significant

Business requirement

Large fluctuations should trigger renegotiation, regardless of absolute loss percentage.

Outcome

Financial risk is handled proactively based on measurable criteria.

Scenario 4: No payment after the grace period

  1. Customer does not pay within the allowed window
  2. Updated exchange rate is favorable to the business

Business Requirement

If the updated rate is profitable, the quote can be revised and reissued with the new amount.

Outcome

CRM reflects market-aligned pricing while maintaining transparency around why the amount changed.

Why Zoho CRM Functions is the best fit?

This reconciliation pattern requires the following capabilities beyond static configuration.
  1. Reading and reconciling data across Deals and Quotes
  2. Applying time-based and threshold-based business rules
  3. Writing calculated values into dedicated fields
  4. Supporting multiple decision paths(accept, renegotiate, revise)
  5. Running logic at specific business moments
Zoho CRM Functions provide the flexibility and control required to implement this logic cleanly, while automation ensures it runs consistently and reliably.

Custom fields used in this post

Deals

  1. Final Accepted Amount - Currency - Amount finally agreed and accepted
  2. FX Impact Percentage - Percent - Gain or loss due to exchange movement
  3. Reconciliation Status - Picklist - Accepted or Renegotiate
  4. Reconciled On - DateTime- Timestamp of final reconciliation

Quotes

  1. Quote Reference Amount - Currency - Amount at quote generation
  2. Quote Exchange Rate - Decimal - Exchange rate used in quote
  3. Payment Due Date - Date - End of grace period
  4. Potential Payable Amount - Currency - Recalculated amount at evaluation time
  5. FX Variance Percentage - Decimal - Difference vs quoted amount
  6. FX Evaluation Status - Picklist - Pending or Evaluated
  7. Recalculate FX - Checkbox - Explicit recalculation trigger
These fields capture commercial intent and outcome, not just static numbers.

High level automation flow

  1. Deal is marked Closed Won
    1. Workflow triggers a function to generate a Quote
  2. Business updates evaluation inputs when needed
  3. User explicitly triggers FX recalculation
  4. Function
    1. Calculates financial impact
    2. Updates quote and deal
    3. Applies business decisions
  5. CRM reflects finalized commercial reality

Function 1: Generate a Quote from the Deal

This function creates a Quote automatically when a Deal is closed, ensuring downstream processes start immediately and consistently.
void automation.generateQuoteFromDeal(int dealId)
{
deal = zoho.crm.getRecordById("Deals", dealId);
if(deal == null) return;

amount = deal.get("Amount");
exchangeRate = deal.get("Exchange_Rate");
account = deal.get("Account_Name");

productItem = Map();
productItem.put("product", {"id":"<PRODUCT_ID>"});
productItem.put("quantity", 1);
productItem.put("list_price", amount);

productList = List();
productList.add(productItem);

quoteMap = Map();
quoteMap.put("Subject", "Quote for Deal");
quoteMap.put("Deal_Name", dealId);
quoteMap.put("Account_Name", account.get("id"));
quoteMap.put("Product_Details", productList);
quoteMap.put("Quote_Stage", "Draft");
quoteMap.put("Valid_Till", zoho.currentdate.addDay(7));
quoteMap.put("Quote_Reference_Amount", amount);
quoteMap.put("Quote_Exchange_Rate", exchangeRate);

zoho.crm.createRecord("Quotes", quoteMap);
}

Function 2: Reconcile Deal from Quote

This function calculates payable values, evaluates financial impact, and updates the Deal with finalized financial information.
void automation.reconcileDealFromQuote(Int quoteId)
{
info "Starting FX reconciliation for Quote ID: " + quoteId;

// -------------------------------------------------
// Fetch Quote
// -------------------------------------------------
quote = zoho.crm.getRecordById("Quotes", quoteId);
if(quote == null)
{
info "Quote not found";
return;
}

dealInfo = quote.get("Deal_Name");
if(dealInfo == null)
{
info "Quote not linked to Deal";
return;
}

dealId = dealInfo.get("id");

deal = zoho.crm.getRecordById("Deals", dealId);
if(deal == null)
{
info "Deal not found";
return;
}

// -------------------------------------------------
// Mark FX Evaluation as PENDING
// -------------------------------------------------
zoho.crm.updateRecord(
"Quotes",
quoteId,
{"FX_Evaluation_Status" : "Pending"}
);

// -------------------------------------------------
// Read required FX inputs
// -------------------------------------------------
quotedAmount = quote.get("Quote_Reference_Amount");
quoteRate = quote.get("Quote_Exchange_Rate");
evaluationRate = quote.get("Evaluation_Exchange_Rate");

info "Quoted Amount: " + quotedAmount;
info "Quote Rate: " + quoteRate;
info "Evaluation Rate: " + evaluationRate;

if(quotedAmount == null || quoteRate == null || evaluationRate == null)
{
info "Missing required FX inputs";
return;
}

// -------------------------------------------------
// FX Calculations(rounded)
// -------------------------------------------------
payableAmount = (quotedAmount * evaluationRate / quoteRate).round(2);
fxVariance = (((payableAmount - quotedAmount) / quotedAmount) * 100).round(2);

info "Payable Amount: " + payableAmount;
info "FX Variance %: " + fxVariance;

// -------------------------------------------------
// Decide Quote Stage(Business decision here)
// -------------------------------------------------
quoteStage = "";
reconciliationStatus = "";

if(fxVariance <= 10)
{
quoteStage = "Acceptable FX Impact";
reconciliationStatus = "Accepted";
}
else
{
quoteStage = "FX Impact Exceeds Threshold";
reconciliationStatus = "Renegotiate";
}

// -------------------------------------------------
// Update Quote(Final state)
// -------------------------------------------------
quoteUpdate = Map();
quoteUpdate.put("Potential_Payable_Amount", payableAmount);
quoteUpdate.put("FX_Variance_Percentage", fxVariance);
quoteUpdate.put("FX_Evaluation_Status", "Evaluated");
quoteUpdate.put("Quote_Stage", quoteStage);
quoteUpdate.put("Recalculate_FX", false);

quoteResp = zoho.crm.updateRecord("Quotes", quoteId, quoteUpdate);
info "Quote update response:";
info quoteResp;

// -------------------------------------------------
// Update Deal
// -------------------------------------------------
dealUpdate = Map();
dealUpdate.put("Final_Accepted_Amount", payableAmount);
dealUpdate.put("FX_Impact_Percentage", fxVariance);
dealUpdate.put("Reconciliation_Status", reconciliationStatus);
dealUpdate.put(
"Reconciled_On",
zoho.currenttime.toString("yyyy-MM-dd'T'HH:mm:ssXXX")
);

dealResp = zoho.crm.updateRecord("Deals", dealId, dealUpdate);
info "Deal update response:";
info dealResp;

info "FX reconciliation completed successfully";
}

Workflow


Module: Quotes
Trigger: On create or edit
Condition: Recalculate FX = true
Action: Execute reconcileDealFromQuote
Argument: quoteId -> ${Quotes.id}

All decision logic lives inside the function.

Business Outcome

After implementing this pattern,
  1. Deals and quotes stay aligned with real-world behavior
  2. FX risk is measurable and auditable
  3. Renegotiation is policy-driven
  4. Reports reflect finalized values, not assumptions
  5. Sales and finance operate on the same truth.

Summary

Zoho CRM extends beyond static closures by reconciling deals against quote behavior. Functions plus Automation enforce pricing, limit exposure, and capture true outcomes reliably at scale.
The true value of this implementation is not the calculation itself, but the fact that it produces stable, auditable financial states that can be reused across reporting, approvals, integrations, and policy enforcement.

Further extensions

Executive reporting and dashboards

You can build Dashboards that answer questions like
  1. Total revenue before vs after FX reconciliation
  2. Total FX gain or loss by
    1. Region
    2. Currency
    3. Quarter
  3. Sales owner
  4. Percentage of deals renegotiated due to FX risk
Without the function,
  1. FX impact is implicit
  2. Numbers keep changing
  3. Finance does not trust reports
With the function,
  1. Final Accepted Amount is stable
  2. FX Impact % is explicit
  3. Reconciled On gives a time anchor

Policy enforcement and compliance

Examples
  1. Automatically flag deals where FX loss > 10% but status = Accepted
  2. Audit trail for
    1. Who recalculated FX
    2. When renegotiation was triggered
  3. SLA checks when Deals are not reconciled within 'X' days of quote creation
For many companies, FX policy violations are discovered at a later point in time, but you now enforce them at the moment of decision.

Sales coaching and deal hygiene

Unlock insights such as
  1. Which sales reps close deals with high FX volatility or frequently trigger renegotiation?
  2. Which regions or currencies produce unstable deals?
  3. Which deals are consistently over-optimistic at closure?

Other scenarios

  1. Approval and exception workflows
  2. Integration with ERP or accounting systems
  3. Predictive insights to forecast FX risk
  4. Historical snapshots for audit and analytics

We hope you found this post useful. Let us know your feedback in the comments or write to us at support@zohocrm.com.

Thanks!



=============================================================================



    • Sticky Posts

    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
    • Recent Topics

    • Draft quotes, sales orders, and raise invoices for services in CRM

      Create Quotes, Sales Orders, and Invoices for Services in Zoho CRM You can now draft Quotes, and Sales Orders as well as raise Invoices for services in Zoho CRM. And how is that possible? By filling out the Service subform in your Quotes, Sales Orders
    • Canva Integration

      Hello! As many marketing departments are streamlining their teams, many have begun utilizing Canva for all design mockups and approvals prior to its integration into Marketing automation software. While Zoho Social has this integration already accomplished,
    • Admin Logging in as another User

      How can a Super Admin login as another user. For example, I have a sales rep that is having issues with their Accounts and I want to view their Zoho Account with out having to do a GTM and sharing screens. Latest Update (27th April 2026): With the early
    • Action Required: Allowlist New IP Ranges for the EU Data Center

      Dear Users, We are adding new IP ranges for the Zoho Analytics EU data center (https://analytics.zoho.eu). If you import data into Zoho Analytics from cloud databases (such as Amazon RDS, Amazon Redshift, or Microsoft Azure) or use Live Connect, you must
    • Tips & Tricks #3: Zoho CRM - Agentes en la página de inicio

      Hola a todos, Vuestros Agentes realizan un trabajo muy útil. Encuentran información como clientes potenciales importantes, oportunidades de venta y actualizaciones relevantes. Sin embargo, hasta ahora no era posible ver esa información directamente en
    • Pricelists

      So we have them in books but I cannot find them in commerce?
    • Automating CRM backup storage?

      Hi there, We've recently set up automatic backups for our Zoho CRM account. We were hoping that the backup functionality would not require any manual work on our end, but it seems that we are always required to download the backups ourselves, store them,
    • 'Pinned' notes feature of a pipeline record

      Hi team, Could you please implement a feature which will allow users to pin different notes so that they will appear at the very top of the notes tab in a pipeline record. Sometimes we have a wide range of notes on a record which means more important
    • Associate emails from both primary and secondary contacts to deal

      We need to associate emails from multiple contacts to a deal. Please advise how this can be achieved. At present, only emails from primary contacts can be associated. Thanks
    • Custom Button Creation from Layout Editor in Zoho CRM

      Hello All, Buttons in Zoho CRM act as triggers that perform a specific action when clicked. Zoho CRM includes a set of system buttons that help you carry out common actions with a single click. Beyond these, your organization can create custom buttons
    • #PitStop3: Share & Collect Payment using Zoho Invoice

      We have reached another milestone in our journey. Post #15 to #20 weren't just about sharing invoices, they were about building a payment workflow that works for you, your customers and your business. Here's a quick wrap of what we covered in this segment:
    • Suggestions for Improving the Deluge Development Experience

      Hello, I would like to share some ideas that could significantly improve the Deluge development experience, especially for partners and developers building larger solutions across the Zoho ecosystem. Some key areas that would add a lot of value: Deluge
    • Enhancement announcement: Mitigate mailbox clutter using the new field: "Sync emails from"

      Dear Customers, We hope you're well! We are here with a minor enhancement in email integration in Zoho CRM. Emails have become the primary mode of communication these days. Because of which mailboxes are getting overly cluttered day after day. To help
    • Zoho CRM Sandbox now supports integrations

      Hello everyone, We are now expanding Zoho CRM Sandbox to support integrations with other Zoho products. You can connect, configure, and validate the behavior of your integrated tools within a safe, isolated environment - testing end-to-end without touching
    • Building Toppings #8 - Using widgets to extend the Bigin UI

      Hello Biginners, In our previous forum post, we explored schedules and workflow functions and learned how to automate real-time and time-based actions inside a topping. In this post we'll look at how to embed custom UI components inside Bigin using widgets.
    • Tip #81 – Turn every session into a story with Session Highlights – 'Insider Insights'

      Hello Zoho Assist Community! Picture this: your team wraps up dozens of remote support sessions every week. Each one involved troubleshooting, tools, fixes, and back-and-forth with customers. But when it's time to review what actually happened across
    • Zoho CRM APIs

      Hello, I think as a developer, it is very important to have the ability to manage, develop, and execute functions directly from my local development environment (for example, VS Code). Zoho CRM should have a way to create, deploy, and manage functions
    • 🎙️ Ask The Experts: Get Your Bigin Questions Answered Live

      We've seen so many thoughtful questions from our #BiginnersClub community over the years. While we're always happy to help here, we're excited to introduce a new way for you to connect with us directly. Join us for Ask The Experts, a one-hour live fireside
    • Postcode problems

      So we were very pleased to see we could limit shipping with postcodes. Brilliant. Unfortunately we have discovered It does not seem fit for purpose. In the UK we write postcodes in various ways Examples BH217NL BH21 7NL Bh217nl bh217NL and many more ways
    • Certain items certain shipping

      Me again it would be helpful to have different shipping for different categories. Our example are salt. Delivery is free but have a minimum delivery. Pickup is cheaper so it has its own category- pickup.
    • Cookies Consent Management in Webforms

      Hello Everyone! We are excited to introduce Cookie Consent Management for webforms. Read on to learn more. Webforms are online forms embedded on websites that allow users to submit data and create records in Zoho CRM. These forms utilize cookies to track
    • Payment links in Bigin just got supercharged

      Greetings, We're happy to announce major enhancements to the Payments feature in Bigin. As you may already know, Bigin supports Payments integration, which enables you to create and send payment links directly from Bigin to your customers. It also allows
    • Disable Spam filter

      Hi Support Team, Please disable spam filter for https://desk.zoho.in/support/keboli. Some spam ticket ids: #102, #103, #104
    • I just signed up

      Hi, I have just signed up for the domain griffithcgenterprises.com. I would like to make two adjustments: If possible, I would prefer a 5 GB hosting/email plan instead of the current 10 GB option, as I believe that should be sufficient for my needs at
    • History tab stuck loading indefinitely on Android (v2.22.0)

      History tab stuck loading indefinitely on Android (v2.22.0) — server returns 500 on visitorhistoryviews Hi all, I'm running into an issue where the History tab in the SalesIQ Android app (v2.22.0) never loads — it just spins indefinitely. Screenshots
    • Não consigo enviar e receber e-mail

      Estou tendo problema de envio e recebimento de e-mail (meu e-mail é ands....lisi.com.br) Esta mensagem foi criada automaticamente pelo software de entrega de e-mails. Uma mensagem que você enviou não pôde ser entregue a um ou mais destinatários. Este
    • إلغاء الإشتراك

      أريد إلغاء الإشتراك نهائياً.
    • Opening two notes at once in the Mac app

      Just like the title says - I want two notes open the same time on my Mac Air. AI search seems to think I have the option to open one window, then click on a second one. But of course if one window is open I can't see the others. It also recommended using
    • Introducing the Employee Portal for internal job posting

      Employee referrals and internal applications are one of the most trusted hiring channels. But in many organizations, employees only hear about openings through messages, word of mouth, or after the role has already been open for a while. When employees
    • Department Customization Copy/Paste

      Hello! I love the new customization of the layouts, rules and templates! However, we have several "departments" that operate similar and as I'm updating either ticket layout or workflow rules, I'm finding that I have to do it in each department. I would
    • How do you import mail from Thunderbird into ZOHO mail

      Hi, We have Thunderbird on our Apple Macs and want to transfer the emails from this to our shiny new Zoho mail account. I know using Outlook on a PC you can zip the .eml files up and upload them into specific folders on your ZOHO mail account using this form: mail.zoho.com/mail/jsp/importFolder.jsp However as Thunderbird use mbox files I'm not sure how to do it. Can anyone let me know if they have migrated mail from Thunderbird to Zoho mail and how they did it. I have many folders and emails to transfer
    • How to Open .mbox file in Gmail with Attachments?

      Gmail offer users to backup INBOX folder in .mbox file format via Google Takeout Feature. Howver there is no such option to Restore Gmail MBOX. Thus I would like to suggest you to choose an alternate approach i.e. MBOX to Gmail Wizard. This utility will open .mbox file in Gmail with attachments.  Steps to open MBOX file in Gmail are; Run MBOX to Gmail Wizard Click Add File and add .mbox file. Enter your Gmail login credentials. Click Convert button. Finished! This is how you can open MBOX file in
    • Poor Zoho Support

      Been trying to reach support via telephone and email. The support has always been slow to respond but now its been two weeks without a return call. I have even sent them screen shots of the problem I've having with no results. Is anyone had the same problem.
    • Desk Contact Name > split to First and Last name

      I am new to Zoho and while setting up the Desk and Help Center, I saw that new tickets created or submitted from the Help Center used the Contact Name field. This would create a new Contact but put the person's name in the Last Name field only. The First
    • SalesIQ operators will not receive any messages if customers do not answer the Pre-Chat questions in Flow Controls.

      Hi Zoho SalesIQ Team, I am reaching out to report a issue regarding the Brands > Flow Controls SalesIQ operators will not receive any messages if customers do not answer the Pre-Chat questions in Flow Controls and continue sending messages without completing
    • SalesIQ's Summer '26 Release: For The Moments That Matter

      Every customer journey is made up of moments. The moment someone discovers your business. The moment they need help. The moment you decide to reach out. The moment a simple chat turns into something more. And the moments that continue long after the conversation
    • Add Comprehensive Accessibility Features to Zoho Writer

      Hello Zoho Writer Team, We hope you are doing well. We would like to submit a feature request to enhance Zoho Writer with a full set of accessibility tools, similar to the accessibility options already available in the Zoho Desk agent interface. 🚧 Current
    • Copying a Document with its Citations

      When I copy a document that contains citations using File>Make a Copy from the document's menu the text copies but the citations do not (according to Google they should). Is this the correct way to make a complete copy of a document with its citations
    • Bing ads integration and tracking

      Hi, Is there any way to track Bing ads in the same way that we are able to track google adwords?  It is important for us to be able to determine the conversion rate of our Bing ads.  If this is not possible now, will this feature be added in the future?
    • #20 Your Business Shouldn't Stop Just Because You Do

      Imagine you are on a well-deserved vacation. Your clients are expecting invoices at the beginning of the month, recurring customers are due for billing, and payments are still coming in. Do you carry your laptop everywhere, hoping you don't miss a billing
    • Next Page