A HubSpot to Odoo migration is mostly a learning project wearing a migration project's clothes. Odoo has no like-for-like equivalent of HubSpot's workflow editor or its smart lists, so program logic gets rebuilt rather than ported — much of ours ended up as regular expressions in server actions — and someone has to learn the platform well enough to teach it. Price the learning, not the export.

What follows is work our consultants have delivered for a company selling a web-based authenticator product, described at industry level.

Why would anyone move marketing off HubSpot and onto Odoo?

Usually because the rest of the business already runs on Odoo. Sales sits there, invoicing sits there, and marketing sits outside in HubSpot, syncing across a boundary nobody enjoys maintaining. The argument is data proximity and licence consolidation. It is not feature parity, and it never is.

That call gets made by people who will never build a nurture. Which is fine, as long as everyone says the quiet part out loud: you are trading a good marketing automation platform for a capable ERP that also sends email. If the trade is worth it — and when billing and CRM already live in one place, it often is — the job becomes making marketing work in the new environment rather than relitigating the decision.

What does a HubSpot to Odoo migration actually involve?

Assets and logic, not records. Contact data is the least eventful part of the job; the operational programs are the work. In rough order of pain:

  • Templates. HubL modules do not travel. Email and landing page markup gets rebuilt against Odoo's QWeb templating, and the editor has firm opinions about what your HTML should look like.
  • Source tracking. Odoo models UTMs as actual records — utm.source, utm.medium and the rest — rather than text properties hanging off the contact. If your HubSpot source values are tidy, that's a gift. They rarely are, so part of the migration is deciding which values deserve to exist at all.
  • Operational programs. Normalisation, lifecycle assignment, routing, suppression handling. We rebuilt these as marketing automation campaigns backed by server actions wherever the campaign filter ran out of road.
  • New programs. Some of the logic had never existed in HubSpot and was being done by hand. We built those properly while we were in there.
  • Everything else. We guided the in-house team through the remaining assets instead of doing it for them. Slower, and correct.

Why did the program logic end up written in RegEx?

Because Odoo's filter conditions weren't expressive enough to hold rules HubSpot had been holding for free. Domain filters give you ilike, set membership and boolean combinations, which covers more than you'd expect — right up until the rule reads "route this if the email domain is on the enterprise list, unless it's a free-mail provider, unless the contact already has an open opportunity". In HubSpot that's a smart list somebody built in an afternoon. Here it becomes patterns evaluated in server actions.

It works. It is also fragile in one specific way: an unanchored alternation will happily match example.co inside example.com, and nothing in the interface will warn you. Test every pattern against real values from the database before anything goes live, not against the handful of examples you had in your head when you wrote it.

The deeper problem with RegEx as program logic has nothing to do with correctness or speed. A marketer opening that campaign long after you've gone sees a pattern, not a rule. Write the mapping document — each expression against the business rule it encodes — and keep it next to the campaign, or the logic turns into folklore. Folklore is what the next agency rebuilds from scratch.

How do you migrate onto a platform you've never used?

You learn it first, on someone's clock, and you accept that most of the calendar goes on learning rather than migrating. There is no Odoo equivalent of the Marketo Nation thread that answers your exact question. The documentation is written for implementers and finance teams, the community answers come out ERP-flavoured, and marketing automation is a small room in a very large building. The thread that matches your question is usually three years old and ends with "solved, thanks".

Credentials cut both ways here. One of our consultants was among only twelve people selected worldwide to write Adobe's Marketo certification exam; on day one in Odoo that counted for nothing, beyond knowing which questions to ask and roughly how long to keep asking them.

Then you teach it. A migration isn't finished when the assets are moved. It's finished when someone in-house can build the next campaign without calling you, which is why we trained the client's team on the platform itself rather than on the assets we'd handed them.

What does moving to a less-common platform cost?

More in learning time than in migration time, and nobody quotes for the first one. Statements of work get scoped in assets and programs, because those are countable. Ramp-up on an unfamiliar platform isn't countable, so it gets absorbed — by the consultancy in unbilled hours, or by the client in a timeline that slips for reasons that sound like excuses.

Say it in the proposal instead. A HubSpot to Marketo move is priced from experience. This one is priced from experience plus an honest estimate of how long competent people take to become useful in something new.

What we'd do differently:

  • Learn before scoping, not during. Sandbox time ahead of the statement of work would have changed how we sized the operational programs.
  • Build one program end to end — form, through routing, to send — before touching anything else. It surfaces the platform's real constraints faster than any feature comparison.
  • Write the logic document as you go. Reconstructing intent from your own regular expressions is a miserable afternoon.

Frequently asked questions

Can you export HubSpot data straight into Odoo?

Contacts and companies export cleanly enough via CSV, along with basic activity, and that part rarely causes trouble. What doesn't come across is everything that made HubSpot useful: workflow definitions, smart list criteria, lifecycle stage history, form logic. All of it gets re-created by hand. Plan the data move as the small task it is, and put the effort into rebuilding logic.

Does Odoo have marketing automation comparable to HubSpot's workflows?

It has marketing automation campaigns with activities and filter-based entry, which handles a fair share of ordinary nurture and follow-up work. It is not equivalent to HubSpot's workflow editor for branching or lifecycle management. Anything conditional beyond a straightforward filter tends to end up in server actions or encoded expressions, and that is where the maintenance burden lands.

How long does a HubSpot to Odoo migration take?

Longer than the equivalent move between two mainstream marketing platforms, and the difference is ramp-up rather than build. Asset counts behave roughly as they would anywhere else; the learning does not. If nobody on the project has shipped in Odoo before, treat platform learning as a real workstream with its own dates.

Do you need a developer for the marketing side of an Odoo migration?

You need someone comfortable with regular expressions, QWeb templates and Odoo's data model, whether or not their title says developer. Marketing ops people with HTML and CSS behind them manage fine. What doesn't work is assuming a HubSpot admin transfers directly — the constructs they use every day mostly don't exist here, and the ones that look similar behave differently.

Should we hire an Odoo partner to do the marketing migration?

Most Odoo partners are strong on accounting and inventory, and thin on marketing operations. They will build exactly what you describe without ever mentioning that your lifecycle model is wrong. Our view: pair a marketing ops team that will learn the platform with a partner who owns the ERP side. Splitting it that way costs more up front and less overall.