In short

SAP Mass Goods Receipt with MIGO

SAP mass goods receipt means posting many goods movements in one controlled run from a delivery file rather than stepping through MIGO. Each posting moves physical stock and writes an accounting entry in the same instant, and neither record can ever be deleted.

  • Two periods must be open, not one. MM and FI periods are maintained separately, and this stops more receipt runs than anything else.
  • The movement type decides everything. Direction, what the file references, and which accounts are posted.
  • Never use 501 where a purchase order exists. It breaks three-way matching permanently and GR/IR never clears.
  • Nothing can be deleted. A wrong receipt is corrected by posting the reversal, and both documents stay visible.
  • Reconcile GR/IR the same day. Wrong references produce balances that hide until quarter end.
Diagram The eight stages that turn a delivery list into posted material documents.

Where the volume comes from

  • Bulk deliveries. A supplier ships against forty purchase orders on one truck, and the receipting is forty transactions.
  • Third-party logistics reconciliation. A warehouse provider sends a receipt file that has to become material documents.
  • Backlog catch-up. Receipting fell behind, and now a month of deliveries has to post before period close.
  • Physical inventory adjustments. A count produces a list of differences that become movements.
  • Production consumption. Component issues against production orders, particularly where backflushing is not configured.
  • Site reorganisation. Stock moved between storage locations or plants after a layout change.
  • Subcontracting flows. Components issued to and finished goods received from subcontractors.
  • Cutover. Opening stock balances loaded before go-live.

The pattern is that the physical event has already happened. The goods arrived, the stock moved, the components were consumed. What is outstanding is telling SAP, and that backlog is exactly what mass posting is for.

The movement type decides everything

SAP goods movement types compared: 101 goods receipt for purchase order, 102 reversal, 201 goods issue to cost centre, 261 goods issue to order, 311 transfer posting and 501 goods receipt without a purchase order.
Diagram The movement type sets direction, reference and accounts, and every type has a reversal pair.

Movement type is the most important field in a goods movement file, and it is not merely a classification. It determines the direction stock moves, what the file must reference, which accounts are posted, and which additional fields become mandatory.

A file with the wrong movement type does not usually fail. It posts a valid document doing something other than what you intended, which is the worst category of error because nothing stops.

Movement types come in pairs

Every posting movement has a reversal counterpart: 101 and 102, 201 and 202, 261 and 262, 311 and 312. This pairing is how corrections work. There is no undo; there is only the opposite movement.

For a mass run this has a practical consequence worth planning for. If four hundred receipts post wrongly, the correction is four hundred reversals, which is itself a mass run and which doubles the number of documents in the audit trail. Getting the first run right is cheaper than any recovery.

The 501 trap

Movement 501, goods receipt without a purchase order, exists for genuine cases: free samples, returns from customers into stock, corrections. It is also the movement people reach for when a receipt against a PO fails and they need stock in the system quickly.

Doing that breaks three-way matching permanently. The PO remains open with no receipt against it, the GR/IR account never clears for that line, and the supplier invoice arrives with nothing to match. Somebody in accounts payable will spend a day on it in six weeks. If a receipt against a PO fails, fix the reason rather than routing around it.

One posting, two permanent records

One SAP goods receipt posting creating two permanent records: a stock effect raising quantity in the plant and storage location, and an accounting effect debiting the stock account and crediting GR/IR clearing at the purchase order price.
Diagram A goods receipt is a logistics event and an accounting event at the same instant.

A goods receipt posts a material document and, where the movement is value-relevant, an accounting document at the same moment. Understanding both halves is what separates a mass run that works from one that quietly damages the balance sheet.

The stock effect is immediate. Quantity appears in the plant, storage location and stock type on the row, and it changes availability for planning and for sales orders on the next check. A large receipt run visibly moves the availability picture, which is why coordinating with sales order runs matters when stock is tight.

The accounting effect for a standard receipt debits stock and credits GR/IR clearing, at the purchase order price. The GR/IR balance is what invoice verification matches against later. A receipt posted at the wrong quantity or against the wrong PO item leaves a GR/IR balance that will not clear, and those balances accumulate silently until someone runs an ageing report.

