Odoo Integration, Construction Operations[Launched]

Construction Ops in Odoo

Construction Ops in Odoo preview

System Architecture //

Odoo 19Odoo OnlinePythonXML-RPCAsana APIGoogle DriveCallRail APIRingCentral APIGmail OAuthContact Form 7

1. Project Overview

The client is a Canadian construction company selling and delivering long-cycle garage and construction projects: from first lead and estimate to permits, demolition, construction, invoices, final meeting and warranty documents

Odoo had already been selected as the target system, but the real operations were still spread across Asana, Google Drive, Google Sheets, Gmail, telephony, website forms and manual spreadsheets. The task was to bring that workflow into one controlled system without heavy custom development and without moving to a separate server

My role was integration architect and hands-on implementer: understand the current processes, design the Odoo 19 Enterprise architecture, migrate operational history, preserve team context and launch a practical baseline system quickly

2. What The Client Had

CRM was fragmented across channels: leads came from ads, website forms, phone calls, email and Asana, but did not land in one clean pipeline
Asana had become the operating system: sales, active construction projects, tasks, comments, deadlines, attachments and stages lived outside Odoo
Google Drive held critical context: drawings, work orders, invoices, dashboards, spreadsheets and client folders were used daily, but were not natively connected to Odoo records
Construction projects had long operational cycles: each project moved through 10-15 stages, so the team needed clear stages, deadlines, dependencies and Gantt planning
Estimates lived in Excel/Sheets: prices, packages, concrete pads, insulation, drywall, optional items and GST needed to move into the sales workflow
Platform constraints mattered: the client chose to stay on Odoo Online, so integrations had to be designed carefully without Odoo.sh and without a server bridge unless explicitly approved

3. Scope

Configure Odoo 19 Enterprise as the central system for CRM, Sales, Projects, Documents and Gantt
Move the sales pipeline from Asana into Odoo CRM without losing stages, history or source context
Synchronize active construction projects, tasks, deadlines and stage architecture from Asana into Odoo Projects
Migrate comments, authorship, attachments and historical context from Asana into Odoo chatter
Recreate the Google Drive document structure in Odoo Documents and link key files to projects and tasks
Move selected spreadsheet workflows into Odoo Documents / live spreadsheets where it made practical sense
Configure baseline lead intake from website forms, CallRail, RingCentral, Gmail and Odoo CRM
Launch a sales-to-project flow where a signed deal creates an operational project

4. Solution

System Setup & CRM Architecture

Audited the Odoo 19 Enterprise setup, Asana workspace, Google Drive structure, active pipelines and spreadsheet workflows
Built an XML-RPC integration bridge for controlled, repeatable migration work
Added custom dedupe fields: `x_asana_gid` on `crm.lead` and `project.task`, plus dedicated ID fields for imported comments, attachments, CallRail and RingCentral events
Cleaned and synchronized CRM stages with the real sales pipeline, while moving or removing rogue stages
Made the import process incremental, so scripts could be rerun safely without duplicating records or overwriting live data

Asana to Odoo Project Migration

Pulled 21 Asana boards and migrated 1,253 tasks into `project.task`
Dynamically converted original Asana sections into `project.task.type`, keeping Odoo stages aligned with the team's language instead of a generic default setup
Configured stage order per project for 7 active construction projects, because each project had its own operational flow
Synchronized 30 unique project stages 1:1 with Asana and removed unnecessary default Odoo stages
Normalized task dates and deadlines into a Gantt-ready structure, adding dependencies where possible

Comments, Attachments & Historical Context

Migrated 497 Asana comments into Odoo chatter while preserving authorship, creation date and readable HTML bodies
Downloaded 437 physical attachments and linked them to the right task threads through `ir.attachment`
Added fallback logic for deleted or unavailable Asana users so historical conversations would not collapse into anonymous system notes
Implemented HTTP 429 exponential backoff to work around Odoo/Asana rate limits without data loss or manual babysitting

Documents, Drive & Construction Files

Recreated the Google Drive hierarchy inside Odoo Documents: project folders, work orders, drawings, invoices, dashboards and coordination materials
Linked imported files to the actual projects and tasks, so documents were available in the operational context where the team needed them
Tested conversion of selected Excel/Sheets files into live spreadsheets, keeping tabular workflows only where they were genuinely useful
Built matching logic for drawings, estimates and financial documents so they could be attached to the right construction records

Lead Intake, Calls & Website Forms

Verified and connected CallRail API to Odoo: calls create new CRM leads or enrich existing leads by phone number
Integrated RingCentral call logs as a baseline CRM intake layer with call ID dedupe
Connected Contact Form 7 website forms to Odoo CRM through an email alias, so site requests create leads immediately
Configured and tested Gmail OAuth for key mailboxes, with outbound email working through the company sender
Left historical email backfill and deeper phone-event timeline for a future upgrade because of Odoo Online constraints and client scope decisions

Sales, Estimates & Project Automation

Prepared products/services for the estimate flow: garage package, concrete pad, insulation, drywall, permits and optional items
Configured tax logic for Alberta GST 5%, with no PST
Designed a quotation flow where managers build commercial offers from operational items instead of copying data between spreadsheets
Added an automated action: when a deal reaches signed/confirmed state, Odoo creates a project and moves the sale into execution

5. Outcome

One Odoo system for CRM, Sales, Projects, Documents, Gantt and baseline communication intake
21 Asana boards, 1,253 tasks, 497 comments and 437 attachments migrated into Odoo without breaking historical context
Sales pipeline, active projects and construction stages no longer live separately in Asana
The team received a project workflow with real construction stages, deadlines, dependencies and Gantt visibility
Google Drive documents became available inside Odoo where the work actually happens: tasks, projects and operational records
Calls, website forms and email intake received a baseline path into CRM without manual copying
The architecture stayed compatible with Odoo Online, without unnecessary custom code or forced platform migration

6. Technical Result

This case was about disciplined integration, not building a large custom module. The real challenge was not simply importing data, but preserving structure, authorship, history, dependencies and the daily logic of a construction team

Odoo became more than another tool next to Asana and Drive. It became the operating place where sales turn into projects, projects hold documents and tasks, and new requests from the website and telephony flow straight into CRM

Ready to solve a similar challenge?

Building reliable systems requires precision and experience. Let's discuss how surgical engineering can restore pace to your product