CRM migration

Migrate from Act-On to Odoo CRM

Field-level mapping, validation, and rollback between Act-On and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Act-On logo

Act-On

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

80%

12 of 15

objects map 1:1 between Act-On and Odoo CRM.

Complexity

BStandard

Timeline

2-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Act-On is a marketing automation platform centred on Contacts, Companies, audience Lists, and behavioral engagement scoring; Odoo CRM is a full pipeline management system built around Leads, Opportunities, Partners, and pipeline Stages. The two platforms have fundamentally different data models: Act-On stores prospects as Contacts with a lifecycle property, while Odoo separates them into CRM Lead records and Partner records. We resolve this by routing Act-On Contacts without an associated Deal into Odoo Leads and Contacts with active deal history into Partner records tied to Opportunities. Engagement scores migrate as static numeric fields because Act-On's proprietary weighting rules do not export. Automated Programs (nurture sequences) are not migratable as code; we document each sequence's step structure as a reference artifact for your Odoo admin to rebuild in Odoo Workflow or Studio. The migration uses Odoo's XML-RPC API with batch chunking and exponential backoff on throttled responses, proceeding in dependency order: Partners first, then Leads, then Opportunities, then activity history.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Act-On logo

Act-On

What's pushing teams away

  • Feature gaps in email composer quality and CRM integration force teams to layer on additional tools, increasing stack complexity and cost.
  • Performance and reporting depth lag behind competitors at similar price points, making it harder to justify ROI to leadership.
  • Pricing is perceived as high relative to the value delivered, especially as teams scale contact volumes and hit tier limitations.
  • Users report that Act-On feels less suitable as companies grow beyond mid-market requirements and need more sophisticated pipeline management.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Act-On objects map to Odoo CRM

Each row shows how a Act-On object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Act-On

Contact

maps to

Odoo CRM

Partner (res.partner)

1:1
Fully supported

Act-On Contacts map directly to Odoo Partner records. The is_company flag is set false for individual contacts. The contact's email becomes the Partner's email field and is used as the dedupe key during import. Mobile phone maps to partner.mobile; direct phone maps to partner.phone. The Act-On lifecycle stage is preserved in a custom field act_lifecycle_stage__c on the Partner record.

Act-On

Company

maps to

Odoo CRM

Partner (is_company=True)

1:1
Fully supported

Act-On Companies map to Odoo Partners with is_company=True. Company name becomes Partner name; domain maps to website. Each Contact in Act-On linked to this Company receives the Odoo Partner record as its partner_id. Parent company hierarchy in Act-On Company records maps to partner.parent_id in Odoo.

Act-On

Contact (without associated Act-On Deal)

maps to

Odoo CRM

CRM Lead (crm.lead)

1:many
Fully supported

Act-On Contacts that have no associated Act-On Deal and no customer lifecycle stage become Odoo CRM Lead records. Contacts with a customer lifecycle stage map to Partner records instead. We apply this routing rule during the pre-import transform and flag any Contact with both a company link and no deal history for the customer's admin to confirm during scoping.

Act-On

List

maps to

Odoo CRM

Partner Tag or Lead Tag

1:1
Fully supported

Act-On audience Lists map to Odoo Tags on Partner (res.partner) or CRM Lead records. We export List membership as a tag name array per Contact and import as multiple res.partner.tag records linked via res.partner._ir_attachments. Static Act-On Lists migrate as literal tags; dynamic Lists are documented as a reference for Odoo's custom filter or Studio-based audience rebuild.

Act-On

Deal

maps to

Odoo CRM

Opportunity (crm.lead with type='opportunity')

1:1
Fully supported

Act-On Deals map to Odoo CRM Opportunities. The Odoo crm.lead record is created with type='opportunity' and linked to the Company Partner record via partner_id. Deal stage maps to Odoo stage_id; the Odoo stage configuration must be created during schema design to match the customer's Act-On deal stage names and probabilities.

Act-On

Deal Stage

maps to

Odoo CRM

CRM Stage (crm.stage)

lossy
Fully supported

Each Act-On deal stage maps to an Odoo CRM Stage record scoped to the customer's pipeline. Odoo stage probability percentages migrate from Act-On to crm.stage.probability. Stage sequence order is preserved. The customer approves the stage name and probability matrix during scoping before schema deployment.

Act-On

Engagement: Email

maps to

Odoo CRM

CRM Lead / Partner Activity Log

1:1
Fully supported

Act-On email send, open, and click events migrate to Odoo as mail.message records linked to the target Partner or CRM Lead via res_model and res_id. The email subject, body (plain text and HTML), and engagement type (sent, opened, clicked) are stored. High-volume engagement history is chunked by date range to avoid Odoo RPC timeout.

Act-On

Engagement: Form Submission

maps to

Odoo CRM

CRM Lead / Partner

1:1
Fully supported

Form submission records from Act-On migrate as CRM Lead creation events with the form name and submission timestamp preserved in custom fields. The lead source field is set to the Act-On form name for attribution. Submission field values map to custom lead fields defined during schema design.

