Many small teams copy new orders from their shop into the CRM by hand, then tell sales in chat. It is slow, error-prone, and breaks whenever an API rate-limits or goes down. This demo automates that hand-off end to end.
What I built
Pull: reads new orders from a paged Shop API
Normalize & validate: trims and lower-cases emails, rejects records with missing totals
Upsert: finds or creates the CRM contact by email, then creates a deal per order
Retry: honours Retry-After on 429, exponential backoff on 5xx, fails fast on other 4xx
Idempotent: processed order IDs are stored, so re-running never duplicates data
Notify: posts a run summary to a Slack-style webhook and writes a JSONL audit log
Result (mock APIs, synthetic data)
40 orders fetched → 39 synced, 1 invalid order flagged
8 unique CRM contacts (a messy duplicate email was merged)
23 rate-limit / server errors retried automatically → 0 orders lost
Second run: 0 synced, 39 duplicates skipped
Self-directed demo: the shop, CRM and chat APIs are local mock services, so it runs anywhere with no keys. The same pattern maps to Shopify / WooCommerce → HubSpot / Pipedrive → Slack. Source code: https://github.com/cricket20052022/api-workflow-automation