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:
| Column | Notes |
|---|---|
| Order | Identifies 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
#1001won'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 outcome | Meaning |
|---|---|
| Eligible | The order exists and has an outstanding balance — it will be marked as paid. |
| Already paid | The order is already fully paid — skipped (safe to re-run). |
| Not found | No order matches that name/id — failed (fix the value). |
| No outstanding balance | Nothing 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.