DEV Community

Qtim
Qtim

Posted on

The Price Updated. Inventory Didn’t: Why Seller Portals Lose the Truth Between Systems

A seller portal becomes useful when it shows what each platform has actually done, where an operation stopped, and what the team can do next

A manager updates a price and sees a green checkmark. Inventory is still old. On the marketplace, the item has already joined a promotion. At that point, one question matters: was the change sent, accepted, or actually applied?

A simple interface can hide that gap behind the word “success.” The team discovers it later, when an order has to be cancelled, a discount eats into margin, or accounting cannot find the right report.

I’m Anton Fokin, CEO of Qtim. Here is how we break a unified seller portal into operational states, why a working API connection is only the beginning, and which end-to-end flow belongs in the first release.

A green checkmark hides an asynchronous workflow

The “Update price” button starts a chain. The portal creates a request, sends it to the marketplace, receives a technical response, and waits for the processing result. The operation can stop at any step.

A price change therefore needs at least four visible states:

• created in the portal;

• sent to the marketplace;

• accepted for processing;

• applied, or rejected with a reason.

Amazon’s current Feeds API makes the gap explicit. After createFeed returns a feed ID, the client still has to check getFeed until processing reaches DONE, CANCELLED, or FATAL. A FATAL result can mean that some, none, or all operations completed, and the processing report shows which records succeeded or failed.

The same guide records a recent platform change: since July 31, 2025, Amazon no longer supports legacy XML and flat-file listing feeds for listings, pricing, inventory, relationships, and images. A connector can keep accepting clicks in the portal after the platform has changed its rules, so connector version and feed format belong in monitoring too.

Inventory, orders, and documents need the same discipline. For each operation, the portal stores its own ID, the marketplace operation ID, the original payload, the current state, and the error message. A manager can see where the process stopped. A developer can reconstruct it from the event log.

The next decision is the source of truth. A price may come from an ERP or a separate pricing service. Physical inventory may live in an ERP or a warehouse management system, while available-to-sell inventory depends on reservations and marketplace rules. Before development starts, we assign an owner to every field. That keeps systems from overwriting one another.

Price and inventory do not share a clock

Price and inventory sit next to each other on screen, which makes them look like one dataset. The integration sees separate updates with their own queues, validation rules, and completion times. This is how the price can change while the stock count remains old.

Amazon warns that feed processing can take up to eight hours under high load. Product data feeds are processed sequentially, and several small submissions can sit behind earlier feeds. The right interface therefore shows a queued operation as queued; it does not upgrade an accepted request into an applied change.

We use a managed queue. A temporary failure waits before the next attempt, with the interval increasing after repeated errors. A permanent failure, such as an invalid value, moves to an exception queue with a clear reason. Retries keep the same idempotency key, so a restored connection does not create a duplicate operation.

Users need four timestamps: when the source value changed, when the portal sent it, when the marketplace accepted it, and when the result was confirmed. “Updated at 12:40” is useless without the event behind it.

The main view can stay simple: the current source value, the confirmed marketplace value, the last reconciliation time, and the next action after an error. A discrepancy then becomes a task instead of a surprise in a report.

One order crosses several status dictionaries

Orders are harder because both sides of the integration change state. The marketplace creates the order and advances it through its own workflow. The ERP reserves inventory. The warehouse confirms picking. Delivery adds another set of events.

Shopify’s current webhook guidance shows why a push event is only one part of synchronization. Delivery order is not guaranteed, even within one topic. The same webhook can arrive more than once after a timeout or retry, and an application can miss an event during downtime.

Shopify recommends using delivery IDs to skip duplicates, timestamps to restore event order, and reconciliation jobs to fetch changes periodically. A seller portal needs the same safeguards: accept each event once, preserve the platform’s original code, map it to an internal business state, and reconcile against the source.

Flattening every marketplace into five universal labels creates blind spots. “Ready to ship” may require different actions and documents on two platforms. The interface can show a clear business state while the data model preserves the external code and the full transition history. Support can then explain why an order is stuck without assembling the story from screenshots.

Inventory also needs more than one number. Operations teams usually work with physical stock, reserved stock, available-to-sell stock, and the value confirmed by each marketplace. The available-stock formula should live in one place. Copying it into the ERP, the portal, and an integration script guarantees drift.

Idempotency protects the workflow at this point. A repeated event must not deduct stock again, create a second document, or launch another shipment. It is invisible when it works and expensive when it fails.

“Generated” and “received” are separate document states

Documents rarely make the first prototype because the team is focused on catalogue and orders. Later, managers still download reports from each marketplace, rename files, and reconcile periods across systems.

Amazon’s Reports API covers inventory, orders, tax, returns, and other operational data. Its current workflow separates requesting or scheduling a report, verifying that processing has finished, and retrieving the document. A “Download” button in the seller portal should expose that sequence: requested, generating, ready, or failed.

The file is only part of the record. The portal also needs the document type, marketplace, legal entity, reporting period, version, generation date, and links to orders or payouts. When a platform regenerates a report, the system must preserve which version went to accounting.

A useful document view answers three questions without a chat message: which period the report covers, whether it is ready, and who has already exported it.

The most useful dashboard is an exception queue
Early portal mockups often lead with revenue charts, order counts, and inventory by warehouse. Executives may need those numbers. Operations teams open the system to find out what requires intervention today.

We put these items on the first screen:

• prices rejected by a marketplace;

• products whose stock values disagree;

• orders stuck between states;

• documents that missed their expected generation time.

Each row opens the operation history: who changed the data, what the portal sent, what came back, how many attempts ran, and what can happen next. A recoverable error gets a retry action. A source-data error links to the field that needs correction. An unavailable API shows the time of the next attempt.

An audit trail matters more here than an attractive activity feed. It connects a person’s action, a data version, and the external response. Without that chain, “who changed the price?” becomes a search across chats and logs.

Permissions should follow operations too. A category manager edits prices, a warehouse employee handles shipments, an accountant exports documents, and a manager sees the overview. Permission to view an operation does not automatically include permission to retry or cancel it.

The first release should complete one operation end to end
Trying to combine catalogue, analytics, advertising, finance, and documents in the first release delays the test that matters. Pick one business operation and carry it through the entire system.

For example, a manager changes a price in the source system. The portal sends it to two marketplaces, receives final states, surfaces discrepancies, and safely retries a failed operation. That one flow tests the data model, queue, permissions, audit trail, and error handling. The next flow can reuse the foundation.

We built related coordination mechanisms in the HOTZ project: one catalogue with two-way 1C exchange for products, inventory, and orders. In the Teplomash project, a shared platform synchronized catalogues, prices, inventory, and order processing for three brands. These are different types of systems, but they rely on the same architectural principle: one layer coordinates data across several systems and keeps exchange rules in one place.

Custom development is unnecessary for every seller. A single marketplace, a small catalogue, and straightforward operations often fit the platform’s native tools or an off-the-shelf connector. A dedicated layer starts to make sense when one operation crosses marketplaces, an ERP, a warehouse, and document workflows, and reconciliation failures already cost cancellations, staff time, or margin.

Decision rule: when an employee completes one business operation across several systems, a unified portal has something valuable to unify.

Start with a map of data owners and one end-to-end flow. Our guide to custom account and ecosystem development outlines the integrations and operational mechanisms that usually belong in this kind of system.

Top comments (0)