Overview
I built a batch automation that turns our product's insights into personalized, print-ready Revenue Opportunity Scorecards for sales prospects. You drop in a couple of links, a team of agents pulls the data, builds each scorecard, and hands back finished HTML and PDFs, with zero manual data entry.
15 → 0 min
Hands-on production per asset
~2 min
Hands-off runtime per asset
The problem
The insight was always valuable. Getting it into a prospect's hands was the slow part.
The scorecard itself was a great sales asset before any of this existed. It shows a prospect exactly how their product pages are performing, the specific opportunities to improve them, and the estimated annual revenue they're leaving on the table. When sales put one in front of a prospect, conversations started.
The catch was how it got made. Every scorecard was about ten minutes of careful copy-paste. Someone opened our platform, walked each product page by hand, and transcribed all the insight data and images. Then they opened Amazon, found the same product, and noted its price and monthly purchase volume. Then they dropped it all into a template, embedded the images, computed the revenue estimate, and exported a PDF.
Our product has no functional API, so every value had to be moved by hand. That made the whole thing fragile. Numbers got transposed, fields got skipped, and no two scorecards came out formatted quite the same way.
And it couldn't be batched. Sales wanted these as a way to open conversations, and demand ran north of twenty a day. The bottleneck was never the insight. It was a human sitting there, copying fields one at a time.
What I did
I rebuilt the whole thing as a team of agents coordinated through a spreadsheet.
I built it in Claude Code as an agent-orchestrated pipeline: one manager agent plus three specialized operators, all coordinated through a single Google Sheet acting as the shared data bus.
Tech stack
- Claude Code — the local runtime where the manager and operator agents run.
- Google Sheets — the operational data bus. Input links, extracted data, and run status all live in one place every agent reads and writes.
- Playwright — browser automation to pull our product's insights. No functional API, so a headed browser with a saved login session stands in for one.
- Apify — cloud extraction of the prospect's Amazon data (price and purchase volume), with CAPTCHA handling, run in parallel.
- Python — deterministic template fill. It builds the data object, embeds every image inline, and generates a self-contained HTML scorecard plus a print-ready PDF.
- gws CLI — Google Sheets read and write.
The data bus
A plain Google Sheet holds the input links and every field the agents extract. It's the coordination point, and it doubles as the easiest place to inspect a run and figure out what went sideways when something does.
A manager and three operators
One agent orchestrates. Three each do exactly one thing: pull our insights, pull the Amazon data, build the scorecard. The operators report only to the manager, never to each other. Keeping them separate means each one does its job well, and I can add a new path later without touching anything that already works.
Pulling our insights without an API
Since our platform has no API, the first operator drives a real browser with a persisted login. It walks each product page and writes what it extracts straight to the sheet. It's not elegant in theory, but a headed browser with a saved session is a genuinely reliable way to get data out of a tool that was never built to give it to you.
Amazon data in parallel
The manager fires the Amazon scrape in the background before the browser work even starts, so the two overlap instead of waiting on each other. Apify handles the CAPTCHAs and runs in the cloud. Its price and volume numbers feed the revenue estimate.
Building the scorecard
Once the data is complete, the last operator runs a Python fill script in batch. It loads the heavy template once and fills it many times, embedding every image inline so each scorecard is a single self-contained file: branded HTML plus a print-ready PDF that shows the prospect their product-page performance, the specific opportunities, and the estimated annual revenue impact.
Human review before it ships
The whole thing is manually triggered, and you review the finished scorecards before sales delivers them. Nothing auto-sends.
The results
Personalized sales assets at scale
Before this, production was the ceiling. Each one took about 15 minutes of careful manual work, and at twenty-plus requests a day, that simply didn't fit in anyone's schedule.
Now a scorecard takes a couple of links and a roughly two-minute, hands-off run, at no real cost, since the agents ride a subscription I already pay for. Hands-on production time per asset went from about 15 minutes to 0. The bottleneck moved from "can we make it" to "who do we send it to," which is a much better problem.