By Sagar Shankaran, Founder of CallSphere
Discover how AI voice agents automate freight broker carrier dispatch, matching loads to available carriers in minutes instead of hours.
Key takeaways
Freight brokerage is a $250 billion industry in the United States, and its core workflow has barely changed in 30 years: a broker receives a load from a shipper, then starts calling carriers to find one who has a truck available in the right location, at the right time, for the right price. An experienced freight broker makes 50-100 phone calls per day. Of those calls, 80% reach voicemail, result in a "no availability" response, or connect to a carrier who cannot service the lane.
The economics are punishing. A broker's time is worth $40-80 per hour depending on seniority and commission structure. If 80% of calls are unproductive, and each call takes 3-5 minutes including dial time, hold time, and conversation, a broker spends 3-5 hours daily on calls that produce zero revenue. Across a 20-broker operation, that is 60-100 hours of wasted labor per day — roughly $400,000-$800,000 annually in unproductive phone time.
Meanwhile, loads sit unbooked. The average time to cover a load (from shipper tender to carrier confirmation) is 2-4 hours for standard lanes and 8-24 hours for specialty or seasonal loads. In a spot market where rates fluctuate by the hour, delays cost money. Every hour a load sits unbooked, the broker risks the shipper pulling the load and giving it to a competitor.
Digital freight platforms like DAT, Truckstop, and Uber Freight have digitized load posting, but they have not solved the carrier engagement problem. Posting a load on a board is passive — you wait for carriers to find your load, evaluate it, and call you. For urgent or premium loads, waiting is not an option.
flowchart LR
CALLER(["Client"])
subgraph TEL["Telephony"]
SIP["Twilio SIP and PSTN"]
end
subgraph BRAIN["Salon AI Agent"]
STT["Streaming STT<br/>Deepgram or Whisper"]
NLU{"Intent and<br/>Entity Extraction"}
TOOLS["Tool Calls"]
TTS["Streaming TTS<br/>ElevenLabs or Rime"]
end
subgraph DATA["Live Data Plane"]
CRM[("CRM and Notes")]
CAL[("Calendar and<br/>Schedule")]
KB[("Knowledge Base<br/>and Policies")]
end
subgraph OUT["Outcomes"]
O1(["Appointment booked"])
O2(["Reschedule completed"])
O3(["Stylist handoff"])
end
CALLER --> SIP --> STT --> NLU
NLU -->|Lookup| TOOLS
TOOLS <--> CRM
TOOLS <--> CAL
TOOLS <--> KB
NLU --> TTS --> SIP --> CALLER
NLU -->|Resolved| O1
NLU -->|Schedule| O2
NLU -->|Escalate| O3
style CALLER fill:#f1f5f9,stroke:#64748b,color:#0f172a
style NLU fill:#4f46e5,stroke:#4338ca,color:#fff
style O1 fill:#059669,stroke:#047857,color:#fff
style O2 fill:#0ea5e9,stroke:#0369a1,color:#fff
style O3 fill:#f59e0b,stroke:#d97706,color:#1f2937
The fundamental issue is that small and mid-size carriers — who control 90% of US trucking capacity — do not live on load boards. They answer their phones. Many owner-operators are driving when loads are posted and cannot check apps or emails. They rely on phone calls from brokers they trust. The phone remains the primary transaction channel in freight because the people who own the trucks prefer it.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent for logistics in your browser — 60 seconds, no signup.
Automated email and text outreach have low conversion rates in freight because carriers receive hundreds of load offers daily. A carrier who sees a text saying "Load available: Chicago to Dallas, $2,800" cannot evaluate it without asking questions — what's the commodity? Pickup window? Drop requirements? Lumper fees? These questions require a conversation, not a form.
AI voice agents solve the carrier dispatch problem by conducting dozens of carrier calls simultaneously, having intelligent conversations about load details, and closing bookings without human intervention. CallSphere's freight brokerage module deploys specialized voice agents that understand freight terminology, rate negotiation, and carrier qualification.
The system works by taking a load tender from the broker's TMS, identifying a ranked list of potential carriers based on lane history, proximity, equipment type, and rate preferences, and then initiating parallel outbound calls. Each AI agent conducts a complete dispatch conversation: confirming availability, discussing load details, negotiating rate if needed, and booking the load.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ TMS / Load │────▶│ CallSphere │────▶│ Parallel │
│ Tender Input │ │ Load Matcher │ │ Carrier Calls │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Carrier DB │ │ Rate Engine │ │ Carrier Phone │
│ (ranked list) │ │ (floor/ceiling) │ │ (PSTN) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Lane History │ │ Booking │ │ Rate Confirm │
│ & Preferences │ │ Confirmation │ │ & Document Gen │
└─────────────────┘ └──────────────────┘ └─────────────────┘
from callsphere import VoiceAgent, BatchCaller
from callsphere.freight import TMSConnector, CarrierDatabase, RateEngine
# Connect to TMS
tms = TMSConnector(
system="mcleod",
api_key="tms_key_xxxx",
base_url="https://your-brokerage.mcleod.com/api/v2"
)
# Initialize carrier database with lane history
carrier_db = CarrierDatabase(
connection_string="postgresql://broker:xxxx@db.internal/freight",
lane_history_days=180
)
# Rate engine with floor and ceiling
rate_engine = RateEngine(
dat_api_key="dat_key_xxxx",
margin_target_pct=15,
max_rate_ceiling_pct=120 # never exceed 120% of market rate
)
async def dispatch_load(load_id: str):
"""Find a carrier for a load using AI voice agents."""
load = await tms.get_load(load_id)
# Rank potential carriers
candidates = await carrier_db.find_carriers(
origin_zip=load.pickup_zip,
destination_zip=load.delivery_zip,
equipment_type=load.equipment,
max_deadhead_miles=150,
limit=30
)
# Get rate parameters
market_rate = await rate_engine.get_market_rate(
origin=load.pickup_zip,
destination=load.delivery_zip,
equipment=load.equipment
)
offer_rate = market_rate * 0.92 # Start 8% below market
max_rate = market_rate * 1.05 # Willing to go 5% above market
# Configure the dispatch agent
agent = VoiceAgent(
name="Freight Dispatch Agent",
voice="james",
system_prompt=f"""You are a freight dispatch agent for
{load.brokerage_name}. You are calling carriers to book a load:
- Origin: {load.pickup_city}, {load.pickup_state} ({load.pickup_zip})
- Destination: {load.delivery_city}, {load.delivery_state}
- Equipment: {load.equipment}
- Pickup: {load.pickup_date} {load.pickup_window}
- Delivery: {load.delivery_date}
- Commodity: {load.commodity}
- Weight: {load.weight_lbs} lbs
- Miles: {load.miles}
- Starting rate: ${offer_rate:.0f}
- Maximum rate: ${max_rate:.0f} (do not reveal this)
Workflow:
1. Greet carrier, identify yourself and brokerage
2. Ask if they have a truck available in {load.pickup_city} area
3. If yes, present load details
4. Offer the starting rate
5. If carrier counters, negotiate up to max rate
6. If agreed, confirm booking details
7. If unavailable or rate rejected, thank them politely
Be professional and efficient. Most calls under 3 minutes.
Never reveal the maximum rate. If they counter above max,
say you will check with your team and call back.""",
tools=["check_carrier_authority", "book_load",
"send_rate_confirmation", "counter_offer"]
)
# Launch parallel calls (CallSphere manages concurrency)
batch = BatchCaller(
agent=agent,
max_concurrent=10, # 10 simultaneous calls
stop_on_booking=True # Stop calling once a carrier books
)
result = await batch.call_list(
contacts=[{
"phone": c.phone,
"metadata": {
"carrier_id": c.id,
"carrier_name": c.company_name,
"mc_number": c.mc_number,
"load_id": load.id
}
} for c in candidates]
)
return result
The AI agent needs to handle rate negotiation naturally. Here is how the negotiation flow is structured:
@agent.on_tool_call("counter_offer")
async def handle_counter(carrier_id: str, load_id: str,
carrier_rate: float, current_offer: float):
"""Handle carrier counter-offer with negotiation logic."""
load = await tms.get_load(load_id)
max_rate = rate_engine.get_ceiling(load)
if carrier_rate <= max_rate:
# Accept the counter — within margin
margin_pct = ((carrier_rate - load.shipper_rate) / load.shipper_rate) * -100
if margin_pct >= 8: # Still making 8%+ margin
return {
"action": "accept",
"message": f"We can do ${carrier_rate:.0f}. Let me book that for you."
}
else:
# Margin too thin — split the difference
split_rate = (current_offer + carrier_rate) / 2
return {
"action": "counter",
"new_rate": split_rate,
"message": f"I can meet you at ${split_rate:.0f}. Does that work?"
}
else:
return {
"action": "decline",
"message": "That is above what we can do on this lane right now. "
"I will check with my team and follow up if anything changes."
}
| Metric | Before AI Dispatch | After AI Dispatch | Change |
|---|---|---|---|
| Calls to cover a load | 15-25 | 3-5 (AI handles rest) | -80% |
| Time to cover a load | 2-4 hours | 18-35 minutes | -85% |
| Broker productivity (loads/day) | 4-6 | 10-15 | +150% |
| Carrier answer rate | 22% | 22% (same) | — |
| Successful bookings per call | 8% | 12% | +50% |
| Annual labor cost per broker | $65,000 | $65,000 (same) | — |
| Revenue per broker per year | $280,000 | $700,000 | +150% |
| Carrier detention due to late dispatch | 12% | 3% | -75% |
CallSphere's batch calling engine manages call concurrency, ensuring carriers are not called simultaneously by multiple agents for different loads. The system maintains a carrier cooldown period to prevent call fatigue.
Phase 1 (Week 1-2): Data Integration
Phase 2 (Week 3): Agent Training and Testing
Still reading? Stop comparing — try CallSphere live.
See the logistics AI agent handle a real call — complete, industry-specific, and live in your browser. No signup.
Phase 3 (Week 4): Pilot and Rollout
A mid-size freight brokerage operating 35 brokers in the Midwest deployed CallSphere's AI dispatch agents for their dry van and reefer loads. Over 6 months:
The AI agent follows a structured negotiation playbook with configurable parameters (starting rate, maximum rate, margin floor, split-the-difference rules). It handles 85-90% of standard negotiations effectively. For complex situations — multi-stop loads, hazmat, team driver requirements, or carriers who insist on speaking with a human — the agent smoothly transfers to a live broker with full context. CallSphere's analytics show AI-negotiated rates average within 2.8% of rates negotiated by brokers with 5+ years of experience.
Initial reactions vary, but adoption has been positive. The agent identifies itself as an AI assistant from the brokerage at the start of every call. Most carriers care about two things: is the load good, and is the rate fair. If the AI provides clear load details and a competitive rate, carriers book. In CallSphere deployments, carrier booking rates with AI agents are within 2 percentage points of human broker rates after a 60-day adjustment period.
The agent verifies carrier authority status against the FMCSA SAFER database in real time before every call. If a carrier's authority is inactive, their insurance has lapsed, or their safety rating is unsatisfactory, the system skips them automatically. Post-booking, the system generates a rate confirmation with all required legal terms and sends it to the carrier for electronic signature.
This augments brokers. The AI handles the high-volume, repetitive work of finding available carriers and negotiating standard loads. Brokers focus on relationship building, complex loads, new lane development, and exception handling — the high-value activities that grow the business. Brokerages using CallSphere have not reduced broker headcount; they have increased revenue per broker.
The system monitors post-booking events. If a carrier does not check in at the pickup facility within the expected window or sends a cancellation, the AI automatically re-dispatches the load using the original ranked carrier list (minus the no-show). The broker is notified immediately. CallSphere tracks carrier reliability scores and factors no-show history into future carrier rankings, naturally prioritizing reliable carriers over time.
Written by
Sagar Shankaran· Founder, CallSphere
Sagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
A how-to for Colombian education and tutoring SMBs to answer parents and students instantly, book trial classes 24/7 in Spanish and English, and grow enrollment with a CallSphere AI agent.
Tbilisi professional-services firms serving relocating founders and IT companies use CallSphere AI voice and chat agents to answer enquiries 24/7 in English, Georgian and Russian and book consultations.
A practical how-to for Palau eco-resorts and dive operators on capturing every high-value, multilingual enquiry with a CallSphere AI voice and chat agent, while honouring Palau’s marine-conservation commitments.
How salons, spas and wellness SMBs across the UAE, Saudi Arabia and Qatar use CallSphere AI voice and chat agents to capture every booking 24/7 in Arabic, English and expat languages, and cut no-shows.
How estate agents and property managers in Luxembourg City and across the Grand Duchy use CallSphere to capture multilingual viewing and enquiry calls 24/7, GDPR compliant.
A practical guide for Senegalese logistics, freight, legal and consulting SMBs in Dakar and Thiès to capture every enquiry 24/7 with a CallSphere AI voice and chat agent in French, Wolof and English.
© 2026 CallSphere LLC. All rights reserved.
Made within New York
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI