To research an account before a go-to-market meeting, run four Cargo actions on the company’s domain: a Google search (serper.search), a scrape of its own pages (firecrawl.scrape), a dated news search (exa.search) and a search of its open roles (theirStack.searchJobs). Then write a one-page briefing where every line names the source it came from.
This is the one-off research job: one company, one meeting, run from a terminal or by a coding agent. It is the research-account skill. If you want a briefing posted to Slack every time an external meeting is booked, that is the deployed meeting-prep cookbook instead.
The data behind it #
Cargo platform data, 90 days to Oct 16 2026: about 435k Google searches through Serper and 296k page scrapes through Firecrawl ran on Cargo. Search and scrape are the two most used research steps on the platform, and both cost 0.05 credits a call.
Run it #
1. Install and sign in
npm install -g @cargo-ai/cli
cargo-ai login --email you@company.com # sends a code
cargo-ai login --email you@company.com --code 123456 # creates the account on first use
There is no browser step, so a coding agent can run this itself. A new account starts with 100 free credits and no card, which covers dozens of briefings.
2. Ask what the meeting is for
Before spending anything, get two sentences: what is the meeting, and what are you selling them. A discovery call and a renewal need different pages. Without the answer the briefing turns into a company profile.
3. Search Google for what they have announced
cargo-ai orchestration action execute \
--action '{"kind":"connector","integrationSlug":"serper","actionSlug":"search"}' \
--data '{"query":"\"Acme\" announces OR launches OR partners","limit":10}' \
--wait-until-finished
serper.search takes a query and optional country, locale and limit. The results come back under organic, as Google ranks them.
4. Read their own pages
cargo-ai orchestration action execute-batch \
--action '{"kind":"connector","integrationSlug":"firecrawl","actionSlug":"scrape"}' \
--records '[{"url":"https://acme.com"},{"url":"https://acme.com/customers"},{"url":"https://acme.com/careers"}]' \
--wait-until-finished
firecrawl.scrape returns each page as markdown by default, with navigation, headers and footers stripped. Set "includeFullPage": true to keep them, or "formats": ["links"] to list every link on the page. One record is one page.
5. Search the news, with a date floor
cargo-ai orchestration action execute \
--action '{"kind":"connector","integrationSlug":"exa","actionSlug":"search"}' \
--data '{"query":"Acme priorities, challenges and competitors","category":"news","startPublishedDate":"2026-04-16","numResults":10}' \
--wait-until-finished
exa.search returns ranked results. startPublishedDate keeps last year’s news out of this week’s briefing, and includeText: true adds each page’s text.
6. Read what they are hiring for
cargo-ai orchestration action execute \
--action '{"kind":"connector","integrationSlug":"theirStack","actionSlug":"searchJobs"}' \
--data '{"companyFields":{"company_domain_or":["acme.com"]},"fields":{"posted_at_max_age_days":90},"limit":10}' \
--wait-until-finished
Open roles are the most under-used input in account research. A company hiring six data engineers is telling you where its budget went, in public and dated. The domain goes in companyFields.company_domain_or, not in a record: without that filter the search is not scoped to the account.
For the size, industry and headcount baseline, add linkedin.enrichCompanyFromDomain with {"domain":"acme.com"}.
What it costs #
From each action’s credit definition:
| Action | Credits |
|---|---|
serper.search | 0.05 per search |
firecrawl.scrape | 0.05 per page |
exa.search | 0.175 per search (10 results included), 0.025 per extra result |
theirStack.searchJobs | 0.5 per job posting returned |
linkedin.enrichCompanyFromDomain | 0.5 |
One briefing with one search, three pages, ten news results and the baseline is about 1 credit, plus 0.5 per job posting returned. limit caps the job search, so limit: 10 caps it at 5 credits.
Write the briefing #
Keep it to one page, and keep three kinds of line apart:
- Sourced: it came back from one of the calls above. Say which.
- Inferred: you reasoned it from what came back. Prefix it
Likely:and say what it rests on. - Unknown: say so. “No public statement on this” is usable in a call. A confident sentence an agent made up is not, because someone will repeat it to the customer.
Close with three questions to ask, drawn from what you found. For a renewal, drop the news search and keep the baseline and the open roles: the account team knows the story, they want what changed.
Frequently asked questions #
No. Unless you connect your own key, Cargo calls each provider on Cargo’s key and bills the action’s credits. If you already pay one of them, connect your key instead.
This page is a one-off job you run before a specific meeting. The meeting-prep cookbook deploys an agent that wakes on every external Google Calendar booking and posts a briefing card to a Slack channel, with reschedules and cancellations threaded under it.
Yes. parallel.createTask takes a research question and an outputSchema (a JSON schema passed as a string) and returns structured answers. Pin processor to lite (0.125 credits): left out, it defaults to core (0.625). Ask for a sources array in the schema so every claim can be checked.
Yes, with execute-batch over the list, but sample 10 to 20 accounts first and read the cost and output before the full run. For research across a full territory, see the guide to automating sales research with AI agents.
Related: Automating sales research with AI agents, Track job changes of your contacts.