Skip to main content
IoTFlows Logo
IoTFlows Logo
Shopping Cart

Connecting machine data to your ERP

Get machine hours and part counts into Epicor, SAP or JobBOSS: what the ERP needs per job, how to match runs to jobs, and which integration path fits.

Mahmoud Parto, Co-founder and CEO

9 min read

Updated

You get machine hours and part counts into Epicor, SAP or JobBOSS by turning machine signals into job actuals first: match each run to a job, an operation and a machine, then post setup hours, run hours, good parts and scrap against that operation. Move them with a file import, an API feed your team builds, or a two-way connector, depending on how many machines you cost and how often.

This guide is for plant managers and engineers whose ERP job costs still come from hand-keyed time tickets.

Key takeaways

  • The ERP needs setup hours, run hours, good quantity and scrap for each job operation, not raw machine signals.
  • Machine data becomes job data only after each run is matched to a job, an operation and a machine.
  • Use a file import for weekly costing, an API for a developer-built feed, and a two-way connector to cost every job.
  • Post the hours a machine was committed to a job, and use running and stopped time to explain the variance.
  • Reconcile gross cycle counts with declared good parts plus scrap before the integration posts anything.

What the ERP needs from the machines#

An ERP does not store machine signals. It stores jobs, the operations on each job's routing, and the actuals posted against each operation once it runs.

Definition

Machine-to-ERP integration is the link that moves what machines did on the floor, such as run hours, stop hours, cycle counts and scrap, into the ERP record of each job operation, and moves the job list from the ERP back to the floor.

A job is an order for a quantity of a part, and a task or operation is one step of that job on one machine. The glossary entry for job and task uses the same split.

Each ERP names the transaction differently, but the fields line up. SAP's production order confirmation records yield, scrap and rework quantities, the actual start and finish of the operation, and its setup, machine and labor time.[2] JobBOSS²'s data collection app has an employee scan to start or stop a job and the routing step, track setup time, and enter good and scrapped pieces.[3]

ERP actualMachine-side sourceNote
Setup hoursJob start to first good partTest pieces count as setup
Run or machine hoursElapsed job time after setupIncludes stops inside the job
Labor hoursOperator sessions on the jobNever from machine time
Good quantityCycles × parts per cycle, less scrapGross count minus logged scrap
Scrap quantityScrap logged with a reasonEntered by the operator
Operation statusJob completed at the machineCloses the operation
Field names differ by ERP. Map each row to your ERP's own labor or confirmation fields before you build anything.

ISA-95, the standard for enterprise-control integration, places ERP at Level 4 and manufacturing operations at Level 3, and deals mainly with the interface between the two.[1] That interface is what you are building: a schedule flows down, and a record of what was produced flows back up. The machine monitoring vs MES vs CMMS comparison shows where each system sits.

Jobs flow down, actuals flow up, and the match in the middle turns machine time into job time.

Match machine time to jobs#

A sensor knows the machine and the time. The ERP knows the job and the operation. Nothing reaches the ERP until something joins the two.

There are three ways to make that join:

  • The operator starts the job at the machine. Every minute between start and complete belongs to that job. This is the most reliable join, because the person at the machine knows what is running. IoTFlows calls one run from start to pause or complete a work session.
  • The schedule says which job runs where. Machine time inside the window the schedule gave job 24-1187 on mill VF2-03 goes to that job. This breaks the moment the floor runs jobs out of order.
  • The controller reports the program or part number. A CNC control can name the program it is running, so the join needs no operator. It needs a connection to the control, which is a security concern for many plants, so IT usually reviews it first. The guide to machine communication protocols covers MTConnect and OPC UA.

Choose the operator start when jobs change during a shift or more than one job queues on a machine. Use the schedule window when each machine runs one long job a day. Add the controller join when your CNC fleet already exposes MTConnect and IT has approved the connection.

Whichever join you use, both systems must spell the same things the same way. Build one cross-reference before the first sync, with the ERP as the master:

ERP fieldMachine-side fieldExample
Job or production orderJob24-1187
Operation sequenceOperationOP20
Work center or resourceMachineVF2-03
Part numberPartBRK-2210

Three ways to connect#

Once runs carry a job, the actuals have to travel. Three paths cover the options, and they differ in who builds them and how fresh the ERP stays.

File importAPI or webhooksTwo-way connector
Who builds itA planner, with no codeYour developer or integratorThe integration vendor
DirectionOne way per fileOne way per feedJobs down, actuals up
ERP is currentAfter each importAfter each eventAfter each event or sync
Where IDs matchIn the saved mappingIn your codeIn the connector
Upkeep on ERP upgradeCheck the column mappingYour developerThe connector owner
FitsWeekly or monthly costingA developer on staffEvery job costed live
A file import is two files in practice: the ERP's job export into the floor system, and an actuals export back into the ERP's own import tool.

Choose a file import when you cost jobs weekly or monthly and a planner can run the export and import by hand. Choose an API or webhook feed when you have a developer who already writes to the ERP's interface.

Event payloads from the monitoring system, such as webhooks to your own endpoint, arrive as they happen. Choose a two-way connector when every job needs its hours posted without anyone exporting a file, or when the ERP's job list should appear at the machine on its own.

You do not need a two-way connector to start. A weekly file import on one machine group shows whether your IDs and conventions hold, and everything you learn carries over to the connector.

Work one job through by hand#

The numbers below show what the integration posts, and why the convention you pick changes the job cost.

Worked example

Job 24-1187, OP20 on a Haas VF-2

  • Routing standard: 1.0 h setup and 2.4 min a part. For 250 parts, run time is 250 × 2.4 = 600 min = 10.0 h, so the standard is 11.0 h.
  • The operator starts the job at 06:00. The first good part comes off at 07:30, so setup took 1.5 h.
  • The run phase lasts 12.5 h on the machine. The sensor records 10.5 h running and 2.0 h stopped inside it.
  • The machine counts 258 cycles at one part per cycle. The operator logs 8 scrap, so the good quantity is 258 − 8 = 250.

Actual machine time is 1.5 + 12.5 = 14.0 h, against 11.0 h standard. The 3.0 h gap breaks down as 0.5 h of extra setup, 2.0 h of stops, and 0.5 h of extra running time: 10.5 h is 630 min against the 600 min the standard allows for 250 good parts. Of those 30 min, 8 scrapped parts × 2.4 min = 19.2 min, and slow cycles take the other 10.8 min.

Post setup 1.5 h, machine 12.5 h, good 250, scrap 8: 3.0 h (27.3%) over standard

At a machine rate of $85 an hour, the standard costs 11.0 × $85 = $935 and the actual costs 14.0 × $85 = $1,190, so the job ran $255 over.

The same job against its routing standard: stops inside the job explain two of the three extra hours. Sample data.

For the cost side of the same numbers, the Production Insights cost model prices labor hours and machine hours at two hourly rates and compares them with the job budget.

Which way data flows, and how often#

Give every field one owner. When two systems can both edit the same field, the last write wins and nobody knows which number is right.

  • Down from the ERP: job number, part, operation, quantity and due date. The ERP owns them.
  • Up from the floor: setup hours, machine hours, good quantity, scrap and completion. The monitoring system owns the clock and the count.
  • Labor hours: from the operator's sessions, posted with the operation. The person owns them.

Post once per completed operation, or once per shift for long jobs. An ERP records transactions, and a posting per cycle floods it with rows nobody reads. You probably do not need event-by-event posting if you cost jobs at month end.

Post on every event when the ERP's schedule or customer promise dates depend on completions. A job that closes at 14:10 should free the next operation in the ERP before the next shift plans its work. Planning from those real completions is covered in production scheduling on real run rates.

Reconcile counts before you post them#

The first comparison between a machine count and an ERP quantity almost never matches. That gap is not a fault until you confirm that both systems count the same thing.

DifferenceWhy it happens
Gross vs goodCycles counted, good parts declared
Scrap not deductedLogged scrap sits beside the count
Event vs declarationA part at 23:58 is declared the next day
Setup and test piecesCounted by the machine, not by the ERP
Different day boundariesPlant calendar vs shift schedule

