Importing Bulk Order Payments

The Bulk Order Payments import marks a list of orders as paid in Shopify, from a CSV/Excel file or a Google Sheet. It's the bulk version of clicking Mark as paid on an order in the Shopify admin — the way you record that an order's balance was settled outside Shopify's checkout.

For the wizard itself — uploading, mapping, dry runs — see Importing into EcomSolo.

What it does (and doesn't)

  • No money moves. This does not charge a card, capture an authorization, or create a payout. It only records that payment was taken elsewhere (bank transfer, cash, cheque, an external POS, a prior system).
  • Not a transaction-row import. You don't supply amounts or gateways — Shopify marks the order's outstanding balance as paid in one step.
  • Capture and Refunds are separate actions/imports. This is only "mark as paid".

Who it's for

Stores that collect payment outside Shopify and need Shopify to reflect it:

  • Wholesale / B2B invoices paid by bank transfer.
  • Cash on delivery (COD) orders now collected.
  • Manual / phone / in-person orders entered as unpaid.
  • Migrated orders that were already paid on a previous platform.

Columns

Just one, required:

ColumnNotes
OrderIdentifies the order to mark as paid — either its name including the # (e.g. #1001) or its numeric id (e.g. 1234567890).

Common export headers map automatically to Order: Name, Order Name, Order ID, Id, ID.

The sample values are placeholders. Order names are store-specific, so #1001 won't resolve in your store. Replace the rows with real unpaid order names or ids from your own store before running.

Eligibility — what happens per row

The dry run classifies every row before anything is written:

Row outcomeMeaning
EligibleThe order exists and has an outstanding balance — it will be marked as paid.
Already paidThe order is already fully paid — skipped (safe to re-run).
Not foundNo order matches that name/id — failed (fix the value).
No outstanding balanceNothing left to pay — skipped.

Already-paid and zero-balance orders are skipped rather than failed, so re-running the same file is safe — only still-unpaid orders are acted on.

Dry run

Every import previews first. The dry run shows how many orders are Eligible, skipped (already paid / no balance), and failed (not found), with no changes to Shopify. Review the counts, then run.

Results and freshness

Marking orders as paid takes effect in Shopify immediately. In EcomSolo, the import re-syncs the orders it touched as soon as it finishes, so you don't wait for the next scheduled sync — the Orders dashboard shows them as Paid, and their new Sale transactions appear on the Transactions dashboard. Anything a re-sync happens to miss heals on the next full Orders sync.

Sample file

A ready-to-run sample lives at features/importing/examples/order-payments-sample.csv:

Order
#1001
#1002
1234567890

Remember these are placeholders — swap in real unpaid order names/ids from your store before running.

FAQ

Does this charge the customer? No. It records that payment happened outside Shopify — no card is charged and no money moves.

What if an order is already paid? It's skipped, not failed, so re-runs are safe.

Can I import from another store? No — this import is file-upload only (CSV / Excel / Google Sheets), not store-to-store.