MICROMARKETING Book With Tony
← How-To Guides

Rank Typeform Leads in Pipedrive Pulse with GA4 Key Event Context

Why this setup matters A Typeform lead is rarely just a Typeform lead. One request came from a branded Google Search ad after two pricing-page visits. Another came from an old blog post, bounced through a comparison page, and asked for “pricing for 12 seats.” A third came from a LinkedIn retargeting campaign and used […]

Why this setup matters

A Typeform lead is rarely just a Typeform lead. One request came from a branded Google Search ad after two pricing-page visits. Another came from an old blog post, bounced through a comparison page, and asked for “pricing for 12 seats.” A third came from a LinkedIn retargeting campaign and used a Gmail address with no company name.

Those three requests should not hit the same follow-up queue.

Pipedrive made that easier on July 15, 2025, when it launched Pipedrive Pulse, its prospecting toolkit for small sales teams. The current Pulse help docs, last updated September 3, 2026, describe four pieces: data enrichment, custom scoring, sequences, and the Pulse feed. Scoring, enrichment, and sequences depend on your Pipedrive plan, while the feed is available to all users, according to Pipedrive’s Pulse knowledge base.

The useful part for a small team is not “AI scoring” by itself. The useful part is giving Pulse the right facts before a rep opens the lead. Typeform can pass source fields through URL parameters. GA4 can tell you whether the same visitor triggered a key event before submitting. Pipedrive can store that context on the lead because leads inherit deal custom fields through the API.

That is enough to build a sane inbound ranking system.

The operating principle

I treat Pulse as the prioritization layer, not the attribution database. GA4 keeps the session and campaign history. Typeform captures the hand-raise. Pipedrive owns sales action.

When those roles blur, the setup gets brittle. I have seen teams try to stuff a whole customer journey into CRM notes: every page view, every ad click, every content download. Nobody reads it. Worse, reps learn to ignore the noise. The better version stores 8 to 12 fields that change the follow-up decision.

For a founder-led sales motion, my starting field set is small: utm_source, utm_medium, utm_campaign, utm_content, landing_page, referrer, ga_client_id, last_key_event, key_event_count, form_variant, lead_intent, and estimated_value. If you sell SaaS at $299 per month, add team_size and use_case. If you sell services, add budget_range and timeline.

That’s the whole spine.

Step 1: Make Typeform carry the source fields

Typeform’s URL parameters, formerly called hidden fields, are a free feature. Their docs give the basic use case directly: track respondent source and segment responses. The developer docs also show that parameters live in the form definition under hidden, then get passed into the form URL as key-value pairs. See Typeform’s URL parameter help article and developer reference.

Create the hidden fields first inside Typeform. Keep the names lowercase with underscores because Typeform requires that format. I would not use source alone. It becomes mushy after week two. Use the same names your paid media and analytics tools already use: utm_source, utm_medium, utm_campaign, utm_content, utm_term, landing_page, and form_variant.

A clean Typeform URL might look like this:

https://form.typeform.com/to/abc123#utm_source=google&utm_medium=cpc&utm_campaign=brand_us_q4&landing_page=/pricing&form_variant=pricing_modal

If the form is embedded on your site, pass the current page’s query parameters into the embed. Typeform says this takes custom code for embedded forms, and that is accurate. Your developer or tag manager owner needs to read the current URL, copy approved UTM values, and append them to the Typeform embed source.

Do not pass email addresses, names, phone numbers, or anything sensitive in URL parameters. Typeform warns that URL parameter values can appear in browser history, logs, and connected tools. Google Analytics also prohibits collecting personally identifiable information. Use a non-sensitive ID if you need to join records later.

One practical detail saves pain: add fallback values. If utm_source is blank, write direct_or_unknown. If landing_page is blank, write the current path. Blank fields make CRM filters look broken even when the tracking is working.

Step 2: Define the GA4 key events that mean intent

GA4 events measure user interactions, and Google says you can mark important events as key events after GA4 has received them. Google’s setup docs explain the gtag('event', event_name, parameters) pattern, and the Analytics Help page covers how to mark events as key events.

For this workflow, the form submit is not the only key event. It is the final one. You want the intent signals that happened before it.

For a B2B site, I usually start with four GA4 events: view_pricing, view_case_study, start_typeform_lead, and submit_typeform_lead. If the product has a demo page, add view_demo_page. If the sales cycle starts with a calculator or audit, add complete_calculator or download_audit_template.

Mark only the events that matter. A scroll event is not sales intent. A pricing view after a paid search click is useful. A case study view from a visitor with utm_campaign=competitor_alternatives is even better.

Use event parameters to make the GA4 side easier to query later: form_id, form_variant, page_location, content_group, and traffic_type. Do not send names or emails. Send the GA client ID or your own anonymous visitor ID if your consent setup allows it.

For small teams, the scoring math can be blunt. One pricing view in the last 7 days gets 15 points. One case study view gets 8. A return visit gets 10. A direct branded search session gets 12. A student email domain gets zero positive points, unless students are your buyers.

Blunt beats invisible.

Step 3: Store the join key on the Typeform response

The awkward part is joining GA4 behavior to the Typeform submission. GA4 will not magically push session history into Pipedrive. You need a join key.

The simplest version is ga_client_id. On a website using the Google tag, the client ID identifies a browser instance for GA4 measurement. A stricter setup uses your own first-party anonymous ID, for example mm_visitor_id, stored in a consent-aware cookie and sent to both GA4 and Typeform. That gives you more control, especially if you later move event processing into BigQuery.

