Inspiration
A freight broker doesn't own trucks. It wins by understanding the shipper: what they ship, where it goes, and who moves it now. Our case partner told us that this prospect research is one of the biggest time drains for their reps. It's slow because reps search one source at a time. It's inconsistent because depth depends on the rep and the week. And it doesn't compound, because findings stay in personal notes and the next rep starts over. We wanted to give every rep a one-page brief they could trust, and make that research keep paying off for the whole team.
What it does
Call Ready turns a company name into a sourced, one-page prospect brief. A rep types in a shipper's name and the agent researches public sources like company sites, press releases, news, trade press, and public filings. It returns:
- Sharpest Signal: the single most freight-relevant finding, shown at the top
- Freight profile: what the company likely ships, where, and how often
- Signals: facility openings, expansions, new product lines, seasonal patterns, and logistics hiring
- Verified vs. Inferred labels on every claim, with a clickable source link
- 2 to 3 call openers tied directly to the signals found
- Gaps: what the agent couldn't confirm, so the rep knows where to dig
A dashboard map draws arcs from the rep's location in Fort Worth to each facility with the distance in miles. This turns the map into a conversation starter ("You have a DC 30 miles from us"). Briefs are saved and can be downloaded as a Word one-pager, so the next rep on the account starts from the last brief instead of from zero.
How we built it
- Research agent (Python + Claude API):
run_agent.pycalls Claude with the web search tool enabled, using a capped number of searches per run to control time and cost. - Reusable prompt (
agent_prompt.md): defines the freight research checklist, labeling rules, word limits, source-age rules, and a strict JSON output schema. This file is our reusable AI build: point it at any new prospect and it produces a usable brief. - Structured output: the agent returns JSON, so the same response powers both the brief and the map.
- Geocoding: locations are converted to coordinates with OpenStreetMap Nominatim, never by the AI, so map pins can't be made up.
- Dashboard (Streamlit + pydeck): hosted on Replit, with the API key stored in Replit Secrets.
- Export (
make_doc.py): generates a Word version of the brief for CRM notes or sharing.
We tested the system on our three prospects: Pirelli, BlueLinx, and A. O. Smith.
Challenges we ran into
- Verified and inferred claims blending together. Our first Pirelli brief mixed confirmed facts and guesses in the same field. We rewrote the prompt (v1 to v2) with strict labeling rules, so each claim is either tied to a source or clearly flagged as inferred.
- Keeping it to one page. The agent wanted to write research dumps. Word limits and a fixed schema forced it to prioritize.
- Stale sources. Old press releases can read like current news, so we added source-age rules.
- Supplier data is mostly private. A company's facilities are usually public, but supplier and customer relationships mostly aren't. We chose to show those as sparse and labeled Inferred instead of overstating them.
- Learning the tools from scratch. For most of us, this was our first agent. Replit setup, secrets, workflows, and deployment all took real trial and error.
Accomplishments that we're proud of
- A working tool that goes from a company name to a sourced brief and live map on a real website
- Every claim is labeled and sourced, so reps can trust the brief instead of double-checking it
- A reusable prompt and schema that work on any new prospect, not a one-off chat
- A map that turns facility data into a sales opener tied to the rep's own location
- Catching our own AI errors and building fixes into the tool instead of just patching the output
What we learned
- In sales research, trust matters more than length. A short brief with sources beats a long one without them.
- AI will state guesses with confidence, so the tool itself has to make the line between verified and inferred visible.
- Some tasks shouldn't be left to the model. Coordinates from a geocoder are reliable; coordinates from an LLM are not.
- Prompt design is product design: the schema and rules shaped the brief more than any UI choice.
What's next for Supply Chain Sales Case Team 13
Our next step is turning each brief into a contact list so reps know who to call, not just what to say. Right now, Call Ready tells a rep why a shipper might need a broker. The next version will also suggest who at the company is likely to make that decision.
- Target the right roles: the agent will look for logistics, transportation, supply chain, and procurement leaders, since those are the people who actually book freight.
- Public sources only: contacts will come from company leadership pages, press releases, news quotes, and public filings, never from scraping behind a login.
- Same trust rules as the brief: each contact will be labeled Verified (named in a source) or Inferred (a likely role with no confirmed name yet), with the source link attached.
- Linked to signals: each contact will be tied to a specific facility or signal, so a rep can call the person responsible for the new DC and open with that.
- Shared and updated: contact lists will be saved with the brief, so when a rep confirms or updates a contact after a call, the whole team benefits.
We also plan to add freshness tracking for stale briefs, call notes on each account, and CRM integration so briefs and contacts save directly to the team's existing system.
Log in or sign up for Devpost to join the conversation.