Compare gross against gross, for one shift, on one machine, on one operation. If the machine count equals the ERP's declared quantity plus its scrap and setup pieces, both are right. The checklist for counts that do not match the ERP walks through what to do when a gap survives that.

Do not tune either system to make the two agree to the part. A machine count and a hand declaration never agree exactly, and a setup adjusted until they do is tuned to paperwork rather than to the machine.

Connect IoTFlows to your ERP#

IoTFlows works on all three paths. On every plan, the Production Scheduler imports jobs from any ERP's CSV or Excel export in six steps. Webhooks send machine events to your own endpoint, and a REST API lets your code read the same records.

For Enterprise plants, IoTFlows engineers build two-way connectors to Epicor, SAP, Oracle, JobBOSS, ProShop and others as a custom integration. Each runs in five steps, from scoping and data mapping to build, validation and handover, in one week to a month depending on the machines.

MiRus, an implant maker in Marietta, Georgia, runs its jobs in Epicor. A two-way connector built in about a month ties every job to its machining and labor hours.

The real-time visibility has been amazing for optimizing our operations. With the ERP integration, I see the numbers and where every job stands, without digging for them in our ERP.

Dennis Moreno, Vice President of Manufacturing and Operations, MiRusRead the story

Run the project in five steps#

Start small, prove the conventions, then widen. Each step below is one decision or one check.

  1. Pick one machine group and one transaction

    Choose four to six machines that run the same part family, and post one ERP transaction, such as the labor or confirmation entry for each operation.

  2. Build the cross-reference

    List every job, operation, work center and part number on both sides, with the ERP spelling as the master. The ERP import column reference shows which export columns map to which job fields.

  3. Write down the conventions

    Decide elapsed or running hours, gross or good quantity, and which day a run that crosses midnight belongs to. Put the answers where the planner and the cost accountant both read them.

  4. Run in parallel for two weeks

    Keep the operators' time tickets and compare them with the machine actuals every day. Every gap should trace to a convention, a missing job start or a bad ID.

  5. Switch on posting and review weekly

    Stop the hand entries for that group, then read the variance by job each week. Add the next machine group once a full week posts with no manual fixes.

Before you add machines, check what else is worth collecting from them in the guide to manufacturing data collection.

Questions#

Do I need an MES between my machines and my ERP?#

Not for hours and counts. A monitoring system that records machine state and cycle counts, plus a reliable way to tie each run to a job, supplies what the ERP labor and production entries need. Choose an MES when routings, traceability and quality records are the bottleneck, rather than machine time.

Should machine data replace operator labor entries in the ERP?#

Replace machine hours and counts, and keep labor hours tied to the operator. A sensor measures the machine, not the person, so an operator running two machines would be charged twice if labor came from machine time. Take labor from the operator sessions on each job and machine time from the machine record.

How long does an ERP integration take?#

A file import works the day you save its column mapping. A custom API feed takes as long as your developer needs to learn the ERP interface. IoTFlows delivers Enterprise custom integrations in one week to a month depending on the machines, and the two-way Epicor connector for MiRus took about a month.

What if the ERP part numbers do not match the machine system?#

Fix the mapping before the first sync. Build one cross-reference of part numbers, work centers and operation codes, and make the ERP spelling the master. A part written Y841070 in one system and Y-841070 in the other becomes two records, and every hour posted against the second one lands on the wrong part.

Written by

Mahmoud Parto, Co-founder and CEO

Sources#

  1. ISA-95 Standard: Enterprise-Control System Integration, International Society of Automation. Accessed Oct 16, 2026
    isa.org/standards-and-publications/isa-standards/isa-95-standard
  2. Confirming Production Orders (Exploring Business Processes in SAP S/4HANA Discrete Shopfloor Control), SAP Learning. Accessed Oct 16, 2026
    learning.sap.com/courses/exploring-business-processes-in-sap-s4-hana-discrete-shopfloor-control/confirming-production-orders_d5811bf4-fb07-411d-8bdb-0f9cec11e4db
  3. JobBOSS² Data Collection (App Store listing), Shoptech Industrial Software Corp. Accessed Oct 16, 2026
    apps.apple.com/us/app/id1213396029