Skip to content

Form Response Volume as a Predictor

Application rate by number of form responses submitted, controlling for total touch volume bucket. A form response is an active submission — a stronger signal of intent than a passive pageview. This page tests whether form volume predicts application independently of total engagement.

The most counterintuitive finding in this dataset: one form submission is below the overall baseline (12.9%, 0.76x lift), while zero form submissions is essentially at baseline (16.7%, 0.99x). The signal doesn’t emerge until two or more forms — where the rate jumps to 31.2% and climbs from there.

A single form submission appears to be an inquiry action, not an intent signal. It’s often the first touch in a funnel, not evidence of return engagement. Two or more submissions indicates a prospect came back — and that return is what predicts application behavior.

The cross-tab confirms this: within every touch bucket up to 50, having 1 form consistently underperforms having 0 forms. At high touch volumes (51+), the gap closes because engagement volume dominates.

Form ResponsesPeopleApplicantsAvg Engagement TouchesApp RateLift
0160,51126,75719.316.7%0.99x
141,7965,37243.212.9%0.76x
27,1882,242112.831.2%1.85x
32,033871192.142.8%2.54x
4772396270.851.3%3.04x
5+760353322.146.4%2.75x
Touch BucketForm BucketPeopleApplicantsApp Rate
00 forms126,84312,91610.2%
1–20 forms44229667.0%
1–21 form14,7462541.7%
1–22+ forms768567.3%
3–50 forms70631744.9%
3–51 form5,408981.8%
3–52+ forms1,009555.5%
6–100 forms2,06429614.3%
6–101 form4,536902.0%
6–102+ forms970394.0%
11–200 forms5,8404698.0%
11–201 form4,7221312.8%
11–202+ forms1,167443.8%
21–350 forms5,88778613.4%
21–351 form3,3061574.7%
21–352+ forms1,013757.4%
36–500 forms3,56393626.3%
36–501 form1,72121412.4%
36–502+ forms7119813.8%
51+0 forms15,16610,74170.8%
51+1 form7,3574,42860.2%
51+2+ forms5,1153,49568.3%

A single form submission is not a strong intent signal — it converts below baseline and underperforms zero forms within every touch bucket. The signal emerges at two or more submissions, which indicates a prospect returned to engage again. At high touch volumes (51+), form count matters less because engagement volume is the dominant predictor. The actionable threshold is: two form submissions + sustained engagement is a meaningful qualification signal.

In the touch volume analysis, avg_form_responses is remarkably flat across all buckets (0.6–1.3), suggesting form submission count doesn’t scale with total touches the way pageviews do. This raises the question: is submitting even one form a disproportionately strong signal of intent, regardless of how many total touches a person has?

If form submission is a strong independent predictor, it has direct implications for:

  • How forms are used in the funnel — as intent signals worth acting on immediately
  • Whether low-touch persons who submitted a form deserve different treatment than high-touch persons who never did
  • The value of optimizing for form completions vs. pageview volume in paid campaigns

Persons are grouped by their total number of form responses (0, 1, 2, 3, 4, 5+). For each bucket, application rate is calculated across all persons in that group. A second view cross-tabulates form response count against touch volume bucket to isolate the independent effect.

WITH touch_counts AS (
SELECT
person_id,
COUNT(CASE WHEN touch_type = 'form_response' THEN 1 END) AS form_responses,
COUNT(CASE WHEN touch_category = 'engagement' THEN 1 END) AS engagement_touches
FROM person_touches
GROUP BY person_id
),
applied AS (
SELECT DISTINCT person_id
FROM person_tags
WHERE tag_type = 'applied'
AND tag_value = 'Yes'
),
labeled AS (
SELECT
p.id AS person_id,
COALESCE(tc.form_responses, 0) AS form_responses,
COALESCE(tc.engagement_touches, 0) AS engagement_touches,
CASE WHEN a.person_id IS NOT NULL THEN 1 ELSE 0 END AS applied
FROM persons p
LEFT JOIN touch_counts tc ON p.id = tc.person_id
LEFT JOIN applied a ON p.id = a.person_id
),
overall AS (
SELECT ROUND(SUM(applied) * 1.0 / COUNT(*), 3) AS overall_application_rate
FROM labeled
)
SELECT
CASE
WHEN form_responses = 0 THEN '0'
WHEN form_responses = 1 THEN '1'
WHEN form_responses = 2 THEN '2'
WHEN form_responses = 3 THEN '3'
WHEN form_responses = 4 THEN '4'
ELSE '5+'
END AS form_response_bucket,
COUNT(*) AS people,
SUM(applied) AS applicants,
ROUND(AVG(engagement_touches), 1) AS avg_engagement_touches,
ROUND(SUM(applied) * 1.0 / COUNT(*), 3) AS application_rate,
o.overall_application_rate,
ROUND((SUM(applied) * 1.0 / COUNT(*)) / NULLIF(o.overall_application_rate, 0), 2) AS application_rate_lift
FROM labeled l
CROSS JOIN overall o
GROUP BY 1, o.overall_application_rate
ORDER BY MIN(form_responses);

Cross-Tab: Form Responses × Touch Volume Bucket

Section titled “Cross-Tab: Form Responses × Touch Volume Bucket”
WITH touch_counts AS (
SELECT
person_id,
COUNT(CASE WHEN touch_type = 'form_response' THEN 1 END) AS form_responses,
COUNT(CASE WHEN touch_category = 'engagement' THEN 1 END) AS engagement_touches
FROM person_touches
GROUP BY person_id
),
applied AS (
SELECT DISTINCT person_id
FROM person_tags
WHERE tag_type = 'applied'
AND tag_value = 'Yes'
),
labeled AS (
SELECT
p.id AS person_id,
COALESCE(tc.form_responses, 0) AS form_responses,
COALESCE(tc.engagement_touches, 0) AS engagement_touches,
CASE WHEN a.person_id IS NOT NULL THEN 1 ELSE 0 END AS applied
FROM persons p
LEFT JOIN touch_counts tc ON p.id = tc.person_id
LEFT JOIN applied a ON p.id = a.person_id
)
SELECT
CASE
WHEN engagement_touches = 0 THEN '0'
WHEN engagement_touches BETWEEN 1 AND 2 THEN '1-2'
WHEN engagement_touches BETWEEN 3 AND 5 THEN '3-5'
WHEN engagement_touches BETWEEN 6 AND 10 THEN '6-10'
WHEN engagement_touches BETWEEN 11 AND 20 THEN '11-20'
WHEN engagement_touches BETWEEN 21 AND 35 THEN '21-35'
WHEN engagement_touches BETWEEN 36 AND 50 THEN '36-50'
ELSE '51+'
END AS touch_bucket,
CASE
WHEN form_responses = 0 THEN '0 forms'
WHEN form_responses = 1 THEN '1 form'
ELSE '2+ forms'
END AS form_bucket,
COUNT(*) AS people,
SUM(applied) AS applicants,
ROUND(SUM(applied) * 1.0 / COUNT(*), 3) AS application_rate
FROM labeled
GROUP BY 1, 2
ORDER BY
CASE touch_bucket
WHEN '0' THEN 1 WHEN '1-2' THEN 2 WHEN '3-5' THEN 3
WHEN '6-10' THEN 4 WHEN '11-20' THEN 5 WHEN '21-35' THEN 6
WHEN '36-50' THEN 7 ELSE 8
END,
form_bucket;