> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apollospace.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Logistics & transportation

> Freight, last-mile, and 3PL teams drowning in "where is my order?" and carrier chasing — with the sensitive line always staying human.

It's 7am and the truck is late. Before you even open the system, three
customers have already messaged on WhatsApp asking "where's my shipment?", a
carrier never answered yesterday's request for an update, and a delivery
that should leave today is stuck waiting on a proof of pickup from last week.
None of it is hard — it's just a lot, all at once, and every minute without
an answer is a customer calling again.

**What leaves your plate:** answering where an order is, chasing the carrier,
triaging the incident to the right owner, collecting the shipping documents,
and flagging a shipment before it misses its window all start happening on
their own — with context, within budget, and with the sensitive part always
waiting on a human.

## How it works, in one line

Logistics is, at bottom, **a status problem that changes constantly, plus
people chasing people.** The agent doesn't drive the truck — it makes sure
the right answer exists at the right moment, that nobody has to remember to
chase the carrier, and that a problem reaches its owner before the customer
complains.

```mermaid theme={null}
flowchart LR
    A[Trigger<br/>customer asks, shipment delays,<br/>document missing] --> B[Agent pulls context<br/>from Company Brain + CRM + order]
    B --> C[Decides + uses tools<br/>Chats, WhatsApp, CRM, Routines, Docs]
    C --> D{Sensitive?<br/>money, SLA,<br/>contract}
    D -->|No| E[Answers / chases / logs / alerts]
    D -->|Yes| F[Proposes + calls a human<br/>with full context]
    E --> G[Becomes memory<br/>the next delivery already knows]
    F --> G
```

## Concrete flows

### 1. "Where's my order?" — answered on WhatsApp from the record

**Trigger:** a status question arrives on [WhatsApp](/en/integrations/whatsapp)
or [chat](/en/features/chats) — "does my shipment leave today?", "what's the
tracking code?".

The agent identifies which order the person means, pulls the record from the
[CRM](/en/features/crm) and the shipment details from the
[Company Brain](/en/features/brain) — carrier, ETA, last update, manifest —
and answers right away, in plain language: where it is, when it arrives, the
tracking number. The interaction is logged as a
[CRM activity](/en/features/crm), so the next person to open the card sees
the customer has already been answered.

When the data **doesn't exist** or is stale — the last position is two days
old — the agent doesn't invent an "it's on the way." It flags the
information as outdated and kicks off the chase flow (below) instead of
pushing an empty answer.

<Note>
  The win isn't "a bot that replies." It's that **the customer gets the
  position immediately, on their channel**, without anyone stopping the
  operation to open three systems — and the answer comes from the real
  record, not a guess.
</Note>

### 2. Chase the carrier — and log what comes back

**Trigger:** an order has gone longer without an update than is acceptable, or
a customer asked for a position you don't have yet.

The agent assembles the chase with what matters — order number, invoice, last
known status — and sends it to the carrier contact by
[email or WhatsApp](/en/features/outbound), with [Marcus](/en/agents/marcus)
handling the send. You decide whether to require **human approval before each
send** or to let routine chasing run. When the carrier replies, the agent
reads the update, writes the new position into the
[order record](/en/features/crm), and if it changes the customer's ETA,
raises a [notification](/en/features/rotinas) in the bell of whoever owns the
account.

```mermaid theme={null}
flowchart TD
    A[Order with no update] --> B[Agent assembles the chase<br/>from the order record]
    B --> C[Marcus sends<br/>email / WhatsApp to carrier]
    C --> D{Replied?}
    D -->|Yes| E[Logs new position in CRM]
    D -->|Not in time| F[Re-chases + alerts the account owner]
    E --> G[Becomes memory]
    F --> G
```

The win: **the chase always goes out, on time, without anyone remembering** —
and every carrier reply becomes a searchable record, not an email lost in one
person's inbox.

### 3. Triage an incident — to the right owner, with a proactive alert

**Trigger:** a delivery goes wrong — damage, loss, a refused receipt, a wrong
address.

