What you get
Products
Categories
CMS Pages
Install and setup
The plugin is the same either way - pick how you’d like to load it into Shopware, then run the onboarding to provision your Frontic project.Install the plugin
- From the Shopware Store
- Manual upload
Open the Store
Find the Frontic plugin
Install and activate
Run the onboarding
With the plugin active, you can start the onboarding wizard on the plugin’s configuration page to provision your Frontic project end-to-end: it sets up the integration’s connection settings, creates one Channel per Shopware sales channel (with the matching currencies and translations), creates Data Feeds for Products, Categories, and CMS Pages, and seeds matching Data Storages and Data Syncs. On the project side it also creates one scope per sales channel, one region per channel/currency pair, and one locale per channel language. Before any of that runs, the wizard tests the Shopware connection from Frontic - if the keys are wrong or the host can’t be reached, it stops on a Connection-Test failed screen instead of provisioning a broken setup. See Troubleshooting the onboarding for the failure modes.Open the onboarding
Sign in to Frontic
Confirm the project layout
Done - the first sync starts
Troubleshooting the onboarding
When the connection check fails, the wizard shows a Connection-Test failed screen with the message Shopware returned and a failure type. Match it against the table below to find the fix - once the test passes, the wizard continues to provisioning automatically.Without the plugin
If you can’t install the plugin in your Shopware environment - for example a managed setup where you can’t load custom extensions - you can connect manually using a Shopware Integration account.Create an Integration account in Shopware
Create an Integration account in Shopware
Open Integrations
Name the integration
frontic-sync (or anything you’ll recognize later).Assign read permissions
*_translation detailed privileges for product, media, manufacturer, property group, property group option, unit, delivery time, cross-selling, and feature set.Copy the access keys
SWIAMG…) and Secret Access Key (dXhZQ2…) - you’ll paste them into Frontic next.Connection settings
Shopware Production, Shopware Staging).https://shopware.demo-shop.com. The connector talks to the Admin API at this host.SWIAMG…). Created automatically by the plugin onboarding, or manually via Shopware Settings → System → Integrations.dXhZQ2…). Stored encrypted and redacted in logs.Channels
A Shopware channel in Frontic maps a Shopware sales channel to the currencies and translations Frontic should pull from it. The plugin onboarding seeds one Frontic channel per sales channel; you can add more from Channels → Add.Storefront, Headless, Wholesale).Data Feeds
The Shopware connector exposes three feed types:- Updates step - Shopware supports the Trigger update method (the plugin pushes webhooks). Scheduled polling and the Ingest API are not used; the plugin’s webhook stream is the source of real-time updates.
- Manual refresh - every Shopware feed exposes a Refresh action that re-runs the feed against the source. Use it when something changed on the Shopware side that didn’t reach Frontic, or to recover from a webhook gap. Configuration changes - Value Composer, storage schema, sync mappings - don’t need a refresh; they revalidate automatically.
Product visibility
The Shopware integration only ingests products with a visibility entry for at least one of the sales channels selected across its channels. Products with no visibility - or visible only in sales channels you haven’t selected on any channel - won’t reach Frontic. The filter applies to every product read: full backfills, parent resolution for variants, and incremental batch fetches. A product that drops out of every selected sales channel in Shopware is reconciled away on the next feed run. If a product is missing in Frontic, open it in Shopware admin and check the Visibilities tab - it needs an active entry for one of the sales channels selected on a channel in this integration.What the data looks like
Associations pulled along
The connector fetches more than just the entity’s own fields - it pre-loads the associations a typical storefront needs, so your Data Sync doesn’t have to chase them.Product associations
categoriesRo, cover.media, crossSellings, crossSellingAssignedProducts, deliveryTime, featureSet, manufacturer.media, prices, media, options.group, properties.group, tags, unit, visibilities.Category associations
media, tags.Variants
A product with options is denormalized: the parent record carries the shared fields, each variant is a separate record linked back viaparentId. Either side can drive a Detail Block - product-level for grids, variant-level for cart and detail views. See Product Models for the full picture.
Currency-resolved prices
For products, the connector pre-filters theprices array to the currencies declared on the channel and stamps every price element with currencyCode and currencyPrecision. Map those into the Price composite and you’re done - no per-region price-picking logic in your Value Composer needed.
Translations
All translatable fields are resolved at the connector level for every locale on the channel. Use the base field in your Data Sync (name, description) - not translated.name. Frontic’s Request Context picks the right localized value at response time. For categories, breadcrumb arrays are also de-indexed so the translated breadcrumb path is a clean list rather than a 0:..., 1:... map.
Storefront SEO paths
Shopware owns the URLs of its own storefront, and those URLs can’t be re-derived from a product name: the path template is configured per sales channel, merchants can override individual URLs by hand, and Shopware’s slugifier preserves case and dots where a generated slug wouldn’t. So the connector imports the path Shopware actually serves rather than guessing at it.Clothing/Jackets, a product path like Winter-Jacket/10042 - with no leading slash and no domain. That’s what an embedded experience needs, and it survives a merchant moving the shop to a different domain.
Resolution is per sales channel and per language, and it never borrows a sibling language’s path - an English path served on a German domain is a 404. Where Shopware has no canonical URL for a given combination, the value falls back to Shopware’s own detail/<id> (products) or navigation/<id> (categories) route, which the storefront serves whether or not the SEO indexer ever ran. A seoPath you get back is always a path that resolves, so your frontend never needs a fallback of its own.
seoPath is not slug. Slugs drive Page URLs for storefronts Frontic hosts - see URLs, Redirects & SEO. seoPath is the address of the same content on the Shopware storefront, which is what an experience embedded in a Shopware layout has to link to. Two different addresses for one record; don’t map one onto the other.Add SEO paths to an existing integration
Add SEO paths to an existing integration
Add the storage fields
seoPath field - String, translatable.On products, add a mainSeoPath field too, with Shared Across Variants on. Variant records each carry their own path, so a product-level block field needs a shared field to read from; seoPath alone stays empty on the parent record.Map them in the Data Sync
seoPath. No modifiers - the value is already the exact path Shopware serves, and a modifier chain reintroduces the drift this field exists to remove.Expose them on your blocks
seoPath as a plain field (from mainSeoPath on a product block), and seoPaths as a Variant Field reading the variant-level seoPath.Re-sync the feed
Auto-delete reconciliation
When a feed runs (refresh, full backfill), the connector diffs Shopware’s current state against what Frontic has on the feed and emits deletes for products, categories, or CMS pages that have disappeared on the Shopware side. Your storage doesn’t accumulate orphan records when items are removed in Shopware.Category relations
From thecategoriesRo association, the connector also extracts a flat list of category IDs and stamps them onto the feed record under the reserved $rel namespace as $rel.categoryIds. Category-link blocks (or any sync that just needs the IDs without the full association payload) can map this directly in the Value Composer - no need to walk categoriesRo to pluck IDs out yourself.
Frontic Experiences in Shopware
The plugin does more than push data one way. It also adds a Frontic Experience element to Shopware’s Shopping Experiences editor, so a content editor can create an AI-designed page in Frontic from inside the Shopware admin and publish it back into the same layout.Create an experience from the Shopware admin
Add the block to a layout

