A customer photo contest is the oldest trick in holiday marketing and it still works, because people who have just received a parcel want to show it off and a prize gives them a reason to send the photo to you instead of only to their friends. The part that usually goes wrong is not the idea but the plumbing: entries arrive by email, DM and a hashtag nobody can search, the shortlist lives in someone's downloads folder, and in January there is nothing on the store to show for it. This guide sets the contest up so every entry is submitted through a form on your own store, reviewed in one queue, and published to a gallery that keeps earning its place after the prize has gone out. It uses the customer photo submission feature in Snug Gallery, which is on the Standard and Unlimited plans.
What you are building
One page on your store, say /pages/holiday-photos, with a short explanation of the contest, a link to the rules, and a gallery block underneath. The block shows a Share your photo button; a shopper taps it, picks a photo, adds a name and a caption, ticks the consent box and sends. The photo goes into a queue in the app, not onto the page. You approve the ones that fit, and they appear in the gallery within a minute. The gallery is both the entry list and the public shortlist, which saves you building either.
Every entry carries the name the shopper typed, their caption, and a consent record, so when you later want to reuse a photo in an email or on a product page you know what you were given permission for. The form walkthrough describes each field in detail if you want to see exactly what a shopper is agreeing to.
Before the gallery: rules, prize and dates
The app handles the photos. It does not handle the law, and a contest with a prize is a promotion that has rules in every country you sell to. Decide who can enter, how a winner is chosen (judged or random; judged is simpler to defend), when entries close, when the winner is announced, and what the prize is worth. Put all of that on a plain Shopify page and link to it from the contest page and from the consent text. If you sell into several countries, pick the rules that satisfy the strictest one or restrict entry; a lawyer for an hour is cheaper than an argument in January.
Pick the dates around delivery, not around the calendar. A photo contest about gifts received cannot start until parcels arrive, so an entry window that opens the week after your last guaranteed shipping date and closes on 2 or 3 January catches both the early presents and the ones opened on the day. Announce the winner in the first full week of January, when inboxes are quiet.
Set up the contest gallery and page
- In Snug Gallery, create a new gallery and name it for the year, for example Holiday photos 2026. Masonry suits a contest because shoppers send portrait and landscape photos in equal measure and Masonry keeps each one whole; Grid crops to a shape. The layout guide compares them.
- Create the page in Shopify (Online Store, Pages) with the contest explanation and a link to the rules page. Keep the URL seasonal but not dated, /pages/holiday-photos, so next year's contest can reuse it and any links you earn this year keep working.
- In the theme editor, open that page's template, add the Gallery block and point it at the new gallery. Turn on customer submissions in the block settings. Change the button text from the default Share your photo to something that says what it is, such as Enter the photo contest, and leave Show submitter names on so entrants see their name under their photo, which is half the reason they share the page.
- Submit a test entry yourself from a phone. Check the photo arrives in the Customer photos page in the app as pending, approve it, and confirm it shows on the page. Then reject and remove it so the gallery starts empty on launch day.
- Add the contest page to the main menu or the announcement bar for the duration, and to the order confirmation and shipping notification emails. The shipping email is the one that matters: it arrives when the parcel does.
Limits worth knowing before launch
A submitted photo can be a JPG, PNG, WebP or HEIC up to 10 MB. iPhones send HEIC by default and that is accepted, so entrants do not need to convert anything. Names are capped at 80 characters and captions at 500, which is enough for a sentence about the gift and who it was for. Videos are not accepted through the form; if you want a video contest, run it on a social network and link the gallery to the winners afterwards.
Submissions are rate limited to five per hour from one network address and sixty per hour for the whole store. Five per address is per public IP, so a family entering from the same home Wi-Fi shares the five, and an office does too. Sixty per store per hour is more than most contests see in a day, but if you are a large store launching with a big email send, stagger the send or expect a few people to be told to try again later. Approved photos also count towards the gallery's 1,000 image limit, which matters only if you run the contest in a gallery you already use for something else, another reason to give it its own.
Reviewing entries: a daily routine
Entries wait as pending until someone looks at them. Leave auto-approve off for a contest; a prize attracts photos that have nothing to do with your products, and the odd one that is actively unpleasant, and you do not want either on your store for even an hour. Set a daily slot, ten minutes after the first coffee, and work through the pending tab: approve what fits, reject what does not. Rejecting removes the file, approving publishes it, and nothing happens to the photo until you choose. The moderation queue guide covers each button and what it deletes.
Decide the rejection bar before entries arrive and write it down: no photo without the product in it, no photos of other people's children unless the entrant is clearly the parent, nothing with a competitor's logo. A written bar means two people can moderate the same queue and reach the same answer, and it gives you a sentence to send when an entrant asks why their photo is not up.
Captions are visible on the gallery, so read them. A caption that names a child, gives an address or includes a phone number should be rejected, and you can reply to the entrant asking them to resubmit with a shorter one. The first line of the caption also becomes the image's alt text, so an entry with a decent caption is doing accessibility work for you.
Picking and announcing a winner
The gallery is your shortlist. By closing day it holds every approved entry with the name the entrant gave, in newest-first order if you left the sort alone. Judge from the page, not from the queue, because the page is what the public saw. Note the winner's display name and submission time; you will match it to the order or the email they used when you contact them.
Snug Gallery does not run public voting, and we would not recommend it for a contest anyway: voting contests are won by whoever has the biggest family group chat, and they invite exactly the bot traffic the rate limit exists to stop. Judge it yourself, or with a small panel, against the criteria in the rules.
Once the winner has agreed, edit the winning image's caption to add a line such as Winner, December 2026, and drag it to the front if the gallery is on Manual sort. Then publish a short post or email with the winner and a handful of runners-up linking to the contest page. Entrants who did not win still get to see their photo on a real store, and that link is the one they share.
January: keep the gallery, retire the form
Do not delete anything. A gallery of forty real customers with your products in their living rooms is the best social proof you will produce all year, and it was free. Turn off customer submissions on the block so the entry button disappears, change the page heading from the contest to something like Your photos, and keep the page in the footer menu. The same advice applies to the gift guide page: the season ends, the URL should not.
Keep the consent records too. If an entrant later asks what you hold about them or wants their photo removed, the submission record is what you look up; the data request guide walks through both. Next November, create Holiday photos 2027, point the same block at it, turn the button back on, and the whole thing takes an afternoon instead of a week.
Frequently asked questions
Do I need a separate contest app to run a photo contest on Shopify?
Not for the photo side. Snug Gallery's customer submission form collects the photo, name, caption and consent on your own store and holds entries for moderation before they appear in a gallery. You still need to write the contest rules yourself and judge the winner; the app does not run voting or draw a random winner.
Can shoppers enter the contest from an iPhone?
Yes. The form accepts JPG, PNG, WebP and HEIC files up to 10 MB, and HEIC is what an iPhone produces by default, so entrants do not need to change any settings. The form is a normal part of the page and works in the phone's browser.
How many entries can a contest receive?
The form allows five submissions per hour from one network address and sixty per hour per store, and a gallery holds up to 1,000 images. For most stores that is far more than a December contest produces. Very large stores should expect a few retry messages in the hour after a big email send.
Should I turn on auto-approve during the contest?
No. A prize attracts off-topic and occasionally offensive photos, and auto-approve would publish them to your store immediately. Leave entries pending and review them once a day; approving takes one click per batch and the photos appear on the page within about a minute.
More guides
- Before and after photo gallery on a Shopify page
- Snug Gallery on Hydrogen or a headless Shopify store
- Galleries on a multilingual Shopify store: what translates
- Customer photos and GDPR: what a gallery app stores
- Video thumbnails in a Shopify gallery: pick the poster
- How to add a photo gallery to a Shopify store (no code)
- How to make a shoppable lookbook on Shopify
- Shopify gallery not loading? Why gallery apps vanish
- Cozy Image Gallery alternative: a 20-minute migration
- Who owns your gallery images? Shopify Files vs app-hosted
- Shopify app still charging after uninstall? What to do
- How to tell if a Shopify app is abandoned: a checklist
- Masonry, grid, carousel or collage: Shopify gallery layouts
- Accessible Shopify image gallery: an EAA-era checklist
- Instagram feed broken on Shopify? Own your customer photos
- Shopify video gallery: upload, YouTube or Vimeo?
- Protecting gallery images on Shopify: right-click blocking
- Does a photo gallery slow down your Shopify store?
- Shopify gallery images in Google Images: an SEO guide
- Shopify Canvas and Snug Gallery: what works today
- Build a Shopify gift guide page that is not a collection
- Replaced an image in Shopify but the old one still shows?
- Build a portfolio page on Shopify that still sells
- Link to a pre-filtered Shopify gallery from menus and emails
- Lifestyle photos on a product page: media or gallery block?
- Clickable gallery images on Shopify: link to collections
- Shopify Rollouts: launch a sale theme, discount and gallery
- Add a photo gallery to a Shopify blog post
- Gallery order on Shopify: manual, newest, A to Z or random
- Shop-the-look pins: sold out, unpublished and variant rules
- Pinterest save button on Shopify gallery images
- Custom CSS for a Shopify gallery block, safely scoped
- Gallery captions on Shopify: title, text, alt and placement
- Moderating customer photos: approve, reject, delete
- Gallery slider autoplay in Shopify: interval, pauses, motion
- Import images into a Shopify gallery from a URL
- Carousel or slider: picking the right Shopify gallery layout
- The customer photo form: what shoppers see, field by field
- Snug Gallery plans: what the limits mean in practice
- Gallery upload failed: every error message explained
- The gallery lightbox: keys, swipe, captions and video
- Reuse product photos and Shopify Files in a gallery
- Removing a gallery image: what is deleted, what stays
- Gallery tile says File missing: cause and fix
- Snug Gallery block settings: every option explained
- Switching Shopify themes: what happens to your galleries
- Transparent background images in a Shopify gallery
- iPhone HEIC photos in a Shopify gallery
- Gallery tags and the filter bar: limits, naming, order
- iPhone videos (MOV, HEVC) in a Shopify gallery
- Snug Gallery on an Arabic or Hebrew Shopify store
- Add a gallery to a Shopify collection, cart, 404 or blog
- Theme app add-ons: a Shopify gallery bundled with the theme
- Press logos and an As seen in logo wall on Shopify
- Reviewing Snug Gallery in Shopify's Settings > Apps
- Shopify gallery image size and aspect ratio: a guide
- An About page photo gallery for your Shopify store
- A menu photo gallery for a cafe or bakery Shopify store
- Gallery photos and AI training: robots.txt on Shopify