GR/IR is where mass receipting mistakes go to hide. A wrong receipt does not usually produce a visible error. It produces a clearing balance that nobody looks at until quarter end. Reconciling the run against the purchase orders it touched is the check that catches this.

What SAP mass goods receipt means

SAP mass goods receipt is the practice of posting many goods movements in one controlled run from a structured file, instead of stepping through MIGO one delivery at a time. The movements are prepared in Excel, referenced to their purchase order items, validated against live stock and period status, and posted through SAP's standard goods movement interface with the material document number written back per row.

Everything else in the mass upload cluster creates or changes a record. This one moves physical inventory and writes an accounting entry in the same instant, and both are permanent.

A goods movement cannot be deleted. Not blocked, not flagged, not reversed in place. A wrong receipt is corrected by posting an opposite movement, which means the mistake and the correction both sit in the record permanently. That is a feature rather than a defect, and it sets the standard for how carefully a mass run should be prepared.

The eight stages of SAP mass goods receipt with MIGO: build the sheet, log in to postnow.ai, map to MIGO fields, validate, fix flagged rows, test post, post through BAPI, and reconcile material document numbers.

Movements with no accounting effect

Transfer postings between storage locations move stock without changing its value, so no accounting document is created. This makes them lower risk and also means they are invisible to finance, which occasionally surprises people who expect a paper trail in FI.

Two periods must be open, not one

This single issue stops more mass receipt runs than anything else in this guide, and it is trivially avoidable once you know about it.

SAP maintains an MM period separately from the FI period. Materials management allows postings in the current period and, depending on configuration, the previous one. Finance controls its own periods through OB52. A goods receipt needs both open for its posting date.

The practical failure is a run prepared on the second of the month for deliveries dated the twenty-eighth of the previous month. Finance may still have the old period open for accruals; materials management has almost certainly rolled forward. The receipts fail with M7 053, and the message is about periods rather than about anything in your data, which sends people looking in the wrong place.

💡
Check MMRV before building a backdated file. It shows the current and previous MM period in seconds, and it tells you whether a backdated run is possible at all before anyone spends time preparing one.

The fields you have to map

Mapping of Excel columns to SAP MIGO fields for mass goods receipt: movement type to BWART, purchase order to EBELN, PO item to EBELP, quantity to ERFMG, storage location to LGORT, batch to CHARG and posting date to BUDAT.
Diagram A receipt against a purchase order needs less than expected, because the PO supplies the context.

Purchase order number and item

For a receipt against a purchase order, this reference does most of the work. It supplies the material, the plant, the price, the account assignment and the tolerance rules. Your file supplies the quantity and the movement type; the PO supplies the context.

The item number is not optional. A purchase order with twelve lines needs to know which line the receipt is against, and a file that carries only the PO number cannot post. Where a delivery file comes from a supplier or a warehouse system, the PO item is frequently the missing column and has to be derived from the material.

Quantity and unit

Quantity is entered in the unit of entry, which may not be the order unit or the base unit. A receipt of two pallets against an order in each is a common source of quantity errors that pass validation, because the number is valid and the unit is wrong. State the unit explicitly rather than relying on defaults.

Storage location and stock type

Storage location must exist for the material and plant. Stock type decides whether the received quantity is available immediately or held. Material received into quality inspection is not unrestricted stock, cannot be issued, and will not confirm a sales order. Where quality inspection is configured, a receipt run puts stock into inspection whether or not the person running it expected that.

Batch

Where a material is batch managed, the batch is mandatory. It can be supplied in the file, or determined by SAP where batch determination is configured. On a receipt file spanning batch-managed and non-managed materials, the batch column is populated on some rows and empty on others, which is correct and looks like an error to anyone reviewing the sheet.

Delivery tolerances and partial receipts

Purchase order items carry over-delivery and under-delivery tolerances, and a receipt outside them is rejected. This is a control rather than an obstacle, and at volume it does useful work.

Over-delivery beyond tolerance produces M7 093. The correct responses are to amend the purchase order if the extra quantity is genuinely accepted, or to receipt only the ordered quantity and handle the excess separately. Raising the tolerance to clear a run defeats the control that exists precisely to catch suppliers over-shipping.

