CRM migration

Migrate from Forms On Fire to Odoo CRM

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 logo

Forms On Fire

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

90%

9 of 10

objects map 1:1 between Forms On Fire and Odoo CRM.

Complexity

BStandard

Timeline

3–5 days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Forms On Fire logo

Forms On Fire

What's pushing teams away

  • Steeper-than-expected learning curve for complex form logic, dynamic filtering, and multi-step workflows requiring conditional field visibility.
  • Managing connected data between forms and Data Sources is difficult, with limited UI for tracing and debugging data relationships.
  • Entry volume limits on Standard tier (1,500 per user per month) force organizations to upgrade or delete historical records as they scale.
  • Complex workflows and advanced features require custom configurations that typically need technical expertise, negating the no-code promise for sophisticated use cases.
  • Some organizations report the platform becomes difficult to navigate as the number of apps and forms grows across the organization.

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 Forms On Fire objects map to Odoo CRM

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

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Each 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)

maps to

Odoo CRM

Custom fields on crm.lead (x_<field_name>)

1:1
Fully supported

Every 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)

maps to

Odoo CRM

res.partner or ir.model.fields (selection list)

many:1
Fully supported

Forms 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

maps to

Odoo CRM

res.partner

1:1
Fully supported

If 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)

maps to

Odoo CRM

res.partner (address fields) + custom Float fields

1:1
Fully supported

Forms 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

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

All 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

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Forms 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

maps to

Odoo CRM

crm.lead.create_date + custom datetime field

1:1
Fully supported

The 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

maps to

Odoo CRM

res.users (user_id on crm.lead)

1:1
Fully supported

Forms 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

maps to

Odoo CRM

ir.actions.server / base.automation

1:1
Fully supported

Forms 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.

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.

Forms On Fire logo

Forms On Fire gotchas

High

Standard tier entry limits silently gate historical data

Medium

dotx template linkage breaks Word document generation

Medium

Data Source auto-select behavior can silently alter form state

Low

Enterprise requires 25+ users minimum

Low

Non-Office document generation not supported

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

  • Form field JSON values require field-by-field parsing before Odoo write

    Forms On Fire stores all field values for a submission in a single JSON body keyed by the field's data_name. A Location field stores {latitude, longitude, address_string} in one key; a Choice field stores the selected row key. Odoo's crm.lead.create() method requires values for each field by ORM field name. FlitStack parses the JSON per field type — extracting lat/lon from Location objects, resolving Data Source row keys to Odoo partner IDs for many2one targets, and writing float values for numeric fields. Any field type not recognized is written as-is to a generic x_raw_data text field and flagged in the audit log. This parsing step is the primary reason Forms On Fire migrations require a custom migration script rather than a generic CSV import.

  • GPS location captures do not write to Odoo's native address fields without geo_coding

    Odoo CRM stores location on res.partner via street, city, state_id, country_id, and zip — it does not have a native latitude/longitude field on crm.lead. Forms On Fire's Location field captures GPS coordinates directly from a device sensor, bypassing address entry. FlitStack writes the address string (when present) to the partner's address fields for Odoo's geo_coding widget to resolve coordinates. When only GPS lat/lon is present without an address string, FlitStack stores the coordinates in x_gps_latitude__c and x_gps_longitude__c on the lead — the admin must enable Odoo's geo_localize feature or run a geo-coding batch job to plot them on a map view. This is a manual post-migration step that teams should plan for.

  • Data Source filter formulas cannot be migrated — rebuild is required

    Forms On Fire Data Sources support formula-based row filtering using expressions like [field] > value or referencing other form fields. Odoo ir.model.fields.selection lists are static and do not support formula-driven filtering. When a Data Source is the source of a Choice field on a form, FlitStack migrates the current row values as static selection options or creates partner lookup records, but the filter formula logic is lost. Teams must rebuild dynamic filtering as Odoo onchange methods, domains on many2one fields, or Studio conditions. FlitStack exports the full Data Source configuration including filter formulas as a JSON document for the Odoo developer to reference during rebuild.

  • Forms On Fire Standard plan 1,500-entry cap truncates large historical datasets

    Forms On Fire Standard edition limits submissions to 1,500 per user per month. Teams with multi-year histories accumulating tens of thousands of entries may have truncated or archived data depending on their plan tier and data retention settings. FlitStack's pre-migration audit reports the total submission count versus the exportable count so the team can determine whether to purchase a higher-tier export, use an API-based extraction on a higher plan, or accept that older archived submissions are not recoverable. This is disclosed upfront in the scoping report and affects whether the migration covers 100% of historical data.

  • Attachment files stored outside Odoo's filestore require re-upload with new URLs

    Forms On Fire manages its own blob storage for photo, signature, and document attachments, accessible via API with signed URLs or download tokens. Odoo stores attachments in its own filestore (filestore/ directory) or as base64 in the database's ir.attachment.datas column. FlitStack downloads each attachment from Forms On Fire, uploads it to the target Odoo instance via /api/attachment/endpoint, and writes the returned Odoo ir.attachment.id back to the lead record. Large photo attachments exceeding Odoo's file size limits (default 25MB per file) are split with a warning in the audit log. Inline images embedded in text notes are extracted and saved as separate ir.attachment records.

Migration approach

Six steps for a successful Forms On Fire to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Forms On Fire logo

Forms On Fire

Source

Strengths

  • Generous free trial (7 days) with no credit card required for initial evaluation.
  • Offline-first architecture ensures field data collection continues without internet connectivity.
  • AI-powered form generation from speech, text, or PDF reduces initial build time significantly.
  • Multi-platform deployment (iOS, Android, web) from a single form definition.
  • Full Open API available on all paid tiers enabling programmatic data access and integration.

Weaknesses

  • Entry limits on Standard tier (1,500/user/month) penalize organizations with high field data volume.
  • Complex data relationships between forms and Data Sources are difficult to manage and debug.
  • Billing model is per-seat regardless of usage, meaning inactive users still cost money.
  • Enterprise pricing requires 25+ users minimum, making it inaccessible for smaller teams that outgrow Standard.
  • Limited transparency on rate limits and bulk API capabilities in public documentation.
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 Forms On Fire and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Forms On Fire 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

    Forms On Fire: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Forms On Fire 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 Forms On Fire to Odoo CRM data migrations

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

Can't find your answer?

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 consultation

Most Forms On Fire to Odoo CRM migrations complete within 3–5 days for under 25,000 submission records. Complex setups with 25,000+ submissions, more than 20 form screens, or data source configurations requiring many2one partner record creation extend to 7–14 days. The longest single step is custom field creation and data source parsing — the actual migration run processes approximately 5,000 records per hour via Odoo's XML-RPC API in batch mode. Timeline is driven primarily by submission count and the number of unique field types in the Forms On Fire schema.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Forms On Fire.
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