Act-On

Engagement: Meeting / Call

maps to

Odoo CRM

Calendar Event (calendar.event)

1:1
Fully supported

Act-On meeting engagements with start time, end time, and attendee list migrate to Odoo calendar.event records. The event is linked to the Partner (attendee) and the related Opportunity if one exists. Call duration and disposition from Act-On call records migrate to custom event fields.

Act-On

Engagement: Note

maps to

Odoo CRM

Note (mail.message)

1:1
Fully supported

Act-On note engagements migrate to Odoo mail.message records with subtype='comment' attached to the Partner or CRM Lead. Note body migrates as message_body; author information maps to the partner_id of the Act-On owner who created the note. Notes without a date are assigned the Contact's createdate timestamp.

Act-On

Engagement Score

maps to

Odoo CRM

Custom Float Field on Partner

1:1
Fully supported

Act-On's calculated engagement score migrates as a static numeric value in a custom float field on Partner (act_engagement_score__c). Act-On's proprietary weighting rules (opens, clicks, page visits, form submissions) do not export; we document the customer's current score range and scoring components so their Odoo admin can configure a replacement formula in Studio if needed.

Act-On

Custom Data Schema

maps to

Odoo CRM

Custom Fields via Odoo Studio

1:1
Fully supported

Act-On Custom Data schemas define user-defined fields per Contact or Company. We read the schema definition via Act-On's Custom Objects API, export the existing field values, and write them to Odoo Partner or Lead custom fields created via Odoo Studio before migration. Field types are mapped to Odoo field types (char, float, integer, date, selection, many2one).

Act-On

Tag

maps to

Odoo CRM

Partner Tag

1:1
Fully supported

Act-On contact and company tags export as Odoo Partner Tags. Tag names are preserved verbatim and linked via res.partner.tag and res.partner._ir_attachments or the tag_ids many2many relation on res.partner. Tags used for campaign segmentation are preserved separately from audience List tags for reporting flexibility.

Act-On

Owner

maps to

Odoo CRM

User (res.users)

1:1
Fully supported

Act-On owners map to Odoo Users by email match. Any Act-On owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision the User record before record import resumes. Inactive owners map to inactive users with a flag for the admin to activate post-migration.

Act-On

Program (Automated Workflow)

maps to

Odoo CRM

Documentation Artifact

lossy
Fully supported

Act-On Automated Programs are not migratable as code. We export the Program name, step count, step types (email, delay, condition, action), and the Contact membership list as a written reference artifact. The customer's Odoo admin uses this to rebuild equivalent workflows in Odoo Studio using the contact and activity history migrated from Act-On as the reference data.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Act-On logo

Act-On gotchas

High

ACT! desktop CRM and Act-On marketing automation are different products

Medium

Automated Program logic does not export

Medium

Engagement score formulas are not transferable

Low

Bulk API is not publicly documented

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Act-On Programs (nurture sequences) do not export as automation code

    Act-On's Program builder stores multi-step nurture sequences server-side and does not expose them via API for export. We cannot migrate Program logic to Odoo Workflow or Studio as executable automation. We export each Contact's Program membership (which Program they entered, when, what step they were on at export time) as a static data record. We deliver a written Program inventory document listing every Program's name, step count, step types, branch conditions, and the number of contacts enrolled. The customer's Odoo admin uses this as a reference blueprint to rebuild equivalent lead nurture sequences in Odoo Studio using automation rules and the migrated engagement history as a starting signal.

  • Act-On engagement score formulas do not transfer

    Act-On calculates engagement scores using proprietary weighting across email opens, clicks, page visits, and form submissions. These calculation rules are not accessible via API and cannot be exported. We migrate the current numeric score for each Contact as a static float field (act_engagement_score__c). Post-migration, the customer's Odoo admin must configure a replacement scoring mechanism if needed, either through Odoo Studio formula fields or a custom module. We document the score distribution range from the source Act-On account so the admin has calibration context.

  • Odoo pipeline stages must be configured before Deals import

    Odoo's pipeline stages (crm.stage) are configuration records, not data fields. The stage name, sequence, probability, and is_won flags must exist in the destination database before Deal records can reference them via stage_id. We create the stage configuration during the schema design step and deploy it via XML-RPC before any Deal import begins. If the customer has multiple Act-On pipelines with different stage sets, each Odoo pipeline requires its own stage configuration scoped by team or business unit.

  • Act-On Lists have no native Odoo equivalent for dynamic membership

    Act-On Lists (static and dynamic) are the primary audience segmentation unit. Odoo has no dynamic list model; audience segmentation is done via Tags on Partner records or custom saved filters. We convert Act-On List membership to Tags and document the dynamic List logic (filter conditions, date ranges, behavioral rules) as a reference for the customer's admin to rebuild using Odoo Studio filters or custom domain expressions. Static Lists migrate as literal tags with no rebuild needed.

  • Act-On Bulk API is not publicly documented, requiring adaptive rate handling

    Act-On's API documentation does not describe a dedicated bulk or batch endpoint for high-volume record operations. For large migrations (over 20,000 Contacts or 500,000 engagement records), we handle volume by chunking standard API requests into batches of 200 records with exponential backoff on 429 responses. This adds time to large migrations but does not block completion. We advise customers with large datasets to plan for a migration window of five to nine weeks to account for throttled throughput on the Act-On source side.