Under-delivery is usually permitted, and produces a partially received PO item that stays open for the remainder. On a mass run this is normal: a delivery file rarely matches order quantities exactly. What matters is that partial receipts are intended rather than accidental, because a wrong quantity on a partial receipt is harder to spot than a wrong quantity on a full one.

Delivery completed is the flag that closes a PO item that will not receive its full quantity. Where a mass run is receipting final deliveries against a batch of orders, setting this flag is what stops the remainder showing as expected supply to planning for ever.

The eight stages of a controlled MIGO run

Build the delivery sheet

One movement line per row, each carrying its movement type and its purchase order item. Derive the PO item where the source file only has the material, and confirm the unit of entry.

Check: MMRV confirms the posting date falls in an open MM period.

Log in to postnow.ai

Open the PostNow task pane inside Excel and sign in. The pane connects the workbook to your SAP system with your own credentials and inventory authorisations.

Map movement type and reference

Movement type, PO number and item, quantity, unit, storage location, batch and posting date. The movement type decides which of the remaining columns are mandatory.

Check: every batch-managed material on the file has a batch or determination.

Validate against live SAP

Purchase orders open and items not deleted, quantities inside tolerance, both periods open, storage locations valid, and for issues, sufficient stock of the right type.

Fix flagged rows

Over-deliveries need a decision rather than an override. Closed periods need finance. Missing batches need either data or configuration. None of these should be worked around with a 501.

Test post in a quality client

Post a subset, then open a material document in MB03 and its accounting document alongside it. Check that the value is what you expect and that GR/IR moved correctly.

Check: the accounting document debits stock at the PO price.

Post through standard logic

The run calls BAPI_GOODSMVT_CREATE, SAP's published interface for goods movements. Every check MIGO applies still applies, and the same material and accounting documents are produced.

Reconcile stock and GR/IR

Material document numbers are written back per row. Compare received quantities against the purchase orders touched, and confirm that the GR/IR movement matches the value expected.

Check: no PO item received a quantity nobody intended.
Step by step infographic for SAP mass goods receipt with MIGO: build the delivery sheet, log in to postnow.ai, set the movement type, check periods and tolerance, validate every row, then post and reconcile.
Infographic SAP mass goods receipt in six steps, from delivery list to posted material document.

Validation: six checks before a single movement posts

Six validation checks before an SAP MIGO mass goods movement posts: purchase order open, quantity within tolerance, period open in MM and FI, storage location valid, batch supplied, and stock available.
Diagram Two periods must be open, not one. MM and FI are maintained separately.

The stock availability check applies to issues and transfers rather than receipts, and it has a subtlety worth knowing. Stock exists in types: unrestricted, quality inspection, blocked. A material with plenty of stock in inspection and none unrestricted will fail an issue with a deficit message that looks wrong to anyone reading a stock overview without noticing the stock type column.

Errors, and what they are telling you

Common SAP MIGO goods movement errors and their fixes: M7 053 posting only possible in periods, M7 022 deficit of unrestricted stock, M7 093 over-delivery tolerance exceeded, and M7 018 batch is a required field.
Diagram The four messages that stop most MIGO loads, and what each one is really telling you.

M7 053 is the period error and will hit every row on a backdated file, which makes it look catastrophic and makes it a two-minute fix. M7 022 and M7 093 are per-row and represent genuine physical or commercial questions. M7 018 is a data gap that is usually systematic: either the file has no batch column at all, or a subset of materials became batch managed after the template was built.

Running the whole sequence inside Excel

Try this in your own system

PostNow runs SAP mass goods receipt from Excel

The eight stages above happen in the delivery file the warehouse already works from. PostNow adds a task pane to Excel, connects to your SAP system with your own credentials, and takes the file through referencing, validation and posting without leaving the sheet.

Reference

Each row matched to its purchase order item before anything posts.

Check periods

MM and FI period status verified for the posting date.

Validate

Tolerances, storage locations, batches and stock checked live.

Trace

The material document number written back on the row that made it.

Start free trial 14-day trial · posts through BAPI_GOODSMVT_CREATE, never to tables

Against a PO, without a PO, and transfers

Comparison of SAP movement 101 goods receipt against a purchase order, 501 goods receipt without a purchase order and 311 transfer posting, covering what the file references, where the price comes from and the accounting effect.
Diagram If a purchase order exists, receipt against it. A 501 breaks three-way matching for ever.