Whichever key you choose, pass it as a Typeform URL parameter. Then send it into Pipedrive with the lead. If consent is denied, store analytics_unavailable. The rep does not need a lecture about privacy state. They need to know whether the score is complete.

In one real-ish implementation for a 7-person consultancy, we used mm_visitor_id instead of ga_client_id because the company already had a first-party ID for content personalization. The lead form had 11 fields, but reps only saw 5 in their Pulse feed card: intent score, last key event, source, company size, and requested timeline. That was enough to cut same-day follow-up from 43 leads to 17 without leaving the other 26 untouched. They went into a slower sequence.

Step 4: Create lead and deal fields in Pipedrive

Pipedrive leads are potential deals in the Leads Inbox. The API docs say each lead needs a title and must link to a person or organization. They also say leads inherit deal custom fields, which is exactly what we need. Pipedrive’s custom field docs confirm that deal fields are created through /dealFields, and leads use those same custom fields. See the Leads API reference, the adding leads tutorial, and the custom fields guide.

Create the custom fields as lead/deal fields, not person fields. The source of the request belongs to the opportunity. The same person may come back through three channels over 18 months.

My minimum Pipedrive field map looks like this:

Lead source detail stores utm_source / utm_medium.

Campaign stores utm_campaign.

Landing page stores the first landing page for this request.

GA4 last key event stores values like view_pricing or complete_calculator.

GA4 key event count stores a number from 0 to 10.

Inbound intent score stores your calculated score before Pulse adds its own scoring layer.

Analytics status stores available, partial, or unavailable.

You can create these manually in Pipedrive under Company settings, or use the API if you manage multiple accounts. Pipedrive lets you copy the API key for each custom field from the data fields screen. Store those keys in your integration config, not inside a random Zap step named “Update lead 2.”

Step 5: Send the enriched lead into Pipedrive

The pipe can be native, Zapier, Make, n8n, a Cloudflare Worker, or a small Node service. I care less about the tool than the order of operations.

First, receive the Typeform submission. Second, look up recent GA4 context by ga_client_id or your first-party visitor ID. Third, calculate a plain numeric intent score. Fourth, create or update the Pipedrive person and organization. Fifth, create the lead with the source fields, GA4 context, and score already attached.

Pipedrive’s API supports creating leads in the Leads Inbox, and the docs note that leads created through the API have the source API. Use custom fields for the marketing source, because the native source alone will not tell a rep whether this came from organic search, LinkedIn paid, or a partner newsletter.

A simple scoring model for a founder-led B2B service might look like this in prose. Add 20 points for view_pricing. Add 15 for budget_range above $5,000. Add 12 for timeline of this_month. Add 10 for utm_medium=cpc when the campaign contains brand or competitor. Subtract 15 for free-text answers under 20 characters. Cap the score at 100.

Then let Pulse use that field inside custom scoring. Pipedrive says Pulse custom scoring lets teams define criteria that match their ICP and sales strategy. Your calculated score becomes one criterion, not the whole brain.

Step 6: Use Pulse to separate hot, warm, and slow-lane requests

Inside Pipedrive Pulse, build custom scoring around facts reps trust. I would start with three bands.

Hot leads score 75 to 100. They triggered view_pricing or complete_calculator, gave a business email, selected a near-term timeline, and came from a campaign you can name. These get a task due today, ideally within 15 minutes during business hours.

Warm leads score 45 to 74. They have a credible use case but weaker intent, maybe one case study view and a 60-day timeline. These get a same-day email and a next-day call task.

Slow-lane leads score under 45. They may still buy. They just should not steal the 10:00 a.m. slot from a pricing-page visitor asking about implementation for 25 seats.

Pulse sequences can handle the slow lane if your plan includes them. For example, send a useful reply on day 0, a case study on day 3, and a short check-in on day 9. Keep it plain. A buyer who asked a half-formed question does not need a 7-touch nurture opera.

Step 7: Audit the system every Friday

The first scoring model will be wrong. Mine always is.

Every Friday, export the week’s Pipedrive leads with Inbound intent score, Pulse score, source fields, and outcome. Compare three groups: booked calls, qualified opportunities, and closed-lost after first call. After 30 days, you should have enough signal to adjust weights. After 90 days, you can be stricter.

Watch for two failure modes. Paid search often looks too strong because branded traffic converts easily. Organic blog traffic often looks too weak because high-intent visitors may read two posts before submitting one quiet form. GA4 key events help correct that, but only if you actually bring them into the CRM.

I like one ugly metric here: percentage of same-day follow-ups spent on leads that became qualified opportunities. If that number is 18 percent, your queue is lying to the team. If it climbs to 35 or 40 percent after adding Pulse and GA4 context, the system is doing its job.

The finished workflow

A visitor lands on /pricing from google / cpc, fires view_pricing, opens a Typeform demo request, and submits with timeline=this_month and team_size=18. Typeform carries the UTM fields, landing page, form variant, and visitor ID. Your integration fetches the GA4 key event context, calculates an 86, and creates a Pipedrive lead linked to the right person and organization. Pulse sees the custom fields, applies your scoring rules, and puts the request near the top of the feed with enough summary context for a rep to act.

No one has to guess which inbox item matters.

That is the practical win. Pipedrive Pulse can rank and summarize, but it gets sharper when Typeform and GA4 feed it the details a human seller would check anyway: where the person came from, what they did before the form, how soon they need help, and whether the request looks like a real buying conversation.