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
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
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
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.
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
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
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:
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.
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
| Step | Cost | Result |
|---|---|---|
| 1. Strip page code from about text | 11.4¢ | 223 jobs found, descriptions 52% to 60% |
| 2. Homepage fallback | 6.2¢ | Descriptions 60% to 74% |
| 3. Verify domains | 4.2¢ | 44 wrong domains, 34 jobs found |
| 4. Remove investors | 0¢ | 12 rows removed |
| 5. Last mile | 8.9¢* | Descriptions 84% to 100%, 21 jobs found |
| Dry runs and a no-op backfill | 23.3¢ | |
| Total | 54¢* | 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¢.