Assistance Needed to Recreate "Time to Fulfill" Report in ShopifyQL Analytics

From January to November 2024, I used the legacy version of Shopify Analytics to track my warehouse team’s performance. Specifically, I relied on the “Time to Fulfill” report, which provided the median time (from order placement to fulfillment) for orders fulfilled on a given day. I would run this report daily and record the metrics in my spreadsheet.

In late December, my store transitioned to the new ShopifyQL Analytics. Since then, I have been unable to recreate the “Time to Fulfill” report as it existed in the legacy version. Shopify Support provided instructions to generate a similar report, but the results do not match my previously tracked data.

My goal is to generate a report that includes:

  1. The total number of orders fulfilled on a specific date.
  2. The median “time to fulfill” for those orders fulfilled on that date.

Could anyone assist me in accurately recreating this report in ShopifyQL Analytics? If additional details or clarification are needed, let me know.

Thank you for your help!

Hi Trublue93,

Recreating the “Time to Fulfill” report in ShopifyQL Analytics sounds like an important task for tracking your warehouse performance. While I can’t provide a ready-made solution without knowing all the specifics of your data and how your legacy report was configured, here’s an overview of what’s typically required to resolve this.

First, you’ll need to map out and review the data fields used in your legacy report. This involves identifying the exact fields in ShopifyQL that correspond to the data you previously tracked. For instance, fulfillment times may now be stored in different formats or fields, so it’s essential to confirm how ShopifyQL defines and calculates “fulfillment time” to ensure it aligns with your legacy data.

Next, designing a custom ShopifyQL query will be necessary. The query should extract the total number of orders fulfilled on specific dates and calculate the median fulfillment time for those orders. You may also need to include filters to exclude unfulfilled or canceled orders and use grouping logic to break down the data by fulfillment date.

Once you’ve drafted a query, the output will need to be validated and cross-checked against your legacy data. Exporting the results to a spreadsheet and running side-by-side comparisons for a sample date range can help identify inconsistencies. If discrepancies arise, it’s important to determine whether they stem from differences in data sources, calculation methods, or ShopifyQL’s functionality.

Finally, expect some iteration in refining your query. Small adjustments to filters, grouping, or aggregation methods can often resolve inconsistencies.
I wish I could just offer a ready-made solution, but this will require a deeper dive. If you’d like, I’d be happy to help you resolve your reporting issue. Feel free to email me at martin.dejnicki@deploi.ca.

Best,

As we know ShopifyQL is deprecated to use anymore.

https://shopify.dev/docs/api/shopifyql

The ShopifyQL API is being sunset as of version 2024-07. Please consider using alternative sources of data in the Admin GraphQL API for your use-cases, such as the Orders API, and the Web Pixels API. You can continue using ShopifyQL API on GraphQL API version 2024-04.

Here’s how you can get your “Time to Fulfill” metrics both natively in ShopifyQL and with ToolsForShop—so you can pick whichever fits your workflow best.


1. ShopifyQL Method

  1. Open ShopifyQL Explorer

    • In Shopify Admin: Analytics → Explore → New query → ShopifyQL.
  2. Run this Query

    SELECT
      DATE(fulfilled_at) AS fulfillment_date,
      COUNT(*)                             AS total_orders,
      MEDIAN(
        TIMESTAMP_DIFF(fulfilled_at, created_at, MINUTE)
      )                                    AS median_time_to_fulfill_minutes
    FROM orders
    WHERE
      fulfillment_status = 'fulfilled'
      AND fulfilled_at IS NOT NULL
      /* To limit to one date, uncomment:
         AND DATE(fulfilled_at) = DATE("2024-12-15")
      */
    GROUP BY
      DATE(fulfilled_at)
    ORDER BY
      DATE(fulfilled_at) DESC
    LIMIT 30
    
    • total_orders = # of orders fulfilled each day
    • median_time_to_fulfill_minutes = your median “Time to Fulfill” in minutes
  3. Export & Schedule

    • Export as CSV or pin the chart to your dashboard.
    • Use Shopify’s scheduled reports to email yourself daily snapshots.

2. ToolsForShop “Fulfillment Insights” (Zero-Code)

If you’d prefer a UI-driven solution—no SQL needed—ToolsForShop can automate this end-to-end:

  1. Install ToolsForShop in your store.

  2. Enable the “Fulfillment Insights” Module

    • In ToolsForShop Dashboard → Analytics → Fulfillment Insights.
    • Toggle on “Time to Fulfill” analytics.
  3. Configure Your Metrics

    • Date Range: Daily, weekly, or custom.

    • Metrics:

      • Total Fulfilled Orders
      • Median Time to Fulfill (in minutes or hours—you choose).
  4. Automated Reporting & Alerts

    • Schedule PDF/CSV reports to your inbox or Slack at a set time each day.
    • Set Threshold Alerts: e.g. “Alert me if median time > 120 minutes.”
  5. Deep Dive & Export

    • Click into any date to see the underlying order list, fulfillment timestamps, and drill into outliers.
    • Export raw data or push directly to BigQuery / Google Sheets with one click.

Why ToolsForShop Helps

  • Zero-Code Setup: No need to remember SQL syntax—Metrics are ready out of the box.
  • Lifetime Consistency: Tracks across any number of orders—past, present, or future—so you never miss a cumulative total.
  • Flexible Scheduling: Email, Slack, or CSV—whichever fits your team’s workflow.
  • Actionable Alerts: Proactively catch fulfillment slow-downs before they impact customers.

Choose ShopifyQL if you want hands-on control via custom queries.
Choose ToolsForShop if you want a turnkey dashboard with scheduled reports, alerts, and deep drill-downs—no code required.