ERP migration
Field-level mapping, validation, and rollback between NetSuite and Epicor Prophet 21. We move data and schema; workflows are rebuilt natively in Epicor Prophet 21.
NetSuite
Source
Epicor Prophet 21
Destination
Compatibility
11 of 17
objects map 1:1 between NetSuite and Epicor Prophet 21.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from NetSuite to Epicor ERP is a structural migration driven by industry fit and operational performance. NetSuite's unified database with subsidiary-aware intercompany eliminations maps to Epicor's multi-company structure, which requires each legal entity to be a separate Epicor company without built-in consolidation elimination entries. We resolve this architectural gap during discovery by designing the subsidiary-to-company map and determining whether intercompany transactions should become standard journal entries, internal sales orders, or a separate consolidation strategy. NetSuite's SuiteQL extraction layer, custom field registry (custbody_*, custrecord_*, custentity_*), and API concurrency ceiling of 15-55 simultaneous requests per tier shape our extraction approach; we chunk by date ranges and service tier capacity. Epicor ERP does not migrate Workflows, automations, SuiteFlow sequences, or SuiteScript customizations as code; we deliver a written inventory of every NetSuite automation requiring rebuild in Epicor Business Process Management (BPM) or Kinetic framework. For manufacturing customers, BOM and routing complexity is the primary timeline driver.
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 NetSuite 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.
NetSuite
Account
Epicor Prophet 21
Company
1:1NetSuite Accounts (chart of accounts records identified by account type codes and optionally acctNumber) map to Epicor GL Account segments. NetSuite account types (0=Bank, 1=AR, 2=Inventory, 10=AP, 21=Income, 23=COGS, 24=Expense) map to Epicor COA segment values under the configured account structure. We preserve full account number, name, and type. Epicor's account segment structure requires mapping NetSuite's flat account list into Epicor's segmented account format (typically Company-Branch-Natural Account or equivalent per the customer's Epicor COA configuration). The mapping is defined during discovery against the customer's Epicor Chart of Accounts structure.
NetSuite
Customer
Epicor Prophet 21
Customer
1:1NetSuite Customers map directly to Epicor Customer records. The NetSuite entity ID becomes the Epicor CustID, and the customer name, address, contact information, credit terms, and tax registration migrate to Epicor Customer and CustShip records. NetSuite Customer fields like creditlimit, terms, and region map to Epicor Customer.CreditHold, Customer.TermsCode, and Customer.SalesRepID. Multi-address NetSuite customers map to multiple Epicor CustShip records linked to a single Customer.
NetSuite
Vendor
Epicor Prophet 21
Vendor
1:1NetSuite Vendors map to Epicor Vendor records. NetSuite entity ID becomes Epicor Vendor.VendorID, and standard fields (name, address, contact, payment terms, 1099 flag) migrate to equivalent Epicor Vendor fields. Tax ID from NetSuite maps to Vendor.TaxID for US 1099 reporting. Multi-address vendors map to multiple Epicor VendRemitTo or VendorPP records.
NetSuite
Subsidiary
Epicor Prophet 21
Company
1:manyNetSuite's subsidiary model lets one database represent multiple legal entities with intercompany eliminations. This is the most structurally significant mapping decision in a NetSuite-to-Epicor migration. Epicor does not support a single-database multi-entity model with automatic intercompany eliminations. Each NetSuite subsidiary must map to a distinct Epicor Company, and intercompany transactions must be reclassified as standard journal entries, internal sales orders, or an external consolidation strategy. We build the subsidiary-to-company map during discovery, validate posting group assignments in Epicor before data lands, and present the intercompany treatment options (eliminate, keep as-is, consolidate manually) as a decision point documented in the migration contract.
NetSuite
Item (Inventory Assembly, Service, Non-Inventory)
Epicor Prophet 21
Part / PartPlant
1:1NetSuite Items (inventory assembly, non-inventory, service, description-only) map to Epicor Part records with PartPlant configuration for inventory-specific settings. The NetSuite item type maps to Epicor Part.TypeCode (MFG, PHant, PKG, etc.). Unit of measure from NetSuite maps to Epicor Part.IUM and Part.DUM. Pricing matrices migrate to Epicor Part.PriceList or OrderDtl base pricing. Build assemblies, BOM relationships, and landed cost fields require mapping to Epicor's engineering and costing modules during the BOM mapping phase.
NetSuite
BOM (Bill of Materials) and Work Order
Epicor Prophet 21
ECO (Engineering Change Order) and JobMtl / JobOper
lossyNetSuite Bill of Materials on assembly items map to Epicor Engineering BOM (EBOM) and ECO (Engineering Change Order) structures. NetSuite work orders map to Epicor Job records with JobMtl (materials) and JobOper (operations/routing) entries. This is the highest-complexity manufacturing mapping because NetSuite nests BOMs under assembly items while Epicor manages BOMs as separate Engineering records linked to Part numbers. Routing steps (NetSuite manufacturing routing) map to Epicor JobOper with work center references. We recommend scoping BOM and work order migration only for active or recent records; historical completed work orders typically convert to job cost history without full reconstruction.
NetSuite
Sales Order / Invoice
Epicor Prophet 21
OrderHead / OrderDtl
1:1NetSuite Sales Orders and Invoices map to Epicor OrderHed and OrderDtl records. NetSuite transaction body fields (tranDate, memo, externalId) map to Epicor OrderHed.OrderDate, OrderHed.CustomerRF, and OrderHed.XrefOrderNum. Line-level item, quantity, rate, and tax information map to OrderDtl. NetSuite's billing address and shipping address on the transaction map to Epicor OrderHed.BTCustomer and OrderHed.STCustomer with separate ship-to logic. Closed vs open status determines whether records are migrated as closed orders or open invoices requiring subsequent billing action.
NetSuite
Purchase Order / Bill
Epicor Prophet 21
POHeader / POLine and AP Invoice
1:1NetSuite Purchase Orders map to Epicor POHeader and POLine records. NetSuite Bills (vendor invoices) map to Epicor AP Invoice records. POHeader fields (vendor, terms, ship via) migrate to Epicor equivalents; line-level items, quantities, and costs map to POLine. NetSuite's expensereport and vendor bill payments map to Epicor's AP application workflow. Open POs migrate as open records; closed POs migrate as historical records.
NetSuite
Open AR and Open AP
Epicor Prophet 21
AR Invoice and AP Invoice
1:1Outstanding receivables and payables must be migrated as open balances rather than replayed as historical transactions. We extract open invoice amounts, due dates, aging buckets, and payment terms from NetSuite and create Epicor AR Invoice or AP Invoice records in open status. NetSuite AR aging buckets map to Epicor's receivables aging report structure. This mapping requires careful sequencing because customer and vendor records must be fully validated in Epicor before open invoice creation.
NetSuite
Journal Entry
Epicor Prophet 21
GL Journal
1:1NetSuite Journal Entries map to Epicor GL Journal records with line-level debit and credit entries. Historical journal entries require strict sequencing because prior-period adjustments and intercompany eliminations carry original posting dates and exchange rates that must be preserved. Some organizations prefer to carry forward open period balances only (creating fresh journal entries in Epicor rather than replaying historical rows), which is a scoping decision made during discovery. NetSuite currency revaluation journal entries map to Epicor's currency revaluation process output.
NetSuite
Lot/Serial Number
Epicor Prophet 21
PartLot + PartTran
lossyNetSuite lot and serial numbers assigned at transaction time are tracked in inventory records and tracked via the inventoryDetail subrecord. Epicor manages lot numbers through the PartLot table and serial numbers through PartSerialNo, with movements tracked via PartTran. NetSuite's lot/serial assignment at item fulfillment maps to Epicor's PartTran entries with the same lot number and transaction date. We preserve lot expiry dates, bin locations, and quantity per lot across the migration. UD Codes for lot classification migrate as Epicor UD Codes attached to PartLot records.
NetSuite
Custom Record Type
Epicor Prophet 21
UD Table / Custom Table
1:1NetSuite Custom Record Types (custrecord_* script IDs) are user-defined record types with custom fields that do not exist in a standard schema. Every NetSuite environment has a unique set of custom record types. We run a metadata discovery pass against the account's SuiteQL endpoint to enumerate all active custom record types before building the migration map. Each custom record type maps to an Epicor UD Table (user-defined table) with equivalent fields. Custom fields on custom record lines (custcol_*) require mapping to UD column definitions in Epicor. Custom record instances migrate as rows in the Epicor UD Table.
NetSuite
Employee
Epicor Prophet 21
Employee
1:1NetSuite Employee records map to Epicor Employee records with fields for name, address, department, and employment status. NetSuite's time tracking data (timesheets, time entries) maps to Epicor's Labor collection if the customer uses Epicor MES or Kinetic shop floor module. Compensation history, PTO balances, and benefits enrollment data migrate as Epicor HR records or are flagged for manual entry depending on the Epicor HR module scope in the customer's license.
NetSuite
Project / PSA
Epicor Prophet 21
Project / Job
lossyNetSuite project records (from SuitePeople PSA) include billing records, time entries, resource allocations, and milestones. Project financials must be separated from standard G/L transactions. NetSuite Projects map to Epicor Project (Phase-Project hierarchy) or Job records depending on the customer's Epicor license scope. Revenue recognition, billing schedules, and project WIP mapping depend on whether the customer uses Epicor's Project Billing or Kinetic PSA module.
NetSuite
Custom Fields
Epicor Prophet 21
UD Fields
lossyNetSuite attaches custom fields to nearly every standard object using custbody_*, custcol_*, custentity_*, and custitem_* prefixes. These must be discovered per-entity via SuiteQL before migration because no public documentation enumerates a given account's active custom field set. Each discovered custom field maps to an Epicor UD field on the equivalent table. Custom fields on transaction lines (custcol_*) require Epicor UD columns on the line table (OrderDtl, POLine, etc.) rather than the header table. We pre-create all Epicor UD fields in the target Epicor environment during the schema design phase before any data load begins.
NetSuite
Tax Code
Epicor Prophet 21
Tax Code / TaxConnect
1:1NetSuite tax codes define nexus, rates, and filing jurisdictions and are referenced by internalId on transaction lines. We preserve the full tax code registry and map nexus assignments to Epicor TaxConnect jurisdictions or manual tax code definitions. NetSuite multi-country tax codes (VAT, GST) map to Epicor equivalent jurisdiction codes. Tax rate tables migrate to Epicor's tax rate definitions with effective dates preserved.
NetSuite
File Cabinet / Documents
Epicor Prophet 21
Document Management
lossyNetSuite File Cabinet documents attached to records (via the documents tab or file upload) are extracted with file metadata and content. Large file transfers are chunked and retried under NetSuite API rate limit constraints. Documents migrate to Epicor Document Management (EDM) or the Kinetic Document vault, linked to the equivalent Epicor record by primary key. We do not migrate the full NetSuite file cabinet structure as a file system; we migrate documents associated with specific migrated records.
| NetSuite | Epicor Prophet 21 | Compatibility | |
|---|---|---|---|
| Account | Company1:1 | Fully supported | |
| Customer | Customer1:1 | Fully supported | |
| Vendor | Vendor1:1 | Fully supported | |
| Subsidiary | Company1:many | Fully supported | |
| Item (Inventory Assembly, Service, Non-Inventory) | Part / PartPlant1:1 | Fully supported | |
| BOM (Bill of Materials) and Work Order | ECO (Engineering Change Order) and JobMtl / JobOperlossy | Fully supported | |
| Sales Order / Invoice | OrderHead / OrderDtl1:1 | Fully supported | |
| Purchase Order / Bill | POHeader / POLine and AP Invoice1:1 | Fully supported | |
| Open AR and Open AP | AR Invoice and AP Invoice1:1 | Mapping required | |
| Journal Entry | GL Journal1:1 | Fully supported | |
| Lot/Serial Number | PartLot + PartTranlossy | Fully supported | |
| Custom Record Type | UD Table / Custom Table1:1 | Fully supported | |
| Employee | Employee1:1 | Fully supported | |
| Project / PSA | Project / Joblossy | Fully supported | |
| Custom Fields | UD Fieldslossy | Mapping required | |
| Tax Code | Tax Code / TaxConnect1:1 | Fully supported | |
| File Cabinet / Documents | Document Managementlossy | 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.
NetSuite gotchas
API concurrency limits gate extraction throughput
Subsidiary-to-company mapping is structural, not cosmetic
Service tier transaction-line limits block migration mid-flight
Custom records and custom fields have no standard schema
Historical journal entries require strict sequencing
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 subsidiary-to-company design
We audit the NetSuite environment across service tier, subsidiary count and hierarchy, custom record types, custom fields, item types (inventory assembly depth, BOM levels), active work orders, and transaction volume by date range. We pair this with an Epicor deployment assessment (cloud vs. on-premise, Kinetic vs. Prophet 21 vs. Epicor ERP, modules licensed). The discovery output is a written migration scope, a subsidiary-to-company map with intercompany treatment recommendation, a BOM migration scope decision (active-only vs. historical), and a custom field enumeration from the NetSuite SuiteQL endpoint. This phase typically runs two to four weeks.
Epicor schema preparation and UD field creation
We provision the Epicor migration target: configure COA segment structure, create Company records for each NetSuite subsidiary, define UD fields and tables for every discovered NetSuite custom field and custom record type, configure Part and PartPlant settings for inventory items, and set up the Epicor TaxConnect tax code registry. Epicor UD field creation requires administrator access and, for on-premise deployments, may require a brief test cycle. Schema is validated in the Epicor environment before any record migration begins. This phase runs in parallel with NetSuite extraction script development and typically takes one to three weeks.
NetSuite extraction in date-bounded batches under API ceiling
We extract NetSuite data using the SuiteQL endpoint in date-bounded batches of up to 1,000 records per request, monitoring API concurrency headers and implementing exponential backoff to stay within the account's tier ceiling (15 concurrent for default, up to 55 with SuiteCloud Plus licenses). We monitor the running six-month transaction-line average to avoid triggering a tier upgrade during extraction. Master data (Accounts, Customers, Vendors, Items) extracts first, followed by BOM and routing records, followed by transactional history in dependency order. Each batch emits a row-count reconciliation report.
BOM and work order sequencing for manufacturing environments
For organizations with NetSuite inventory assemblies, multi-level BOMs, and active work orders, we sequence BOM extraction and transformation as a dedicated phase. NetSuite assembly items are decomposed into Epicor Engineering BOM records (EBOM and ECO), with sub-assembly relationships mapped to Epicor's Part-BOM linkage. Work orders map to Epicor Job records with JobMtl and JobOper entries derived from the NetSuite work order line data. Routing steps map to JobOper with work center lookups validated against the Epicor Resource Group configuration. We recommend migrating only open and recently completed (within 12 months) work orders to limit scope.
Production migration in dependency order with reconciliation gates
We run production migration in record-dependency order: Epicor Company configuration, Chart of Accounts, Customer and Vendor records, Employee records, Part and PartPlant (inventory), BOM and routing (manufacturing), open AR and AP balances, Sales Orders and Invoices, Purchase Orders and Bills, Journal Entries, Project and PSA records, Activity and engagement history (if applicable), Custom Record instances, and Custom Field values on standard records. Each phase emits a row-count and balance reconciliation report before the next phase begins. Financial reconciliation validates that the Epicor trial balance matches the NetSuite source trial balance within agreed tolerances.
Cutover, validation, and automation rebuild handoff
We freeze NetSuite writes during cutover, run a final delta migration of any records modified during the migration window, then hand Epicor as the system of record. We deliver a written inventory of every active NetSuite SuiteFlow workflow, saved search automation, and custom record workflow with its trigger, conditions, actions, and a recommended Epicor BPM equivalent. We do not rebuild NetSuite SuiteFlow or SuiteScript customizations as Epicor BPM workflows; that is a separate engagement scoped by an Epicor implementation partner. We support a one-week hypercare window for reconciliation issues raised by the customer's finance and operations team.
Platform deep dives
NetSuite
Source
Strengths
Weaknesses
Epicor Prophet 21
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. 2 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 NetSuite and Epicor Prophet 21.
Object compatibility
2 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
NetSuite: 15 concurrent requests (default); up to 55 on Tier 5 with SuiteCloud Plus; 1,000 records per request; 60-second and 24-hour frequency windows per account.
Data volume sensitivity
NetSuite 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 NetSuite to Epicor Prophet 21 migration scoping. Not seeing yours? Book a call.
Walk through your NetSuite 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 NetSuite
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.