Marketplace integration is reconciliation work: someone else's model of an order, a shop, a buyer and a credential, mapped onto yours. The second marketplace is where it starts to hurt, because the abstraction you wrote for the first has assumptions baked into it — that a stored refresh token stays valid, that a buyer has a phone number, that orders only ever come into existence — and the next marketplace does not share them.
The four things that go wrong
- Auth diverges under a shared name. Amazon, Etsy, Walmart and eBay all use OAuth 2.0 on paper. What differs is who owns the credentials, whether the stored secret changes during normal operation, and how long anything lasts.
- The field you need is not returned. Marketplaces intermediate buyer contact, and something downstream — a carrier, a support desk — demands it anyway.
- Deletion is invisible. An incremental sync asks what changed. Nothing answers what stopped existing.
- Concurrency nobody specified. A scheduled worker usually guards against overlapping itself. It rarely guards against a human clicking Sync now in the middle of a run.
Auth first, because it decides your schema
If you are building for more than one marketplace, the four auth models set side by side is the place to start: Amazon's roles and second token for buyer PII, Etsy's mandatory PKCE, Walmart's missing refresh token and headers in place of an Authorization header, eBay's RuName where a redirect URL should go — and then what all of that means for your account schema.
Etsy earns its own guide. Its refresh token rotates on every refresh and kills the previous one, so one failed write or two overlapping syncs can disconnect a shop for good, with only a human re-login to bring it back. Why a working Etsy integration rots after a few weeks covers the crash window, the race between a scheduled pull and a manual Sync now, the fix (cache the access token, refresh only near expiry, lock per shop), and the scope-frozen-at-consent rule that turns adding write access into a re-login.
Then the data gaps
If you are pushing marketplace orders into a carrier, you will hit a required consignee phone that the order payload does not contain — Etsy and Walmart do not return one. What each marketplace actually returns in place of a buyer phone sets out the three options, which one to pick, and why the fallback number's country is not a detail.
If you are building support tooling, stop looking for the endpoint that returns what buyers wrote — Amazon's Messaging API only sends. The email-relay pattern for ingesting buyer messages explains why the read side does not exist, the wrong turns worth skipping (Notifications, scraping), how to match a message to its order and seller account, how to avoid processing the same email twice, and where you cannot reply.
And the slow drift
The last one is structural: every row looks fine and the total is wrong. Rows for orders that no longer exist upstream is about the gap in upsert-only syncs — why the sync cannot see it, why a single 404 is a hypothesis rather than a verdict, why you retire rather than hard-delete, and the sibling bug of pulling an incremental sync on created date.
These are the problems that only show up once you are multi-marketplace, which is why they sit in one place here. Building integrations like these is what I do.
Shahzeb Khan runs Databaaba, a one-person studio that builds marketplace apis integrations
for sellers, agencies, and software teams. Every guide here came out of a real client build.