ERP migration
Field-level mapping, validation, and rollback between Opto and Epicor Prophet 21. We move data and schema; workflows are rebuilt natively in Epicor Prophet 21.
Opto
Source
Epicor Prophet 21
Destination
Compatibility
7 of 12
objects map 1:1 between Opto and Epicor Prophet 21.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from Opto to Epicor ERP is a scale-up migration: Opto handles barcode-driven stock tracking and automated reorder alerts for small ops, while Epicor Kinetic targets discrete, make-to-order, and mixed-mode manufacturers with deep shop-floor control, MES, APS, and production scheduling. Opto has no documented REST API, which means we extract data through its native CSV export, chunk the output into import-ready batches, and load into Epicor via REST or file-based import. The central schema challenge is flattening Opto's named Stock Locations into Epicor's PartBin model (warehouse plus bin designation), and documenting Opto Reorder Rules as a structured reference table for manual reconfiguration at the destination. Open Purchase Orders map to Epicor POHeader and POLine; historical invoices separate into open AR/AP for re-creation and closed records for archive. We do not migrate workflows, automations, or reporting configurations — these require a documented inventory for the customer's Epicor admin to rebuild post-migration.
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 Opto object lands in Epicor Prophet 21, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Opto
Item
Epicor Prophet 21
Part
1:1Opto Items (SKU, name, description, unit cost, reorder point, lead time) map directly to Epicor Part. The Opto Item code becomes PartNum, description maps to Part.Description, and unit cost maps to the primary PartCost record. Where Opto stores a barcode, we map it to Part.AltMethod or a custom UD field. If the destination Epicor uses a specific company-level costing method (Average, Standard, FIFO), we align the PartCost records accordingly during import. Standard UOMs from Opto become PartUOM records with UOMCode and ConversionFactor.
Opto
Customer
Epicor Prophet 21
Customer
1:1Opto Customer records (contact name, email, phone, billing address) map to Epicor Customer. The Opto customer name becomes Customer.Name, email maps to a UD field or Contact record email, and billing address maps to Customer.BTAddress fields. Customer-specific pricing tiers from Opto migrate to Epicor PartPlant records or PriceLbr records if the destination has customer-specific price lists configured.
Opto
Vendor
Epicor Prophet 21
Vendor
1:1Opto Vendors (supplier name, contact, payment terms, lead time) map directly to Epicor Vendor. Vendor.Name maps from Opto supplier name, Vendor.PaymentTerms maps from payment terms, and Vendor.LeadTime maps from Opto's per-Item lead-time data when the Item-Vendor link is present. We extract the full vendor contact record (phone, email, address) and map to VendorPP (VendorPP) or the primary VendorContact record in Epicor.
Opto
Stock Location
Epicor Prophet 21
PartBin
1:manyOpto multi-location inventory with named bins or warehouses splits into Epicor PartBin records. Each unique Opto Stock Location becomes a PartBin with WarehouseCode and BinNum resolved from the Opto location name hierarchy. If Opto stores a nested location (e.g., Warehouse-A / Zone-B / Bin-03), we preserve the full path as BinNum and set a default WarehouseCode. Part quantity per location maps to PartBin.OnHandQty. This is a 1:N split because one Opto Item at one location produces one PartBin row; the same Item at five locations produces five PartBin rows.
Opto
Purchase Order
Epicor Prophet 21
POHeader + POLine
1:1Opto Purchase Orders (Vendor, Items, quantities, expected delivery dates) map to Epicor POHeader and POLine records. The Opto PO number becomes POHeader.PONum, VendorID resolves via the Vendor mapping, and each line maps as a separate POLine with PartNum, OrderQty, DueDate, and UnitCost. Open Purchase Orders (status not closed) are candidates for migration; closed POs are documented as historical reference. Epicor's approval workflow on POHeader must be configured or bypassed during migration to allow imported records to enter at the correct status.
Opto
Reorder Rule
Epicor Prophet 21
UD Table (configuration reference)
lossyOpto Reorder Rules define per-Item minimum thresholds and reorder quantities — these are account-level configuration, not transactional records. We export them as a structured CSV with Item number, minimum quantity, reorder quantity, and reorder method. This CSV is delivered as a reference table in the mapping worksheet. The customer manually re-enters these as Part.Planning_alert or Epicor's MRP/ATP settings, or configures a BPM to trigger PO generation from the threshold. We do not migrate configuration as code.
Opto
Invoice (AR)
Epicor Prophet 21
InvcHead + InvcDtl
1:1Open and historical Opto invoices map to Epicor InvcHead and InvcDtl. Open invoices (status open, partially paid) are candidates for re-creation at Epicor with the correct customer, line items, amounts, and payment status. Closed invoices are migrated as historical records for reporting continuity but flagged with a closed status and posting date. We separate open from closed invoices at the start of migration so that open items receive the full Epicor AR treatment (aging, dunning, payment application) while historical records are read-only.
Opto
Invoice (AP)
Epicor Prophet 21
APInvoice + APInvoiceDtl
1:1Opto accounts payable invoices map to Epicor APInvoice and APInvoiceDtl. Open AP invoices (not yet paid) are re-created with VendorID, invoice number, invoice date, due date, and line amounts. Historical paid AP invoices migrate for GL continuity. We reconcile vendor payment terms against Epicor's TermsCode table during mapping so that DueDate and DiscountDueDate on APInvoice are correctly populated from the original Opto vendor terms.
Opto
Custom Field (Item)
Epicor Prophet 21
UD Field (Part)
lossyOpto Items frequently carry custom fields unique to the account. We extract the full custom-field schema during discovery, identify the Epicor Part UD table that matches (UD05, UD06, etc.), and map each custom field to a typed UD column (character, number, date, checkbox). Epicor's ZDataTable adapter manages UD field definitions; we configure UD01-UD08 labels and data types via Epicor REST before Part import begins. Fields with no Epicor equivalent are flagged in the mapping worksheet for the customer's admin to evaluate post-migration.
Opto
Custom Field (Customer)
Epicor Prophet 21
UD Field (Customer)
lossyOpto Customer custom fields (e.g., customer-specific flags, internal references, custom pricing tiers) map to Epicor Customer UD fields via the Customer UD table. We extract the custom field definition, map to the matching UD column type in Epicor, and load during Customer import. Fields without an Epicor equivalent are documented for manual evaluation.
Opto
Barcode
Epicor Prophet 21
Part.AltMethod or UD Field
lossyOpto's barcode-to-Item associations are extracted as a separate mapping table. Epicor stores barcode data in the Part table (via AltMethod or a UD field), or uses a separate BarcodeSym record linked to Part. We resolve the correct destination field based on the Epicor edition and configuration. If the customer uses Epicor's barcode scanning module, we create BarcodeSym records during Part import. Otherwise, we preserve the barcode association in a Part UD field.
Opto
GL Account (AR/AP references)
Epicor Prophet 21
GL Account
1:1Opto's accounts receivable and accounts payable references link to a chart-of-accounts structure. Where Opto uses a simplified account schema, Epicor maintains a full GL chart with AccountType, Segment values, and Natural Account. We map Opto account codes to Epicor GL Account segments during discovery and build a pre-migration GL mapping worksheet. This ensures that AR and AP invoices land in the correct natural account so that AR/AP reconciliation in Epicor matches the pre-migration trial balance.
| Opto | Epicor Prophet 21 | Compatibility | |
|---|---|---|---|
| Item | Part1:1 | Fully supported | |
| Customer | Customer1:1 | Fully supported | |
| Vendor | Vendor1:1 | Fully supported | |
| Stock Location | PartBin1:many | Fully supported | |
| Purchase Order | POHeader + POLine1:1 | Fully supported | |
| Reorder Rule | UD Table (configuration reference)lossy | Fully supported | |
| Invoice (AR) | InvcHead + InvcDtl1:1 | Fully supported | |
| Invoice (AP) | APInvoice + APInvoiceDtl1:1 | Fully supported | |
| Custom Field (Item) | UD Field (Part)lossy | Fully supported | |
| Custom Field (Customer) | UD Field (Customer)lossy | Fully supported | |
| Barcode | Part.AltMethod or UD Fieldlossy | Fully supported | |
| GL Account (AR/AP references) | GL Account1: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.
Opto gotchas
No documented export API for programmatic data pull
Reorder Rules are configuration data, not records
Custom field schema varies per account
Epicor Prophet 21 gotchas
Third-party bolt-on integrations complicate migration scope
Dirty data without standardized processes compounds migration risk
SDK customizations and BPMs may not survive platform upgrades
Report-based export only for non-technical users
Per-user pricing model requires accurate user count before migration planning
Pair-specific challenges
Migration approach
Discovery and export scope validation
We audit the Opto account across Items, Stock Locations, Vendors, Customers, Purchase Orders, Reorder Rules, Invoices (AR/AP), custom field definitions, and barcode associations. We identify the native export mechanism available in the Opto account and run a sample export to confirm field coverage, row counts, and encoding. We pair this with an Epicor Kinetic environment review (edition, UD table availability, GL chart structure) to produce a written migration scope document that defines what migrates, what documents for manual rebuild, and what scope decision (e.g., historical invoice cutoff date) the customer must confirm.
Schema design and GL account mapping
We design the destination Epicor schema: Part records with PartUOM and PartCost, Customer records with UD fields, Vendor records with VendorPP contacts, PartBin records from Opto Stock Locations, POHeader and POLine from Purchase Orders, and InvcHead/InvcDtl or APInvoice from invoices. We configure UD table definitions in Epicor via the REST API for any custom fields before data import begins. We build the GL account mapping worksheet that reconciles Opto's account structure to Epicor's chart of accounts so that AR and AP invoices post to the correct natural accounts.
Data extraction, transformation, and chunking
We extract Opto data via native CSV export, applying any encoding corrections and delimiter normalization. We transform each CSV into Epicor import-ready format: Items to Part, Stock Locations to PartBin, Customers to Customer, Vendors to Vendor, Purchase Orders to POHeader/POLine, Reorder Rules to a structured reference CSV, and Invoices to InvcHead/InvcDtl or APInvoice. We chunk large files (typically 5,000–10,000 rows per batch) to stay within Epicor API rate limits and apply exponential backoff on 429 responses. Each chunk is validated for required field presence and foreign-key consistency before submission.
Sandbox migration and reconciliation
We run a full migration into an Epicor Sandbox using production-like data volume. The customer's operations lead reconciles record counts (Parts in, Customers in, Vendors in, PartBin locations in, POs in, Invoices in), spot-checks 25–50 random records against the Opto source, and validates that GL account postings are correct. Any mapping corrections, missing required fields, or UD field configuration gaps are resolved here. Sign-off on the Sandbox reconciliation gates the production migration start.
Production migration in dependency order
We run production migration in record-dependency order: GL accounts (mapped from worksheet), Vendors (resolved first because Part-Vendor links reference them), Parts (with PartUOM and PartCost), PartBin (with WarehouseCode and BinNum resolved from Opto Stock Location), Customers (with UD fields populated), Purchase Orders (POHeader then POLine), AR and AP invoices (open items first, then closed history). Each phase emits a row-count reconciliation report before the next phase begins. Reorder Rules are delivered as a structured reference CSV at this stage for manual reconfiguration.
Cutover, delta sync, and Reorder Rule handoff
We freeze Opto writes during cutover, run a final delta migration of any records modified during the migration window, then enable Epicor as the system of record. We deliver the Reorder Rule reference CSV and the custom field disposition document to the customer's Epicor admin. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild automations, workflows, or reporting configurations — these are documented separately for the customer's admin or an Epicor implementation partner to handle post-migration.
Platform deep dives
Opto
Source
Strengths
Weaknesses
Epicor Prophet 21
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 3 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Opto and Epicor Prophet 21.
Object compatibility
3 of 8 objects need a mapping; the rest are 1:1.
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
Opto: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Opto exposes a bulk API — large-volume migrations stream efficiently.
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 Opto to Epicor Prophet 21 migration scoping. Not seeing yours? Book a call.
Walk through your Opto to Epicor Prophet 21 migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Opto
Other ways to arrive at Epicor Prophet 21
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.