Import recently funded companies from Crunchbase into HubSpot using n8n
Install this workflow
Download the n8n workflow JSON and import it into your n8n instance.
funded-companies.n8n.jsonPrerequisites
- n8n instance (cloud or self-hosted)
- Crunchbase API key (requires Enterprise or API/Data License plan)
- HubSpot private app token with
crm.objects.companies.readandcrm.objects.companies.writescopes - Custom HubSpot company properties for funding data (recommended:
funding_stage,funding_amount,funding_date,investors) - n8n credential configured for HubSpot
The search endpoints used in this workflow (/searches/funding_rounds, /searches/organizations) require a Crunchbase Enterprise or API/Data License plan. The Pro plan only provides Zapier integration and CSV exports, not direct API access. Pricing starts at ~$49/mo for basic API access.
Why n8n?
n8n gives you a visual workflow editor with a built-in Code node for custom logic — ideal for this recipe, which requires pagination, ICP filtering, domain normalization, and deduplication. Self-hosted n8n is completely free with unlimited executions, and the Schedule Trigger node runs your workflow on a set cadence without any external scheduler.
The HTTP Request node handles Crunchbase and HubSpot API calls directly, while the Code node lets you do ICP filtering and domain extraction in a few lines of JavaScript. The Split In Batches node handles the iteration loop. The trade-off vs. pure code is that debugging multi-step API flows in the visual editor can be harder when responses are deeply nested — but you get execution history and retry handling for free.
Step 1: Add a schedule trigger
Create a new workflow and add a Schedule Trigger node:
- Rule: Every day at 8:00 AM (or weekly on Mondays — adjust to your preferred cadence)
This kicks off a daily check for new funding rounds.
Step 2: Search Crunchbase for recent funding rounds
Add an HTTP Request node to search for funding rounds announced in the last 30 days:
- Method: POST
- URL:
https://api.crunchbase.com/api/v4/searches/funding_rounds - Headers:
X-cb-user-key: YOUR_CRUNCHBASE_API_KEY - Body:
{
"field_ids": [
"identifier",
"announced_on",
"money_raised",
"funded_organization_identifier",
"investment_type",
"investor_identifiers"
],
"query": [
{
"type": "predicate",
"field_id": "announced_on",
"operator_id": "gte",
"values": ["{{$now.minus(30, 'days').format('yyyy-MM-dd')}}"]
},
{
"type": "predicate",
"field_id": "investment_type",
"operator_id": "includes",
"values": ["series_a", "series_b", "series_c", "series_d"]
}
],
"limit": 100
}Adjust the investment_type filter to match your ICP. Series A companies are actively building and buying tools. Seed-stage may be too early. Series C+ may already have established vendor relationships.
Step 3: Loop through funding rounds
Add a Split In Batches node to iterate over the entities array from the Crunchbase response. Each entity contains the funding round details and a reference to the funded organization.
Step 4: Fetch organization details
For each funding round, add an HTTP Request node to get company details:
- Method: GET
- URL:
https://api.crunchbase.com/api/v4/entities/organizations/{{ $json.properties.funded_organization_identifier.uuid }} - Headers:
X-cb-user-key: YOUR_CRUNCHBASE_API_KEY - Query params:
field_ids=short_description,categories,location_identifiers,num_employees_enum,website_url,linkedin
Step 5: Filter for ICP matches
Add an IF node to filter companies by your criteria:
- Condition 1:
num_employees_enummatches your target range (e.g.,c_0051_0100,c_0101_0250) - Condition 2: Company has a
website_url(needed for HubSpot domain)
Step 6: Check for existing companies in HubSpot
Add an HTTP Request node:
- Method: POST
- URL:
https://api.hubapi.com/crm/v3/objects/companies/search - Body:
{
"filterGroups": [{
"filters": [{
"propertyName": "domain",
"operator": "EQ",
"value": "{{ $json.properties.website_url.replace('https://', '').replace('http://', '').replace('www.', '').split('/')[0] }}"
}]
}]
}Add an IF node: proceed only if total equals 0.
Step 7: Create company in HubSpot
Add an HTTP Request node:
- Method: POST
- URL:
https://api.hubapi.com/crm/v3/objects/companies - Body:
{
"properties": {
"domain": "{{ $json.org.properties.website_url }}",
"name": "{{ $json.org.properties.identifier.value }}",
"industry": "{{ $json.org.properties.categories[0].value }}",
"description": "{{ $json.org.properties.short_description }}",
"funding_stage": "{{ $json.round.properties.investment_type }}",
"funding_amount": "{{ $json.round.properties.money_raised.value }}",
"funding_date": "{{ $json.round.properties.announced_on }}",
"investors": "{{ $json.round.properties.investor_identifiers.map(i => i.value).join(', ') }}"
}
}HubSpot will reject properties that don't exist. Before running this workflow, create the custom company properties: funding_stage (single-line text), funding_amount (number), funding_date (date), and investors (single-line text) in HubSpot Settings → Properties.
Step 8: Activate and test
- Click Execute Workflow to run a test pass
- Verify companies appear in HubSpot with correct funding data
- Toggle the workflow to Active
Troubleshooting
Common questions
Does processing 100 funding rounds count as 100 n8n executions?
No. The entire workflow — trigger, all API calls, filtering, company creation — counts as 1 execution. Even if you process 100 funding rounds and create 50 companies, it's still 1 execution. Each iteration within a Split In Batches node is part of the same execution.
Will the Crunchbase API rate limit me during a large run?
Crunchbase allows 200 requests/minute. Each funding round requires 1 organization lookup, so 100 rounds = ~100 API calls. The Split In Batches node processes items sequentially with natural latency between steps, which usually keeps you well under the limit. For larger runs (200+ rounds), add a Wait node with a 200ms delay inside the loop.
How do I handle Crunchbase pagination in n8n?
The search API returns max 100 results per page. For most weekly runs, 100 is sufficient. If you need more, add a loop: after the Crunchbase search node, check if the response contains 100 entities. If so, make another request with after_id set to the last entity's UUID. Use a Loop node or recursive sub-workflow.
Can I run this weekly instead of daily?
Yes. Change the Schedule Trigger to run weekly (e.g., Monday at 8 AM) and adjust the date filter in the Crunchbase search body to look back 7 days instead of 30. Weekly runs reduce API usage and are usually sufficient — funding announcements don't require same-day action.
Cost
- n8n Cloud Starter: $24/mo for 2,500 executions. Daily run = ~30 executions/month (1 per day).
- Self-hosted n8n: Free.
- Crunchbase API: Enterprise plan required. Pricing varies — contact Crunchbase sales. Basic API access starts around $49/mo.
Looking to scale your AI operations?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.