Courier performance dashboard for your carrier reviews

By General Input

Compare every carrier on on-time rate, transit time, and exceptions for any date range, then drill into the shipments behind each number.

Integrations

  • AfterShip
  • Google Sheets

Type

App

Categories

  • Operations

I want an internal dashboard I can open whenever I am deciding which courier to keep paying. It reads shipment data from AfterShip and turns it into a carrier scorecard I can slice by date range and by lane, drill into, and export.

At the top of the page, put a date range picker with presets such as last 30 days, last quarter, and a custom range. Everything below it reacts to the selected range. Directly underneath, show a scorecard table with one row per courier and these columns: shipment volume, on-time delivery rate, average transit days, and exception rate. Sort by volume by default, and let me sort by any column so I can rank carriers by whichever metric matters that day.

The metrics handler should page through AfterShip List Trackings for the selected dates using its cursor pagination: pass limit and cursor, then read data.pagination.next_cursor and data.pagination.has_next_page to decide whether to fetch again. Page in sequence rather than in parallel, because the account is capped at 10 requests per second. Resolve courier slugs into friendly carrier names with Get Couriers, and note that every AfterShip response is wrapped in a { meta, data } envelope. Cache the computed result per date range inside the handler so sorting, filtering, or drilling in does not refetch every page of shipments.

Compute shipment volume as the number of trackings in the range, on-time rate as the share of delivered shipments that arrived on or before their expected delivery date, average transit days as the mean number of days between pickup and delivery for delivered shipments, and exception rate as the share of shipments that hit an exception status. Show the underlying counts next to each rate, so a 100 percent on-time rate built on three shipments is not mistaken for a strong result.

Below the scorecard, add a lane view that breaks the same four metrics down by origin country and destination country pair. Let me group it either by lane across all carriers or by carrier within a lane, so I can see which routes are dragging a particular carrier's numbers down, and highlight lanes that are meaningfully worse than that carrier's own average.

Add a promised versus actual column to the lane view. Call AfterShip Batch Predict Estimated Delivery Date for the lanes currently on screen, since it accepts multiple shipment lanes in a single request, and compare the predicted delivery window against the real delivery dates for the shipments in that lane. Present it as the average gap in days plus a plain label such as on target, optimistic quoting, or genuinely slow, so I can tell whether a carrier is actually slow or just quoting dates it cannot hit.

Clicking any courier row or lane row drills into the underlying shipment list, filtered to that courier or lane within the selected date range. Each row shows tracking number, courier, origin, destination, ship date, promised date, actual delivery date, transit days, and current status. Clicking a shipment opens its checkpoint history from AfterShip Get Tracking by ID, rendered as a timeline of checkpoint messages with timestamps and locations. Fetch that checkpoint detail only when a shipment is opened, not for the whole list.

Put an Export button on the page that writes the current filtered view into a fresh spreadsheet using Google Sheets Create Spreadsheet, then fills it with Append Values. Name the spreadsheet after the selected date range, and give it one tab for the courier scorecard, one for the lane breakdown, and one for the shipment list behind the current filter. Show me the spreadsheet link when it finishes so I can drop it straight into our quarterly carrier review deck.

Remember my last selected date range so the dashboard reopens where I left it. While the first load for a range is running, show progress rather than a blank screen, since a wide range means paging through a lot of shipments. If a range has no shipments, or a carrier has too few shipments to judge fairly, say so plainly instead of showing a misleading percentage.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads