Connect Etsy
Etsy is a listings provider — it brings an existing shop’s inventory onto ETZY as a connected store, rather than printing to order. Listings are GOT for USD (the seller already holds and ships the item), on the same passthrough rail as USD print-on-demand goods.
Connect your Etsy shop
Connecting brings an existing Etsy shop’s listings onto ETZY as a connected store. The handshake is Etsy’s own OAuth (PKCE) — this app never sees an Etsy password.
Owner provisioning checklist
- Register an app at Etsy Developers (etsy.com/developers) and note its keystring.
- Add
ETSY_CLIENT_ID(the keystring) andETSY_CLIENT_SECRET(the shared secret) as Railway server variables — neverNEXT_PUBLIC_*, and neither ever committed to the repo. - Set the app’s redirect URI to
{NEXT_PUBLIC_SITE_URL}/providers/etsy/callbackexactly. - Request scopes
listings_randshops_r(read-only — this pass only imports; write-back to Etsy is out of scope). - Author + apply a shop-connection schema (propose-first) to hold the access/refresh token per store — the handshake above works without it, but nothing can be persisted until it lands.
Listing import — mapping preview
No shop is connected in this environment, so these are preview fixtures — the same mapping (lib/etsy/mapper.ts) a connected shop’s real listings would go through. Each renders as an OFFER on the USD rail; nothing here is imported or linkable yet.
Hand-thrown ceramic mug, speckled glaze
Wheel-thrown stoneware mug, food-safe glaze, holds 12oz. Made to order.
Linocut botanical print, A4
Original hand-pulled linocut print on archival paper. Signed and numbered.
Beeswax taper candle set (pair)
100% beeswax tapers, hand-dipped, natural honey scent. Unbleached cotton wick.