The choice is usually obvious and occasionally tempting to get wrong under time pressure. Receipt against the purchase order whenever one exists. Use 501 only where there genuinely is no order. Use transfers for movements that change location without changing ownership or value.

Reversing at volume

Because deletion is impossible, correction is its own mass run, and it deserves the same care as the original.

Reversal is a movement, not an undo. Posting 102 against a 101 creates a second material document and a second accounting document. Both remain visible. The stock returns and the GR/IR entry reverses, which is the correct outcome, but the trail shows both events.

Reference the original document. A reversal that references the material document it corrects is cleaner than a free-standing opposite movement, because the link is explicit and reporting can pair them.

Watch the period. A reversal posted in a later period than the original moves value between periods, which finance will notice. Where the original period is still open, reverse into it.

Check what happened downstream. If an invoice has already been posted against the receipt, reversing the goods receipt alone leaves the invoice unmatched. Sequence the corrections, or the cleanup gets worse rather than better.

Subcontracting, and movements that come in pairs

Subcontracting is where mass goods movement work gets structurally harder, because a single receipt is really two movements happening together.

When a subcontracted item is received, SAP posts the receipt of the finished item and the consumption of the components that were provided, in one document. The component consumption is derived from the bill of material on the purchase order item, and it draws from stock provided to the vendor rather than from your own plant stock.

Three things follow for a mass run:

  • Components must be at the vendor first. Movement 541 transfers stock to vendor-provided status. A receipt against a subcontracting order fails if the components are not there, and the message points at the component rather than at the receipt.
  • Component quantities are calculated, not supplied. Your file states the finished quantity; SAP derives the components. A receipt of a quantity you did not intend consumes components you did not intend, at multiple times the visible error.
  • Under-consumption needs handling. Where the vendor used fewer components than the BOM assumes, the difference stays as provided stock and has to be reconciled separately.

The practical advice is to run subcontracting receipts as their own file rather than mixed into standard receipting. The failure modes are different, the validation is different, and mixing them makes a partial failure much harder to interpret.

Loading opening stock at cutover

Initial stock upload is a specific version of this job with its own rules, and it is often the first mass goods movement an organisation attempts.

Movement 561 exists for initial entry of stock balances. It posts stock in against an offsetting account rather than against a purchase order, which is correct at cutover and wrong at any other time.

Values matter as much as quantities. For materials under standard price the value follows the standard. For moving average materials the value comes from what you supply, and getting it wrong sets an average that follows the material for months.

Batches and valuation types first. Where materials are batch managed or split valuated, those structures have to exist before stock can be posted into them. This is a sequencing dependency that catches teams who plan stock loading before batch master loading.

Reconcile to the legacy balance sheet. Total stock value posted should agree with the closing inventory value being migrated. A quantity reconciliation alone will not catch a valuation error, and valuation errors at cutover are expensive to unwind.

Governance, permanence, and inventory control

Goods movements sit inside inventory control, which is usually one of the tighter control environments in an organisation, for the obvious reason that stock is an asset that can walk.

  • Post as a named user. The movement carries the identity and inventory authorisations of the person who ran it. This is more sensitive here than in most objects.
  • Approve the file, and keep it. Which purchase orders, which quantities, which dates. Because documents cannot be deleted, the file is the record of intent against a permanent outcome.
  • Separate physical confirmation from posting. Whoever confirms that goods actually arrived should not be the only person involved in posting that they did.
  • Reconcile GR/IR after the run. This is the check that catches wrong references, and nobody else will do it.
  • Treat 501 usage as an exception requiring explanation. A run that quietly contains 501 rows for materials that have open purchase orders is a control problem, not a shortcut.

Volume, timing, and stock contention

  • Post before period close, not during it. A receipting backlog cleared on the last day competes with everything else finance is doing.
  • Avoid running against a physical inventory count. Movements posted while a count is in progress produce differences that are artefacts of timing rather than reality.
  • Batch by plant or purchase order group. Homogeneous failure modes, and a batch you can describe in one sentence.
  • Coordinate with sales order runs. A large receipt changes availability, and a large order run consumes it. Running both in the same hour makes both harder to reason about.
  • Mind lock contention on materials. High-volume materials receipted and issued simultaneously produce lock errors that resolve on a retry.

