2
10 Comments

What 43,000 rows of venture capital data taught me about empty fields

Two weeks ago the company-data tool I publish did about 90 rows a day. Then one morning the counter read 13,000, and by the end of the week it had passed 27,000. Somebody had fed it a very long list. I did what you do when a thing you built suddenly gets used for real: I went and read the output. Not the happy rows, the blanks. And the blanks were the interesting part. A company with a Series B on record and no total funding. A well-known startup with an empty founders list. A name lookup that came back with a confident, complete profile for the wrong company. None of those were errors. Every one of them looked exactly like an answer.

The blank that looks like an answer

When a scraper throws an exception you notice. When it returns a clean record with a null where the money should be, you do not. The row lands in the spreadsheet, the pipeline moves on, and three weeks later someone in a deal meeting says "they've never raised" with real confidence, because the column was empty. The crash is the safe failure. The plausible zero, an empty field that reads as a fact, is the one that costs you.

I had written that lesson down once before, about a different tool, after a thread here argued me into it. It took a batch of forty thousand companies to make me believe it applied to funding data too.

Crunchbase scraping at scale turns up three kinds of empty

Once you look at enough rows the blanks sort themselves. The first kind is real: the company has not disclosed a round, and the empty funding history is the truth. The second kind is a gap in what the public page exposes; a profile can list rounds one by one and still not show a total, so the sum you want has to be built from the parts, and if you do not build it the field stays null. The third kind is the worst, and it is the one name lookups create. Send "Mercury" without a URL and the lookup resolves to the single best-matching organization. Usually that is right. Sometimes it is a different Mercury with a full, tidy, wrong profile. A wrong company is more expensive than a missing one, because nothing about the row tells you to check.

The fix I landed on is boring. Every row carries the search term you sent alongside the resolved name, so a mismatch is one sort away. Rounds come through as a list, so a total can be rebuilt. And I stopped treating any empty field as a value. It is a claim, and claims need evidence.

Company enrichment is a claim, not a fact

The surge changed how I think about this category. The volume came in big batches, thousands of companies at a time, which is what account enrichment looks like: someone with a CRM export or a fund's watchlist, appending headquarters, headcount band, industry, investors, and funding stage to every row. Nobody who does that reads the rows. They trust them. So a company enrichment tool has a stricter job than returning data. It has to say where it is unsure.

Store users went from the low thirties to over sixty across the same two weeks, and the paid runs arrived about a week after the free ones, which is roughly the pattern I have seen on other tools: people try it on ten companies, then come back with a thousand. If you want the mechanics, the step by step version with code is on Dev.to, there is a shorter walkthrough on Peerlist, and I wrote the LinkedIn version for the sales-enrichment crowd.

What a crunchbase scraper costs against a seat

The price gap is the part that surprised people in my LinkedIn comments, so here it is plainly. Crunchbase Pro is $49 a month on an annual plan or $99 month to month, Business is $199 a month, and the API itself is enterprise only with a custom quote; the free API tier went away in 2025. Those are fine prices if a human is going to sit in the product all day. They are the wrong shape if what you need is one clean JSON record per company, on demand, from a script or an agent.

The thing I built charges per company returned: under a cent each, about $0.009 on the free tier and a little less as volume grows. A thousand-company enrichment is nine dollars. You paste organization URLs, or just names and domains, and get one row per company with firmographics, funding rounds, investors, key people, similar companies, and detected web technologies. It is the Crunchbase company API on Apify, and it also runs as an MCP tool inside Claude if you would rather ask questions than write loops. The two example setups people actually use are collecting venture capital data for a target list and enriching an account list from a CRM export.

Limits, because they matter more than the pitch: it reads public organization pages, so private or thin profiles come back thin. Name lookups are slower than URLs and can mis-resolve, which is the whole point of the section above. It does not give you Crunchbase's predictions or their AI trend layer; it gives you the record.

A few questions I keep getting

Does Crunchbase have an API?

Yes, for enterprise customers on a custom contract. There is no self-serve or free API any more, which is why per-company tools like this one exist.

How much does the Crunchbase API cost?

Crunchbase does not publish it; it is quoted per deal on the enterprise plan. Pro and Business seats are $49 to $199 a month but do not include API access.

What are firmographics?

The descriptive facts about a company: headquarters, employee-size band, industry tags, operating status, founding details, funding stage. They are the fields you append to a list to segment it.

The question I still argue with myself about

Your own company almost certainly has a Crunchbase profile, and if you are like most founders here you have never checked it.

If the funding field is blank, what does the person reading it conclude? Stealth, bootstrapped, or nobody bothered?

And on the other side of the table, when you are enriching a list and a field comes back empty, what is your rule: do you treat it as zero, as unknown, or do you go check?

I would like to hear where people draw that line, because I have not found a rule that survives forty thousand rows.

on September 22, 2026
  1. 1

    Appreciate the honesty here, most people only share the wins.

  2. 1

    Clear and practical, thanks. Did anything surprise you along the way?

  3. 1

    Thanks for sharing the numbers, that makes it much easier to follow.

  4. 1

    Interesting. How are you measuring whether it is working?

  5. 1

    What made you pick this stack over the alternatives?

  6. 1

    This is useful. How are you finding your first users so far?

  7. 1

    Interesting take. Would you still recommend this approach to someone starting today?

  8. 1

    Nice work shipping it. What has been the biggest challenge since launch?

  9. 1

    With paid users moving from small tests to large enrichment runs, are they primarily buying lower-cost access or greater confidence that the returned data is trustworthy?

  10. 1

    Clear and practical, thanks. Did anything surprise you along the way?