Skip to content

Automation · Content and publishing

Publish a Shopify product listing in Webflow with human approval

Move a Shopify product into Webflow CMS: validate fields, prevent duplicates, create a draft, and wait for approval before publishing it.

How do I publish a Shopify product in Webflow without duplicating it or copying data I cannot keep current?

Your Met opens one exact Shopify product and continues only when it is active and has a public online store URL. It then discovers the Webflow site and CMS collection, reads the real fields, and proposes a narrow mapping: technical identifier, name, slug, link, image, and only when field types and the decimal conversion match, price or price range with currency. It searches the exact slug before writing. When the slug is free, it always creates a draft and reads it back to prove that Webflow stored every field and loaded the image. It stops there. Publishing requires an explicit yes in a new message, another unchanged read, and the technical confirm flag set to true. The result is a CMS listing that links to Shopify, not a Webflow Ecommerce product, Buy Button, or inventory sync.

What starts it

When someone asks for it

The team starts the task in chat with the Shopify product, destination site, and collection. The first run ends after showing the draft. Publishing resumes only after a person reviews that exact result and sends an explicit yes in a new message.

A manual task: someone on the team runs it with a button, or asks the Met for it in chat.

Who runs it

Met for Shopify catalog and Webflow publishing

Social team

It has no seeded proper name. Its job is to translate one verified listing between two schemas, leave evidence of what Webflow accepted, and separate the draft from the decision to take it live. Shopify remains the commercial source of truth. Webflow receives a content representation.

What you need connected

6 steps · 11 tools

The procedure, step by step

Each step shows the tool that runs. They belong to the real connector: if one of them stopped existing, this page would not build.

  1. 1

    Resolve one product and prove it has a public destination

    Your Met searches with Shopify syntax. When it gets zero results, several matches, or an incomplete page that could still hide another match, it asks for the exact id. It then opens that id and keeps only values returned by the tool: technical id, title, handle, status, onlineStoreUrl, featuredImage with alt, and the normalized priceRange.min, priceRange.max, priceRange.minCurrency, and priceRange.maxCurrency shape. It continues only when status is ACTIVE and onlineStoreUrl is not null. priceRange.min and priceRange.max preserve the MoneyV2/Decimal amounts as strings; it keeps both strings and both currencies exact so they can be validated together before mapping. priceRange.currency remains only for compatibility and does not replace validation of minCurrency and maxCurrency. It does not copy descriptionHtml, variants, or stock because the Webflow listing is not a real-time commercial source.

  2. 2

    Discover the site, collection, and a mapping that actually exists

    When site_id is missing, your Met lists sites and asks a person to choose when several remain. It reads the chosen site, works only in its primary locale, and locates the CMS collection by displayName. It opens the schema and never invents field slugs. The collection needs name and slug, one PlainText field for the Shopify id, a Link for onlineStoreUrl, and an ImageRef when the image is mapped. name receives title and slug receives handle. Price is all or nothing: priceRange.min, priceRange.max, priceRange.minCurrency, and priceRange.maxCurrency must be present; both amounts must be strings, both currencies must be three-letter ISO strings, currencies must match each other and the approved currency, and minimum cannot exceed maximum. For each amount string it uses a local amount variable, runs Number(amount), and accepts the result only when typeof is number, Number.isFinite is true, its decimal coefficient is a safe integer, and exact conversion preserves the same decimal text. The protocol allows at most 12 integer digits, 6 decimal places, and values below 1,000,000,000,000. It rejects commas, exponents, negatives, NaN, Infinity, and precision loss. One price requires min=max and a Number field. A range requires separate Number fields for minimum and maximum. Currency uses a separate PlainText field. fieldData receives JSON numbers, never the priceRange.min or priceRange.max strings. If one check fails or field types do not match, every price field including currency is omitted or the task stops before creation. A range is never flattened.

  3. 3

    Search the handle as an exact slug and compare the technical identifier

    The Shopify handle becomes the proposed slug and is queried with Webflow's exact staged-item filter. Zero matches permits draft preparation. With one, your Met reads the item and compares the Shopify id stored in the PlainText field. The same product is shown and stops the run. A different id is a collision and also stops it. More than one match needs human review. It never overwrites, adds a suffix, or infers identity from a matching title. The read does not lock the collection, so two concurrent runs could still race to create.

  4. 4

    Create a complete draft and verify the image Webflow accepted

    With a free slug, webflow_create_item receives isArchived false, skip_invalid_files false, and fieldData approved against the schema. The connector forces isDraft true. For ImageRef it sends the public featuredImage URL and its exact alt. When Shopify has no alt, a person supplies and approves one. Webflow accepts remote images up to 4 MB, but a Shopify URL alone does not prove that loading completed. Your Met reads the returned id and verifies name, slug, Shopify id, link, price and currency values as JSON numbers, plus a nonempty fileId or url and the approved alt in the image field. Any missing or different value stops publication. descriptionHtml never enters rich text.

  5. 5

    Show the evidence and wait for a new approval

    The summary shows site, collection, primary locale, item_id, Shopify id, name, slug, onlineStoreUrl, only the validated price or range with currency, ImageRef and alt, plus every omitted field. It ends the turn without publishing. The initial request does not authorize live state. When a person requests changes, it updates only those fields, reads the item again, and shows a new summary. Any earlier approval expires. A timeout or uncertain result is reconciled by searching the slug and reading the item before any other write. It never retries a create blindly.

  6. 6

    Read again, publish only the approved item, and reconcile staged against live

    After an explicit yes in a new message, your Met rereads the same item. One changed approved value stops the flow and requires another review. Otherwise it calls webflow_update_item with isDraft false, then webflow_publish_items for that id only with the exact confirm flag set to true. It checks status, published_count, publishedItemIds, and errors. Success requires Webflow to confirm that id. Partial, failed, or unknown triggers staged and live reads before deciding whether another action is missing. The live read proves API state, not HTML, template, cache, or CDN. These writes are not one transaction and are never replayed blindly.

Before you start

What you need ready

The Met solves none of these for you. If one is missing, the automation stops there.

The limits

What this automation does NOT solve

Better said here than discovered halfway through the rollout.

FAQ

Questions about this automation

The content does not start from text supplied by a person. Its source is one exact Shopify product, it preserves the source id and handle, and it applies specific rules for link, image, price, currency, and data that must not be copied.

No. The listing links to the onlineStoreUrl returned by Shopify. A Buy Button or embedded checkout needs components and code these tools do not create.

Your Met reads the item and compares its Shopify id. A match shows the existing listing. A different id reports a collision. Both cases stop without updating or inventing another slug.

Moving HTML without a deterministic sanitizer can transport scripts, embeds, or active markup between systems. This first version omits the description and publishes structured fields only.

No. Webflow has to download it and may reject it because of format, access, or size. Creation uses skip_invalid_files false and the draft is read again to prove the ImageRef exists.

The concrete evidence exists only after creation: item_id, stored fields, and ImageRef. The second message approves that draft and enables the confirm flag for publishing that id only.

No. This is one reviewed publication. Keeping it synchronized needs a separate design with events, durable deduplication, and its own update and error policy.

Keep going

Other automations built on the same tools

Want this automation running on your own data?

We will show it to you with your accounts connected, not with a canned demo.