Work

/

About
Play
Blog
Home/Blog/Shopify
Shopify
•
Oct 1, 2026
•
5 min read

Shopify Products Missing Images: Hold, Fix, Then Publish

Missing product images workflow: hold arrivals, check variant photos, then publish
MS
Muhammad Saad

Shopify engineer. I build storefronts, two published Shopify apps, and the infrastructure behind a 70,000+ product store, and I write here about what that work teaches me.

Follow on LinkedInSee my workBook a call
Found this useful? Share it.

Keep reading

Running a 70,000-Product Shopify Store on Seven Suppliers: Stock, Pricing and Orders
Shopify
•
3 min read

Running a 70,000-Product Shopify Store on Seven Suppliers: Stock, Pricing and Orders

How a 70,000-product Shopify store syncs stock, prices and orders across seven suppliers without spreadsheets: dry runs, feed-health holds and safe repricing.

Oct 1, 2026
Shopify Collection Sorting for Large Catalogs: Rank by What Actually Sells
Shopify
•
4 min read

Shopify Collection Sorting for Large Catalogs: Rank by What Actually Sells

Rank Shopify collections on revenue, margin, stock and click-through instead of one sort order, and re-sort large catalogs hourly without API limits.

Oct 1, 2026
Shopify Search Is Losing You Sales: Typos, Zero Results, and What to Measure
Shopify
•
3 min read

Shopify Search Is Losing You Sales: Typos, Zero Results, and What to Measure

Where Shopify store search loses sales: misspellings, zero-result searches and slow results, how to find them in your data, and how to measure search revenue.

Oct 1, 2026
Back to the blog

© 2026 Muhammad Saad • Colophon

Connect with me on LinkedIn

Elsewhere

  • Github
  • Testimonials
  • CV
  • LinkedIn

Contact

  • Book a call
  • Email
On this page
  1. Why I kept incomplete arrivals out of the storefront
  2. Where should a product wait while its image is missing?
  3. What does an operator need to check?
  4. When is an uploaded image ready to publish?
  5. How do you retry without creating duplicate products?
  6. Where to start

Shopify products missing images need a clear route from incomplete supplier data to a reviewed listing. In BC Supply Ops, I built a holding queue where operators add images before publishing, with the work separated by supplier.

Quick answer

Keep new supplier arrivals with missing images in a review queue, or in Draft if you create them inside Shopify. Record the exact product and variant, add and check the image, then approve publication. Preserve the record through retries so an interrupted batch resumes without creating another product.

Why I kept incomplete arrivals out of the storefront

The BC Supply Ops case study documents a Shopify store with 70,000+ products and 7 suppliers. Some supplier rows arrived without usable imagery. I kept those arrivals in the portal so operators could finish them before they reached the store.

The recorded queue contained 1,354 arrivals waiting for images. That is a snapshot from the case study, not a live count. The useful design decision was making the missing work visible instead of silently discarding those rows.

Missing-image arrivals recorded in BC Supply Ops
SupplierArrivals waiting for images
Perfect Fragrance518
BeautyCommerce337
Symphonia259
1001Parfum200
VeryCosmetics40

An operator could open a supplier's queue, paste image URLs onto a card, save, and push. Only products with a saved image were published. The push associated images with the right variants and could resume without duplicating products.

I would use that same separation when designing a smaller operation: receiving a supplier row records an opportunity; approving the listing decides whether it is ready. Those should be separate actions.

Where should a product wait while its image is missing?

If your importer has its own staging area, keep the arrival there until review is complete. That is the approach documented in BC Supply Ops. You can retain supplier data and track unfinished work without creating a storefront listing first.

If your team works directly in Shopify, use Draft for an incomplete new product. Shopify distinguishes Draft from Active and Unlisted; an Unlisted product can still be purchased through its direct URL. Check the official product status and publishing guidance when choosing the hold.

I would avoid making image review depend on a product title or an operator remembering which import created it. Give each queued item its supplier reference, barcode, intended variant, image source, hold reason, and assigned reviewer. Treat these as fields in your work queue, not as required Shopify fields.

Existing live products need a separate decision. Before changing their availability, identify which channels should remain able to sell them and who owns that decision. The automatic hold described here is for incomplete new arrivals, not permission to withdraw an established catalog in bulk.

What does an operator need to check?

A nonempty image field should start review, not finish it. I would ask the reviewer to open the proposed image beside the supplier row and confirm the product identity. For beauty products, check the size, shade, concentration, and packaging wherever those distinguish the item being sold.

Keep ambiguous matches in the queue. A photograph that looks plausible is not enough evidence to attach it to a different variant. Ask the supplier for the missing reference instead of guessing from a similar title.

Shopify lets you assign an image to a variant from the product's images or add a new one. The assigned image appears when the customer selects that variant, as described in Shopify's variant image instructions. Include that selection in the review, rather than checking only the initial product photograph.

Here is the review sheet I would give an operator implementing this workflow:

Evidence required before releasing an image hold
CheckRecord before approvalKeep the hold when
Product identitySupplier reference and barcode matchThe image could belong to another item
Variant identityThe pictured option matches the intended variantSize, shade, or packaging is ambiguous
Image sourceSupplier-approved source and saved image referenceThe source cannot be verified
Visual inspectionReviewer has opened the actual imageThe file is broken, blank, or a placeholder
Publication scopeIntended listing and channels are recordedThe target product is unclear

This extends the reviewable supplier import plan into an explicit image decision. It gives the next operator a reason for the hold and a clear way to resolve it.

When is an uploaded image ready to publish?

For an API-driven importer, uploading and displaying media are separate states. Shopify's MediaStatus documentation distinguishes UPLOADED, PROCESSING, READY, and FAILED; READY means the media can be displayed.

My recommended release gate is therefore stricter than “the upload request returned.” Wait for the intended image to become ready, confirm its association, and then allow the publication step. A processing image should stay pending; a failed image should return to review with its error recorded.

The case study documents saved-image gating, variant association, and resumable publishing. It does not specify its media-status polling implementation. The status check here is a recommendation grounded in Shopify's API behavior, not a claim about additional code in that project.

How do you retry without creating duplicate products?

BC Supply Ops first matches supplier barcodes against the live store in a read-only sync. Publishing is capped per run, idempotent, and resumable. Already-published items and duplicate barcodes are skipped instead of recreated.

For a new implementation, I would keep the product match and the image-review record together throughout the job. Record the Shopify identifiers returned by successful steps. After an interruption, reconcile the current listing before deciding what still needs to run.

That means an image failure should leave an actionable image task, not make the arrival look like an entirely new product. Likewise, a missing response after publication should trigger a check of the existing listing before another creation attempt.

Review a small batch through the whole path before increasing throughput. Include an arrival that stays on hold and an interrupted item that resumes. Count unresolved holds separately from completed publications so the queue cannot appear finished merely because a batch stopped.

Where to start

Choose one supplier and list its incomplete new arrivals. Assign each hold a reason and an owner, then follow a reviewed item through image assignment and publication. Inspect the resulting variant on the storefront before treating that path as ready for routine use.

Keep image readiness alongside the other product-data checks for large Shopify catalogs. If imports keep producing unfinished listings, book a call and bring a sample feed plus the current review steps. That is enough to map where the hold belongs and what must happen before release.