CRM migration
Field-level mapping, validation, and rollback between Forms On Fire and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Forms On Fire
Source
Odoo CRM
Destination
Compatibility
9 of 10
objects map 1:1 between Forms On Fire and Odoo CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
Forms On Fire is a no-code form and field-data collection platform built around form screens, submission records, data source configurations, and rich-field capture (photos, GPS, signatures, barcodes). It does not have a native CRM object model — there are no leads, opportunities, pipeline stages, or sales automation rules. Odoo CRM stores all relationship data in three PostgreSQL-backed objects: crm.lead (covering both leads and opportunities, distinguished by type field), res.partner (contacts and companies), and crm.stage (pipeline stage definitions per team). We migrate Forms On Fire submissions as crm.lead records, form field values as custom fields on crm.lead, data source pick-lists as ir.model.fields with selection lists or many2one relations to res.partner, location captures as address fields on res.partner via Odoo's geo-casting, and file attachments as ir.attachment records linked to the corresponding lead. Forms On Fire workflow rules (triggers, notifications, downstream actions) do not have a structural equivalent in Odoo and must be rebuilt as Odoo automation rules or server actions — we export the rule definitions as a rebuild reference. The migration uses Odoo's XML-RPC API with batch create operations and explicit field write to handle custom fields that require the ir.model.data model to be populated first.
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 Forms On Fire 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.
Forms On Fire
Form Screen / Submission Record
Odoo CRM
crm.lead
1:1Each Forms On Fire submission record maps to one crm.lead record in Odoo. The form screen name is stored in a custom Char field x_form_screen_name on the lead for traceability. Submission metadata (submission ID, submitter email, form version) is stored in custom fields on crm.lead so the original Forms On Fire identity is preserved alongside Odoo's lead record.
Forms On Fire
Form Field (all types)
Odoo CRM
Custom fields on crm.lead (x_<field_name>)
1:1Every named form field from every screen requires a corresponding custom Char, Selection, Float, or Text field on crm.lead in Odoo. Fields of type Location become two fields: x_gps_latitude (Float) and x_gps_longitude (Float) plus a street/city mapping to the lead's partner address. Photo and signature fields generate binary attachment records linked to the lead via res_model = 'crm.lead'.
Forms On Fire
Data Source (pick-list / lookup tables)
Odoo CRM
res.partner or ir.model.fields (selection list)
many:1Forms On Fire Data Source rows with filter rows and formula-based filtering require a decision in the migration plan: simple static lists with under 20 rows become Odoo ir.model.fields.selection values with explicit value mapping; larger or dynamically filtered data sources (e.g., product catalog, customer list) are candidates for res.partner records created as lookup entries, with the form field mapped as a many2one to res.partner.
Forms On Fire
Form Submitter / User
Odoo CRM
res.partner
1:1If the submission captures a named contact with email or phone, FlitStack creates or matches a res.partner record and links it to the crm.lead via partner_id. When no contact is captured the lead is created without a partner link and is flagged x_no_partner_linked = True for manual review after migration.
Forms On Fire
Location Field (GPS + address)
Odoo CRM
res.partner (address fields) + custom Float fields
1:1Forms On Fire captures latitude, longitude, and an address string per submission. Odoo stores location on res.partner via street, city, state, country_id, zip. FlitStack parses the address string and writes components to the partner address fields. GPS coordinates are stored as x_gps_latitude__c and x_gps_longitude__c (custom Float fields on crm.lead) since Odoo does not natively store lat/lon on leads without geo-coding.
Forms On Fire
Barcode / Signature / Photo fields
Odoo CRM
ir.attachment
1:1All binary field captures from Forms On Fire are downloaded and re-uploaded to Odoo's ir.attachment table. Each attachment is linked to its parent crm.lead via res_model = 'crm.lead' and res_id = lead.id. The original field name and capture timestamp are stored in the attachment description field for reconstruction of the original form context.
Forms On Fire
Form Submission Status / Workflow State
Odoo CRM
crm.stage
1:1Forms On Fire submission status values (e.g., Draft, Submitted, Approved, Rejected) defined as custom Choice field options on the form are mapped to Odoo crm.stage records. Each stage is created under the target Odoo sales team with the same sequence order as the Forms On Fire status options. Stage mapping is delivered as a value-map table before the migration run commits.
Forms On Fire
Form Submission Timestamp
Odoo CRM
crm.lead.create_date + custom datetime field
1:1The Forms On Fire submission create timestamp maps directly to crm.lead.create_date in Odoo via XML-RPC write during the migration run. The original submission completed-at timestamp is preserved in a custom Datetime field x_submission_completed_at on the lead for reporting continuity, ensuring the true submission time is retained even when the Odoo user create_date reflects the migration batch execution time rather than the original submission moment.
Forms On Fire
Form Screen Owner / Assigned User
Odoo CRM
res.users (user_id on crm.lead)
1:1Forms On Fire user assignment on a submission is resolved by matching the Forms On Fire user email to res.users.email in Odoo. Unmatched users are flagged and assigned to a fallback Odoo user specified in the migration plan. Inactive Odoo users are skipped with a warning in the audit log.
Forms On Fire
Workflow / Automation Rules
Odoo CRM
ir.actions.server / base.automation
1:1Forms On Fire workflow rules (event triggers, email notifications, webhook actions) have no structural equivalent in Odoo CRM and cannot be migrated automatically. FlitStack exports each rule definition as a structured JSON document listing trigger type, conditions, and actions so the Odoo admin can rebuild them as Odoo automation rules or Studio server actions after go-live.
| Forms On Fire | Odoo CRM | Compatibility | |
|---|---|---|---|
| Form Screen / Submission Record | crm.lead1:1 | Fully supported | |
| Form Field (all types) | Custom fields on crm.lead (x_<field_name>)1:1 | Fully supported | |
| Data Source (pick-list / lookup tables) | res.partner or ir.model.fields (selection list)many:1 | Fully supported | |
| Form Submitter / User | res.partner1:1 | Fully supported | |
| Location Field (GPS + address) | res.partner (address fields) + custom Float fields1:1 | Fully supported | |
| Barcode / Signature / Photo fields | ir.attachment1:1 | Fully supported | |
| Form Submission Status / Workflow State | crm.stage1:1 | Fully supported | |
| Form Submission Timestamp | crm.lead.create_date + custom datetime field1:1 | Fully supported | |
| Form Screen Owner / Assigned User | res.users (user_id on crm.lead)1:1 | Fully supported | |
| Workflow / Automation Rules | ir.actions.server / base.automation1: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.
Forms On Fire gotchas
Standard tier entry limits silently gate historical data
dotx template linkage breaks Word document generation
Data Source auto-select behavior can silently alter form state
Enterprise requires 25+ users minimum
Non-Office document generation not supported
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
Audit Forms On Fire data sources and export schema
FlitStack connects to Forms On Fire via API or CSV export and enumerates every form screen, data source, and field definition in the account. We capture each field's data_name, type classification (Char, Number, Location, Choice, Signature, Barcode, Photo), and whether it is linked to a Data Source. This audit produces a migration scope document listing unique submission counts per screen, total attachment volume, and the complete field list — the foundation for creating Odoo custom fields and mapping rules before any data moves.
Create Odoo custom fields and data source lookup records
FlitStack provisions custom Char, Float, Date, Datetime, and Selection fields on crm.lead in the target Odoo database using the XML-RPC API (model: 'ir.model.fields', method: 'create'). For Data Sources that map to partner lookup records, we create res.partner records representing the lookup rows and write the many2one field definitions. All custom fields receive the same help text and label from the Forms On Fire data_name so the Odoo UI reflects the original form field label. This step requires an Odoo user with Technical Settings write access.
Resolve Forms On Fire users to Odoo res.users records
FlitStack reads the Forms On Fire user list and attempts to match each user email to an active res.users.email in Odoo. For matched users, the corresponding res.users.id is recorded and used as user_id on the crm.lead during migration. Users that have no Odoo account are flagged in the audit report with their Forms On Fire user ID, email, and role — the team decides whether to create Odoo accounts before migration or assign those submissions to a designated fallback user. No lead is written without an owner resolution decision.
Run sample migration with field-level diff
A representative sample — typically 100–500 submissions spanning the five most-active form screens — is migrated first. FlitStack generates a field-level diff comparing source JSON field values against the written Odoo crm.lead record values for every mapped field. The diff is delivered as a CSV showing source data_name, source value, target Odoo field name, target value, and a Pass/Fail flag. The team reviews the diff and approves field mappings before the full run commits. GPS data placement, Data Source lookup resolution, and attachment linking are specifically verified in this step.
Execute full migration with delta-pickup window
The full submission set migrates in ordered batches: res.partner records for Data Source lookup tables first, then crm.lead records with custom field writes, then ir.attachment records linked to the leads. A delta-pickup window (typically 24–48 hours) runs after the main run completes, capturing any new submissions created in Forms On Fire during the cutover window. All operations are logged to an audit table with source ID, destination ID, operation type, timestamp, and operator. One-click rollback reverts Odoo to the pre-migration state if reconciliation finds unexpected discrepancies.
Platform deep dives
Forms On Fire
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Forms On Fire and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Forms On Fire and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Forms On Fire 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
Forms On Fire: Not publicly documented.
Data volume sensitivity
Forms On Fire 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 Forms On Fire to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Forms On Fire 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 Forms On Fire
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.