AI Summary - 20-sec read - Reviewed by experts
- Job-work is normal in Indian manufacturing - you send raw material to a vendor and get finished or semi-finished goods back - but in spreadsheets the stock sitting at the vendor is invisible and rarely reconciles.
- Odoo's subcontracting feature models this directly: a subcontracting bill of materials, a purchase order to the job-worker, and a dedicated location that holds your material while it is at the vendor.
- You always know how much of your material is at each job-worker, what came back, and what is unaccounted for - the report your spreadsheet never gave you.
- It also gives you the numbers ITC-04 needs each quarter, and it costs the finished good correctly by adding the job-work charge to the material value.
- Short on time? We set up Odoo subcontracting end to end, including the GST returns. Book a free call.
Short on time? Book a free call.
Almost every Indian manufacturer relies on job-work. You send fabric to a stitching unit, metal to a plater, or actives to a contract blender, and finished goods come back. The work gets done. What never quite works is the paperwork: the material sitting at the vendor is invisible in your stock, your costing ignores the job-work charge, and at quarter end ITC-04 becomes a frantic reconstruction from WhatsApp messages and delivery challans. Odoo has a feature built for exactly this, and most teams running Odoo do not know it exists.
What job-work breaks in a spreadsheet
The core problem is ownership versus possession. When you send raw material out for job-work, you still own it - it is your stock, your value, your input tax credit - but it is no longer in your building. A spreadsheet has no clean way to hold that idea, so the material simply disappears from your stock count the moment it leaves, then reappears, transformed, when finished goods arrive. In between, nobody can answer a basic question: how much of my material is sitting at which vendor right now?
That gap causes real losses. Material goes out and short quantities come back, but without a running balance you never notice the shrinkage. Costing is wrong because the finished good is valued only on the components, ignoring what you paid the job-worker. And the GST side is worse: under the job-work rules you must declare goods sent to and received from job-workers in ITC-04, and inputs must return within a year or the credit is at risk. Reconstructing all of that from challans after the fact is where the errors and the penalties live.
Losing track of material once it leaves for job-work?
We configure Odoo subcontracting so every gram you send out has a running balance at the vendor, the finished good is costed correctly, and your ITC-04 numbers are ready each quarter. No pitch, reply in 2 hrs, no card needed, NDA on request.
Get a free auditWhat job-work breaks in a spreadsheet, in detail
Odoo treats the job-worker as a special kind of vendor who manufactures on your behalf, and it keeps your ownership of the material throughout. Two pieces make it work.
The subcontracting bill of materials
You define a bill of materials for the finished product and set its type to Subcontracting, then name the vendor or vendors who do the work. This tells Odoo that this product is not made on your own shop floor - it is made by a job-worker from components you supply. If you also run in-house production, this sits alongside your standard manufacturing setup; the broader picture of planning that is in our guide to manufacturing resource planning with Odoo MRP.
Resupplying the subcontractor
When you raise a purchase order to the job-worker for the finished product, Odoo knows which components that product consumes and helps you send them out. Crucially, those components do not vanish from your books. They move to a dedicated subcontracting location that represents "my stock, currently at the vendor". When the finished goods are received, Odoo consumes the components from that location and adds the finished product to your warehouse. At any moment you can open the report and see exactly how much of your material each subcontractor is holding.
Keeping GST clean: ITC-04 and material at the vendor
Because Odoo holds your material in a tracked location at the vendor rather than writing it off, the data ITC-04 asks for is already there. You can see what was sent to each job-worker, what came back, and what is still out - the exact movements the quarterly return reports. Instead of rebuilding the picture from challans, you are reading it off a balance Odoo has maintained all along.
This also surfaces the one-year clock. Inputs sent for job-work that do not return within the permitted period are treated as a supply, and the credit can be reversed. With the material visible by vendor and date, ageing it is straightforward - you can chase a slow job-worker before the deadline rather than discovering the exposure at audit. This pairs with the rest of your Indian statutory setup; we cover the payroll side of that compliance in running Odoo payroll in India.
Takeaways
- Set the finished product's bill of materials to Subcontracting and name the job-worker - that one switch turns the vendor into a contract manufacturer in Odoo.
- Components you send move to a tracked location at the vendor, so you keep ownership and a running balance instead of writing the stock off.
- The same data feeds ITC-04 and ages the one-year return clock, so the quarterly return stops being a reconstruction job.
- Add the job-work charge to the bill of materials so the finished good is costed on material plus service, not material alone.
Costing the finished good correctly
A finished good that came back from job-work cost you two things: the components and the fee you paid the job-worker. If your costing only counts the components, every such product is undervalued, which quietly distorts margins and stock valuation across the whole catalogue. In Odoo you add the subcontracting service as a cost on the bill of materials, so the finished product is valued on material plus the conversion charge. The result is a stock value and a margin you can trust, which matters the moment you are pricing or reporting on these lines.
For manufacturers running many job-work routes, getting this consistent across dozens of products is where a careful implementation pays for itself. It is also a common reason teams ask for help tailoring the setup - the kind of work our Odoo customization services handle when the standard flow needs to fit a specific operation.
Where teams get it wrong
A few mistakes show up again and again. Teams treat the job-worker as an ordinary supplier and buy the finished good as a simple purchase, which loses all visibility of the material they sent. They forget to record the components actually consumed, so the balance at the vendor drifts from reality. They skip the service cost, so costing stays wrong. And they leave ITC-04 as a manual job even after Odoo is holding the data, simply because nobody connected the two. Each of these is avoidable with a setup that mirrors how your job-work actually runs, which is the heart of a good Odoo implementation.
Frequently asked questions
Do I need a separate Odoo app for subcontracting?
No. Subcontracting is part of the Manufacturing and Inventory apps in current Odoo versions. You enable it in the manufacturing settings, then set the relevant bills of materials to the Subcontracting type. No third-party module is required for the core flow.
Can one product be made both in-house and by a job-worker?
Yes. A product can have more than one bill of materials - a standard one for in-house production and a subcontracting one for the job-worker route. You choose the route per order, which is useful when you flex capacity between your own floor and outside units.
Does Odoo handle multi-level job-work?
Recent Odoo versions support multi-level subcontracting, where one job-worker's output is sent on to another before returning to you. It needs careful configuration so the material is tracked at each stage, but the model holds - each level keeps its own balance of your stock.
How does this help at GST audit time?
Because the material movements to and from each job-worker are recorded as they happen, you can produce the sent, received, and outstanding figures ITC-04 reports on without reconstructing them from challans. Aged balances also flag inputs approaching the one-year return limit before they become a credit-reversal problem.
The short version: job-work is not the problem - losing sight of your material once it leaves is. Odoo subcontracting keeps that material on your books while it is at the vendor, costs the finished good on the full picture, and hands you the GST numbers you used to rebuild by hand. Set it up to match how your shop actually sends and receives, and the quarter-end scramble disappears.
Founder and CEO of Braincuber. Has scoped and shipped 500+ Odoo, AI, and cloud projects for US mid-market and global brands. Takes every founder call personally — no SDR layer between buyers and the people building the system.
