Skip to main content

Automation, AI & open source

Zoho CRM + ERPNext Integration: Keep the CRM, Add the ERP

Keep Zoho CRM for sales, run stock, manufacturing and accounts in ERPNext. What syncs, which way, three ways to build it, and the API limits to plan for.

Published 29 Oct 202611 min readBy Manoj

Your sales team likes Zoho CRM. Your stock, production and accounts have outgrown what sits next to it. You don't have to choose: keep Zoho CRM for selling, run the rest in ERPNext, and join the two where a deal turns into an order. That join, the Zoho CRM ERPNext integration, is the part to design carefully.

Short answer

A Zoho CRM and ERPNext integration turns a won deal in Zoho CRM into a customer and a sales order in ERPNext, and sends invoice and payment status back to the deal. Each record has one owner: Zoho CRM owns accounts and contacts, ERPNext owns items, stock, orders and invoices. Build it with n8n, a paid connector, or a small service on both REST APIs, and plan for Zoho's API credits and token expiry.

I lead ERPNext and Frappe programmes at MithTech, a small senior AI-assisted team of Frappe specialists in Bengaluru. We connect ERPNext to the CRMs teams already use, Zoho CRM among them. An integration is a contract between two systems about who owns what. Write that down first and the code is the easy part.

Who keeps Zoho CRM and adds ERPNext?

Businesses whose sales process lives happily in Zoho CRM, but whose operations need more than an accounting app: stock across several warehouses, bills of materials, job work, several companies, or approvals before purchases. They keep the CRM the sales team knows and add ERPNext behind it, instead of retraining everyone.

Zoho has its own answer for the accounts side: the Zoho CRM and Zoho Books integration. Per Zoho's help, CRM accounts and contacts become customers in Books, products become items, and new records sync every two hours after the first sync. Quotes, sales orders and invoices sync only when they are created in CRM's Zoho Finance module. When Books covers your accounting and stock, that pairing works well and you need nothing else.

ERPNext comes in when the back office needs a full ERP. If you are also weighing a full move, ERPNext vs Zoho has the side-by-side.

What syncs, and which system owns it?

Customers and contacts flow from Zoho CRM to ERPNext. Items and prices flow from ERPNext to Zoho CRM. A won deal creates a quotation or sales order in ERPNext. Invoice and payment status flow back to the deal. Each field has exactly one owner, and both systems store each other's record id.

AccountsZoho CRMCRM → ERPNext CustomerMatch on GSTIN or email before creating
ContactsZoho CRMCRM → ERPNext ContactLinked to the customer
ProductsERPNextERPNext Item → CRM ProductItem code is the key; prices from a price list
Won dealZoho CRM triggers, ERPNext owns the orderDeal → Quotation or Sales OrderLine items map to item codes
Invoice and payment statusERPNextERPNext → CRM deal fieldsRead-only in CRM
Stock level (optional)ERPNextERPNext → CRM product fieldShown to sales, never edited there

Two-way sync of the same field is where integrations go wrong. If sales can edit a customer's billing address in Zoho CRM and accounts can edit it in ERPNext, one of them will overwrite the other. Pick the owner, make the other side read-only for that field, and move on.

What do you need to know about Zoho CRM's API?

Zoho CRM's current API is V8. It uses OAuth 2.0: an access token is valid for one hour and a refresh token gets new ones until it is revoked. Zoho runs separate data centres, India among them, so the integration must call the right domain for your account. Every call spends API credits.

The credit rules, per Zoho's API limits page:

  • Credits are counted in a rolling 24-hour window, not reset at midnight.
  • Your allowance depends on your edition and your number of user licences.
  • Most calls cost 1 credit; heavy ones cost more, and bulk writes cost 1 credit per 10 records.
  • There is also a limit on how many calls can run at the same time, from 5 on the Free edition to 25 on the top edition.

For a daily flow of deals and orders, the credits are rarely the issue. They bite on the first load: pushing thousands of products or customers in one go. Use bulk APIs, spread the load and watch the remaining-credits header Zoho returns once half the allowance is used. Module availability also depends on edition; check Zoho's edition comparison before you design around a module.

How do you get changes out of Zoho CRM?

