Last updated: Oct 7, 2026 at 6:14PM
When you ask a marketplace agent to list a batch of products, it creates all the listings in one go as a bulk action — a background job you can watch, cancel, and inspect row by row without leaving the chat.
What a bulk action is
A bulk action is one bulk operation broken into rows, where each row is a single record — for listing creation, one row per listing. Rows run in the background a few at a time, so a batch of a few hundred listings doesn't tie up the agent (or your browser), and one bad row never stops the rest.
Every bulk action keeps a live count of rows done, failed, and skipped, and every row records what it created or why it failed. The same mechanism powers the API, so an integration can launch a bulk create and poll the same progress.
How the agent uses it
- Ask the marketplace's agent to list some products (for example, select products on the Products page and choose List/Enable Product(s) for a marketplace).
- The agent proposes the listings it will create and asks you to approve the plan.
- Once approved, it launches one bulk action for the whole batch and the chat pauses while it runs. A progress card appears under the agent's action line showing the batch name, a status badge, a progress bar, and the running counts. The progress bar disappears once the batch finishes; the badge and counts show how it ended.
- When the batch finishes, the agent picks up where it left off: it receives every created listing and every failure, handles the failures it can (for example, adding variants to a listing whose style code was already taken), and then finishes the new listings, several at a time (see Finishing the new listings).
The chat shows Running bulk action in its status while the batch is in progress. You can keep the chat open or come back later — the agent resumes on its own.
Follow the progress, or cancel it
On the progress card:
- View rows opens every row of the batch with its status. Succeeded rows link to the listing they created; failed rows show the reason. Use the Show filter to see just the failed or pending rows.
- Cancel stops the batch. Rows that haven't started are skipped; rows already in progress finish, and listings already created are kept. The agent is then told the batch was canceled: it summarizes what did complete and asks you how to proceed instead of carrying on by itself.
Canceling the whole chat also cancels any bulk action it is waiting on, and stops any listing work still in progress.
Click the batch name on the card to open the bulk action's own page.
When a specialist agent runs the batch
An agent often hands part of a job to a specialist agent — filling fields, say, or creating the
listings themselves. The chat shows that hand-off as a single step, collapsed by default. If the batch
was launched in there, its progress card sits inside that step rather than on the main thread: click
the arrow beside the step to open it, and you get the same card — batch name, status badge, progress
bar, counts, View rows and Cancel — however many times the work was handed along.
Canceling from there behaves the same way: the rows stop, and the specialist agent is told, so it
reports back to the agent you're talking to instead of carrying on.
Finishing the new listings
After the batch, the agent hands each listing to its own Listing Manager, a specialist agent that categorizes the listing, fills in its required fields and checks the main image of each new color. Listings don't depend on each other, so the agent usually runs up to three Listing Managers at the same time. The rest wait for a free spot, and their step in the chat reads Queued until one opens up. When two pieces of work could get in each other's way, such as two changes to the same listing, the agent runs them one after the other instead.
The agent reads each Listing Manager's result as soon as it comes in, so it can answer a question or retry a failure while the others keep working. It waits until every Listing Manager has reported back before it asks you anything or sends its summary.
Watch it from anywhere: the top bar and the Bulk Actions page
You don't have to stay in the chat. While at least one bulk action is running, a slowly turning cog appears in the top bar next to the sync icon (see See what's syncing right now for the family of icons). If more than one is running, a small number on the cog says how many. It updates on its own and disappears when the last one finishes.
Click the cog to see each running bulk action with its marketplace, a progress bar, and how many rows are done. Click a row to open that bulk action; View all bulk actions at the bottom takes you to the full list under Data → Bulk Actions.
The Bulk Actions page lists every bulk action the store has launched (from a chat, from the API, or by saving a field's fixed value) with its status and row count. Search by name or filter by status to find one. Open a bulk action to see:
- a progress bar with the percentage, and the count of rows succeeded, failed, skipped and remaining;
- every row with its status — succeeded rows link to the listing they created, failed rows show the reason — with the same Show filter as the chat card;
- who launched it, on which marketplace, and from which chat, plus when it was enqueued, started and finished.
Everything on these pages updates live as rows finish; there is nothing to refresh.
Retry the rows that failed
Once a bulk action has finished (or was canceled) and some rows failed, its page offers Retry failed rows. Only the failed rows run again: rows that succeeded are left alone, and rows skipped by a cancel stay skipped. The bulk action goes back to In progress and settles again when the retried rows are done.
Fix the cause first when you can — a failed row usually names it (a style code already in use, a required field missing) — otherwise the retry ends the same way. The API offers the same action as POST /api/stores/{store}/mass_actions/{id}/retry_failed_rows.
What the outcomes mean
| Status | Meaning |
|---|---|
| In progress | Rows are still running. |
| Succeeded | Every row succeeded. |
| Partially failed | The batch finished, but some rows failed. Open the rows to see which and why. |
| Failed | Every row failed; nothing was created. |
| Canceled | Someone stopped the batch. Rows already finished still count. |
A failed row is never retried on its own — the agent (or you) decides what to do with it, so a batch never silently repeats work. When you do want another go, use Retry failed rows on the bulk action's page.
Other bulk operations that work this way
Creating listings was the first bulk action, but the same mechanism now runs bulk operations on a
listing's variants: moving them to another listing, enabling, disabling, deleting, and setting one
field to the same value across many of them. Whether you start one from the variants table or ask an
agent to, it becomes a bulk action with the same rows, progress and per-row outcomes.
For an agent this is the important part: a bulk variant change does not take effect while it is still
answering you. The chat pauses until every row settles and the agent is handed the real outcome, so it
no longer has to guess whether the change went through — and cannot mistake "not finished yet" for
"failed".
Using bulk actions from the API
The bulk create endpoint accepts any number of rows, each carrying the same fields as a single listing create, plus an optional reference (such as the style code) that is echoed back with that row's result:
POST /api/stores/{store}/channels/{channel}/listings/mass_create
{ "rows": [ { "reference": "ABC123", "data": { ...same body as a single listing create... } } ] }
It responds immediately with the bulk action. Track it with GET /api/stores/{store}/mass_actions/{id}, list its rows and their outcomes with GET /api/stores/{store}/mass_actions/{id}/rows, stop it with POST /api/stores/{store}/mass_actions/{id}/cancel, and rerun its failed rows with POST /api/stores/{store}/mass_actions/{id}/retry_failed_rows. GET /api/stores/{store}/mass_actions lists them all, filterable by status. See the API reference for the full request and response shapes.
The bulk variant endpoints take the same rows shape, where each row names the variant it acts on:
POST /api/stores/{store}/channels/{channel}/listings/{listing}/variants/mass_move
{ "rows": [ { "data": { "id": "olv_12ab", "destination_listing_id": "ol_34cd" } } ] }