The agent classifies the incident from the record and the
[Company Brain](/en/features/brain) (what each kind of occurrence requires),
opens a [task](/en/features/boards) on the incidents board already carrying
the context — order, customer, carrier, what happened — and **assigns it to
the right owner** for that kind of case. In the same step, it raises a
[proactive notification](/en/features/rotinas) so the owner knows **before
the customer chases**, not after.

<Info>
  **Why this matters:** the cost of an incident isn't only the freight — it's
  the time until someone notices it exists. Triaging it on the spot, with the
  case already in the right person's lap, cuts that time from hours to
  seconds. Anything that needs a decision — a refund, opening a claim,
  changing a promised deadline — keeps waiting on a human (see below).
</Info>

### 4. Collect and file the shipping documents

**Trigger:** a pickup or delivery happens and generates paperwork — proof of
delivery, invoice, receipt, manifest.

The agent gathers the documents that arrive by [chat](/en/features/chats),
WhatsApp, or email, attaches each to the right [order](/en/features/crm), and
organizes them into [folders](/en/features/pastas) by customer, route, or
period — so that when someone needs the proof of delivery from three weeks
ago, it's one search away, not buried in a WhatsApp group. What's filed also
feeds the [Company Brain](/en/features/brain): the next question about that
shipment already has somewhere to look.

### 5. The routine that flags before the window slips

**Trigger:** a [routine](/en/features/rotinas) the agent schedules for itself
— hourly, or every morning — to sweep the open shipments.

On each run, the agent compares each shipment's ETA against its promised
window and **separates the ones at risk** of running late. For each, it
raises a [notification](/en/features/rotinas) in the bell, suggests the next
action (chase the carrier, warn the customer, reschedule) and, if you've
allowed it, fires the chase from flow 2. The result is to stop discovering a
delay through the customer's complaint and start knowing about it **while
there's still time to act.**

<Info>
  A routine never has a hectic Monday. It runs at the set time, every time,
  and turns "we only noticed it was late when the customer called" into "the
  system flagged it at 7am and we were already chasing."
</Info>

## What stays human

<Warning>
  The agent **proposes**, never decides alone, when the matter is:

  * **Money** — a refund, compensation, a claim payout, a discount, any
    financial adjustment with a customer or carrier.
  * **An SLA change** — any commitment that alters the deadline or condition
    promised to a customer.
  * **A commercial proposal or term** — freight pricing, a carrier contract,
    any commitment that becomes an obligation.
  * **Heavy external, legal, or regulatory communication** — formally opening
    a claim, a notice, a response to a regulator.
  * **Governance decisions and destructive actions.**

  In those cases the agent prepares everything — the draft, the context, the
  recommendation — and **waits for a person's approval.** Every action stays
  in the auditable trail, with author and rationale.
</Warning>

## Where to start

<Steps>
  <Step title="Teach your shipments to the Brain">
    Upload to the [Company Brain](/en/features/brain) your incident process,
    your carrier contacts, and what each kind of incident requires. That's
    where the agent pulls the answer and the classification from — without
    it, there's nothing to consult.
  </Step>

  <Step title="Connect WhatsApp and let the agent answer status">
    Hook up [WhatsApp](/en/integrations/whatsapp) and let the agent answer
    "where's my order?" from the record, escalating what it doesn't know.
    Start with human approval before each external reply and loosen as it
    proves itself.
  </Step>

  <Step title="Schedule the window sweep">
    Create a [routine](/en/features/rotinas) that sweeps open shipments and
    flags the ones at risk. One agent, one cadence — and autonomy grows like
    a ratchet, not a leap.
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="Operations" icon="gears" href="/en/use-cases/operations">
    The general operations pattern — triage, follow-up, and SLA — of which
    logistics is a high-volume case.
  </Card>

  <Card title="Routines" icon="clock-rotate-left" href="/en/features/rotinas">
    The cron of the operation — the window sweep and the chase that run on
    their own.
  </Card>

  <Card title="Native CRM" icon="address-book" href="/en/features/crm">
    Where the order, the customer, and every update stay live and searchable.
  </Card>

  <Card title="WhatsApp" icon="whatsapp" href="/en/integrations/whatsapp">
    The channel where "where's my order?" arrives — and the answer comes from
    the record.
  </Card>
</CardGroup>
