Automatically Create Zendesk Tickets When Zendrop Orders Are Delayed
Polls Zendrop for orders that have been processing longer than expected and instantly creates a Zendesk support ticket for each delayed shipment so your support team can act fast. No more manually checking order statuses or missing delayed packages.
- 1
Schedule a regular order check
Add a
Schedule Triggernode and set it to run every hour (or at the interval that suits your team). This is the heartbeat of the workflow — it wakes up the automation on a cadence so no delayed order goes unnoticed for long. Set theTrigger IntervaltoHoursandHours Between Triggersto1. - 2
Fetch recent orders from Zendrop
Add an
HTTP Requestnode namedGet Zendrop Orders. SetMethodtoGETandURLtohttps://app.zendrop.com/api/v1/orders?status=processing. In theHeaderssection addAuthorizationwith the valueBearer YOUR_ZENDROP_API_KEY. Store your key in n8n credentials and reference it here. This returns all orders currently in processing state. - 3
Flag orders delayed beyond your threshold
Add an
IFnode namedIs Order Delayed?. In theConditionsetValue 1to the expression{{ new Date().getTime() - new Date($json.created_at).getTime() }}(milliseconds since order was created), set the operator toLarger Than, and setValue 2to172800000(48 hours in milliseconds). Orders older than 48 hours in processing state will pass to theTruebranch. Adjust the number to match your store's expected fulfillment window. - 4
Format the ticket details
Add a
Setnode namedBuild Ticket Payloadon theTruebranch. Create three fields:subjectset toShipping Delay – Order {{ $json.order_number }},bodyset toOrder {{ $json.order_number }} placed on {{ $json.created_at }} is still in processing after 48 hours. Customer email: {{ $json.customer_email }}. Please investigate with Zendrop., andpriorityset tonormal. This shapes the data cleanly before sending to Zendesk. - 5
Create a Zendesk ticket
Add an
HTTP Requestnode namedCreate Zendesk Ticket. SetMethodtoPOSTandURLtohttps://YOUR_SUBDOMAIN.zendesk.com/api/v2/tickets.json. UnderAuthenticationchooseBasic Authand enter your Zendesk agent email and API token (generate one in Zendesk Admin > Apps & Integrations > APIs). SetBody Content TypetoJSONand paste this body:{ "ticket": { "subject": "{{ $json.subject }}", "comment": { "body": "{{ $json.body }}" }, "priority": "{{ $json.priority }}" } }. Each delayed order now becomes a tracked Zendesk ticket.
Frequently asked questions
What if Zendrop's API structure differs from the fields used here?
Run the `Get Zendrop Orders` HTTP Request node manually once and inspect the output in n8n's execution log. Identify the exact field names for order number, creation date, and customer email in the returned JSON, then update the expressions in the `Set` node and `IF` node to match those real field names.
How do I avoid creating duplicate Zendesk tickets for the same delayed order?
The simplest approach is to add a tag or custom field to each Zendesk ticket using the order number, then query Zendesk before ticket creation to check if one already exists. For a quick fix at the beginner level, you can also limit the schedule trigger to once per day so duplicates are minimised during your review window.
Can I notify customers automatically instead of (or in addition to) creating a ticket?
Yes. After the `Create Zendesk Ticket` node you can add a second HTTP Request node that calls your email service (e.g. SendGrid or Mailchimp Transactional) using the `customer_email` field from the Zendrop order to send a proactive delay notification. Keep the Zendesk ticket as your internal record and use the email for customer-facing communication.