Snug Gallery / Guides

Instagram feed broken on Shopify? Own your customer photos

Why Instagram feed apps keep disconnecting from Shopify stores since the Basic Display API shutdown, and how to collect customer photos you own instead.

The support ticket always reads the same: "our Instagram feed on the homepage is blank". Sometimes it has been blank for a week before anyone noticed. Since Meta shut down the Instagram Basic Display API in December 2024, feed apps have been rebuilt on business APIs that expire tokens, demand a specific account type and change without much notice, and the section that used to be the easiest social proof on a Shopify store has become the one most likely to be showing nothing. This guide explains why that keeps happening, what it means for the rights to the photos you are displaying, and walks through a different approach: asking customers to hand you their photos directly, so the gallery is built from files in your own Shopify admin and nobody's API is in the loop.

Why the feed keeps going blank

Meta announced in September 2024 that the Instagram Basic Display API would stop working on 4 December 2024. That API was what most Shopify feed apps used: a personal account, a one-time login, and the app could read your recent posts. Its replacement is the Instagram API for professional accounts, and the requirements are different. The account has to be a Business or Creator account. Access runs through a long-lived token that expires after sixty days unless something refreshes it in time. The permissions the app asked for have to survive Meta's app review. Any one of those failing, silently, turns a feed into an empty section, and the store owner is the last to know because the failure happens on Meta's side and the app's side, not on Shopify's.

There is a second, quieter failure. A feed app is a third-party script that loads on every page where the section lives. When the app's own server slows down or the company behind it moves on, the section hangs or disappears, exactly like any other gallery that depends on a script you do not control. A live feed multiplies that risk by two: your gallery now depends on the app being up and on Meta being agreeable.

The rights question nobody likes

A feed of your own posts is fine. The interesting version, the one that sells, is customer photos: someone tagged you wearing the jacket, and you want that on the product page. Pulling that image from Instagram into your store is a republication, and the person who took the photo holds the copyright. Most stores handle this by replying "can we share this?" under the post and treating a thumbs-up emoji as consent. That is a record that lives in someone else's comment thread, on an account you could lose access to, for a photo you never actually received a copy of.

If the photo is going on a product page, the honest requirements are simple: you hold the file, you know who sent it, and you have a record that they agreed to you displaying it. A live feed gives you none of the three.

Collecting photos directly instead

Snug Gallery takes the opposite route. Instead of reading from a social account, it puts a "Share your photo" button under a gallery on your storefront. A customer picks a file from their phone, adds a name and a caption if they want, ticks a consent box, and submits. The upload goes to Shopify Files in your own store, and a submission lands in a moderation queue in the app. You approve it, and it becomes a normal gallery image, with all the layouts, the lightbox, and on the Unlimited plan the product pins that turn it into a shoppable lookbook.

The mechanics matter because they decide what can go wrong. The form posts through a Shopify app proxy, which means the request travels through your own store domain and Shopify signs it before the app sees it; there is no cross-site call to a third-party server from the shopper's browser. The file is checked by its actual bytes rather than the name the browser reports, so a renamed file does not slip through as an image: JPG, PNG, WebP and HEIC are accepted, up to 10 MB. A hidden honeypot field catches the simplest bots, and rate limits cap submissions at five per hour from one address and sixty per hour for the whole store. Submitter addresses are stored only as a salted hash for that rate limiting; the raw address is never written anywhere.

Nothing in this pipeline knows or cares whether Instagram is up.

Setting it up

  1. Open Snug Gallery in your Shopify admin and create the gallery that will hold customer photos, or open an existing one. A masonry or grid layout works well for mixed phone photos; save a portfolio or lookbook layout for curated sets.
  2. In the gallery editor, find Customer submissions and turn on Accept customer photos. Decide whether to auto-approve or to review each submission. Start with review; you can loosen it later once you have seen what arrives. Customer submissions are included on the Standard plan and above.
  3. Add the Snug Gallery block to a page in the theme editor, pick the gallery, and set the button text. "Share your photo" is the default; "Show us how you wear it" tends to get more clicks on apparel stores. Choose whether submitters' names are shown next to their photos.
  4. Submit a test photo from your own phone. Check that it appears under Customer photos in the app as pending, then approve it and confirm it shows in the gallery. Reject a second test to see the file removed from Shopify Files.
  5. Add a sentence to your privacy policy saying that customers can submit photos, what you store (the photo, the display name and caption they typed, and their consent), and that submissions are moderated before display. Shopify's privacy policy generator does not know about the form, so this is on you.
  6. Tell customers it exists. A line in the shipping confirmation email, a card in the parcel, or a note on the order status page bring far more submissions than a button alone.

Moderation is the feature, not the chore

Live feeds skip moderation because the content is already public. With direct submissions, the queue is where the value is. Approve creates a real gallery image and respects the image limit of your plan; reject deletes the file from Shopify Files and keeps only a record so the same submission is not reviewed twice; rejected records can be deleted outright when you want them gone. Each entry shows the display name and caption the customer typed, and the consent flag that was recorded when they submitted, which is the record you did not have with a comment-thread thumbs-up.

Because approved photos become ordinary gallery items, you can do to them what you do to any other image: edit the caption, set alt text, add tags for the filter bar, pin a product. The photo of a customer's dog on your dog bed, with the bed pinned, is a product page section that no feed integration ever produced.

What you give up

Volume, at first. A live feed shows thirty posts on day one; a submission form shows whatever customers send, and the early weeks are slow until you ask in the right places. Recency, too: the feed updates itself, the gallery updates when you approve. And a submission form does not reach the people who tagged you but never visited your site again; for those you still have to ask individually, and if they say yes you can upload the file they send you into the same gallery.

What you get back is a gallery that is yours. The images are in Shopify Files with the rest of your media, served from Shopify's CDN like everything else on the page, still there if you change gallery apps or if Meta changes its mind again. Compare that with the app-hosted images most feed apps cache on their own servers, which vanish with the app.

If you keep the feed anyway

Some stores want both, and that is reasonable. If the Instagram section stays, set a reminder for the token refresh, make sure the connected account is a professional account, and check the section renders on a phone every couple of weeks rather than trusting that it does. Put the customer-photo gallery on the pages where the sale happens, the product pages, and let the feed do its job on the homepage. If the feed goes blank on a Friday night, at least the part that was selling is unaffected.

Frequently asked questions

Why did my Instagram feed stop showing on my Shopify store?

Most often the access token expired or the connected account is no longer a professional account. Since Meta retired the Basic Display API in December 2024, feed apps depend on tokens that expire every sixty days and on permissions that must pass Meta's app review. Reconnecting the account in the app usually fixes it until the next time.

Does Snug Gallery import photos from Instagram?

No. Snug Gallery does not connect to Instagram or any social API. It lets customers submit photos directly through a form on your storefront, stores them in your Shopify Files, and lets you approve or reject each one before it appears.

Can I use a customer's Instagram photo on my Shopify product page?

Only with the photographer's permission, because they hold the copyright. A comment saying yes is weak evidence that can disappear with the post. Collecting the photo through a form that records consent at the moment of submission gives you the file and the record together.

How does Snug Gallery stop spam submissions?

Requests must come through Shopify's signed app proxy, a hidden honeypot field catches basic bots, files are checked by their bytes and capped at 10 MB, and submissions are rate limited to five per hour per address and sixty per hour per store. Everything still lands in a moderation queue unless you choose to auto-approve.

More guides