From a one-off catch-up to a standing receipt file

  • Give the template to the warehouse or 3PL. If receipt files arrive with PO number, PO item, quantity, unit and batch already correct, posting is a formality.
  • Fix the movement type per template. One template per movement type is clearer than one template with a movement type column people can mistype.
  • Include the delivery note reference. It is the field that links back to the physical paperwork and costs nothing to carry.
  • Encode the tolerance policy. What happens when a delivery exceeds the order, decided once rather than per run.
  • Name an owner. Storage locations, batch management settings and tolerances all change.

Common mistakes and how to avoid them

  • Forgetting the MM period is separate from the FI period. The single most common cause of a stopped receipt run, and a two-minute check in MMRV.
  • Using 501 when a purchase order exists. Breaks three-way matching permanently and leaves GR/IR unclearable.
  • Omitting the PO item number. The receipt cannot find its line, and deriving the item afterwards is slower than carrying it.
  • Confusing unit of entry with order unit. A valid number in the wrong unit passes every check.
  • Raising a tolerance to clear a run. Removes the control that exists to catch over-shipping.
  • Ignoring stock type. Material in quality inspection is not available, and a deficit error on visible stock is usually this.
  • Assuming a wrong receipt can be deleted. It cannot. Only reversed, and both documents stay.
  • Skipping the GR/IR reconciliation. Wrong references produce balances that hide until quarter end.

After the movements are posted

Because nothing here can be deleted, the checks after a run matter more than for any other object in this cluster.

Reconcile GR/IR the same day. Compare the run against the purchase orders it touched. A receipt against the wrong PO item leaves a balance that will not clear, and finding it the same day is a correction; finding it at quarter end is an investigation.

Confirm the stock position looks right. Total quantity received should match the delivery paperwork. A quantity in the wrong unit passes every validation and produces a stock figure that is wrong by a multiple.

Check what went into quality inspection. Where inspection is configured, some or all of the received stock may not be available. Anyone waiting on that stock to confirm a sales order needs to know.

Tell invoice verification. The receipts you just posted are what supplier invoices will match against. A large receipting run usually precedes a large invoice run, and the MIRO side is easier when it is expected.

Goods movements in S/4HANA

Inventory management is one of the more heavily simplified areas in S/4HANA, and two changes matter for mass posting.

The aggregate tables are gone. MARD, MARC stock fields and the other aggregation tables were replaced by MATDOC, with stock quantities derived on the fly rather than stored. For a mass load this is invisible, because the interface is unchanged, and it is another reason to post through the published interface rather than anything that reads or writes tables directly. Code that touched the old aggregate tables does not work; an interface-based load does.

Performance improved for high-volume posting. The single-document-table design removes the lock contention that used to make parallel goods movements on the same material slow. Large receipting runs behave better on S/4HANA than they did on ECC, which is one of the few cases where a conversion makes a mass upload job easier rather than harder.

BAPI_GOODSMVT_CREATE continues to work across both releases, which means a mapping built on ECC carries forward. A screen recording against the MIGO screens does not.

Physical inventory differences

A stock count produces a list of differences, and posting those differences is a mass goods movement job with one important distinction: the movements are corrections to reality rather than records of an event.

Counts are handled through their own documents rather than through plain movements, and the difference posting happens when the count is cleared. Where a count list arrives as a spreadsheet, the work is entering counted quantities against count items rather than posting free movements against materials.

Two traps recur:

Do not post plain movements to fix a count. Movements 701 and 702 exist for inventory differences and route the value correctly to an inventory difference account that finance monitors. Using a generic issue or receipt to adjust stock puts the value somewhere nobody is watching and defeats the reason the count was done.

Freeze the stock during counting. Movements posted while a count is open produce differences that reflect timing rather than physical reality, and reconciling those afterwards is considerably harder than blocking the material for the duration.

The value of the differences is usually the number finance cares about most, so reconciling total difference value before and after the posting run is worth doing as a matter of routine.

The complete MIGO mass posting reference

The reference sheet below collects everything above into one image you can share before a receipting run.

