Zachary Zager

Engineer | Creative

Funded Startup Data: 52% to 100% for 54 Cents

Descriptions

52% → 100%

▲ 1.9×

Industry tags

73% → 99.6%

▲ 1.4×

Completeness

37% → 47%

▲ 1.3×

Total cost

54¢

0.2¢ per company

1st Exist, 2nd Be Useful, 3rd Be Quality

BloomWatch tracks startups right after they raise money and shows who is hiring. I built it in order: first make it exist, then make it useful, then raise the data quality. Version one pulled funding announcements, found each company and listed its open jobs. Quality waited until the pipeline ran end to end.

Once it did, the gaps were obvious. Half the companies had no description, most had no headcount, a third had no HQ. The quality of the data dictates the value of the product, so quality was next.

Before

37.1%

Average completeness across 255 companies

Each company has a set of tracked fields: description, industry, HQ, headcount, careers page, open jobs and a few more. Completeness is the share of those fields filled in, averaged across all companies.

A read-only script snapshots the company table to CSV after every fix, so every change in the numbers has a cause.

Fix 1: about pages saved as JavaScript

Result

  • 69 companies went from 43% to 50% complete
  • 223 missed jobs found
  • Descriptions 52% to 60%

Cost

11.4¢

Each company's about page gets scraped and summarized into one sentence by a small model. For 69 companies the stored text was page code:

window.fastCheckoutMinicart = false; window.fastCheckoutModalEnabled = true;
    <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-...">

The cheerio call extracting text also picked up <script> and <style> contents. Fix: strip those tags first, then detect the bad rows and re-scrape them.

Fix 2: no about page, use the homepage

Result

  • Descriptions 60% to 74%
  • Average completeness up 2.1 points

Cost

6.2¢

Plenty of small startups have no about page at all. For companies with no usable about text, fetch the homepage instead, confirm the title and meta tags name the company, and have Haiku summarize the title, meta description and hero text.

Fix 3: 1 in 6 domains was wrong

Result

  • 44 wrong domains found, 28 fixed automatically
  • 34 missed jobs found
  • Octave.energy went from 8% to 50% complete

Cost

4.2¢

When a funding article didn't link the company, I guessed the domain as name + .com. snorkelai.com is not Snorkel AI (snorkel.ai). Teal Health is getteal.com. The worst guess was profitablebelgiancleantechoctaveenergy.com, a slugified news headline. The real site is octave.energy. A wrong domain doesn't error. Every downstream step (about page, careers page, description) just comes back empty.

Fix: a domain is verified when the homepage title, headings or meta tags name the company. If not, probe .ai, .io and get/try/use prefixes in parallel and take the first match. Pages showing only their own domain, or saying the domain is for sale, don't count. Verification is plain HTTP, no LLM.

Bar chart: 185 of 255 domains verified, 44 wrong and corrected, 13 name not on site, 13 unreachable

Of the 44, 28 were applied automatically, one (Porter Capital) turned out to be an investor, and 15 short one-word names (Seattle, Light, Good) went to manual review, since they can match unrelated sites.

Fix 4: investors in the startup table

Result

  • 12 investor rows removed
  • With Fix 3, average completeness up 2.9 points

Cost

0¢

Funding feeds also cover VC firms raising their own funds. 12 rows were investors (Seed Capital, Crane Venture Partners) being scored and enriched like startups. I removed them and saved them to a CSV for a future Investors table. New leads are filtered on a trailing word only (Ventures, Capital, Fund), so Capital One Labs stays.

Fix 5: the last mile

Result

  • Descriptions 84% to 100%
  • 21 missed jobs found
  • Average completeness up 3.0 points

Cost

8.9¢

about 2¢ estimated

Some sites render their content in the browser, so a plain fetch sees an empty page. A rendered-page fallback (Jina Reader) filled 7 more descriptions and a final rerun filled 7 more. 11 companies whose real site couldn't be found were removed. A leftovers pass fixed the domain on 13 of the last 14 companies and removed Newly, a bad headline parse with no real company behind it.

Before and after: one company

Delos Data, an AI infrastructure startup. The guessed domain was cision.com, a different company, so the row looked partly filled with someone else's data.

Before

Delos Data

cision.com (a different company)

33% complete

Description
none
Industry
none
HQ
none
Careers page
cision.com (wrong company)
Open jobs
0 real

 

After

Delos Data

delosdata.com

75% complete

Description
Builds next-generation AI inference infrastructure combining software, systems, and silicon to scale AI compute.
Industry
AI, Hardware & Robotics
HQ
Palo Alto, CA
Careers page
found (Ashby)
Open jobs
10

 

Results

Average completeness climbed with every fix:

Bar chart: average completeness 37.1% before, 39.3% after fix 1, 41.4% after fix 2, 44.3% after fixes 3 and 4, 47.3% after fix 5

Some rows came out along the way: 12 investors, 11 companies whose real site couldn't be found, and one fake lead. The table went from 255 to 231 companies. To keep the comparison fair, the chart below only counts the 231 companies present both before and after.

Dot chart, same 231 companies before and after. Description 55.8% to 100%, industry tags 74.9% to 99.6%, HQ 23.4% to 39.4%, headcount 18.6% to 30.3%, has open jobs 42.4% to 46.8%, CEO name 47.2% to 45.0%

On the same companies, descriptions went from 56% to 100% and industry tags from 75% to 99.6%. HQ, headcount and open jobs all went up. CEO name went down on purpose: I reviewed all 118 stored names by hand and removed 21 which weren't people (“About Us,” “The Team”). An empty field beats a wrong one.

Cost vs value

StepCostResult
1. Strip page code from about text11.4¢223 jobs found, descriptions 52% to 60%
2. Homepage fallback6.2¢Descriptions 60% to 74%
3. Verify domains4.2¢44 wrong domains, 34 jobs found
4. Remove investors0¢12 rows removed
5. Last mile8.9¢*Descriptions 84% to 100%, 21 jobs found
Dry runs and a no-op backfill23.3¢
Total54¢*Descriptions 52% to 100%, 278 jobs found

* Includes about 2¢ estimated for the leftovers pass, which didn't log its token use.

Conclusion

Five fixes to my own pipeline turned half-empty rows into leads worth acting on. End result across 255 funded startups:

Descriptions
52% → 100%
Industry tags
73% → 99.6%
Average completeness
37% → 47%
Missed jobs found
278
Total cost
54¢ (0.2¢ per company)

What I learned

  • Get it working first. Fixing data quality only paid off once the pipeline ran end to end.
  • Most of the missing data wasn't missing. My own scraper bugs and bad domain guesses were hiding it.
  • Bad data fails silently. A wrong domain throws no error. Check what a source is about, not only whether it responds.
  • Snapshot after every change. Without the CSVs I couldn't say what any single fix was worth.
  • Cheap beats clever. Plain HTTP, string matching and a small model did all of this for 54¢.

See BloomWatch →

← Back to Thoughts