Webinar or Typeform responses to enriched, routed leads
Typeform + Apollo + HubSpot
Who it's for
Marketing and RevOps teams who collect webinar sign-ups or demo requests in Typeform and want each respondent enriched, matched to an owner and in the CRM the same day, without creating duplicates. Apollo can be swapped for Lusha, ZoomInfo or Cognism, and HubSpot for Salesforce, Attio or Pipedrive. Teams on Typeform's EU data center can use Typeform EU.
What you get
Routing table for one webinar, waiting for approval. Sample output: every company and person in it is fictional.
Form: 'Forecasting without spreadsheets' webinar sign-up, 46 responses since Oct 9 Removed before enrichment: 3 test entries, 2 duplicates, 4 already in HubSpot with an owner. Enriched in Apollo: 37 new respondents (credits used, as shown in Apollo). | # | Name | Company | Size | Region | Rule hit | Proposed owner | HubSpot action | |---|----------------|------------------------------------|-------|--------|-----------------|----------------|---------------------| | 1 | Dana Okafor | Fernhill Software (fictional) | 140 | US | US mid-market | Alex Rivera | Create contact | | 2 | Sam Whitlock | Quarry Lane Analytics (fictional) | 1,200 | CA | Enterprise 1000+| Priya Raman | Update (no owner) | | 3 | Mira Castell | Larkspur Freightworks (fictional) | blank | US | No size, check | none | Hold for review | | 4 | Tomas Elling | Mossgate Labs (fictional) | 60 | DE | EMEA | Jordan | Create contact | ...33 more Conflicts: #2 said '51–200 employees' on the form, Apollo says 1,200. Routed on the form answer? Reply 'form' or 'apollo'. Already owned (not changed): 4 contacts, listed below with their current owner. Nothing has been created or updated in HubSpot. Reply 'approve 1-2, 4-37' to go ahead.
Time and cost
Estimate About 15–20 minutes per batch, most of it checking the routing table.
Assumptions: One webinar form with about 50 responses, 40 of them new to HubSpot, and four routing rules.
- Typeform: Reads the responses for one form. Nothing is written to Typeform. Credit use not confirmed by Typeform.
- Apollo: One people enrichment per new respondent (about 40), which uses Apollo credits. Run only after the HubSpot check removes existing contacts. Some tools use credits. Company search, company enrichment (single and bulk), company job postings, and people enrichment (single and bulk) use credits; people/contact search, CRM, sequence, email, task and analytics actions do not. Get conversation insights uses credits only if the conversation has AI insights. Source: docs.apollo.io, checked 2026-10-16
- HubSpot: One search per respondent (about 50), then up to 40 contact creates or updates after you approve the table. Credit use not confirmed by HubSpot.
Exact credit costs depend on your plan with each vendor. Check the tool pages before a large run.
MCP servers
Every server is confirmed in: ClaudeChatGPT
-
ClaudeChatGPTRead + writeCredits not confirmed
https://api.typeform.com/mcp -
ClaudeChatGPTClaude CodeCursorCopilotRead + writeSome tools use credits
https://mcp.apollo.io/mcp -
ClaudeChatGPTRead + writeCredits not confirmed
https://mcp.hubspot.com
Set up in a chat app
Every server in this recipe is confirmed for Claude and ChatGPT. Connect each one, then paste the prompts below into one conversation.
- Connect Typeform without code (Claude, ChatGPT)
- Connect Apollo without code (Claude, ChatGPT)
- Connect HubSpot without code (Claude, ChatGPT)
Developer setup
Auth setup and mcp.json for Claude Code and Cursor
- Typeform: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - Apollo: Use OAuth sign-in for interactive use. For headless runs, use an API key in the
X-Api-Keyheader. - HubSpot: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token.
Put this in .mcp.json (Claude Code, project root) or ~/.cursor/mcp.json (Cursor). Swap the example keys for your own, and don't commit real ones. Remove the // comment lines if your client requires strict JSON.
{
"mcpServers": {
"typeform": {
"url": "https://api.typeform.com/mcp"
},
"apollo": {
"url": "https://mcp.apollo.io/mcp"
// headless alternative: "headers": { "X-Api-Key": "YOUR_APOLLO_API_KEY" }
},
"hubspot": {
"url": "https://mcp.hubspot.com"
}
}
}
Step-by-step prompts
- Find my Typeform form called {form name} and list the responses since {date}: name, email, company, and the answers to {routing questions}. Flag test entries and duplicate emails. Don't change anything in Typeform.
- Search HubSpot for each respondent by email, and by name plus company. Show me who already exists, their current contact owner, and any near-matches. Don't change any records.
- For the respondents not in HubSpot, tell me how many there are and wait for my OK. Only after I approve it, enrich them with Apollo people enrichment, at most {max} people. Show me what came back for title, company size and country, and mark anything blank.
- Apply these routing rules: {routing rules, e.g. 'US under 500 employees: Alex Rivera; 500+: Priya Raman; EMEA: Jordan'}. Show me a table with each person, the rule they matched, the proposed owner, and whether HubSpot would create or update them. Flag conflicts between the form answer and Apollo.
- After I approve the table, create or update only the rows I approved in HubSpot, set the contact owner, and add a note with the form name and response date. Don't touch the owner on contacts that already have one.
Run it on a schedule (optional)
- Run it the morning after each webinar, or daily for an always-on demo request form, so new leads reach a rep while they are warm.
- In a scheduled run, stop at the routing table: save it for a person to approve, and don't enrich or write to HubSpot until then.
- A headless run needs an Apollo master API key in the X-Api-Key header, and HubSpot non-admin users need a Super Admin to approve the connector. Do one manual run before you schedule it.
Where this goes wrong
- Duplicate contacts in HubSpot. People often sign up with a personal email while HubSpot has their work email. Search HubSpot by email and by name plus company, list near-matches separately, and decide on those by hand.
- Reassigning a lead a rep already owns. A territory rule can quietly move an existing contact to a new owner. Never change the owner on a contact that already has one. List those with their current owner instead.
- Credits spent on junk responses. Test submissions, spam and people who signed up twice all cost an enrichment. Remove duplicates by email, drop obvious test entries, and run the HubSpot check before any enrichment. Confirm the final count before Apollo runs.
- Routing on the wrong data. The form answer and the Apollo data can disagree on company size or country, which changes the owner. Show both values side by side, flag any conflict, and pick one rule (form or Apollo) before you approve.
Gotchas
- Apollo people enrichment (single and bulk) uses credits, while people and contact search do not. Run the HubSpot check first so you don't pay to enrich someone you already have.
- Typeform's MCP server uses OAuth only. Personal access tokens are no longer supported, so connect through Claude's Connectors Directory or the ChatGPT plugin.
- In ChatGPT, the Typeform app view isn't available on the Free and Go plans yet.
- HubSpot non-admin users need a Super Admin to approve the connector before anyone can connect.
Download
Get the prompts, guardrails and expected output as one Markdown file. Paste it into a Claude Project or ChatGPT project's instructions, or save it as CLAUDE.md for Claude Code.
Download form-responses-to-routed-leads.md
New recipe and breakage notes every week
Vendor sites: Apollo · HubSpot. If we join an affiliate program, these links will be labeled as affiliate links.