How to Build an Order Tracking Board in Monday.com

Track all your orders in Monday.com with automated status updates from your e-commerce store.

What This Integration Does

Operations and customer-success teams live in Monday.com, but their source of truth for orders is buried in Shopify or WooCommerce. This workflow keeps both in sync: when an order is created in your store, a matching Monday item appears on a board with columns for order number, customer, total, status, and tracking. When the order's status changes (fulfilled, refunded, cancelled), the matching item updates in place rather than spawning a duplicate.

The workflow runs on two triggers: a webhook on order creation and a webhook on order updates. Both find or create the Monday item using the order ID as the natural key, so the board stays consistent even if events arrive out of order or get replayed.

Prerequisites

  • A Shopify connection with read_orders scope (or WooCommerce with read access to orders).
  • A Monday.com connection with permission to read and write items on the target board.
  • A Monday board with columns for order number, customer, total, status, and tracking number. Note each column's ID - you'll need them when calling create-item.
  • Webhook URLs from Spojit configured in your store's webhook settings for orders/create and orders/updated.

Step 1: Webhook Trigger

Add a Trigger node and set its type to Webhook. Copy the generated URL into your Shopify webhook settings (Settings - Notifications - Webhooks) for the orders/create event. The trigger emits the full order payload, which downstream steps can reference as {{ trigger.body }}.

Step 2: Look Up Existing Item

Add a Connector node pointing at monday and pick the list-items tool. Filter by your "Order Number" column matching {{ trigger.body.name }}. This tells you whether the order is already on the board.

Step 3: Condition - Create or Update

Add a Condition node that branches on items.length == 0:

  • True branch (no item exists): proceed to Step 4 to create.
  • False branch (item exists): proceed to Step 5 to update.

Step 4: Create Monday Item

On the create branch, add a Connector node pointing at monday and pick create-item. Configure:

  • boardId: your tracking board's ID
  • itemName: {{ trigger.body.name }} (e.g. #1042)
  • columnValues: a JSON object mapping column IDs to values, for example:
{
  "customer_name": "{{ trigger.body.customer.first_name }} {{ trigger.body.customer.last_name }}",
  "customer_email": "{{ trigger.body.email }}",
  "order_total": {"text": "{{ trigger.body.total_price }}"},
  "order_status": {"label": "{{ trigger.body.financial_status }}"},
  "fulfillment_status": {"label": "{{ trigger.body.fulfillment_status }}"}
}

Step 5: Update Existing Item

On the update branch, add a Connector node pointing at monday and pick update-item. Pass the existing item's ID (from Step 2) along with the same columnValues object, plus any tracking fields that came in on the update payload:

{
  "fulfillment_status": {"label": "{{ trigger.body.fulfillment_status }}"},
  "tracking_number": "{{ trigger.body.fulfillments[0].tracking_number }}",
  "tracking_url": {"url": "{{ trigger.body.fulfillments[0].tracking_url }}", "text": "Track"}
}

Step 6: Confirm and Log

Add a final Condition node on the Monday response. On success, no further action is needed. On failure, route to slack send-message in your ops channel with the order number and error so the team can manually patch the board.

Tips

  • Cache column IDs - store the board's column IDs in workflow variables or a small mongodb collection so they're not duplicated in every node.
  • Use Monday's status column labels exactly - mismatched casing silently fails (the column stays blank). Mirror Shopify's lowercase values (paid, refunded, pending) into matching Monday labels.
  • One workflow, two triggers - Spojit supports multiple triggers feeding the same canvas, so you don't need a separate workflow for create vs update.

Common Pitfalls

  • Webhook retries - Shopify retries failed webhooks for 48 hours. Without the look-up-by-order-number guard in Step 2, you'll end up with duplicate items.
  • Out-of-order delivery - an orders/updated webhook can arrive before orders/create. If the item isn't on the board yet, create it on the update path instead of failing.
  • columnValues encoding - Monday expects a JSON-encoded string for some column types. Wrap the object with the json connector's stringify tool if the API rejects raw objects.
  • Rate limits - Monday's GraphQL API allows 5,000 complexity units per minute. Bulk backfills should pace themselves; live event traffic almost never hits the ceiling.

Testing

Place a test order in your store and watch the Monday board for the new item to appear within a few seconds. Then update the order's fulfillment status and confirm the same item updates rather than a second appearing. Once both flows look right, leave the webhooks subscribed.

Learn More

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.