Skip to content
feedlab Request early access

The Shopify feed engine
that speaks every channel.

feedlab syncs your Shopify catalog, maps every field through a transformation rule engine, and publishes schema-perfect feeds for Google Shopping, Meta, OpenAI, and any other channel on a schedule. One pipeline, full control over every field.

app.feedlab — Google Shopping · field mappings Live
Field mappings 34 of 34 mapped
variants.0.price currency round price
metafields.custom.material strip_html material
discounts (auto-matched) promotion promotion_message
Live preview 24.90 EUR Organic Cotton, GOTS certified 15% off with code SUMMER15
Schedule */15 * * * * · regenerated 2 min ago 3,482 products · 9,204 rows

Ships to every channel that matters

Schema-perfect field mappings out of the box, ready to publish the moment you connect a store.

Need something else? Export a custom CSV, XML, or JSON feed from the same rule engine.

merchant-center · feed diagnostics

$ feed validate --channel=google

✗ item 1042 · missing required attribute [gtin]

✗ item 2210 · invalid price "24,90 EUR" (expected "24.90 EUR")

⚠ 384 items · description contains raw HTML

⚠ 96 items · promotion expired 6 days ago

✗ feed disapproved · last successful fetch 14 days ago

3 blocking · 2 warnings Last checked 2 min ago

Where product feeds usually break

Most merchants hit the same wall: the catalog is fine, the channel still rejects it.

Schema mismatch
Shopify's product model doesn't match Google's, Meta's, or TikTok's. Every channel wants different fields, casing, and formats.
Feed apps hit a ceiling
Off-the-shelf apps cover the happy path. Need a metafield, a locale, or a conditional label, and you're often out of options.
Scripts break silently
Hardcoded transforms fail quietly when a field is missing, a metafield changes shape, or a locale gets added.
No visibility
You usually learn a feed is broken when the ad account flags it, and by then it has already cost you spend.

Purpose-built for feed work

Field mapping, transformation rules, filters, and publishing in one pipeline.

description → strip_html → case: title → truncate: 30
Output <p>aurora ribbed tee in <b>organic cotton</b></p> aurora ribbed tee in organic cotton Aurora Ribbed Tee In Organic Cotton Aurora Ribbed Tee In Organic C…

Transformation rules you can chain

Pick from 18 rule types per field: strip HTML, recase, truncate, regex extract and replace, currency conversion, lookup tables, conditionals. Each step runs in order and previews against your real products.

inventory > 0 status = active
Aurora Ribbed Tee ✓
Ember Knit Hoodie ✓
Drift Canvas Cap excluded

Ship only what qualifies

Include or exclude products by any field, grouped into condition sets. Filters run before a single row is rendered.

shopify_field static combined custom_label metafield promotion

Six ways to fill a field

Direct fields with dot-path access, static values, combined templates, conditional labels, metafields with metaobject drill-down, and auto-matched promotions.

Aurora Ribbed Tee €39.00
Coast Pocket Tee €35.00
Ember Knit Hoodie €89.00

Promotions that write themselves

feedlab syncs your product- and collection-scoped discount codes, indexes them per product at generation time, and offers them as a mapping source with localized summaries. When a code expires it leaves the feed on the next run.

feedlab.app/feeds/8f3a1c9e-….csv
Generating 9,204 rows… ✓ Generated · just now

One URL, always fresh

Every feed lives at a stable, token-protected URL in CSV, XML, or JSON. A cron schedule regenerates it in the background, so you point Merchant Center at it once and never re-upload.

Aurora Ribbed Tee 3 variants
S €39.00
M €39.00
L €41.00
en de fr

Variant-level, multi-locale

Expand one product into a row per variant, with per-locale titles and market-aware storefront URLs.

Label products by what they earn

Connect Google Analytics 4 and every product's views, cart adds, purchases, and revenue become fields your labels and filters can read, right next to its margin over cost. Bid up the heroes, rescue the hidden gems, stop paying for zombies.

  • 20 GA4 metrics per product, over 7, 30, or 90 days
  • Margin from Shopify's cost per item, as % or amount
  • AND/OR clauses that weigh margin against traffic
  • GA4 item IDs matched to your catalog automatically
custom_label_0 · custom label GA4 synced · today
if Margin % over cost > 45 AND Purchased · 30d > 20
→ hero
if Margin % over cost > 45 AND Page views · 30d < 300
→ hidden-gem
if Purchased · 30d < 5 OR Margin % over cost < 10
→ zombie
else → core
Product custom_label_0
Aurora Ribbed Tee hero
Ember Knit Hoodie hidden-gem
Drift Canvas Cap zombie
Coast Pocket Tee core
Missing cost or stale analytics skips a rule, never mislabels

From OAuth to published feed

Three steps, no scripts to maintain.

1

Connect a store

One OAuth flow. feedlab pulls the entire catalog and registers webhooks, so a price edit or inventory change in Shopify lands in feedlab within seconds rather than at the next sync. A daily reconciliation pass catches anything a webhook missed, and the connection also discovers what your store actually has, so the mapping UI only offers fields that exist.

  • Full catalog sync over Shopify's bulk API
  • Webhook-driven updates, so every scheduled feed run reads current data
  • Locales, markets, metafield schemas, and discount codes discovered automatically
Connect Shopify store
aurora-supply.myshopify.com Connect

✓ read_products

✓ read_translations

✓ read_metaobjects

✓ read_discounts

✓ Synced 3,482 products · 4 locales · 12 metafield definitions
2

Map and transform

Every channel is a schema: required and optional fields, tracked per feed. A channel template prefills the obvious mappings, and you refine the rest with rules while watching the resolved output against real products.

  • Required-field tracking, so a feed can't ship half-mapped
  • 18 transformation rule types, chainable per field
  • Live rule-aware preview while you edit
Google Shopping · schema 1 required field unmapped
id variants.0.sku ✓
title title 2 rules ✓
gtin * unmapped
sale_price promotion ✓
3

Publish and forget

Each feed gets a stable URL whose slug doubles as an unguessable access token, so the channel needs no credentials. Set a cron schedule and feedlab regenerates in the background, streaming products lazily to keep large catalogs fast.

  • CSV, XML, or JSON from the same mapping
  • Cron-scheduled regeneration with export history
  • Memory-safe generation, built for 50k-SKU catalogs
CSV XML JSON
feedlab.app/feeds/8f3a1c9e-….csv
Schedule */15 * * * * next run in 9 min
#248 · just now 9,204 rows ✓
#247 · 15 min ago 9,204 rows ✓
#246 · 30 min ago 9,198 rows ✓

Deploy your next feed in minutes

Join the early access program and be among the first to map your channel-ready feed.