Getting started

Setup is four steps: install the app, let it mirror your catalogue, create a feed for the channel you want, then paste the feed URL into that channel. Nothing needs to be added to your theme, because a feed is a file the channel fetches rather than something rendered on your storefront.

1. Install and let the catalogue sync

On first install the app copies your catalogue using a Shopify bulk operation. On a large store this takes a few minutes and runs in the background. The catalogue is mirrored rather than read live for a practical reason: channels re-fetch feeds on their own schedule, and a large store cannot be paginated out of the Admin API on demand every time.

2. Create your first feed

Choose the destination — Google, Meta or TikTok — and the app applies that channel's specification: its attributes, its validation rules, and sensible default sources for each field. Most stores can generate a working feed at this point without changing anything.

3. Preview before you ship

Preview renders the feed exactly as it will be produced, without recording a run, rewriting the issue list or touching the schedule. It is safe to use as often as you like while you are still adjusting mapping.

Check the first ten rows. Most mapping mistakes — a description pulling from the wrong metafield, a title with the vendor name doubled — are obvious in the first few products and invisible in a summary count.

4. Submit the feed URL to the channel

Copy the feed URL from the app and add it in the destination as a scheduled fetch. In Google Merchant Center that is a fetch feed; Meta and TikTok have the equivalent. The channel then re-fetches on its own schedule and you never touch the URL again.

Channels & formats

Each destination is described by its own specification listing that channel's attributes, validation rules and default sources. The feed engine itself knows nothing about any specific channel, which is why adding a new destination does not disturb the existing ones.

ChannelTypical formatNotes
Google ShoppingRSS XMLThe full Merchant Center attribute set, plus approval status sync if you connect your Google account.
MetaCSV / TSV / RSS XMLCatalogue feeds for the Facebook and Instagram shopping surfaces, ingested by Commerce Manager.
TikTokCSV / TSV / RSS XMLProduct catalogue feeds for TikTok Shop and TikTok ads.

All three read from the same mirrored catalogue, so price, stock and availability agree across channels rather than drifting apart between separate exports.

Building a feed

A feed is built in four layers, applied in order: mapping decides where each attribute's value comes from, transforms reshape that value, rules decide which products are included and what changes for them, and overrides set a final value for a specific product.

Mapping — where each value comes from

Every channel attribute has a default source, and you can point it somewhere else: another Shopify field, a metafield, or a fixed value. Metafield mapping is the usual answer when your catalogue holds channel-relevant data — material, age group, a curated title — that Shopify has no standard field for.

Transforms — reshaping the value

A transform changes a value on its way into the feed without changing your Shopify data: trimming a title to a channel's length limit, stripping HTML out of a description, prefixing a brand name, or forcing consistent casing. The product in Shopify is untouched.

Rules & filters — deciding what goes in

Rules include, exclude or rewrite products by condition — by collection, tag, price band, stock level or any mapped attribute. A common pattern is excluding a clearance collection from a brand-led channel while keeping it in a performance one.

An empty collection list means "no filter", never "match nothing". A half-configured feed cannot silently empty itself, which is deliberate — the failure mode of the opposite choice is a feed that quietly stops shipping products.

Overrides — the final word on one product

An override sets a specific attribute for a specific product, beating everything above it. Overrides come in two scopes: shop-wide, and feed-specific. Feed-specific overrides beat shop-wide ones, and that ordering holds regardless of the order the database returns them in.

Validation & issues

Every row is validated against the channel's specification before the feed ships. Problems are recorded as issues you can see in the app, so a rejection is something you read in your own dashboard rather than an email from Google three days later.

One bad product does not fail the run

A product that fails validation is skipped and the reason recorded. The rest of the feed ships. This matters more than it sounds: the alternative — failing the whole run — means a single missing GTIN can take an entire catalogue offline without anyone noticing until sales drop.

Merchant Center approval sync

If you connect your Google account, approval status and disapproval reasons are pulled back into the app. Connecting is optional and changes nothing about how the feed is delivered — a feed works perfectly well by pasting its URL into Merchant Center. Approval sync requires Professional or above.

Scheduling & syncing

Feeds regenerate on a schedule you choose: hourly, daily, weekly or on demand. Between scheduled runs the mirrored catalogue is kept current by Shopify webhooks, so a product edit is already reflected when the next run happens.

CadenceAvailable onGood for
ManualEvery planTesting mapping changes before committing to a schedule.
WeeklyEvery planStable catalogues where prices rarely move.
DailyEvery planMost stores.
HourlyProfessional, AdvancedFast-moving stock, flash sales, frequent repricing.

Regenerating more often than the channel fetches gains nothing — Merchant Center pulls on its own timetable. Match the cadence to how fast your prices and stock actually change.

Plans & limits

Plans are sized by how many feeds you run simultaneously and how many variants are in your catalogue — not by revenue. Starter is free with 1 feed and 50 variants; Standard, Professional and Advanced raise both.

PlanFeedsVariantsFastest sync
Starter — free150Daily
Standard — $9.90/mo2500Daily
Professional — $29.90/mo55,000Hourly
Advanced — $49.90/mo81,000,000Hourly

A "variant" is a single purchasable option, not a product. A product with three sizes in two colours counts as six variants — worth checking before assuming a catalogue fits a plan.

Glossary — product feed terms explained

Plain-English definitions of the terms used across product feeds, Merchant Center and the wider shopping-ads ecosystem.

Product feed
A structured file listing your products and their attributes in the format a shopping channel expects. The channel fetches it on its own schedule and builds listings from it.
GTIN
Global Trade Item Number — the barcode identifier for a product, such as a UPC, EAN or ISBN. Google uses it to match your listing to the same product sold elsewhere.
MPN
Manufacturer Part Number. Used together with brand to identify a product that has no GTIN.
Merchant Center
Google's dashboard for product data. It fetches your feed, validates it, and decides which products are approved to appear in Shopping results.
Primary feed
The main feed defining your product set. It can add, update and remove products.
Supplementary feed
A secondary feed that updates specific columns on an existing primary feed rather than replacing it — used to override titles or add custom labels without rebuilding the primary.
sale_price
The discounted amount, sent alongside price which carries the regular compare-at amount. Sending the discounted figure as price loses the sale annotation in ads.
Availability
Whether a product can be bought — in stock, out of stock or on backorder. A variant with zero inventory and a "continue selling" policy is in stock, because it genuinely can still be purchased.
Variant deep link
A product URL pointing at a specific variant, so the price on the landing page matches the price in the feed. Google checks this, and a mismatch is a common disapproval cause.
Custom label
One of five free-form fields used to group products for bidding and reporting — season, margin band, bestseller status — with no meaning to Google beyond what you assign.

Troubleshooting

My feed has fewer products than my catalogue

Check four things in order: whether a collection filter or rule is excluding them, whether the products are published to the Online Store sales channel, whether they failed validation, and whether you are over your plan's variant limit. The run summary reports how many rows were skipped and why — start there rather than counting by hand.

Merchant Center disapproved my products

The usual causes are a price or availability that does not match the landing page, a missing GTIN on a product that should have one, and images carrying promotional text or watermarks. With your Google account connected, the exact reason per product appears in the app.

The price in my ad does not match my store

Almost always a variant issue: the feed is sending a product-level price while the landing page shows a variant price. Feeds link to the specific variant precisely to keep these in agreement — if you have overridden the link attribute, check that it still carries the variant.

My sale price is not showing as a discount

Check which attribute the discounted figure is in. It belongs in sale_price, with the regular compare-at amount in price. If the discounted number is in price, the ad shows the right amount but loses the strike-through that makes it read as a deal.

My feed URL returns "not found"

The feed URL is guarded by a token, and every failure mode — wrong token, disabled feed, deleted feed — returns the same opaque 404 so that tokens cannot be discovered by probing. Re-copy the URL from the app and confirm the feed is still enabled.

Changes I made are not in the feed yet

Feeds regenerate on their schedule. Run it manually to pick up a change immediately, and remember the channel then has to re-fetch on its schedule before the change appears in ads — two separate clocks.

Common questions

What is a product feed?

A product feed is a structured file listing your products and their attributes — title, description, price, availability, image and identifiers — in the format a shopping channel expects. Google Shopping, Meta and TikTok each fetch this file on their own schedule and use it to build the listings shoppers see.

What is a GTIN and do I need one?

A GTIN is the globally unique barcode number for a product — a UPC, EAN or ISBN. Google uses it to match your listing to the same product sold elsewhere. It is required for products that have one from the manufacturer, and genuinely optional for handmade, custom or own-brand goods, which should instead be marked as having no identifier.

Why was my product disapproved in Merchant Center?

The most common causes are a price or availability that does not match the landing page, a missing GTIN on a product that should have one, and an image that breaks Google's rules by carrying promotional text or watermarks. If you have connected your Google account, the exact disapproval reason is pulled back into the app so you do not have to cross-reference two dashboards.

Why does my feed show fewer products than my catalogue?

Products can be excluded by a collection filter, by a rule you have configured, by not being published to the Online Store sales channel, or by failing validation. The run summary lists how many rows were skipped and why, so start there rather than counting products by hand.

How do I submit my feed to Google Merchant Center?

Copy the feed URL from the app, then in Merchant Center add a scheduled fetch feed and paste the URL. Merchant Center fetches it on its own schedule from then on. Connecting your Google account is optional and does not change how the feed is delivered.

Is my feed URL safe to share?

The URL contains an unguessable token and has to be reachable without signing in, because that is how Merchant Center fetches it. Treat it as a secret you paste into a channel rather than a link you publish. Every failure mode returns the same opaque 404, so the token cannot be found by guessing.

What is a supplementary feed?

A secondary feed that updates specific columns on an existing primary feed rather than replacing it — useful for overriding titles or custom labels without rebuilding everything. Snaply omits any column you have not ticked instead of sending it blank, because a blank column would overwrite good data on the primary feed.

How do sale prices work in a feed?

The regular compare-at amount belongs in the price attribute and the discounted amount in sale_price. Sending the discounted figure as price loses the sale annotation — the strike-through that makes a discount visible in ads — even though the number shown is technically correct.

Contact support

To get a fast, useful answer first time, include:

  • Your Shopify store URL
  • The feed name and its destination channel
  • An example product that is behaving incorrectly
  • The disapproval reason from Merchant Center, if there is one

Still stuck?

We answer every message, usually the same working day.