Sales email to ShipStation · 2026

Parse a sales email, hold it or build a label

Laboratoryscrocle.cloud/demo/shipstationIndependent engineer

Sales email to ShipStation interface

Orders arrive by email, and staff type the shipping address, SKU, and quantity into ShipStation one field at a time. A missing ZIP code still produces a label, so a bad address can ship. The goal is to extract the order, validate it, and hold it before anything ships.

The constraint

This demo does not watch Gmail and does not call a live ShipStation store. Extraction is patterns plus Pydantic, so every rule is readable and testable. Production would attach the inbox and POST the same JSON.

Built with

  • Python
  • FastAPI
  • Pydantic

How it works

Email in. Parse and validate. If it is complete, build order and label JSON. If not, hold. No live carrier.

The calls that shaped it

Each decision with the pressure that forced it and the price it keeps costing.

  1. Check before you print

    A missing ZIP still produced a label in the old flow, so a bad address could ship before anyone read it.

    A bad city, state, or ZIP goes to hold. The demo will not invent a label for an incomplete address.

    The cost: An incomplete order stops, so a person has to resolve it before it ships.

  2. Payloads you can read

    An integration that posts straight to a live carrier cannot be reviewed before it acts.

    The create-order and create-label JSON are the same shapes ShipStation expects. You can see them. They are not sent.

    The cost: The demo stops short of the last step; a production build attaches the inbox and the store.

Open an inbox message and run it. A complete order builds ShipStation JSON and a label preview; a missing ZIP goes to hold. Try the missing-ZIP case: that hold path is the part that protects a real store.

Where it stands

Demo. Live at scrocle.cloud/demo/shipstation. The extract, validate, hold path runs against example orders.

  • A complete order builds ShipStation-shaped order and label JSON; an incomplete one goes to hold.
  • Extraction is patterns plus Pydantic, so every rule is readable and testable.
  • No live carrier: the writes are simulated and no store is contacted.
  • Live demo. The extract, validate, and hold path runs against example orders.

What was handed over

  1. How to run the FastAPI demo locally
  2. That ShipStation writes are simulated
  3. What a production inbox watch would add

Open the live demo

Next project Telegram agent walkthrough How a production AI agent stack is wired