← Builds
Public data

Open with a fact from their own report

A public index of company reports, each one a long PDF. We pulled every report, had a model extract the facts the client sells on into a fixed schema, and used those facts as the reason to reach out.

Works ifYour buyers publish long reports that say what they prioritise.

Built for · B2B SaaS · Europe
Pythonn8nLushaOpenRouterGeminiNeon
Get the prompt for your coding agent

The system

~/builds/company-reports
01Source

Report index

The API behind the page

WordPress REST, paginated per report year.

20242025
Python
130 reports
02Prepare

Fetch

PDF link + size check

HEAD request before the download.

up to 134MB

Resolve

Report to company

Domain and LinkedIn from a company API.

Lusha
130 of 130
Extract into a fixed schemaequal coverage per themeOpenRouterGemini
03Extract

Theme 1

Core metrics

Theme 2

People

Theme 3

Leadership + policies

113 of 130 extracted cleanly
04Activate

Campaign

One real initiative as the opener

HubSpot
89 drafts
Every draft opens on their own report.

The signal

A company published a report in the last two years.

Why it predicts a purchase

Publishing a report means a team, a budget and a process. The report itself tells you exactly what they measure, what they promised and where the gaps are, which is the whole first email.

How it works

01

Use the API behind the page

The report index is a WordPress site, so it has a REST endpoint. Paginate that instead of scraping HTML, and you get clean metadata for free.

02

Check the size before you download

Some reports are over 100MB. Checking size after the download is useless because the timeout already happened. A HEAD request first, then skip anything too large.

03

Force balance in the schema

Left alone, the model drifted to the best-known theme in each report, while this client sold on a different one. The schema was rewritten to demand equal coverage per theme.

04

One fact, one email

The email opens on one real initiative from their own report. No template claims, no invented proof: the report is the proof.

Build notes

  • Routing through a model gateway stripped the PDF content type silently: the model answered that it saw no attachment. Sending the PDF as a base64 data URL fixed it.
  • Dedup on the report, not the company. Keying on company meant a company with two years of reports only got one extracted.
  • One report was linked to the wrong company upstream, so the extraction was perfect and wrong. Validate the join, not only the output.

Questions

Can AI read 100-page PDFs reliably?

Yes, with a fixed schema and a coverage check. Here 113 of 130 reports extracted cleanly. Validate that the right PDF is linked to the right company, not only the output.

What goes in the email?

One real fact from their own report, as the opener. No template claims, nothing invented.

More builds

All builds →
Public data

Detect 163 B2B tools from a company's website and DNS

Your product replaces, integrates with or sells to users of specific tools.

Open→
Public data

Reach companies before their public deadline

Your buyers make public promises with a deadline.

Open→
Public data

Reach companies hiring for what you sell

You sell a service that companies also try to hire for.

Open→

The next step

Let's get started.