Two ways. A workflow rule can call a webhook when a deal changes stage, which is simple and immediate. Or the Notification API can watch modules and post every change to your endpoint. Both can miss events, so add a scheduled sweep that asks Zoho for records modified since the last run.

Notification API channel
Set up inZoho CRM workflow rulesThe API
Fires onThe rule's condition (for example, stage = Closed Won)Any create, edit or delete in watched modules
If your endpoint is downOne retry, about 15 minutes later, then nothingLost until you re-sync
Keeps workingWhile the rule is activeUntil the channel expires: at most one week, so renew on a schedule
LimitsUp to six webhooks per rule; a daily cap per accountPer channel and module

The channel expiry catches people out. Zoho's developer community has a long thread of people asking whether they must recreate channels daily; Zoho's own FAQ answers that from V4 the maximum is one week and you must re-subscribe before it lapses. Put the renewal in a scheduled job, and alert when it fails.

InteractiveWhich way to build it?

Tick the criteria that matter to you; the tool scores three ways to build a Zoho CRM and ERPNext integration. Scores are our reading of each option's documentation.

Interactive comparison

n8n, a connector or custom code?

Pick up to three things that matter most to your business. For each one, you see which is stronger.

Your priorities · 0 of 3

Pick two or three priorities to compare n8n workflows and Paid connector and Custom service on them.

What does the ERPNext side need?

ERPNext exposes every document through its REST API (/api/resource/<DocType>), with token authentication for an API user you create for the integration. Its Webhook feature posts document events to a URL and can sign each request with a secret. Server Scripts can add small logic, but since version 15 they are off by default.

Practical points:

  • API user. Create a dedicated user with only the roles the integration needs, and an API key and secret for it.
  • Webhooks out. ERPNext's Webhook doctype posts on document events. With a webhook secret set, Frappe adds an X-Frappe-Webhook-Signature header (an HMAC-SHA256 of the payload), so the receiver can check the call came from your ERPNext.
  • Custom fields. Add a "Zoho CRM ID" field on Customer, Contact and Sales Order, and store ERPNext's names in Zoho. This is how the two sides find each other.
  • Server Scripts. Off by default since version 15 and not allowed on Frappe Cloud's shared benches; a private bench is needed. A small custom app is the cleaner place for logic anyway.

Three ways to build it

n8n, a paid connector, or a small custom service. n8n has a Zoho CRM node and an ERPNext node, so a team can build the flows visually. Webkul sells an ERPNext Zoho CRM connector as one ready option. A custom service on both REST APIs gives the most control. Choose by who will look after it in a year.

OptionWhat it isFits whenWatch for
n8nSelf-hosted or cloud workflow tool with Zoho CRM and ERPNext nodesYou want flows your ops team can read and changen8n's docs list no Zoho CRM trigger node: point a Zoho webhook at an n8n Webhook trigger, or poll
Paid connectorFor example, Webkul's ERPNext Zoho CRM Connector: leads, contacts, deals and productsYour data fits its mapping and versionsIts page lists ERPNext 14 and 15, Webkul's Multi-CRM Base module, and manual sync; check orders and your version
Custom serviceA small app or service calling both REST APIsOrders, high volume, strict error handlingYou own the code, the hosting and the upkeep

Zoho Flow, Zoho's own integration tool, did not list an ERPNext app when we checked its app directory. For the n8n route, our ERPNext and n8n guide covers credentials and patterns; the same patterns power our Shopify integration.

A first flow worth building:

  1. A Zoho workflow rule fires a webhook when a deal moves to Closed Won.
  2. The integration fetches the deal, its account, contacts and products from Zoho CRM.
  3. It finds or creates the customer in ERPNext, matching on the stored Zoho id, then GSTIN, then email.
  4. It creates a draft sales order with the deal's products mapped to item codes, and writes ERPNext's order number back to the deal.
  5. When the invoice is submitted and paid in ERPNext, a webhook updates the deal's invoice and payment fields.

What goes wrong, and how do you prevent it?

