CRM migration
Field-level mapping, validation, and rollback between Signpost and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Signpost
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Signpost and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Signpost to Odoo CRM is a migration from an AI-managed local-service CRM to an open-source ERP-adjacent CRM with a modular app structure. Signpost organizes its data around businesses and their customers, with an AI assistant named Mia driving review requests, SMS/email campaigns, and appointment reminders based on proprietary behavioral logic. That automation layer cannot be exported via any documented API endpoint, so we document every active Mia rule during scoping and hand it to the customer's admin for Odoo Business Automations rebuild. The shared inbox message history is also non-exportable; we flag this upfront and recommend manual archiving before migration begins. Odoo CRM runs on either the free Community Edition (self-hosted) or a paid Online/Enterprise SaaS tier starting around $24 per user per month, which affects both the migration path and the ongoing total cost of ownership. We sequence the migration to respect Signpost's contact-level suppression logic during the transition window and migrate the most recent review solicitation status as a custom Contact property since Odoo has no native review-tracking object.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Signpost 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.
Signpost
Contact
Odoo CRM
Contact
1:1Signpost Contacts migrate directly to Odoo CRM Contacts. Core fields (name, phone, email, address) map 1:1. Signpost's business association (linking a Contact to a Business record) migrates as a Many2one field pointing to the mapped Odoo Company. Tags and segments from Signpost migrate as Odoo Tags via the res.partner.category model. Contact suppression status from Signpost's contact-level messaging controls migrates as a boolean field for re-enrollment rules in Odoo.
Signpost
Business
Odoo CRM
Company (res.partner with is_company=True)
1:1Signpost's Business records map to Odoo Companies (res.partner with is_company=True). The parent-child structure in Signpost (franchise locations under a parent business) maps to Odoo's commercial partner model where the parent Company holds the corporate record and child Contacts or Companies represent locations. Address, phone, and website fields migrate directly.
Signpost
Campaign
Odoo CRM
CRM Lead or Custom Object
1:1Signpost campaigns (SMS and email) migrate as CRM Leads with a custom campaign_type field (email or sms) and a campaign_name field preserving the original campaign title. Contact targeting lists migrate as Lead Tags so the customer can rebuild campaign membership in Odoo. The automated trigger logic managed by Mia does not migrate (see gotchas); we document the campaign triggers for manual Odoo Business Automations rebuild.
Signpost
Review Request
Odoo CRM
Custom Contact Properties
lossySignpost's review solicitation object has no native Odoo equivalent. We migrate the most recent review request status (requested, responded, positive, flagged, resolved) and the request timestamp as custom fields on the Contact record (e.g., last_review_request_date, last_review_status, last_review_score). Full solicitation history across all time requires flattening into a notes field or a custom Odoo model, which we scope separately during discovery.
Signpost
Appointment
Odoo CRM
Calendar Event or CRM Lead with custom date fields
1:1Signpost Appointments map to Odoo Calendar.Event records linked to the Contact and Company. Appointment status (scheduled, confirmed, completed, cancelled) maps to Odoo's event state or a custom status field. Custom appointment types (e.g., estimate visit, follow-up call) migrate as custom fields on the event or as tagged Lead records depending on Odoo's module configuration at the destination.
Signpost
Payment
Odoo CRM
Account Move (Invoice) or Custom Model
1:1Signpost Payments (a separate product tier) records map to Odoo Account Invoice records if the destination Odoo instance includes the Invoicing app. Payment status (pending, completed, failed, refunded) migrates as Invoice state. Note that Signpost Payments integration requires a compatible Odoo payment provider module; we flag this during scoping if the customer uses Signpost Payments and Odoo Online without the Invoicing app.
Signpost
Loyalty and Referral Program
Odoo CRM
Custom Properties or Custom Model
1:1Referral and loyalty enrollment records migrate as custom fields on Contact (e.g., loyalty_tier, referral_code, enrollment_date) or as a linked custom Odoo model if the customer's loyalty program has complex point balances. Program rules (point accrual, reward tiers) require manual setup in Odoo and are documented in the automation handoff packet.
Signpost
Tag and Segment
Odoo CRM
Tag (res.partner.category)
1:1Signpost contact segments and tags migrate to Odoo Tags (res.partner.category). We preserve tag names exactly and resolve any segment logic that relied on Mia's behavioral scoring by tagging the segment membership on the Contact record. The customer's admin rebuilds dynamic segment rules in Odoo using its native domain filters.
Signpost
User and Owner
Odoo CRM
User
1:1Signpost Owner assignments on Contacts, Businesses, and Campaigns map to Odoo Users (res.users). We resolve by email match against the destination Odoo instance's user list. Any Signpost Owner without a matching Odoo User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Inactive Signpost owners migrate as inactive Odoo users with a note field for admin review.
Signpost
Custom Property
Odoo CRM
Custom Fields (via Studio)
lossySignpost custom fields on Contacts and Businesses migrate as custom fields on Odoo res.partner via Odoo Studio. Field types are preserved where possible (text to char, number to float or integer, date to date, checkbox to boolean, dropdown to selection). Incompatible type mappings (e.g., Signpost array properties with no Odoo equivalent) are flagged for customer review and mapped to a char field with the serialized value.
Signpost
Automated Workflow (Mia rules)
Odoo CRM
No native equivalent
1:1Mia-driven behavioral triggers (automated review requests, follow-up timing, campaign sequences, contact scoring) are not accessible via any documented export endpoint. We do not migrate them. During scoping, we run a structured Mia workflow audit form with the customer to document every active automation, its trigger conditions, timing rules, and actions. We deliver this as a written handoff document so the customer's Odoo admin or implementation partner can rebuild in Odoo Business Automations.
Signpost
Shared Inbox Message
Odoo CRM
Not migratable
1:1Signpost's shared inbox stores two-way customer conversations with no export mechanism. Contact records, campaign history, and appointment data migrate cleanly, but the message thread history is not retrievable via any documented endpoint. We flag this upfront during scoping and recommend customers screenshot or manually archive critical threads before migration begins. Message history is considered lost post-migration unless the customer performs a manual archive before the cutover window.
| Signpost | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Business | Company (res.partner with is_company=True)1:1 | Fully supported | |
| Campaign | CRM Lead or Custom Object1:1 | Fully supported | |
| Review Request | Custom Contact Propertieslossy | Fully supported | |
| Appointment | Calendar Event or CRM Lead with custom date fields1:1 | Fully supported | |
| Payment | Account Move (Invoice) or Custom Model1:1 | Fully supported | |
| Loyalty and Referral Program | Custom Properties or Custom Model1:1 | Fully supported | |
| Tag and Segment | Tag (res.partner.category)1:1 | Fully supported | |
| User and Owner | User1:1 | Fully supported | |
| Custom Property | Custom Fields (via Studio)lossy | Fully supported | |
| Automated Workflow (Mia rules) | No native equivalent1:1 | Fully supported | |
| Shared Inbox Message | Not migratable1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Signpost gotchas
Mia workflow automations are not exportable
Shared inbox message history is not exported
Slow contact list performance indicates export risk
Review request history requires custom property reconstruction
Billing model and contract terms are opaque
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and Odoo edition recommendation
We audit the source Signpost account across business structure (single or multi-location), contact volume, active Mia automation rules, campaign count, appointment records, payment history (if applicable), and custom property inventory. We pair this with an Odoo edition and deployment recommendation: Odoo Community Edition (free, self-hosted) suits teams with technical capacity to manage their own instance; Odoo Online (SaaS, ~$24/user/month) suits teams that want managed hosting without a long-term commitment; Odoo Enterprise suits teams that need dedicated support, on-premise deployment options, or the Odoo Studio customization layer. The discovery output is a written migration scope with object inventory, Mia automation audit form, and Odoo edition recommendation.
Odoo schema design and custom field provisioning
We design the destination schema in the target Odoo instance. This includes provisioning custom fields on res.partner via Odoo Studio (review history fields, Signpost-specific data fields), creating CRM Lead tags for campaign segment migration, designing the appointment calendar structure, and configuring the Company hierarchy if Signpost Businesses have a parent-child relationship. If the customer uses Odoo Invoicing or Odoo Accounting, we pre-configure the invoice journal mapping for payment records. Schema is validated in a sandbox or staging environment before any data moves to production.
Mia automation audit and workflow handoff document
We run the structured Mia workflow audit form with the customer's Signpost administrator to document every active automation rule. For each rule, we capture the trigger (contact activity, time delay, tag change, campaign enrollment), the conditions (score threshold, tag membership, field value), the actions (send SMS, send email, update field, assign owner), and the customer-reported business intent. We deliver this as a written handoff document mapped to Odoo Business Automations equivalents so the customer's Odoo admin or implementation partner can rebuild the rules post-migration. This step is required before production migration begins because it informs the automation expectations that the customer will have on day one in Odoo.
Sandbox migration and reconciliation
We run a full migration into an Odoo sandbox environment using production-like data volume from the export. The customer reconciles record counts (Contacts in, Companies in, Appointments in, Campaign Leads in), spot-checks 25-50 random records against the Signpost source, and signs off the schema and mapping before production migration begins. Any mapping corrections, field type mismatches, or custom property gaps are resolved here. This step also validates that the Odoo edition and app configuration (CRM, Invoicing, Studio) supports all mapped objects.
Owner reconciliation and Odoo user provisioning
We extract every distinct Signpost Owner referenced on Contact, Business, and Campaign records and match by email against the destination Odoo instance's user list. Owners without a matching Odoo User go to a reconciliation queue for the customer's admin to provision before record import resumes. If the customer selected Odoo Community Edition, the admin must create the user accounts in Odoo first; if Odoo Online or Enterprise, user provisioning happens in the Odoo backend. Migration cannot proceed past this step because many Odoo CRM fields require an assigned OwnerId.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (manual provisioning validated), Companies (from Signpost Businesses), Contacts (with Company Many2one resolved), Tags (res.partner.category), CRM Leads (campaign records with tag membership), Calendar Events (appointments linked to Contact and Company), Custom fields on Contact (review history, custom properties), and Payment records (if Odoo Invoicing is active). Each phase emits a row-count reconciliation report before the next phase begins. Signpost write access is frozen during the cutover window.
Cutover, validation, and post-migration handoff
We freeze Signpost writes during cutover, run a final delta migration of any records modified during the migration window, then designate Odoo as the system of record. We deliver the Mia automation handoff document, the Odoo Business Automations rebuild guide, and the contact suppression re-enrollment instructions. We support a one-week hypercare window for reconciliation issues. We do not rebuild Mia automations as Odoo Business Automations inside the migration scope; that is a separate engagement or an internal admin task. Shared inbox message archiving is acknowledged as not migrated per the discovery-phase disclosure.
Platform deep dives
Signpost
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Signpost and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Signpost and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Signpost and Odoo CRM.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Signpost: Not publicly documented.
Data volume sensitivity
Signpost doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Signpost to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Signpost to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Signpost
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.