Migration approach

Six steps for a successful Act-On to Odoo CRM data migration

  1. Discovery and scoping

    We audit the source Act-On account for contact volume, company records, audience List count, active Program count, custom data schema definitions, engagement history volume (emails, calls, meetings, form submissions), and owner assignments. We confirm the exact Act-On product (not ACT! desktop CRM) via subdomain check during discovery. The discovery output is a written migration scope covering record counts, object mapping decisions, and an Odoo edition recommendation (Community free-tier CRM vs Odoo Online SaaS with per-user pricing). We also identify any records with hard deletes or data gaps that require customer decisions before migration begins.

  2. Schema design in Odoo Studio

    We design the destination schema in a staging Odoo database (a test company or Sandbox-style copy) before touching production. This includes creating custom fields via Odoo Studio for Act-On custom data schemas, configuring CRM pipeline stages matching the Act-On deal stage names and probabilities, setting up Partner Tags corresponding to Act-On audience Lists, and creating the lead routing rule (Contact with customer lifecycle stage to Partner, Contact without deal history to CRM Lead). All custom field API names follow Odoo's x_act_<name> convention. Schema is validated in the staging database before deployment to production.

  3. Sandbox migration and reconciliation

    We run a full migration into the staging Odoo environment using production-like data volume. The customer's admin reconciles record counts (Contacts in, Partners out, Leads in, Opportunities in, Tags in, Activities in), spot-checks 25-50 random records against the Act-On source, and signs off the schema and field mapping. Any field mapping corrections, stage configuration changes, or custom field additions happen in staging before production migration begins. This step prevents correction loops in the production database.

  4. Owner reconciliation and Odoo User provisioning

    We extract every distinct Act-On owner referenced on Contact, Company, Deal, and Engagement records and match by email against the destination Odoo instance's res.users table. Owners without a matching Odoo User go to a reconciliation queue. The customer's Odoo admin provisions any missing User records (active or inactive depending on the owner's current status in Act-On). Migration cannot proceed past this step because partner.user_id and lead.user_id references are required on most Odoo CRM records.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Company Partners (from Act-On Companies) first, then Contact Partners (with parent_id resolved to the Company Partner), then CRM Leads (for contacts without deal history), then Opportunities (with partner_id and stage_id resolved), then Tags (for Act-On Lists), then custom field data (for Act-On Custom Data schemas), then activity history (mail.message records, calendar.event records) via chunked API calls with backoff. Each phase emits a row-count reconciliation report before the next phase begins. Act-On writes are frozen during the cutover window.

  6. Cutover, validation, and Program rebuild handoff

    We run a final delta migration of any records modified during the cutover window, then enable Odoo as the system of record. We deliver the Program inventory document (step-by-step sequence reference for every Act-On Automated Program) and the workflow rebuild guide to the customer's Odoo admin. We support a one-week hypercare window for reconciliation issues raised by the sales or marketing team. We do not rebuild Act-On Programs as Odoo Studio workflows inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

Act-On logo

Act-On

Source

Strengths

  • Embedded SMS marketing extends reach beyond email without an additional platform subscription.
  • Native engagement scoring gives a behavioural signal out of the box without third-party analytics.
  • Responsive support team with a reputation for hands-on help during setup and troubleshooting.
  • Segmented audience management via Lists allows targeted campaign execution without complex queries.
  • User-friendly interface lowers the learning curve for marketing teams without dedicated ops resources.

Weaknesses

  • CRM integration capabilities lag behind competitors, often requiring workarounds or third-party middleware.
  • Reporting depth is shallower than HubSpot or Salesforce, making multi-touch attribution difficult.
  • Pricing relative to feature set draws criticism as teams scale and hit tier ceilings.
  • Limited custom object flexibility compared to platforms with a full schema designer.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Act-On and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Act-On and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between Act-On and Odoo CRM.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Act-On: Not publicly documented.

  • Data volume sensitivity

    B

    Act-On doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Act-On to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Act-On to Odoo CRM data migrations

Answers to the questions buyers ask most during Act-On to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Act-On to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between two and five weeks for accounts under 15,000 Contacts, fewer than 50 audience Lists, no custom object schemas, and fewer than 100,000 engagement records. Migrations with large custom data schemas, more than 500,000 activity history records, or multiple Act-On pipelines move to five to nine weeks because of Odoo Studio schema provisioning, stage configuration complexity, and chunked engagement history throughput on the Act-On source API.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Act-On.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day