Duplicates, expired tokens and channels, credit caps on big loads, and mismatched products or prices. All are preventable: match before you create, refresh tokens automatically, renew channels on a schedule, load in bulk, and keep a queue of rejected records that a person reviews each day.

  • Duplicate customers. Match on the stored id first, then GSTIN, then email. Never create on a name match alone.
  • Token expiry. Refresh the one-hour access token before it lapses, and alert if a refresh fails; a revoked refresh token stops everything.
  • Missed events. Webhooks retry once; channels expire. A nightly sweep of records modified since the last run fills the gaps.
  • Credit caps. First loads use bulk APIs and run off-peak.
  • Item mismatch. A deal line with a product that has no item code in ERPNext goes to the rejected queue, not into a guessed item.
  • Currency and price lists. Decide which price list a CRM deal uses in ERPNext, and keep currencies consistent on both sides.

The rejected-records queue matters more than any of the above. Integrations fail quietly; a short daily list that someone owns is how you find out.

When should you bring CRM into ERPNext instead?

When the CRM is used lightly: a pipeline, a few follow-ups, quotations. Then ERPNext's own CRM or Frappe CRM can do the job and you drop the integration entirely. When the sales team lives in Zoho CRM's automation, reports and apps every day, keep Zoho CRM and integrate.

A rough test: if you would miss Zoho CRM's features within a week of switching it off, keep it. If you would mostly miss the habit, consider moving it. Our ERPNext CRM guide shows what the built-in CRM covers. If the whole Zoho estate is the question, the Zoho to ERPNext migration guide and Zoho to ERPNext cover the move.

Skimmable summary: integrate when sales live in Zoho CRM; bring CRM into ERPNext when it is used lightly and the link would cost more than it saves.

Frequently asked questions

+Is there a ready Zoho CRM and ERPNext connector?

There are paid ones; for example, Webkul sells an ERPNext Zoho CRM Connector covering leads, contacts, deals and products. Check its page for supported ERPNext versions, prerequisites and sync mode against your setup. Zoho Flow did not list an ERPNext app when we checked. Many teams build the link in n8n or as a small custom service instead.

+Should the integration be two-way or one-way?

Two-way between the systems, one-way per field. Customers and contacts flow from Zoho CRM to ERPNext; items, orders, invoices and payment status flow from ERPNext back to CRM. Letting both systems edit the same field leads to overwrites, so give every field one owner and make it read-only on the other side.

+Zoho Books or ERPNext for accounts?

If Zoho Books covers your accounting and stock, its built-in Zoho CRM integration is the simpler path. Choose ERPNext when you need several warehouses or companies, manufacturing with bills of materials, or workflows Books doesn't offer. Then Zoho CRM stays for sales and ERPNext runs orders, stock and accounts.

+Will the integration hit Zoho CRM's API limits?

Daily flows of deals and orders rarely do. Zoho counts credits in a rolling 24-hour window based on your edition and user licences, and bulk writes cost 1 credit per 10 records. The first load of products and customers is where limits bite, so use bulk APIs and spread the load.

+Can n8n do it without code?

Mostly. n8n has a Zoho CRM node and an ERPNext node, so the main flows can be built visually. Its docs list no Zoho CRM trigger node, so point a Zoho workflow webhook at an n8n Webhook trigger, or poll on a schedule. Expect a little expression logic for mapping and duplicate checks.

+Why do Zoho CRM notifications stop after a few days?

Notification API channels expire. From V4 the maximum is one week, and the default is one hour if you set none. Re-subscribe each channel before it lapses with a scheduled job, alert if the renewal fails, and keep a nightly sweep of recently modified records to catch anything missed.

Your next step

Keeping Zoho CRM and adding ERPNext?

See it live

A chat becomes a won deal

Each call is prepped, the board shows what will close, and the win becomes a quote.

You end with a quote sent · 2 screens · about 3 min

No sign-up, no card, no account.

Next step · Automation, AI & open source

Now see what automating this would take

Tell us which systems should talk to each other. We build the workflows, connect WhatsApp, CRM and ERPNext, and keep them running.

Comments & ratings

No comments yet. Start a new discussion.

0

Manoj · Published on 29 October 2026

Worked with us? Leave a Google review

Questions about this? Talk to the team.

Book a 30-minute Google Meet, WhatsApp us, or send a message. The engineer who works on this replies.

Send us a message
Your details go to our team's CRM and are used only to reply.