Frontic Experience block in the Shopware admin
Save the layout

Dropped Block into the layout, before saving
Open in Designer

After saving, the block is ready to be opened in the Designer
Publish


Notification after publishing experience to Shopware
Publishing back to Shopware
Publishing writes the version’s rendered content into the CMS slot’s configuration through Shopware’s Admin API, and the storefront renders it as part of the layout. Nothing is fetched from Frontic at request time, so there’s no runtime dependency on Frontic for a page that’s already published - and no plugin update or cache warm-up needed to ship a change. The publish result links both ways: Open Layout goes back to the Shopping Experience in your Shopware admin, Open Storefront goes to the live page. The Integration account Frontic uses needs write access to Shopping Experiences for this to work. The plugin’s onboarding sets that up; a manual Integration account created with read-only permissions can sync data but can’t publish experiences back.Good to know
- Products are scoped by sales channel visibility. Only products visible in one of the sales channels selected across the integration’s channels are fetched - see Product visibility.
- No scheduled polling. Shopware sync relies entirely on plugin webhooks. If the plugin is disabled or your instance can’t reach Frontic, changes won’t be pushed - fix connectivity, then hit Refresh on each feed to backfill.
- Webhook delivery retry is on the plugin side. The Frontic plugin queues outbound webhooks in Shopware and retries delivery - events older than Shopware’s retention can’t be replayed and need a manual feed Refresh to reach Frontic.
- Batch size. Records are fetched in batches to keep Shopware’s API response size small enough for catalogs with large associations.
- Storefront SEO paths are onboarding-only. New integrations get
seoPath/seoPathsfrom the plugin wizard; existing ones need the fields added by hand - see Storefront SEO paths. Re-running onboarding is not an upgrade path. - Experiences need write access. Publishing an experience back into a CMS slot uses the Admin API - a manual Integration account created with read-only permissions can sync data but can’t publish. See Publishing back to Shopware.