{"id":548366,"date":"2026-07-10T07:55:33","date_gmt":"2026-07-10T07:55:33","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=548366"},"modified":"2026-07-31T04:52:15","modified_gmt":"2026-07-31T04:52:15","slug":"pimcore-bigcommerce-connector","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/","title":{"rendered":"How to Connect Pimcore to BigCommerce Connector"},"content":{"rendered":"<p>Keeping a Pimcore catalog and a BigCommerce store in sync by hand takes too long. The <strong>Webkul Pimcore BigCommerce Connector<\/strong> does it for you.<\/p>\n<p>It connects <strong>Pimcore 12<\/strong> to your BigCommerce store over the <strong>V3 REST Catalog API<\/strong> and moves your catalog both ways \u2014 products, variants, categories, brands, channels, options, modifiers and metafields.<\/p>\n<p>Everything runs inside the <strong>Pimcore Studio UI<\/strong>. No middleware to host, no CSV exports, no switching between two admins.<\/p>\n<p>The connection is simple: one store-level API account, one static token on the <code>X-Auth-Token<\/code> header.<\/p>\n<p>The connector models every catalog object as a native <a href=\"https:\/\/webkul.com\/blog\/how-to-create-class-data-object-in-pimcore\/\">Pimcore DataObject<\/a>, maps each to <em>your<\/em> classes, and syncs through an async job engine you can watch run live.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548386\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\" alt=\"pimcore-bigcommerce-connector-studio-menu\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Pimcore BigCommerce Connector: Key Features at a Glance<\/h2>\n<ul>\n<li><strong>Bidirectional catalog sync<\/strong> \u2014 import from BigCommerce into Pimcore, export from Pimcore to BigCommerce, entity by entity.<\/li>\n<li><strong>V3 REST Catalog API<\/strong> \u2014 single API, store-level API account, static <code>X-Auth-Token<\/code>. No OAuth dance, no token refresh, no legacy transport to babysit.<\/li>\n<li><strong>Native variant tree<\/strong> \u2014 BigCommerce variants become Concrete children of your product class, with options and option values as first-class linked classes.<\/li>\n<li><strong>Fully dynamic object mapping<\/strong> \u2014 the connector ships default classes but binds to any<a href=\"https:\/\/webkul.com\/blog\/class-setting-in-pimcore\/\"> Pimcore class <\/a> you point it at, resolved by name at runtime.<\/li>\n<li><strong>Channel and Locale aware<\/strong> \u2014 a per-channel, per-locale store-view grid, with translations pushed through BigCommerce&#8217;s GraphQL Translations Admin API.<\/li>\n<li><strong>Async jobs with live progress<\/strong> \u2014 every sync runs on a <a href=\"https:\/\/symfony.com\/doc\/current\/messenger.html\" target=\"_blank\" rel=\"noreferrer noopener\">Doctrine Messenger queue<\/a> behind a Supervisor worker, with step-by-step counts and a cooperative Stop button.<\/li>\n<li><strong>Idempotent and self-healing<\/strong> \u2014 an id-mapping table plus match-before-create means re-running a job never duplicates and never corrupts.<\/li>\n<li><strong>Auditable Sync Mappings<\/strong> \u2014 a read-only grid inside Studio surfaces every row of the id-mapping table, so you can see exactly which Pimcore object is linked to which BigCommerce id.<\/li>\n<li><strong>Fine-grained ACL<\/strong> \u2014 15 permission keys, fail-closed at a single controller chokepoint, mapped across every route.<\/li>\n<li><strong>Studio-native UI<\/strong> \u2014 a <a href=\"https:\/\/webpack.js.org\/concepts\/module-federation\/\" target=\"_blank\" rel=\"noreferrer noopener\">Module Federation plugin<\/a> adds a full <em>BigCommerce Connector<\/em> navigation group, with one dispatch screen per entity in each direction. Nothing external to open.<\/li>\n<\/ul>\n<h2>Connecting: One Store API Account, One Token<\/h2>\n<p>BigCommerce authentication is refreshingly boring, and Pimcore BigCommerce Connector keeps it that way.<\/p>\n<p>You create a <strong>store-level API account<\/strong> in your BigCommerce control panel, grant it the scopes you need, and copy the access token.<\/p>\n<p>That token is issued once and never expires on its own \u2014 there is no OAuth token exchange, no refresh cycle, nothing to rotate on a timer.<\/p>\n<p>Under the hood the connector talks to:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">https:\/\/api.bigcommerce.com\/stores\/{store_hash}\/v3\/<\/pre>\n<p>Every request carries the token on the <code>X-Auth-Token<\/code> header.<\/p>\n<p>A small <code>XAuthTokenStrategy<\/code> behind an <code>AuthStrategyInterface<\/code> handles that, so the HTTP client itself never knows <em>how<\/em> it authenticates.<\/p>\n<p>It just calls, and gets back a uniform envelope: <code>{success, http_code, data, error}<\/code>.<\/p>\n<p>Scopes matter, and the connector holds you to them. It asks only for what it needs \u2014 read-only where it reads, write where it writes:<\/p>\n<ul>\n<li><code>products_read_only<\/code> \/ <code>products<\/code><\/li>\n<li><code>information_read_only<\/code> \/ <code>information<\/code><\/li>\n<li><code>channel_settings_read_only<\/code> \/ <code>channel_settings<\/code><\/li>\n<li><code>channel_listings_read_only<\/code> \/ <code>channel_listings<\/code><\/li>\n<li><code>sites_read_only<\/code> \/ <code>sites<\/code><\/li>\n<\/ul>\n<blockquote><p>Least-privilege by design.<\/p><\/blockquote>\n<blockquote><p>Each job type declares the scopes it requires, and the connector validates them <em>before<\/em> it dispatches \u2014 so a missing scope is caught at the door, not three hundred products into a run.<\/p><\/blockquote>\n<h2>Installing Pimcore BigCommerce Connector: One Command<\/h2>\n<p>Installation is a single script. From the project root:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">bash src\/Webkul\/BigCommerceConnectorBundle\/install\/config.sh<\/pre>\n<p>That script detects whether you are on Docker or bare-metal PHP, wires the composer autoload, registers the bundle, builds the Studio UI plugin, and sets up the Supervisor workers.<\/p>\n<p>Then <code>pimcore:bundle:install<\/code> does the heavy lifting inside Pimcore. When it finishes you have:<\/p>\n<ul>\n<li><strong>3 database tables<\/strong> \u2014 <code>bigcommerce_config<\/code> (JSON config), <code>bigcommerce_id_mapping<\/code> (the sync source of truth), and <code>bigcommerce_jobs<\/code> (job history and counts).<\/li>\n<li><strong>10 DataObject classes<\/strong> \u2014 <code>WkBigCommerceCredential<\/code>, <code>BcChannel<\/code>, <code>BcBrand<\/code>, <code>BcCategory<\/code>, <code>BcProduct<\/code>, <code>BcProductOption<\/code>, <code>BcOptionValue<\/code>, <code>BcModifier<\/code>, <code>BcModifierValue<\/code>, and <code>BcMetafield<\/code>.<\/li>\n<li><strong>15 permissions<\/strong> \u2014 3 legacy umbrella grants plus 12 granular ACL keys.<\/li>\n<li><strong>Two queue workers<\/strong> \u2014 a <code>bigcommerce_import<\/code> consumer and a <code>bigcommerce_export<\/code> consumer, each running serially to stay within BigCommerce&#8217;s rate limits.<\/li>\n<\/ul>\n<p>The installer creates <strong>every class idempotently and resolves it by name, never by hardcoded id<\/strong>, so re-running stays safe.<\/p>\n<p>If you prefer to script it, the bundle exposes the same steps as console commands: <code>bigcommerce:objects:install<\/code>, <code>bigcommerce:permissions:install<\/code>, and <code>bigcommerce:store:ensure-grid<\/code>.<\/p>\n<p>There is also <code>bigcommerce:mapping:show<\/code> to inspect the current object and field mapping from the CLI, and <code>bigcommerce:jobs:dispatch<\/code> \/ <code>bigcommerce:jobs:run<\/code> to trigger jobs headlessly.<\/p>\n<h2>Setting Up Pimcore BigCommerce Connector in Studio<\/h2>\n<p>Open the <strong>BigCommerce Connector<\/strong> group in the Studio navigation and start at <strong>Credentials<\/strong>.<\/p>\n<p>A credential carries the <code>store_hash<\/code>, <code>client_id<\/code>, <code>access_token<\/code>, and the space-, comma-, or newline-separated <code>scopes<\/code>.<\/p>\n<p>Studio stores secrets as write-only input fields \u2014 it replays the token on every request but never shows it back to you.<\/p>\n<p>You keep a <strong>single active credential<\/strong>, and the connector resolves it by <em>name<\/em> rather than by id, so nothing breaks if internal ids shift. Before you sync anything, click <strong>Test Connection<\/strong>. That fires:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">GET \/catalog\/summary<\/pre>\n<p>If your store hash and token resolve, the connector reports back the authenticated status, the auth strategy in use, and your store hash \u2014 proof the pipe is open.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548397\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1.webp\" alt=\"pimcore-bigcommerce-connector-credentials\" width=\"1534\" height=\"1510\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1.webp 1534w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1-300x295.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1-1040x1024.webp 1040w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1-250x246.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-credentials-1-768x756.webp 768w\" sizes=\"(max-width: 1534px) 100vw, 1534px\" loading=\"lazy\" \/><\/p>\n<h2>Object Mapping: Pimcore BigCommerce Connector Adapts to Your Classes<\/h2>\n<p>Here is the part that stops the connector from becoming a straitjacket. The 10 classes it installs are <em>defaults<\/em>, not requirements.<\/p>\n<p>Object Mapping is <strong>fully dynamic<\/strong>: for each entity \u2014 product, category, brand, channel, option, and so on \u2014 you pick which Pimcore class carries it.<\/p>\n<p>There are no static <code>Bc*<\/code> references buried in the job code. A <code>MappingResolver<\/code> resolves everything at runtime, looking the class up by name.<\/p>\n<p>If you have not overridden it, the resolver falls back to the seeded default.<\/p>\n<p>That means you can point <em>product<\/em> at your existing catalog class instead of <code>BcProduct<\/code>, and the readers, processors, and writers follow \u2014 no fork, no patch.<\/p>\n<p>Field Mapping works the same way, one row per BigCommerce field, and the connector only ever advertises the standard, writable V3 fields.<\/p>\n<p>Read-only fields are never offered as targets you could waste time mapping. You can also inspect the current object and field mapping straight from the CLI with <code>bigcommerce:mapping:show<\/code>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548404\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping.webp\" alt=\"pimcore-bigcommerce-connector-object-mapping\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-object-mapping-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Store and Channel Mapping: Channel by Locale<\/h2>\n<p>BigCommerce sells across multiple <strong>channels<\/strong>, each of which can carry multiple <strong>locales<\/strong>. The connector models that as a store-view grid.<\/p>\n<p>On your catalog classes (product and category) a <code>storeValues<\/code> FieldCollection holds one item per channel, and inside each item a Localizedfields block holds the per-locale content.<\/p>\n<p>The <strong>Channel Mapping<\/strong> page lists the live BigCommerce channels \u2014 it calls <code>GET \/v3\/channels<\/code> for you \u2014 so you map each real channel to its Pimcore locales and currency, then save.<\/p>\n<p>This is not optional decoration: store mapping must be explicitly saved.<\/p>\n<p>Jobs that are channel-scoped stay blocked until it is, so Pimcore BigCommerce Connector never silently guesses a default channel and writes content to the wrong storefront.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548407\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping.webp\" alt=\"pimcore-bigcommerce-connector-store-mapping\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-store-mapping-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Categories: The Trees API, Parents First<\/h2>\n<p>Categories are a hierarchy, and hierarchies break if you write a child before its parent exists.<\/p>\n<p>The connector reads categories through BigCommerce&#8217;s <strong>Trees API<\/strong> (<code>catalog\/trees\/categories<\/code>) and materialises the entire tree in one pass.<\/p>\n<p>It then <strong>topologically sorts the tree parents-first<\/strong>, breadth-first, before writing a single node.<\/p>\n<p>It also round-trips the <code>tree_id<\/code> so the structure lands back where it belongs (BigCommerce&#8217;s default tree is <code>tree_id=1<\/code>).<\/p>\n<p>On export, categories do not go one at a time \u2014 they use the batch-collection endpoint with an array body and id-in-body updates.<\/p>\n<blockquote><p>A gotcha the connector handles for you: a 2xx from the batch endpoint does <em>not<\/em> guarantee every item saved.<\/p><\/blockquote>\n<blockquote><p>The writer confirms the returned id per item, and if one dropped, it recreates it \u2014 a self-healing batch write.<\/p><\/blockquote>\n<blockquote><p>And if any page of the tree fails to fetch, the import writes <em>nothing<\/em> rather than orphan children into a corrupt tree.<\/p><\/blockquote>\n<h2>Products: Flat Data, Then the Sub-Resources<\/h2>\n<p>A BigCommerce product is not one flat record \u2014 it is a core object plus a fan of sub-resources. The connector mirrors that with a <strong>multi-step job<\/strong>.<\/p>\n<p>Product import runs as four steps: <strong>DATA<\/strong> (the primary step \u2014 the flat product record), then three sub-resource steps:<\/p>\n<ul>\n<li><strong>custom fields<\/strong><\/li>\n<li><strong>images<\/strong><\/li>\n<li><strong>videos<\/strong><\/li>\n<\/ul>\n<p>The primary DATA step owns the headline totals you see in the UI; each secondary step reports its own counts alongside.<\/p>\n<p>Custom fields land in a <code>BcProductCustomField<\/code> FieldCollection, and videos in a <code>BcProductVideo<\/code> FieldCollection \u2014 both carry Pimcore-safe field names.<\/p>\n<p>BigCommerce&#8217;s <code>value<\/code> and <code>type<\/code> collide with reserved Pimcore names, so the connector renames them to <code>fieldValue<\/code> and <code>videoType<\/code>.<\/p>\n<p>That rename pattern is a recurring, deliberate detail.<\/p>\n<p>Wherever a BigCommerce field name would collide with a Pimcore reserved word, the connector renames it one way.<\/p>\n<p><code>type<\/code> becomes <code>productType<\/code> on the product, <code>channelType<\/code> on the channel, <code>optionType<\/code> on the option, and <code>modifierType<\/code> on the modifier.<\/p>\n<p>The metafield&#8217;s <code>key<\/code> and <code>value<\/code> become <code>metaKey<\/code> and <code>metaValue<\/code>.<\/p>\n<p>These are the only renames, and they are documented, so nothing surprises you at mapping time.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548409\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail.webp\" alt=\"pimcore-bigcommerce-connector-job-detail\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-job-detail-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Product Options and Variants: A Native Variant Tree<\/h2>\n<p>This is where thin CSV tools fall over and the connector shines.<\/p>\n<p>BigCommerce variants become <strong>native Pimcore variants<\/strong> \u2014 Concrete children filed <em>under<\/em> the product object, not duplicated as separate products.<\/p>\n<p>The variant axes are first-class classes of their own: <code>BcProductOption<\/code> for the option (name, its type, and a config JSON) and <code>BcOptionValue<\/code> for each value (label, sort order, value data).<\/p>\n<p>A variant references option <em>value<\/em> ids, so the options step always runs before the variant step.<\/p>\n<p>Two design choices make this robust:<\/p>\n<ul>\n<li><strong>The reader skips the base variant on import.<\/strong> BigCommerce&#8217;s base variant <em>is<\/em> the product itself \u2014 importing it would duplicate the product, so the reader drops it and imports only real variants, carrying just the present, non-null scalar overrides (anything absent inherits from the parent).<\/li>\n<li><strong>Variants never leak out as standalone products on export.<\/strong> The variant export reader pages only variant-type children, while the base product reader pages only objects \u2014 so a variant is never accidentally pushed to BigCommerce as its own product.<\/li>\n<\/ul>\n<h2>Modifiers: The Non-Variant Add-Ons<\/h2>\n<p>Not every product option creates a SKU. Text fields, gift-wrap toggles, engraving lines \u2014 BigCommerce calls these <strong>modifiers<\/strong>, and the connector keeps them cleanly separate from variants.<\/p>\n<p><code>BcModifier<\/code> and <code>BcModifierValue<\/code> model them per product, and \u2014 critically \u2014 modifiers <em>never create a SKU<\/em>.<\/p>\n<p>On export the connector writes them through the nested <code>\/modifiers\/{id}\/values<\/code> endpoint, additively and idempotently, so re-running never duplicates a modifier value.<\/p>\n<h2>Metafields: One Class, Four Owners<\/h2>\n<p>BigCommerce lets you attach metafields to products, variants, categories, and brands.<\/p>\n<p>Rather than spray four near-identical classes across your data model, Pimcore BigCommerce Connector uses <strong>one <code>BcMetafield<\/code> class<\/strong> with a polymorphic owner relation.<\/p>\n<p>A single <code>metafield<\/code> entry in the id-mapping table backs it.<\/p>\n<p>Match-before-create keys on the <code>(namespace, key)<\/code> pair scoped to the owner, and variant metafields are correctly nested under their product.<\/p>\n<blockquote><p>Ownership matters here. The connector runs under one stable store-level API account, so it only writes the metafields it owns.<\/p><\/blockquote>\n<blockquote><p>It leaves metafields owned by <em>other<\/em> apps (a different client id) untouched \u2014 it preserves them and never overwrites them.<\/p><\/blockquote>\n<h2>Assignments: Category and Channel Membership, Always Additive<\/h2>\n<p>The connector handles product-to-category and product-to-channel links with surgical care, because getting them wrong deletes data.<\/p>\n<p>These relations are <strong>never sent on the product body<\/strong> \u2014 putting a category array on a product update in BigCommerce is a full overwrite that would wipe memberships you did not include.<\/p>\n<p>Instead they ride dedicated, <strong>additive<\/strong> assignment steps: export PUTs only the missing pairs and never clears, and import UNIONs new memberships into the relation without removing what is already there.<\/p>\n<p>Every BigCommerce assignment endpoint the connector touches is additive and idempotent by design.<\/p>\n<h2>Translations: GraphQL for the Non-Default Locales<\/h2>\n<p>REST V3 writes the <em>global<\/em> catalog value that channels inherit.<\/p>\n<p>Per-channel, per-locale content overrides live somewhere else \u2014 BigCommerce&#8217;s <strong>GraphQL Translations Admin API<\/strong> \u2014 and the connector speaks it. A separate <code>GraphQlClient<\/code> hits:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">POST https:\/\/api.bigcommerce.com\/stores\/{store_hash}\/graphql<\/pre>\n<p>with the <em>same<\/em> <code>X-Auth-Token<\/code>.<\/p>\n<p>A <code>TranslationsTransport<\/code> service exposes <code>getChannelLocales()<\/code>, <code>getOverrides()<\/code>, and <code>setOverrides()<\/code>, and dedicated import and export translation jobs fan out over channel by non-default-locale.<\/p>\n<p>The translatable fields are the ones that actually matter. For products: name, description, page title, meta description, and meta keywords.<\/p>\n<p>For categories: name, description, page title, and meta description.<\/p>\n<p>Export is <strong>diff-based<\/strong>: it skips an unchanged locale entirely, explicitly clears an emptied field, and keeps the default-locale content on REST as the base value. Only the overrides travel over GraphQL.<\/p>\n<blockquote><p>Straight talk: the Translations Admin API is BETA and Catalyst-positioned on BigCommerce&#8217;s side, and channel-locale management is GraphQL-only with no REST equivalent.<\/p><\/blockquote>\n<blockquote><p>The connector implements it fully, and stays honest about that dependency.<\/p><\/blockquote>\n<h2>Images and Media<\/h2>\n<p>The connector treats product images as a managed gallery.<\/p>\n<p>On import the connector downloads the bytes into a real Pimcore <code>Asset\\Image<\/code>, <strong>de-duplicated by filename plus content hash<\/strong>, and rebuilds the product gallery.<\/p>\n<p>On export it uploads via multipart \u2014 and critically, it skips images already on BigCommerce by consulting an asset-to-image mapping, so re-running an export does <em>not<\/em> re-POST every image every time.<\/p>\n<p>BigCommerce has no native image de-duplication and filename matching is unreliable, so Pimcore BigCommerce Connector carries its own.<\/p>\n<p>Brand and category images get the same download-and-dedup treatment into their own Pimcore asset folders (<code>BrandImages<\/code>, <code>CategoryImages<\/code>), so media handling is not product-only.<\/p>\n<p>The connector import-manages videos via the <code>BcProductVideo<\/code> FieldCollection, full-replace per product.<\/p>\n<h2>The Single-API Design: REST-First, GraphQL Only Where REST Can&#8217;t Reach<\/h2>\n<p>Worth being explicit, because it shapes everything above: BigCommerce is a <strong>single-API<\/strong> integration. There is no dual transport, no legacy fallback, no OAuth exchange to route around.<\/p>\n<p>Every catalog job runs over V3 REST with one capability \u2014 REST \u2014 and that is the whole story for products, categories, brands, channels, options, modifiers, metafields, and assignments.<\/p>\n<p>The <strong>only<\/strong> place GraphQL enters is the narrow surface REST cannot reach: channel-locale management and per-channel, per-locale translations. Same token, same envelope shape, same store.<\/p>\n<p>It is a scalpel, not a second transport \u2014 which keeps the moving parts few and the failure modes predictable.<\/p>\n<h2>Watch Pimcore BigCommerce Connector Sync Live<\/h2>\n<p>Sync work runs <strong>asynchronously<\/strong>. Dispatching a job drops a message on a Doctrine Messenger queue \u2014 <code>bigcommerce_import<\/code> or <code>bigcommerce_export<\/code> \u2014 and <a href=\"http:\/\/supervisord.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">a Supervisor-managed worker<\/a> picks it up.<\/p>\n<p>Your Studio session stays responsive; the work happens in the background.<\/p>\n<p>The Import and Export folders each expose one dispatch screen per entity \u2014 Channels, Brands, Categories, Products, Variants, Options\/Modifiers, Metafields, assignments, and Translations.<\/p>\n<p>So an operator can run a single entity type in a single direction on demand, rather than an all-or-nothing sync.<\/p>\n<p>But you are not flying blind. Each job is built on a Reader-to-Processor-to-Writer step engine that reports as it goes.<\/p>\n<p>The <strong>Job History<\/strong> screen lists every run, and clicking a row opens a live detail view with:<\/p>\n<ul>\n<li>per-step <strong>StepCards<\/strong> \u2014 the primary DATA step and each secondary step, side by side, each with its own read, write, update, skip, and fail counts;<\/li>\n<li>a structured log stream \u2014 success, warning, error, and info levels, capped so a runaway job cannot flood you;<\/li>\n<li>and a <strong>Stop<\/strong> button that stops <em>cooperatively<\/em>.<\/li>\n<\/ul>\n<p>That last point matters. Stop does not kill a process mid-write.<\/p>\n<p>It flips a flag the worker checks at each batch boundary, so the run finishes its current batch cleanly and then halts \u2014 no half-written products, no torn state.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548424\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job.webp\" alt=\"pimcore-bigcommerce-connector-live-job\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-live-job-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Exporting to BigCommerce<\/h2>\n<p>Export reverses the pipeline: a Reader pulls your mapped Pimcore objects, parents-first, and a Writer pushes them to BigCommerce. The write logic is anchored on the id-mapping table:<\/p>\n<ul>\n<li><strong>Mapping exists<\/strong> \u2014 the connector PUTs an update to <code>{endpoint}\/{bcId}<\/code>.<\/li>\n<li><strong>PUT returns 404<\/strong> \u2014 the remote object was deleted, so the connector POSTs a fresh one and re-anchors the mapping. Self-healing.<\/li>\n<li><strong>No mapping<\/strong> \u2014 it POSTs a create and records the new mapping.<\/li>\n<\/ul>\n<p>The connector resolves relations from Pimcore id to BigCommerce id through that same table, and the export never pushes the store-view grid.<\/p>\n<p>REST V3 writes global values, and the per-channel overrides go through the translation path instead.<\/p>\n<p>Product export runs as a five-step job: DATA (with categories deliberately omitted from the body), category assignments, channel assignments, images, and custom fields.<\/p>\n<p>Product options are synced by their own dedicated export job.<\/p>\n<h2>Importing from BigCommerce<\/h2>\n<p>Import is the mirror image, and here Pimcore BigCommerce Connector does one thing export does not: it <strong>reindexes automatically<\/strong>.<\/p>\n<p>Every import job handler is <code>final<\/code> and guarantees a reindex of the affected classes after all steps complete.<\/p>\n<p>So your Pimcore search and grids reflect the new data immediately. (Export never reindexes \u2014 there is nothing local to re-index.)<\/p>\n<p>Imports honor per-job <strong>filters<\/strong> passed through the job context, and page through the standard V3 pagination envelope in batches of 25 (capped at BigCommerce&#8217;s max of 250).<\/p>\n<p>Every entity runs through the same generic writer, which resolves the target class dynamically and upserts idempotently.<\/p>\n<h2>Why Pimcore BigCommerce Connector Won&#8217;t Break on the Second Run<\/h2>\n<p>Most connector pain shows up on <em>re-runs<\/em>: duplicates, wiped relations, half-applied changes. This one is built to survive them.<\/p>\n<ul>\n<li><strong>Pre-flight validation.<\/strong> A <code>JobPreflightValidator<\/code> checks store mapping and scopes before dispatch and <em>blocks<\/em> a job that would fail \u2014 rather than starting it and dying partway. A blocked job is a clear error, not a corrupted store.<\/li>\n<li><strong>Idempotent, self-healing writes.<\/strong> The <code>bigcommerce_id_mapping<\/code> table, scoped by store hash, is the single source of truth. When a mapping is missing, the connector matches on business keys \u2014 <code>sku<\/code> for products, <code>name<\/code> for channels, brands, and categories \u2014 <em>before<\/em> creating, and re-links the mapping. Re-running never duplicates.<\/li>\n<li><strong>Empty never means delete.<\/strong> Unset values do not clear remote data. Relations are additive, translations are diff-based, and an emptied field is cleared only when you explicitly emptied it.<\/li>\n<li><strong>Stuck-job recovery.<\/strong> A <code>JobRecovery<\/code> service unlocks abandoned in-flight messages so orphaned jobs reprocess, and marks jobs running past a max runtime (7200s by default) as failed \u2014 so the UI never shows an eternally-spinning job. It runs at worker startup and is available manually as <code>bigcommerce:jobs:recover<\/code>.<\/li>\n<\/ul>\n<p>And when you want to see the wiring for yourself, the <strong>Sync Mappings<\/strong> screen is right there in the navigation.<\/p>\n<p>It is a read-only grid over the <code>bigcommerce_id_mapping<\/code> table that surfaces every link \u2014 Pimcore id to BigCommerce id, per entity.<\/p>\n<p>An operator can audit exactly what is tied to what and diagnose sync state without leaving Studio.<\/p>\n<h2>Pimcore BigCommerce Connector Roles and Permissions<\/h2>\n<p>The connector ships <strong>15 permission keys<\/strong>: 12 granular ACL keys plus 3 legacy umbrella grants.<\/p>\n<p>The granular set splits view from manage and read from execute.<\/p>\n<p>The keys: <code>bigcommerce_credentials_view|manage|test<\/code>, <code>bigcommerce_mapping_view|manage<\/code>, <code>bigcommerce_store_mapping_view|manage<\/code>, and <code>bigcommerce_sync_mappings_view<\/code>.<\/p>\n<p>Plus <code>bigcommerce_jobs_view|stop<\/code>, <code>bigcommerce_import_execute<\/code>, and <code>bigcommerce_export_execute<\/code>.<\/p>\n<p>So you can grant a teammate &#8220;run imports and watch jobs&#8221; without handing over credential management.<\/p>\n<p>The grants are ergonomic, not flat: holding a higher permission implies the lower one, so granting <code>manage<\/code> also grants <code>view<\/code>, and the three legacy umbrella keys expand to their full granular sets.<\/p>\n<p>When you migrate off the legacy keys, the installer&#8217;s <code>--grant-legacy-holders<\/code> option fans the equivalent granular grants to every role or user that held one.<\/p>\n<p>Enforcement is fail-closed at a single chokepoint.<\/p>\n<p>An <code>ApiAuthenticationSubscriber<\/code> on the controller event authenticates (401) before it authorizes (403).<\/p>\n<p>It logs and denies any unmapped route, returning a JSON <code>{success, error}<\/code> envelope, authenticated by the admin session cookie rather than a separate firewall.<\/p>\n<p>All <strong>23 named routes<\/strong> are permission-mapped, and a shipped phpunit <code>RouteCoverageTest<\/code> reflects over the controller routes.<\/p>\n<p>It asserts every route is mapped, carries the <code>bigcommerce_<\/code> prefix, and exposes no <code>\/admin<\/code> path \u2014 so a new endpoint literally cannot merge without a mapped permission.<\/p>\n<p>Admin users bypass the checks.<\/p>\n<blockquote><p>One operational note: Pimcore loads permissions at login. An operator you re-permission keeps their old set until they log out and back in.<\/p><\/blockquote>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548426\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles.webp\" alt=\"pimcore-bigcommerce-connector-roles\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-roles-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Pimcore BigCommerce Connector Result in Your Store<\/h2>\n<p>When a sync completes, your BigCommerce catalog reflects Pimcore exactly: products with their variants nested under them, categories in the right tree, brands and channels linked.<\/p>\n<p>Custom fields and metafields are attached, images uploaded once, modifiers in place, and \u2014 where you configured them \u2014 per-channel, per-locale translations live.<\/p>\n<p>Run it again tomorrow and it updates in place. No duplicates, no wiped memberships, no drift. Pimcore stays the source of truth, and BigCommerce stays in sync with it.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-548428\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result.webp\" alt=\"pimcore-bigcommerce-connector-result\" width=\"1530\" height=\"753\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result.webp 1530w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result-1200x591.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-result-768x378.webp 768w\" sizes=\"(max-width: 1530px) 100vw, 1530px\" loading=\"lazy\" \/><\/p>\n<h2>Try Pimcore BigCommerce Connector<\/h2>\n<p>If Pimcore is your product hub and BigCommerce is your storefront, Pimcore BigCommerce Connector is the bridge that stops the copy-paste and the CSV firefighting.<\/p>\n<p>It installs with one command, sets up in Studio in minutes, and is built to be re-run every day without fear.<\/p>\n<p><strong>Explore more Pimcore integrations:<\/strong> Browse all our Pimcore-related blogs, including Magento 2, PrestaShop, Shopify, BigCommerce, and other integrations on our <a href=\"https:\/\/webkul.com\/blog\/tag\/pimcore\/\" target=\"_blank\" rel=\"noopener noreferrer\">Pimcore Blogs<\/a>.<\/p>\n<p>Grab the <strong>Webkul Pimcore BigCommerce Connector<\/strong> from the <a href=\"https:\/\/store.webkul.com\">Webkul Store<\/a>, and if you have a question \u2014 mapping, scopes, a custom class, anything \u2014 raise a ticket at <a href=\"https:\/\/webkul.uvdesk.com\">webkul.uvdesk.com<\/a>.<\/p>\n<p>We build these connectors for a living, and we&#8217;ll help you get yours running.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keeping a Pimcore catalog and a BigCommerce store in sync by hand takes too long. The Webkul Pimcore BigCommerce Connector does it for you. It connects Pimcore 12 to your BigCommerce store over the V3 REST Catalog API and moves your catalog both ways \u2014 products, variants, categories, brands, channels, options, modifiers and metafields. Everything <a href=\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":399,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8189],"tags":[5829,8201,8487],"class_list":["post-548366","post","type-post","status-publish","format-standard","hentry","category-pimcore","tag-pim","tag-pimcore","tag-pimcore-ecommerce-connector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pimcore BigCommerce Connector: Two-Way Catalog Sync<\/title>\n<meta name=\"description\" content=\"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pimcore BigCommerce Connector: Two-Way Catalog Sync\" \/>\n<meta property=\"og:description\" content=\"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-10T07:55:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T04:52:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\" \/>\n<meta name=\"author\" content=\"Nitesh Arora\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nitesh Arora\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\"},\"author\":{\"name\":\"Nitesh Arora\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\"},\"headline\":\"How to Connect Pimcore to BigCommerce Connector\",\"datePublished\":\"2026-07-10T07:55:33+00:00\",\"dateModified\":\"2026-07-31T04:52:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\"},\"wordCount\":3249,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\",\"keywords\":[\"pim\",\"Pimcore\",\"Pimcore eCommerce Connector\"],\"articleSection\":[\"PimCore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\",\"url\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\",\"name\":\"Pimcore BigCommerce Connector: Two-Way Catalog Sync\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\",\"datePublished\":\"2026-07-10T07:55:33+00:00\",\"dateModified\":\"2026-07-31T04:52:15+00:00\",\"description\":\"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp\",\"width\":1530,\"height\":753,\"caption\":\"pimcore-bigcommerce-connector-studio-menu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Connect Pimcore to BigCommerce Connector\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\",\"name\":\"Nitesh Arora\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Nitesh Arora\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pimcore BigCommerce Connector: Two-Way Catalog Sync","description":"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/","og_locale":"en_US","og_type":"article","og_title":"Pimcore BigCommerce Connector: Two-Way Catalog Sync","og_description":"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio","og_url":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-07-10T07:55:33+00:00","article_modified_time":"2026-07-31T04:52:15+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp","type":"","width":"","height":""}],"author":"Nitesh Arora","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Nitesh Arora","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/"},"author":{"name":"Nitesh Arora","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0"},"headline":"How to Connect Pimcore to BigCommerce Connector","datePublished":"2026-07-10T07:55:33+00:00","dateModified":"2026-07-31T04:52:15+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/"},"wordCount":3249,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp","keywords":["pim","Pimcore","Pimcore eCommerce Connector"],"articleSection":["PimCore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/","url":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/","name":"Pimcore BigCommerce Connector: Two-Way Catalog Sync","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp","datePublished":"2026-07-10T07:55:33+00:00","dateModified":"2026-07-31T04:52:15+00:00","description":"Pimcore BigCommerce Connector: two-way catalog sync over the V3 REST API \u2014 products, variants, categories, brands \u2014 inside Studio","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-bigcommerce-connector-studio-menu.webp","width":1530,"height":753,"caption":"pimcore-bigcommerce-connector-studio-menu"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Connect Pimcore to BigCommerce Connector"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0","name":"Nitesh Arora","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Nitesh Arora"},"url":"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/548366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/399"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=548366"}],"version-history":[{"count":38,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/548366\/revisions"}],"predecessor-version":[{"id":551708,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/548366\/revisions\/551708"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=548366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=548366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=548366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}