How to Scrape Crunchbase Company Profiles in Python (Funding, Investors, No API Key)
Crunchbase has no free public API. Learn how to extract company names, total funding raised, investor counts, latest rounds, and headquarters as structured JSON using an Apify scraper with residential proxy bypass.
The actor referenced in this article. Pay only for results delivered.
Crunchbase is the primary database for startup funding data. Its free API was discontinued in 2019, and current API plans are enterprise-priced. Scraping is how most teams get Crunchbase data at scale. Here is the full walkthrough.
What you get per company
- Company name, description, and website URL
- Headquarters location (city, country)
- Founded year
- Total funding raised in USD
- Last or largest funding round type and date
- Total investor count
- Crunchbase profile URL
Common use cases
Investment screening. Pull funding data for a list of companies to quickly filter by funding stage, total raised, and geography before a deeper dive.
Sales prospecting. Find recently funded startups in a vertical — Series A and B companies with fresh capital are actively buying software.
Market mapping. Count companies by industry, geography, or funding stage to map a competitive landscape.
CRM enrichment. Append funding stage and total raised to existing lead lists.
Using the Apify actor
import apify_client
client = apify_client.ApifyClient('YOUR_APIFY_TOKEN')
run_input = {
"query": "climate tech",
"maxResults": 50,
}
run = client.actor('themineworks/crunchbase-companies').call(run_input=run_input)
for company in client.dataset(run['defaultDatasetId']).iterate_items():
if company.get('_type') == 'summary':
continue
print(f"{company['name']} ({company.get('founded_year', 'N/A')})")
print(f" Location: {company.get('location', 'N/A')}")
print(f" Total raised: ${company.get('total_funding_usd', 0):,.0f}")
print(f" Last round: {company.get('last_round_type', 'N/A')} ({company.get('last_round_date', 'N/A')})")
print(f" Investors: {company.get('investor_count', 0)}")
Filtering recently funded companies
from datetime import datetime, timedelta
run_input = {
"query": "B2B SaaS",
"maxResults": 200,
}
run = client.actor('themineworks/crunchbase-companies').call(run_input=run_input)
results = [r for r in client.dataset(run['defaultDatasetId']).iterate_items()
if not r.get('_type')]
cutoff = datetime.now() - timedelta(days=365)
recent = []
for co in results:
date_str = co.get('last_round_date')
if date_str:
try:
dt = datetime.fromisoformat(date_str.split('T')[0])
if dt > cutoff:
recent.append(co)
except ValueError:
pass
print(f"Funded in last 12 months: {len(recent)}")
for co in sorted(recent, key=lambda x: x.get('total_funding_usd', 0), reverse=True)[:20]:
print(f" {co['name']}: ${co.get('total_funding_usd', 0)/1e6:.1f}M | {co.get('last_round_type', '?')}")
Building a targeted prospect list
Find Series A or B companies in a specific sector with raised over a threshold:
import csv
run_input = {
"query": "vertical SaaS fintech",
"maxResults": 300,
}
run = client.actor('themineworks/crunchbase-companies').call(run_input=run_input)
results = [r for r in client.dataset(run['defaultDatasetId']).iterate_items()
if not r.get('_type')]
SERIES = {'Series A', 'Series B'}
MIN_RAISED = 5_000_000
prospects = [
co for co in results
if co.get('last_round_type') in SERIES
and co.get('total_funding_usd', 0) >= MIN_RAISED
and co.get('website')
]
with open('prospects.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['name', 'website', 'location', 'total_funding_usd', 'last_round_type'])
writer.writeheader()
writer.writerows([{k: co.get(k, '') for k in writer.fieldnames} for co in prospects])
print(f"Exported {len(prospects)} prospects to prospects.csv")
Geography breakdown
from collections import Counter
geo = Counter(co.get('location', 'Unknown') for co in results if not co.get('_type'))
print("Top company locations:")
for loc, count in geo.most_common(15):
print(f" {loc}: {count}")
Pricing
$0.004 per company returned. No charge on failed anti-bot blocks or empty searches.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
Frequently asked questions
Does Crunchbase have a free API? +
Crunchbase discontinued its free Basic API in 2019. Current API access starts at hundreds of dollars per month. Scraping is the practical alternative for most teams.
How does the scraper handle Cloudflare protection? +
Crunchbase uses a Cloudflare managed challenge on its search and profile pages. The actor runs a stealth-hardened Chromium browser on residential IPs to clear the challenge and extract data. On heavily blocked IP pools it exits cleanly without charging.
What funding data fields are returned? +
Total funding raised (USD), the most recent or largest funding round type and date, and the total number of investors. Individual investor names are not included.
Airbnb Scraper: Listing Prices, Ratings, and Availability Without the API
Airbnb has no public listings API. Here's how to pull nightly price, rating, superhost status and coordinates from Airbnb search results using Python.
Maps Leads: Verified Email Extraction from Google Maps Business Listings
How to pull B2B leads from Google Maps with MX-verified emails, past the official API's 120-result cap, and pay only for contactable businesses.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python — price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.