Industrial lubricants & petroleum exports · Odoo ERP implementation
Unicorn Petro: from paperwork rebuilt every shipment to one export engine
Published · Updated
Unicorn Petro manufactures and exports industrial lubricants, specialty oils, greases and petroleum products across domestic and international markets. As export volumes grew, the systems holding the business together did not grow with them. KoderXpert mapped the real export process document by document, then built a customized Odoo ERP that carries an order from the moment an enquiry lands to the moment the container ships.
Designed, built and delivered by KoderXpert Technologies Pvt. Ltd.
Official Odoo Ready Partner · Ahmedabad & Gandhinagar, India
- Client
- Unicorn Petro
- Industry
- Industrial lubricants, petroleum products, export manufacturing
- Platform
- Odoo ERP, end to end implementation
- Implementation partner
- KoderXpert Technologies
- Headline result
- Zero manual re-entry of marketplace leads
01 · Overview
The 30-second version
- Unicorn Petro is a leading manufacturer and exporter of industrial lubricants, specialty oils, greases and petroleum products, serving both domestic and international markets.
- Growth outran the systems: enquiries from IndiaMART and TradeIndia were retyped by hand one at a time, export paperwork was rebuilt from scratch for every shipment, and domestic and export sales ran as two disconnected businesses on separate rails.
- KoderXpert mapped the real export process before touching configuration, then delivered a customized Odoo ERP connecting the whole order lifecycle: marketplace leads captured by API, one pipeline for both sales motions, procurement tied to confirmed demand, and proforma invoice, commercial invoice, packing list, shipping instructions and bill of lading generated from order data.
02 · Where the old way broke down
What was going wrong before Odoo?
Six cracks between the enquiry and the container
Every team was running its own workaround: sales retyped leads out of an inbox, documentation rebuilt a shipment pack from a spreadsheet template, purchasing guessed at demand, and leadership waited for month end to learn what had happened.
Leads slipping away
Enquiries from IndiaMART and TradeIndia lived in inboxes and were typed into the system by hand, one at a time: slow, inconsistent and easy to lose.
The cost → a warm buyer, cold by MondayExport paperwork rebuilt every time
Proforma invoices, commercial invoices, packing lists and shipping instructions were assembled manually in spreadsheets for every single shipment.
The cost → the same document, retyped foreverInconsistent documents
Every buyer wanted a different format, and each hand-built variation was another chance for a compliance problem at the port.
The cost → a customs risk per shipmentCRM with no visibility
Follow-ups depended on whoever remembered them. There was no shared pipeline showing which enquiry was at which stage, or who owned it.
The cost → memory as a sales processNo live order visibility
Answering the question "where is this export order right now" took three phone calls across three teams.
The cost → three calls for one answerTwo businesses, two rails
Domestic and export sales ran as separate operations with no shared source of truth, so nobody had one clear view of an order from enquiry to shipment.
The cost → one company, two versions of it03 · The turnaround
Drag it and see the before & after yourself
Slide the orange handle. Left is the inbox-and-spreadsheet era, right is the connected export engine.
- ✗ Marketplace enquiries retyped by hand, one at a time
- ✗ Export packs rebuilt from scratch for every shipment
- ✗ Follow-ups depending on individual memory
- ✗ Domestic and export running on separate rails
- ✗ Order status confirmed by phone call
the retyping era 😵
one export engine ✨
- ✔ Enquiries landing in the CRM automatically, by API
- ✔ PI, CI, packing list & SLI from order data, one click
- ✔ One pipeline with stages, owners and reminders
- ✔ Domestic and export flows on a single platform
- ✔ Live export order status on one dashboard
← drag toward the paperwork · drag toward the platform →
04 · The plan
What "one system" had to actually mean
The brief in one line: never retype an enquiry, never rebuild a document, and always be able to answer where an order is. Hover any goal to tick it off.
Zero-touch lead capture: pull every enquiry automatically from IndiaMART and TradeIndia, with no manual entry at all.
One pipeline: centralize CRM and sales so every enquiry has a stage, an owner and a visible follow-up.
Two motions, one platform: unify export and domestic workflows without forcing either one to behave like the other.
Demand-driven purchasing: connect procurement to sales so buying follows confirmed orders, not guesswork.
Automated documentation: generate the full export pack end to end, in each buyer's required format.
Real dashboards: give leadership live reporting instead of a month-end spreadsheet exercise.
05 · What we delivered
What did KoderXpert build?
A platform built around the real workflow
KoderXpert delivered a customized Odoo ERP that connects the entire order lifecycle, from the moment an enquiry lands to the moment the container ships. Marketplace enquiries flow straight into Odoo CRM, auto-assigned and tracked through a single pipeline into quotation and sales order, while documentation, purchasing, accounting and reporting run on the same connected platform.
IndiaMART & TradeIndia integration
Both marketplaces connected by direct API, so enquiries land in the CRM automatically with buyer details, product interest and source intact. No re-typing, no copy-paste, no lost lead.
zero-touch captureAutomated lead management
Automatic assignment to the right salesperson, defined pipeline stages, scheduled follow-up reminders and conversion tracking from enquiry through to won order.
a pipeline, not a memoryDual sales workflows
Purpose-built domestic and export flows on one platform: each keeps the fields, pricing logic, terms and document set its market actually needs, while sharing one customer and product master.
two motions, one truthPurchase & vendor management
Requisitions and procurement tied directly to sales demand, so raw material and packaging buying follows confirmed orders instead of a monthly estimate.
buying that follows demandOne-click export documents
Proforma invoice, commercial invoice, packing list and shipper's letter of instruction generated directly from order data, with the bill of lading pack built on the same engine.
5 documents, one clickExecutive dashboards & MIS
Live reporting on sales performance, order status and export throughput, so leadership reads the current position rather than reconstructing last month's.
answers without a spreadsheet06 · Functional deep dive
How the connected system actually works
The delivery summary says what was built. This is the functional detail underneath it: how a lead arrives, how the two sales motions differ, what each export document contains, and how purchasing hears about a confirmed order.
Marketplace capture, end to end
The single biggest source of lost revenue was the gap between an enquiry arriving and someone typing it in. That gap was closed at the source rather than shortened.
- Direct API integration: IndiaMART and TradeIndia connect straight to Odoo CRM, so an enquiry becomes a lead record without a human touching a keyboard.
- Field mapping at ingest: buyer name, contact details, product interest, quantity and enquiry text map to structured CRM fields, so the lead is searchable and reportable from the first second.
- Source tagging: every lead carries the marketplace it came from, which finally makes channel performance a measurable number rather than an impression.
- Deduplication: repeat enquiries from a known buyer attach to the existing customer record instead of creating a parallel one.
The lead lifecycle, staged
Once leads land automatically, the question becomes whether anyone acts on them. The pipeline was built to make inaction visible.
- Automatic assignment: incoming leads route to the right salesperson by rule, so ownership is set before anyone opens the record.
- Defined stages: new, qualified, quoted, negotiation, won and lost, with each stage carrying its own expectations rather than being a label.
- Follow-up reminders: scheduled activities sit on the lead itself, so a pending follow-up is a system fact instead of a personal note.
- Conversion tracking: lead to quotation to sales order measured as one chain, which is what makes response time an improvable metric.
Domestic and export, side by side
The two sales motions genuinely differ, so the system does not pretend otherwise. They share masters and diverge where the business actually diverges.
- Shared foundation: one customer master, one product master, one pricing engine, so a buyer is the same record whichever market they sit in.
- Export-specific data: incoterms, port of loading and discharge, country of origin, HS codes, container and packing details captured on the order, not appended later.
- Domestic simplicity preserved: the domestic flow keeps its shorter path, so local orders are not slowed down by export fields they do not need.
- One order view: whichever motion an order belongs to, its status is readable from the same place, which is what ended the three-phone-call question.
The export document set, specified
Export compliance leaves no room for improvisation, so each document was specified against the real process rather than assembled from a generic template.
- Proforma invoice: generated from the quotation with buyer terms, incoterms, currency and validity, so the buyer's first formal document is already system data.
- Commercial invoice: built from the confirmed order, carrying the values, terms and declarations customs expects to read.
- Packing list: line-level packing detail with net and gross weights, package counts, marks and numbers, drawn from the same order lines as the invoice so the two can never disagree.
- Shipper's letter of instruction: the freight forwarder's instruction set produced from order and shipment data instead of retyped into an email.
- Bill of lading pack: the same document engine drives the BL data set, keeping one shipment described identically everywhere.
Buyer-specific formats as templates
Different buyers require different layouts. That requirement was turned from a per-shipment risk into a configuration.
- Reusable QWeb templates: each buyer's required format exists as a named, reusable template rather than a manually restyled spreadsheet.
- One data source, many faces: the layout changes per buyer while the underlying order data stays identical, so a format preference can never alter a declared value.
- Template selection on the order: the correct format is chosen from the customer record, so the documentation team is not remembering which buyer wants what.
- Consistency as compliance: because the pack is generated rather than assembled, every shipment for a given buyer looks the same as the last one.
Sales to procurement, connected
The last disconnect was between what had been sold and what was being bought. Both loops now run on the same records.
- Demand-linked requisitions: confirmed orders drive purchase requirements, so procurement reacts to real commitments rather than a forecast someone maintained separately.
- Vendor management: suppliers, pricing and lead times held in the system, so purchasing decisions are made against recorded terms.
- Inventory in the loop: stock movements for raw material, packaging and finished goods update against the same transactions, keeping availability honest.
- Accounting downstream: invoicing and payments flow from the same orders, so commercial documents and books describe one event.
Why the pack can never disagree with itself
The proforma invoice, commercial invoice, packing list and shipping instruction are four views of one order record, not four documents someone keeps in sync. Change a quantity on the order and every document that mentions it changes with it, which is exactly why generated paperwork survives a customs check that assembled paperwork does not.
07 · How we built it
How was the Odoo project delivered?
Map the process first, configure second
Every buyer required a different document format and export compliance leaves no room for improvisation, so nothing was configured until the real process was mapped document by document. Seven phases from requirement analysis to a supported go-live.
Requirement analysis map the real process
The actual export process walked and documented, shipment by shipment and document by document, before any Odoo configuration began.
ERP solution design architect around the workflow
Modules, data flow and document logic architected around Unicorn Petro's real workflow rather than a generic implementation template.
Configuration & custom development build it
Odoo setup plus custom development in Python and the Odoo ORM, with QWeb templates for the document layer.
CRM integrations close the lead gap
IndiaMART and TradeIndia lead feeds connected via direct API, removing the single biggest source of lost enquiries.
Document automation build the engine
The proforma invoice, commercial invoice, packing list, shipping instruction and bill of lading document engine built and wired to order data.
User acceptance testing prove it on real data
Every workflow validated against the client's live data, including full export cycles with their actual buyers and formats.
Training & go-live hand over the keys
Sales, purchase and documentation teams trained on their own flows, then launched with hands-on support through the first live shipments.
08 · Engineering notes
The technical decisions behind the build
For the technically curious: how the integration, the document engine and the data model were engineered to survive upgrades, volume and a customs officer.
Custom addons, zero core edits
Everything built for Unicorn Petro lives in namespaced custom modules on Python and the Odoo ORM, extending Odoo rather than editing it.
- Inheritance, not modification: models and views extend through Odoo's inheritance mechanisms, so a future Odoo upgrade does not bury the export logic.
- Configuration as data: document templates, pipeline stages and workflow rules ship as XML data records, making the setup reproducible and reviewable.
- PostgreSQL underneath: one database as the single source of truth for leads, orders, stock, documents and accounting, with no export-and-reconcile step anywhere.
How the marketplace integration holds up
An integration that drops enquiries silently is worse than no integration, so the lead feed was engineered defensively.
- Scheduled polling: Odoo cron jobs pull from the IndiaMART and TradeIndia endpoints on a fixed cadence, so capture does not depend on anyone being logged in.
- Idempotent ingest: each enquiry carries its marketplace identifier, so a retried or overlapping fetch updates the existing lead instead of creating a duplicate.
- Failure is visible: API errors and rejected payloads are logged rather than swallowed, so a broken feed surfaces as an alert instead of a quiet drought of leads.
- Raw payload retained: the original enquiry text is kept on the record, so nothing is lost to an imperfect field mapping.
How the document engine is built
The export pack is a set of native Odoo report artifacts reading live order data, not files stored beside the order.
- QWeb templates: each document is a QWeb template rendered to PDF, so what the documentation team prints is what the order currently says.
- Buyer format resolution: the template applied is resolved from the customer record at print time, keeping format choice out of human hands.
- Computed shipment fields: package counts, net and gross weights and totals are computed from order lines rather than entered twice.
- Regeneration over editing: a corrected order regenerates its pack, which is what keeps the invoice, packing list and instruction permanently consistent.
The data migration pipeline
Existing customers, products and open orders moved through a staged pipeline rather than a bulk import.
- Extract & cleanse: legacy records exported, deduplicated and normalized in a staging environment before anything touched production.
- Ordered loading: imports run in dependency order (partners, products, price lists, then open orders and balances) through the ORM, so every business rule still applies.
- Verified counts: record counts and open-order values reconciled against the source before sign-off.
Testing, cutover & training
The system landed on a live exporting business, so the rollout was engineered to be boring.
- Staging mirror: every change proven on a copy of the real database before reaching production.
- Role-based UAT: sales, purchase and documentation teams each walked scripted end-to-end scenarios on the client's live data, including full export cycles.
- Format sign-off: each buyer-specific document template validated against a real historical shipment before go-live.
- Supported launch: teams trained on their own workflows and supported through the first live shipments rather than handed a manual.
Reporting & performance
Dashboards only replace spreadsheets if they stay fast and answer the question being asked.
- Aggregated reads: dashboards read grouped, indexed data rather than scanning rows, so they stay responsive as order volume grows.
- Filters as first-class citizens: period, market, salesperson and buyer filters are part of the report definitions, so a new cut of the data is a click.
- Scheduled automations: cron jobs refresh feeds and snapshot reporting data, so leadership reads prepared, consistent figures.
- Change discipline: every module version-controlled in Git, moving dev to staging to production, with nothing reaching live that did not pass staging.
The lead feed, drawn end to end
Two marketplaces, one scheduled job, one CRM. Each enquiry carries its marketplace identifier all the way through, so an overlapping fetch updates a lead instead of duplicating it, and an API failure raises an alert instead of quietly producing a slow week.
09 · The impact
What changed after go-live?
The results, in numbers
the part clients screenshot ↓- Zero-touch lead capture: enquiries reach the right salesperson the moment they arrive
- Faster customer response: quotations go out while the enquiry is still warm
- Export documentation automated from order data, not rebuilt per shipment
- Consistent, compliant documents: every buyer gets their required format, every time
- Faster quotation to order conversion through a single pipeline
- Sales and procurement in sync, with purchasing following confirmed demand
- Real-time export order visibility on one dashboard
10 · Under the hood
Technologies & core skills
"Every buyer required a different document format, and export compliance leaves no room for improvisation. So we mapped the real export process document by document before touching a single line of Odoo configuration, and connected the marketplaces by API rather than by hand."
11 · Quick questions, honest answers
Thinking about a similar build?
Yes. For Unicorn Petro both marketplaces connect to Odoo CRM by direct API, so an enquiry becomes a structured lead with buyer details, product interest and source tagging without anyone retyping it. Scheduled polling means capture does not depend on someone being logged in, and each enquiry carries its marketplace identifier so a repeated fetch updates the lead instead of duplicating it.
The full working pack. Unicorn Petro generates the proforma invoice, commercial invoice, packing list and shipper's letter of instruction directly from order data, with the bill of lading data set built on the same engine. Because all of them read one order record, the quantities, weights and values can never drift apart between documents.
Each buyer-specific format is built once as a reusable QWeb template and linked to the customer record, so the correct layout is resolved automatically at print time. The layout changes per buyer while the underlying order data stays identical, which turns a per-shipment compliance risk into a one-time configuration.
Yes, and that was an explicit goal here: unify the two without forcing one to behave like the other. They share one customer master, product master and pricing engine, then diverge where the business actually diverges. Export orders carry incoterms, ports, country of origin, HS codes and packing detail, while the domestic flow keeps its shorter path.
Manual documents are rebuilt per shipment, and every hand-built variation is a chance for a mismatch. Generated documents are views of one order record, so an invoice and its packing list describe the same goods by construction. Correcting an order regenerates the pack rather than requiring four separate edits, which is what keeps a shipment consistent at the port.
Seven working together: CRM, Sales, Purchase, Inventory, Accounting, Documents and Dashboards, all on a single database. That shared foundation is what allows a lead, an order, a stock movement, an export document and a management report to be different views of the same transaction rather than separate systems kept in step by hand.
Yes. Requisitions and purchasing are tied to sales demand, so raw material and packaging buying follows confirmed orders rather than a monthly estimate maintained on the side. Vendor terms and lead times sit in the same system, so purchasing decisions are made against recorded data.
Response time and lead survival. Enquiries reach the right salesperson the moment they arrive instead of after someone works through an inbox, so quotations go out while the enquiry is still warm. It also makes channel performance measurable, because every lead carries the marketplace it came from.
Yes, by design. All custom work lives in namespaced addons that extend Odoo through inheritance, with the core never edited. Document templates, pipeline stages and workflow rules ship as XML data records, so the whole setup is reproducible, reviewable and upgrade-safe.
It is the riskiest part, which is why it runs as a staged pipeline rather than a bulk import: extract and cleanse in staging, load in dependency order through the Odoo ORM so business rules still apply, then reconcile record counts and open-order values against the source before sign-off.
It depends on how many document formats and workflows are in play, which is exactly why requirement analysis comes first: mapping the real process document by document fixes the scope before configuration starts. Unicorn Petro ran seven phases, from requirement analysis and solution design through custom development, CRM integrations, document automation, user acceptance testing on live data, and a supported go-live.
KoderXpert is an Odoo Ready Partner that maps the real process before configuring anything, builds upgrade-safe custom modules with zero core edits, and treats export documentation as an engineering problem rather than a template exercise. Unicorn Petro's outcome: zero manual re-entry of marketplace leads and a five-document export pack generated from order data. Talk to KoderXpert about your export workflow.
Still running exports on inboxes and spreadsheets?
Tell us where the paperwork starts repeating itself: lead capture, quotations, packing lists or shipping instructions. KoderXpert will map the real process first and configure second, until an order carries itself from enquiry to container.
Related case studies
- Matahin: Odoo supply chain ERP implementationProcurement to export with batch traceability
- Ethereum Infracon: Odoo CRM implementationConstruction CRM on a single tracked pipeline
- Newmatic Kitchens: Multi-company Odoo ERP implementationMulti-company, multi-currency ERP across four countries
Industrial lubricants & petroleum exports · Odoo ERP implementation
Unicorn Petro: from paperwork rebuilt every shipment to one export engine
Published · Updated
Unicorn Petro manufactures and exports industrial lubricants, specialty oils, greases and petroleum products across domestic and international markets. As export volumes grew, the systems holding the business together did not grow with them. KoderXpert mapped the real export process document by document, then built a customized Odoo ERP that carries an order from the moment an enquiry lands to the moment the container ships.
Designed, built and delivered by KoderXpert Technologies Pvt. Ltd.
Official Odoo Ready Partner · Ahmedabad & Gandhinagar, India
- Client
- Unicorn Petro
- Industry
- Industrial lubricants, petroleum products, export manufacturing
- Platform
- Odoo ERP, end to end implementation
- Implementation partner
- KoderXpert Technologies
- Headline result
- Zero manual re-entry of marketplace leads
01 · Overview
The 30-second version
- Unicorn Petro is a leading manufacturer and exporter of industrial lubricants, specialty oils, greases and petroleum products, serving both domestic and international markets.
- Growth outran the systems: enquiries from IndiaMART and TradeIndia were retyped by hand one at a time, export paperwork was rebuilt from scratch for every shipment, and domestic and export sales ran as two disconnected businesses on separate rails.
- KoderXpert mapped the real export process before touching configuration, then delivered a customized Odoo ERP connecting the whole order lifecycle: marketplace leads captured by API, one pipeline for both sales motions, procurement tied to confirmed demand, and proforma invoice, commercial invoice, packing list, shipping instructions and bill of lading generated from order data.
02 · Where the old way broke down
What was going wrong before Odoo?
Six cracks between the enquiry and the container
Every team was running its own workaround: sales retyped leads out of an inbox, documentation rebuilt a shipment pack from a spreadsheet template, purchasing guessed at demand, and leadership waited for month end to learn what had happened.
Leads slipping away
Enquiries from IndiaMART and TradeIndia lived in inboxes and were typed into the system by hand, one at a time: slow, inconsistent and easy to lose.
The cost → a warm buyer, cold by MondayExport paperwork rebuilt every time
Proforma invoices, commercial invoices, packing lists and shipping instructions were assembled manually in spreadsheets for every single shipment.
The cost → the same document, retyped foreverInconsistent documents
Every buyer wanted a different format, and each hand-built variation was another chance for a compliance problem at the port.
The cost → a customs risk per shipmentCRM with no visibility
Follow-ups depended on whoever remembered them. There was no shared pipeline showing which enquiry was at which stage, or who owned it.
The cost → memory as a sales processNo live order visibility
Answering the question "where is this export order right now" took three phone calls across three teams.
The cost → three calls for one answerTwo businesses, two rails
Domestic and export sales ran as separate operations with no shared source of truth, so nobody had one clear view of an order from enquiry to shipment.
The cost → one company, two versions of it03 · The turnaround
Drag it and see the before & after yourself
Slide the orange handle. Left is the inbox-and-spreadsheet era, right is the connected export engine.
- ✗ Marketplace enquiries retyped by hand, one at a time
- ✗ Export packs rebuilt from scratch for every shipment
- ✗ Follow-ups depending on individual memory
- ✗ Domestic and export running on separate rails
- ✗ Order status confirmed by phone call
the retyping era 😵
one export engine ✨
- ✔ Enquiries landing in the CRM automatically, by API
- ✔ PI, CI, packing list & SLI from order data, one click
- ✔ One pipeline with stages, owners and reminders
- ✔ Domestic and export flows on a single platform
- ✔ Live export order status on one dashboard
← drag toward the paperwork · drag toward the platform →
04 · The plan
What "one system" had to actually mean
The brief in one line: never retype an enquiry, never rebuild a document, and always be able to answer where an order is. Hover any goal to tick it off.
Zero-touch lead capture: pull every enquiry automatically from IndiaMART and TradeIndia, with no manual entry at all.
One pipeline: centralize CRM and sales so every enquiry has a stage, an owner and a visible follow-up.
Two motions, one platform: unify export and domestic workflows without forcing either one to behave like the other.
Demand-driven purchasing: connect procurement to sales so buying follows confirmed orders, not guesswork.
Automated documentation: generate the full export pack end to end, in each buyer's required format.
Real dashboards: give leadership live reporting instead of a month-end spreadsheet exercise.
05 · What we delivered
What did KoderXpert build?
A platform built around the real workflow
KoderXpert delivered a customized Odoo ERP that connects the entire order lifecycle, from the moment an enquiry lands to the moment the container ships. Marketplace enquiries flow straight into Odoo CRM, auto-assigned and tracked through a single pipeline into quotation and sales order, while documentation, purchasing, accounting and reporting run on the same connected platform.
IndiaMART & TradeIndia integration
Both marketplaces connected by direct API, so enquiries land in the CRM automatically with buyer details, product interest and source intact. No re-typing, no copy-paste, no lost lead.
zero-touch captureAutomated lead management
Automatic assignment to the right salesperson, defined pipeline stages, scheduled follow-up reminders and conversion tracking from enquiry through to won order.
a pipeline, not a memoryDual sales workflows
Purpose-built domestic and export flows on one platform: each keeps the fields, pricing logic, terms and document set its market actually needs, while sharing one customer and product master.
two motions, one truthPurchase & vendor management
Requisitions and procurement tied directly to sales demand, so raw material and packaging buying follows confirmed orders instead of a monthly estimate.
buying that follows demandOne-click export documents
Proforma invoice, commercial invoice, packing list and shipper's letter of instruction generated directly from order data, with the bill of lading pack built on the same engine.
5 documents, one clickExecutive dashboards & MIS
Live reporting on sales performance, order status and export throughput, so leadership reads the current position rather than reconstructing last month's.
answers without a spreadsheet06 · Functional deep dive
How the connected system actually works
The delivery summary says what was built. This is the functional detail underneath it: how a lead arrives, how the two sales motions differ, what each export document contains, and how purchasing hears about a confirmed order.
Marketplace capture, end to end
The single biggest source of lost revenue was the gap between an enquiry arriving and someone typing it in. That gap was closed at the source rather than shortened.
- Direct API integration: IndiaMART and TradeIndia connect straight to Odoo CRM, so an enquiry becomes a lead record without a human touching a keyboard.
- Field mapping at ingest: buyer name, contact details, product interest, quantity and enquiry text map to structured CRM fields, so the lead is searchable and reportable from the first second.
- Source tagging: every lead carries the marketplace it came from, which finally makes channel performance a measurable number rather than an impression.
- Deduplication: repeat enquiries from a known buyer attach to the existing customer record instead of creating a parallel one.
The lead lifecycle, staged
Once leads land automatically, the question becomes whether anyone acts on them. The pipeline was built to make inaction visible.
- Automatic assignment: incoming leads route to the right salesperson by rule, so ownership is set before anyone opens the record.
- Defined stages: new, qualified, quoted, negotiation, won and lost, with each stage carrying its own expectations rather than being a label.
- Follow-up reminders: scheduled activities sit on the lead itself, so a pending follow-up is a system fact instead of a personal note.
- Conversion tracking: lead to quotation to sales order measured as one chain, which is what makes response time an improvable metric.
Domestic and export, side by side
The two sales motions genuinely differ, so the system does not pretend otherwise. They share masters and diverge where the business actually diverges.
- Shared foundation: one customer master, one product master, one pricing engine, so a buyer is the same record whichever market they sit in.
- Export-specific data: incoterms, port of loading and discharge, country of origin, HS codes, container and packing details captured on the order, not appended later.
- Domestic simplicity preserved: the domestic flow keeps its shorter path, so local orders are not slowed down by export fields they do not need.
- One order view: whichever motion an order belongs to, its status is readable from the same place, which is what ended the three-phone-call question.
The export document set, specified
Export compliance leaves no room for improvisation, so each document was specified against the real process rather than assembled from a generic template.
- Proforma invoice: generated from the quotation with buyer terms, incoterms, currency and validity, so the buyer's first formal document is already system data.
- Commercial invoice: built from the confirmed order, carrying the values, terms and declarations customs expects to read.
- Packing list: line-level packing detail with net and gross weights, package counts, marks and numbers, drawn from the same order lines as the invoice so the two can never disagree.
- Shipper's letter of instruction: the freight forwarder's instruction set produced from order and shipment data instead of retyped into an email.
- Bill of lading pack: the same document engine drives the BL data set, keeping one shipment described identically everywhere.
Buyer-specific formats as templates
Different buyers require different layouts. That requirement was turned from a per-shipment risk into a configuration.
- Reusable QWeb templates: each buyer's required format exists as a named, reusable template rather than a manually restyled spreadsheet.
- One data source, many faces: the layout changes per buyer while the underlying order data stays identical, so a format preference can never alter a declared value.
- Template selection on the order: the correct format is chosen from the customer record, so the documentation team is not remembering which buyer wants what.
- Consistency as compliance: because the pack is generated rather than assembled, every shipment for a given buyer looks the same as the last one.
Sales to procurement, connected
The last disconnect was between what had been sold and what was being bought. Both loops now run on the same records.
- Demand-linked requisitions: confirmed orders drive purchase requirements, so procurement reacts to real commitments rather than a forecast someone maintained separately.
- Vendor management: suppliers, pricing and lead times held in the system, so purchasing decisions are made against recorded terms.
- Inventory in the loop: stock movements for raw material, packaging and finished goods update against the same transactions, keeping availability honest.
- Accounting downstream: invoicing and payments flow from the same orders, so commercial documents and books describe one event.
Why the pack can never disagree with itself
The proforma invoice, commercial invoice, packing list and shipping instruction are four views of one order record, not four documents someone keeps in sync. Change a quantity on the order and every document that mentions it changes with it, which is exactly why generated paperwork survives a customs check that assembled paperwork does not.
07 · How we built it
How was the Odoo project delivered?
Map the process first, configure second
Every buyer required a different document format and export compliance leaves no room for improvisation, so nothing was configured until the real process was mapped document by document. Seven phases from requirement analysis to a supported go-live.
Requirement analysis map the real process
The actual export process walked and documented, shipment by shipment and document by document, before any Odoo configuration began.
ERP solution design architect around the workflow
Modules, data flow and document logic architected around Unicorn Petro's real workflow rather than a generic implementation template.
Configuration & custom development build it
Odoo setup plus custom development in Python and the Odoo ORM, with QWeb templates for the document layer.
CRM integrations close the lead gap
IndiaMART and TradeIndia lead feeds connected via direct API, removing the single biggest source of lost enquiries.
Document automation build the engine
The proforma invoice, commercial invoice, packing list, shipping instruction and bill of lading document engine built and wired to order data.
User acceptance testing prove it on real data
Every workflow validated against the client's live data, including full export cycles with their actual buyers and formats.
Training & go-live hand over the keys
Sales, purchase and documentation teams trained on their own flows, then launched with hands-on support through the first live shipments.
08 · Engineering notes
The technical decisions behind the build
For the technically curious: how the integration, the document engine and the data model were engineered to survive upgrades, volume and a customs officer.
Custom addons, zero core edits
Everything built for Unicorn Petro lives in namespaced custom modules on Python and the Odoo ORM, extending Odoo rather than editing it.
- Inheritance, not modification: models and views extend through Odoo's inheritance mechanisms, so a future Odoo upgrade does not bury the export logic.
- Configuration as data: document templates, pipeline stages and workflow rules ship as XML data records, making the setup reproducible and reviewable.
- PostgreSQL underneath: one database as the single source of truth for leads, orders, stock, documents and accounting, with no export-and-reconcile step anywhere.
How the marketplace integration holds up
An integration that drops enquiries silently is worse than no integration, so the lead feed was engineered defensively.
- Scheduled polling: Odoo cron jobs pull from the IndiaMART and TradeIndia endpoints on a fixed cadence, so capture does not depend on anyone being logged in.
- Idempotent ingest: each enquiry carries its marketplace identifier, so a retried or overlapping fetch updates the existing lead instead of creating a duplicate.
- Failure is visible: API errors and rejected payloads are logged rather than swallowed, so a broken feed surfaces as an alert instead of a quiet drought of leads.
- Raw payload retained: the original enquiry text is kept on the record, so nothing is lost to an imperfect field mapping.
How the document engine is built
The export pack is a set of native Odoo report artifacts reading live order data, not files stored beside the order.
- QWeb templates: each document is a QWeb template rendered to PDF, so what the documentation team prints is what the order currently says.
- Buyer format resolution: the template applied is resolved from the customer record at print time, keeping format choice out of human hands.
- Computed shipment fields: package counts, net and gross weights and totals are computed from order lines rather than entered twice.
- Regeneration over editing: a corrected order regenerates its pack, which is what keeps the invoice, packing list and instruction permanently consistent.
The data migration pipeline
Existing customers, products and open orders moved through a staged pipeline rather than a bulk import.
- Extract & cleanse: legacy records exported, deduplicated and normalized in a staging environment before anything touched production.
- Ordered loading: imports run in dependency order (partners, products, price lists, then open orders and balances) through the ORM, so every business rule still applies.
- Verified counts: record counts and open-order values reconciled against the source before sign-off.
Testing, cutover & training
The system landed on a live exporting business, so the rollout was engineered to be boring.
- Staging mirror: every change proven on a copy of the real database before reaching production.
- Role-based UAT: sales, purchase and documentation teams each walked scripted end-to-end scenarios on the client's live data, including full export cycles.
- Format sign-off: each buyer-specific document template validated against a real historical shipment before go-live.
- Supported launch: teams trained on their own workflows and supported through the first live shipments rather than handed a manual.
Reporting & performance
Dashboards only replace spreadsheets if they stay fast and answer the question being asked.
- Aggregated reads: dashboards read grouped, indexed data rather than scanning rows, so they stay responsive as order volume grows.
- Filters as first-class citizens: period, market, salesperson and buyer filters are part of the report definitions, so a new cut of the data is a click.
- Scheduled automations: cron jobs refresh feeds and snapshot reporting data, so leadership reads prepared, consistent figures.
- Change discipline: every module version-controlled in Git, moving dev to staging to production, with nothing reaching live that did not pass staging.
The lead feed, drawn end to end
Two marketplaces, one scheduled job, one CRM. Each enquiry carries its marketplace identifier all the way through, so an overlapping fetch updates a lead instead of duplicating it, and an API failure raises an alert instead of quietly producing a slow week.
09 · The impact
What changed after go-live?
The results, in numbers
the part clients screenshot ↓- Zero-touch lead capture: enquiries reach the right salesperson the moment they arrive
- Faster customer response: quotations go out while the enquiry is still warm
- Export documentation automated from order data, not rebuilt per shipment
- Consistent, compliant documents: every buyer gets their required format, every time
- Faster quotation to order conversion through a single pipeline
- Sales and procurement in sync, with purchasing following confirmed demand
- Real-time export order visibility on one dashboard
10 · Under the hood
Technologies & core skills
"Every buyer required a different document format, and export compliance leaves no room for improvisation. So we mapped the real export process document by document before touching a single line of Odoo configuration, and connected the marketplaces by API rather than by hand."
11 · Quick questions, honest answers
Thinking about a similar build?
Yes. For Unicorn Petro both marketplaces connect to Odoo CRM by direct API, so an enquiry becomes a structured lead with buyer details, product interest and source tagging without anyone retyping it. Scheduled polling means capture does not depend on someone being logged in, and each enquiry carries its marketplace identifier so a repeated fetch updates the lead instead of duplicating it.
The full working pack. Unicorn Petro generates the proforma invoice, commercial invoice, packing list and shipper's letter of instruction directly from order data, with the bill of lading data set built on the same engine. Because all of them read one order record, the quantities, weights and values can never drift apart between documents.
Each buyer-specific format is built once as a reusable QWeb template and linked to the customer record, so the correct layout is resolved automatically at print time. The layout changes per buyer while the underlying order data stays identical, which turns a per-shipment compliance risk into a one-time configuration.
Yes, and that was an explicit goal here: unify the two without forcing one to behave like the other. They share one customer master, product master and pricing engine, then diverge where the business actually diverges. Export orders carry incoterms, ports, country of origin, HS codes and packing detail, while the domestic flow keeps its shorter path.
Manual documents are rebuilt per shipment, and every hand-built variation is a chance for a mismatch. Generated documents are views of one order record, so an invoice and its packing list describe the same goods by construction. Correcting an order regenerates the pack rather than requiring four separate edits, which is what keeps a shipment consistent at the port.
Seven working together: CRM, Sales, Purchase, Inventory, Accounting, Documents and Dashboards, all on a single database. That shared foundation is what allows a lead, an order, a stock movement, an export document and a management report to be different views of the same transaction rather than separate systems kept in step by hand.
Yes. Requisitions and purchasing are tied to sales demand, so raw material and packaging buying follows confirmed orders rather than a monthly estimate maintained on the side. Vendor terms and lead times sit in the same system, so purchasing decisions are made against recorded data.
Response time and lead survival. Enquiries reach the right salesperson the moment they arrive instead of after someone works through an inbox, so quotations go out while the enquiry is still warm. It also makes channel performance measurable, because every lead carries the marketplace it came from.
Yes, by design. All custom work lives in namespaced addons that extend Odoo through inheritance, with the core never edited. Document templates, pipeline stages and workflow rules ship as XML data records, so the whole setup is reproducible, reviewable and upgrade-safe.
It is the riskiest part, which is why it runs as a staged pipeline rather than a bulk import: extract and cleanse in staging, load in dependency order through the Odoo ORM so business rules still apply, then reconcile record counts and open-order values against the source before sign-off.
It depends on how many document formats and workflows are in play, which is exactly why requirement analysis comes first: mapping the real process document by document fixes the scope before configuration starts. Unicorn Petro ran seven phases, from requirement analysis and solution design through custom development, CRM integrations, document automation, user acceptance testing on live data, and a supported go-live.
KoderXpert is an Odoo Ready Partner that maps the real process before configuring anything, builds upgrade-safe custom modules with zero core edits, and treats export documentation as an engineering problem rather than a template exercise. Unicorn Petro's outcome: zero manual re-entry of marketplace leads and a five-document export pack generated from order data. Talk to KoderXpert about your export workflow.
Still running exports on inboxes and spreadsheets?
Tell us where the paperwork starts repeating itself: lead capture, quotations, packing lists or shipping instructions. KoderXpert will map the real process first and configure second, until an order carries itself from enquiry to container.
Related case studies
- Matahin: Odoo supply chain ERP implementationProcurement to export with batch traceability
- Ethereum Infracon: Odoo CRM implementationConstruction CRM on a single tracked pipeline
- Newmatic Kitchens: Multi-company Odoo ERP implementationMulti-company, multi-currency ERP across four countries