Skip to main content
This page is about getting data into MerchantOps repeatedly, rather than one file at a time. Read it if the source of truth for your catalog lives in another system and changes on a cadence.
If your catalog lives in Shopify, stop here — there is a built-in connector for it. Connect the store once and import on demand, with no file and no code. See Shopify. The rest of this page is about every other upstream system.
For everything else there is no self-service connector builder: you won’t find a screen where you register an arbitrary upstream source, point it at a folder, and set a schedule. Those recurring imports are either driven by your code against the API, or set up as a managed feed that MerchantOps builds and runs for you.

The four ways data arrives

Connect Shopify

The one built-in source connector. Connect the store, import the catalog, re-import when it changes.

Upload a file

A person uploads a CSV or an edited Excel export. Immediate, no setup.

Call the API

Your system pushes products on its own schedule. You own the scheduling.

A managed feed

MerchantOps builds and operates an ingestion path for your upstream system.

Connect Shopify

The only upstream system with a built-in, self-serve connector. You install the MerchantOps app on your store, connect it to your organization, and import the catalog whenever you want it refreshed — options, metafields, and prices included. Re-importing updates what changed and never deletes anything on either side. See Shopify for the full round trip, including publishing approved changes back to the store.

Upload a file

The self-serve path, covered in uploading products and, for source documents, the Lakehouse. Best for a one-off batch, a correction pass, or data you’re preparing by hand.

Call the API from your own system

The product import endpoints are part of the public API — the same ones the dashboard uses when you upload a file. If you can run a scheduled job on your side, you can drive imports from it: export from your system, post the products, read the per-row result. You own the schedule, the retries, and the alerting; MerchantOps owns everything downstream of the request. This is the honest answer for most “we want a nightly sync” cases where you have engineering capacity.

A managed feed

For upstream systems that can’t call an API — an ERP that only knows how to drop a file, for example — MerchantOps can build and operate the ingestion path for you: picking the file up on the agreed cadence (commonly a file drop over SFTP), mapping its columns onto your product types and properties, and importing it. This is bespoke work arranged with MerchantOps, not a feature you switch on. Each feed is built against a specific file format, cadence, and set of business rules, and it is operated by MerchantOps rather than configured by you. Talk to your MerchantOps contact if you need one.
Because a managed feed is built for one specific upstream system, nothing on this page should be read as a description of a generic product surface. What your feed does — which columns it reads, which fields it is allowed to overwrite, how often it runs — is defined in the agreement for that feed, not by a setting in the app.

What a recurring import produces

Whichever path brings the rows in, the result is ordinary MerchantOps data:
  • Rows become products, with their columns mapped onto the properties their product type defines.
  • A row that matches an existing product adds a new version rather than overwriting history.
  • If enrichment is requested, new products are queued for enrichment and tracked as a Job.

How runs are reported

Import runs report rows as created or failed, with a per-row error list (row number, product key, and reason). Paths that support merge mode also report skipped rows — ones that matched an existing product and changed nothing.
There is no “updated” count on any import path. A row that changes an existing product is reported under created, because the import wrote a new version of it. Don’t read created as “new products”; read it as “rows accepted”.

Not to be confused with publishing connectors

A publishing connector sends approved data out of MerchantOps to a storefront or downstream system, and that is a generic, documented pattern you can build against — see build your own connector and the VTEX reference connector. Import is the opposite direction, and outside of Shopify it has no equivalent self-serve surface today: you cannot register an arbitrary upstream system in the app the way you register a publish target.

Uploading products

The self-serve path: CSV and Excel uploads, merge mode, per-row results.

Jobs

Watch enrichment triggered by an import and review per-row errors.

The Lakehouse

Bringing in source documents rather than catalog rows.

Agents & tools

The API surface your own scheduled job would call.