SAP mass goods receipt reference infographic for MIGO covering the movements you will post, the fields to map, checks before posting, the errors you will meet, and how the run works from delivery list to material document.
Infographic The complete MIGO reference: movements, fields, checks, errors, and the run itself.

Go deeper

SAP MM mass upload

The hub for procurement at volume: orders, requisitions, goods movements and invoices.

SAP mass upload

The pillar guide covering methods, validation, error handling and governance across every transaction.

SAP master data mass upload

The materials these movements reference have to be extended to the plant first.

SAP FICO mass posting

The accounting side, where GR/IR clearing and inventory postings land.

Frequently asked questions

What is SAP mass goods receipt?
SAP mass goods receipt is the practice of posting many goods movements in one controlled run from a structured file, instead of stepping through MIGO one delivery at a time. The movements are prepared in Excel, referenced to their purchase order items, validated against live stock and period status, and posted through SAP's standard goods movement interface with the material document number written back per row.
How do I mass post goods receipts in SAP from Excel?
Build a file with one movement line per row, each carrying its movement type and purchase order item, then map quantity, unit, storage location, batch and posting date. Validate that both the MM and FI periods are open and that quantities fall inside the delivery tolerance, then post through BAPI_GOODSMVT_CREATE. The eight stages above set out the full sequence.
Why does my MIGO mass upload fail with error M7 053?
M7 053 means the posting date is outside the open materials management period. SAP maintains the MM period separately from the FI period, and a goods receipt needs both open. The usual case is a file prepared early in a new month for deliveries dated in the previous one: finance may still have the old period open for accruals while materials management has rolled forward. Check MMRV before building a backdated file.
Can I delete or undo a goods receipt posted in bulk?
No. A material document cannot be deleted. A wrong receipt is corrected by posting the reversal movement, so a 101 is corrected by a 102, which creates a second material document and a second accounting document. Both remain visible permanently. This is why getting the first run right matters more here than for objects where a record can simply be changed.
What is the difference between movement type 101 and 501?
101 is a goods receipt against a purchase order: it references the PO item, takes the price from the order, and credits GR/IR clearing so invoice verification can later match against it. 501 is a goods receipt without a purchase order and needs an offsetting account. Using 501 where a purchase order exists breaks three-way matching permanently: the PO stays open, GR/IR never clears for that line, and the supplier invoice arrives with nothing to match.
What does error M7 022, deficit of unrestricted stock, mean?
A goods issue or transfer asked for more than is available in that plant, storage location and stock type. The subtlety is stock type: material sitting in quality inspection or blocked stock is not unrestricted, cannot be issued, and will not appear as available even though a stock overview shows plenty. Check the stock type column before concluding the quantity is wrong.
What happens if a delivery exceeds the ordered quantity?
Purchase order items carry over-delivery tolerances, and a receipt beyond the tolerance is rejected with error M7 093. The correct responses are to amend the purchase order if the extra quantity is genuinely accepted, or to receipt only the ordered quantity and handle the excess separately. Raising the tolerance to clear a run removes the control that exists to catch suppliers over-shipping.
Does a goods receipt create an accounting document?
Where the movement is value-relevant, yes. A standard goods receipt against a purchase order debits the stock account and credits GR/IR clearing at the purchase order price, at the same instant the stock quantity changes. Transfer postings between storage locations move stock without changing its value, so they create no accounting document, which occasionally surprises people expecting a trail in finance.
Why should I reconcile GR/IR after a mass receipt run?
Because a wrong receipt usually does not produce a visible error. It produces a GR/IR clearing balance that will not clear, and those balances accumulate silently until someone runs an ageing report at quarter end. Comparing the run against the purchase orders it touched is the check that catches wrong references, and nobody else in the process will do it.
Do batch managed materials need a batch number in the file?
Yes, unless batch determination is configured to assign one. Where a material is batch managed and no batch is supplied, the posting fails with M7 018. On a file covering both batch-managed and unmanaged materials the batch column is populated on some rows and empty on others, which is correct even though it looks inconsistent to a reviewer.
Start with a real file

Run your next sap mass goods receipt from Excel

Map your columns once, validate every row against live SAP, and post through standard logic. Each row comes back with the document number it created.

Start free trial
  • 14-day free trial
  • Works with ECC and S/4HANA
  • Your data stays in your systems