SEO Services
SaaS Industry / Technical Guide
Automate Trial-to-Paid Lead Scoring for SaaS with n8n + Claude Step-by-Step Guide
A complete walkthrough for building an n8n + Claude pipeline that captures trial signups, enriches them with Clearbit and Apollo, scores ICP fit, fires the hot ones to AEs in Slack, and syncs everything to HubSpot — in 8 seconds end to end.
Signup webhook
Enrich (Clearbit + Apollo)
Score ICP (Claude)
Activation tracking
Route — hot / warm / cold
CRM sync (HubSpot)
Slack alert to AE
1. The Problem — Why Trial Lists Rot in the SDR Queue
Every product-led SaaS company hits the same wall once organic signups cross ~500/month: the SDR team can’t realistically discover, enrich, qualify and prioritize each one fast enough. The good leads sit in a queue next to consumer Gmail signups and competitor recon accounts, the AE never gets the right intro at the right moment, and the conversion rate from trial to paid stays flat while the signup graph trends up and to the right.
Real numbers from a Series A SaaS (1,800 trial signups/month)
| Trial signups (per month) | ~1,800 |
| Reached by an SDR within 24h | 23% |
| Trial-to-paid conversion (overall) | 4.1% |
| SDR time spent on consumer Gmail signups | 31% |
| Signups that never get enriched | 68% |
The brutal asymmetry: roughly 8% of trial signups represent 80%+ of pipeline value. The system needs to identify those 8% within minutes, not days, and put a human in front of them before the trial enthusiasm cools. Everyone else still gets a useful experience — just not a manual one.
What “scoring” means here
Lead scoring is not a static spreadsheet of plus and minus points. It’s a three-tier dynamic sort that updates as the trial user takes (or doesn’t take) actions:
- Hot (score >80): ICP-fit company, decision-maker role, strong product activation. Push to AE in Slack DM, auto-book on Calendly, sequence A.
- Warm (50–80): Some ICP signal, partial activation. Routes to SDR queue with sequence B.
- Cold (<50): Weak fit or low intent. Lifecycle drip only — no human touch until they re-engage.
2. System Architecture
Six components, each replaceable. The orchestration layer is self-hosted n8n so security review can audit every external API call that touches prospect data. Postgres holds both the event store and the score history.
The stack
Cost estimate (5,000 signups/month)
| Claude Sonnet (5k scoring calls, ~1,800 tok in / 350 tok out) | ~$110 |
| Clearbit Reveal + Person enrichment (5k lookups) | ~$450 |
| Apollo (filtered to ~1,500 person lookups) | ~$120 |
| VM (n8n + Postgres on Hetzner CCX23) | ~$48 |
| Monitoring (Grafana Cloud + Healthchecks) | ~$24 |
| Total / month | ~$752 |
At an ACV of $9k–$30k, a single incremental closed deal from this pipeline pays for the entire stack for a year. The same orchestration layer slots into our broader AI automation services.
Trial Signup Capture
The pipeline needs every signup, regardless of which surface it came in through. In a typical SaaS that means three sources: the product itself (your auth provider’s webhook), your billing provider when a card is added (Stripe), and your marketing forms (HubSpot Forms, Default.com, or a custom landing page).
Webhook sources
- Auth0 / Cognito / Clerk: emits a
user.createdevent with email, signup IP, optional company name from the form. - Stripe:
customer.createdfor self-serve trial-with-card flows. Fires roughly 2-5 minutes after auth signup. - App POST: for product-qualified events the auth webhook can’t capture (workspace_created, integration_connected). Use a signed HMAC payload.
- Form fills: demo requests, content downloads, pricing-page submissions. Treat these as first-class signups.
n8n webhook node config
A single n8n Webhook node accepts the union schema; a Switch node downstream branches on source. HMAC verification happens before the workflow does anything else.
Enrichment Layer
Raw signup data is almost useless for scoring. You need company size, industry, tech stack, role seniority, location and recent funding signals. Run enrichment in parallel with a short timeout (4 seconds) so a slow vendor doesn’t block the whole pipeline. The same enrichment pattern shows up in our work for AI automations for digital marketing agencies.
Enrichment cascade (fail fast, fail cheap)
- Domain MX check — if the email domain has no MX record, mark
invalidand stop. - Free-email filter — gmail.com, yahoo.com, qq.com etc. flag
consumer_email. Don’t enrich (waste of credits) but still score. - Clearbit Reveal on the signup IP — gives company name + domain even if they signed up with a personal email.
- Clearbit Person + Company on the work email — title, seniority, company size, industry, funding, tech stack.
- Apollo as fallback when Clearbit returns <30% field coverage.
- Bright Data LinkedIn scraper as last resort for missing seniority on small companies.
SQL: enrichment cache to avoid double billing
Claude ICP Classifier
A traditional rules-based scorer has to be hand-tuned every time you launch a new feature, target a new vertical, or learn a new buying signal. Claude reads the enriched profile plus the early product signals, scores against a written ICP, and returns a structured JSON with reasoning — which makes the score auditable.
The 5 scoring dimensions
Is this vertical in our top 3? Adjacent? Off-target?
Employees, ARR estimate, seat-economics fit.
Uses tools that integrate with us? Uses a competitor?
IC / Manager / Director / VP / C-level. Champion vs decision-maker.
UTM/campaign, referrer, prior pricing-page visits, integrations clicked.
ICP scoring system prompt
Tested on 6 months of historical signups labeled by closed-won vs churned. Tunable per company by editing the ICP block at the top.
n8n HTTP Request to Claude
Product Activation Tracking
A trial user who hits first-value, invites a teammate, and connects an integration in the first 48 hours converts at roughly 7x the rate of a passive signup. Capture those events into the same Postgres event store and feed them back into Claude on a 6-hour and 24-hour re-score cadence.
The activation events that move scores
- first_value_reached — user completed the core “aha” action (varies per product).
- team_invited — strongest single signal of buying intent. Multi-seat = paid.
- integration_connected — they brought their data in. Switching cost just went up.
- pricing_page_visited — late-trial intent. Re-score within 30 minutes.
- api_token_created — engineering champion is real, evaluation is serious.
Event store schema
event_value) can leak customer data if you’re not careful — never log file contents, query bodies, or message text. Whitelist the keys you persist; reject everything else at the ingestion node.Routing & Sequences
Once a score lands, routing is deterministic. Hot tier needs a human in front of the prospect inside 5 minutes; warm tier feeds the SDR queue with a personalized opener Claude already drafted; cold tier never touches a human until they re-score upward.
Routing matrix
| Tier | Slack | Calendly | Email sequence | CRM stage |
|---|---|---|---|---|
| Hot | DM to AE round-robin | Auto-book offered in welcome email | Sequence A — AE-signed, high-touch | SQL |
| Warm | Channel post in #sdr-queue | Generic link in nurture | Sequence B — SDR-signed, mid-touch | MQL |
| Cold | None | None | Lifecycle drip in Customer.io | Lead |
| Disqualify | None | None | Product onboarding only | Lead (do_not_contact=true) |
Slack alert payload (hot tier)
The Claim button hits a webhook back into n8n that locks the lead to that AE for 24 hours and drops them out of the SDR round-robin. This is the pattern we re-use for our consulting industry automations where partners need first-touch on enterprise leads.
CRM Sync & Dedupe
HubSpot or Salesforce remains the source of truth for everything sales sees. The n8n workflow upserts the contact, attaches it to a company record (matching on domain), updates lifecycle stage, and pushes the score plus reasoning into custom fields. Dedupe runs on email + domain to handle the multi-stakeholder evaluation case cleanly.
HubSpot upsert (GraphQL via the v3 API)
Dedupe SQL
Common Failures & Fixes
Three failure modes show up in nearly every deployment. Plan for them on day one — they are cheap to design around and expensive to retrofit.
Failure 1: Score inflation on free-email ICPs
Symptom: A consultant with a Gmail address claims VP-level role on the form, gets enriched against the wrong company (their last employer’s domain on LinkedIn) and lands as hot.
Fix: Cap any consumer-email signup at score 60 in the prompt rules and require a manual SDR confirm before promoting to hot. Document the rule in the system prompt so the reasoning string explains why.
Failure 2: Competitor signups get enriched and routed
Symptom: A PM at a direct competitor signs up, gets routed to an AE who books a discovery call before realizing.
Fix: Maintain a Postgres table competitor_domains and inject it into the Claude prompt context. Auto-classify as disqualify with a separate notification to product marketing instead of sales.
Failure 3: Rate-limit cascades during signup spikes
Symptom: Product Hunt launch sends 3,000 signups in 90 minutes. Clearbit rate-limits, n8n queue backs up, hot leads land in Slack 4 hours late.
Fix: Run n8n in queue mode with at least 4 worker processes. Wrap external calls in retry-with-jitter (3 attempts, 250ms-2s). Pre-warm the enrichment cache from your last 30 days of signup domains before any planned campaign.
Privacy: GDPR, CCPA, CASL & SOC 2
B2B prospect data still falls under GDPR (EU), CCPA (California), and CASL (Canada). PCI is not relevant because no payment data flows through the scoring pipeline — Stripe handles that on its own surface. Treat compliance as a design constraint, not a checklist at the end.
What Claude sees (and doesn’t)
- Sees: business email, name, job title, employer, public LinkedIn-style firmographics, product event names + counts, UTM source.
- Doesn’t see: message text inside the product, file contents, payment data, IP address (only the country derived from it), session tokens.
GDPR specifics
Lawful basis for B2B prospecting in the EU is legitimate interest, but it requires a balancing test on file and instant honor of objection requests. Implement DSR endpoints (access, erasure, portability) that purge the contact across Postgres, the enrichment cache, and HubSpot in one transaction. CASL in Canada is stricter — you need express consent before sending the warm/cold sequences to Canadian addresses; flag and gate by enriched country.
SOC 2 Type 2 controls this satisfies
- Audit trail: every score, prompt hash, and CRM write is logged in the audit table with reviewer (if any), timestamp, and source IP.
- Change management: n8n workflows live in git with a CI deploy, no point-and-click prod edits.
- Access controls: role-based n8n credentials, vault-backed secrets, no shared API keys per human.
Measured Results — 90 Days In
Numbers from a real implementation at a Series A vertical SaaS (1,800 signups/month, 3-person SDR team, 4 AEs) after the first full quarter on the new pipeline. No change in trial volume during the test period — the lift comes entirely from prioritization and speed.
The headline metric inside the SDR team is precision on the hot tier: 91% of leads scored hot became opportunities. That’s the number that lets sales leadership trust the score enough to actually change behavior. Without it, AEs revert to working their old lists by gut.
Implementation Timeline & Cost
- n8n self-host + queue mode setup: 6–10 hrs
- Webhook capture + HMAC verify: 4–6 hrs
- Enrichment cascade + caching: 10–14 hrs
- Claude scoring prompt + backtest on 6 mo of trials: 14–20 hrs
- Activation event store + Postgres schema: 8–12 hrs
- Slack/Calendly/HubSpot integration: 10–14 hrs
- Sequences in Customer.io + handoff: 6–10 hrs
- Documentation + SDR/AE training: 4–6 hrs
- Week 1: Define ICP + score against last 6 months of trials
- Week 2: Wire Clearbit/Apollo + Claude scoring prompt
- Week 3: HubSpot/Slack/Calendly integration + sequences
- Week 4: Soft launch + SDR feedback loop + tuning
- Includes: prompt tuning, GDPR/SOC 2 review, monthly precision report
FAQ
first_value_reached or a feature-usage threshold instead of user.created. The Claude prompt gets richer activation data and usually scores PQLs more confidently than fresh signups. Most teams run both: signup-time MQL scoring for SDR routing, plus a separate 24/72-hour PQL re-score for AE alerts.competitor_domains table is injected into the Claude scoring prompt context, with instruction to classify those signups as disqualify. Second, the routing layer never sends sales sequences to disqualified contacts; they get the standard product onboarding only and a notification fires to product marketing for competitive-intel logging.Want this built for your trial funnel?
SEOKRU deploys this exact system in 4 weeks. We backtest the scoring against your last 6 months of trials, wire enrichment and CRM, train your SDRs and AEs on the new flow, and run the precision report monthly. You keep ownership of every component — workflows, prompts, Postgres, the lot.
Talk to a SaaS automation engineer