# How to track lead source in WS Form

Equip every WS Form submission with the marketing context behind it, source, campaign, landing page, and full visitor journey, all attached automatically.

Source: https://sourceloop.ai/help/track-lead-source-in-ws-form/
Updated: 2026-05-28

---

WS Form is the WordPress form plugin developers and agencies reach for when they want serious control, advanced layout, deep API surface, action chains, and complex conditional logic. It does almost everything a form needs to do. The one thing it doesn't is tell you which marketing channel produced each submission. SourceLoop covers that.

Three steps, around five minutes, no WS Form-side configuration needed.

## What SourceLoop captures from WS Form

For each WS Form submission, SourceLoop attaches:

- **The marketing channel** that delivered the visitor
- **UTM parameter values** parsed from the landing URL
- **Sequence of pages browsed** before the form submission
- **Time on site** ahead of the conversion
- **Number of distinct sessions** before they finally submitted
- **Email + name** read from the WS Form fields
- **First-touch landing page** of the visitor's history
- **Source attributed to the converting session** specifically
- **Device, country, browser**

## Before you start

You'll need:

- A **SourceLoop workspace** ([free trial](https://app.sourceloop.ai/sign-up))
- **WordPress admin** access (or another way to add markup to `<head>`)
- A **WS Form** form embedded on a published WordPress page

## Step 1: Install the SourceLoop snippet on your site

Inside SourceLoop, head to **Setup -> Tracking code** in the left sidebar and copy the snippet.

![SourceLoop Setup page with the tracking code snippet ready to copy](/help/screenshots/sourceloop-tracking-code-script.png)

Add it to your WordPress `<head>`. Common ways:

- A header-injection plugin like Insert Headers and Footers or WPCode
- Your active theme's `header.php`, just before `</head>`
- For developer-built themes, hook it via the `wp_head` action
- Tag manager firing on All Pages

The snippet must run on every page that hosts a WS Form form.

## Step 2: Confirm the form is on a tracked page

WS Form doesn't require any per-form switch. Once the snippet is loading site-wide, every WS Form on every published page that includes the snippet is attributable.

Verify these basics:

- The form is embedded on a **published** page or post (not a draft)
- The form **collects an email**, used by SourceLoop as the lead identifier
- Aggressive performance plugins or theme-level deferring isn't pushing SourceLoop after WS Form's submit handler

> **Server-to-server submissions don't carry attribution**
> WS Form supports REST API and webhook-driven submissions where there's no browser visitor at all. Those submissions don't have a journey to attach, by design. Browser-based form fills (the normal case) are what gets attributed.

## Step 3: Run a verification submission

Open your WS Form page in an **incognito tab** with `?utm_source=test&utm_medium=verify&utm_campaign=wsform-check` glued onto the URL. Submit a real entry using an email you control.

Within seconds, the lead should appear at the top of the **Contacts Hub** in SourceLoop with the three test UTM values stamped on the record.

## Where to see WS Form submissions in SourceLoop

### Contacts Hub

Every WS Form submission becomes a contact row at [app.sourceloop.ai/contacts](https://app.sourceloop.ai/contacts). Open a contact for the visitor's full pre-submission browsing timeline.

![SourceLoop Contacts Hub showing a WS Form submission with the lead's full journey](/help/screenshots/sourceloop-lead-journey-demo.webp)

### Attribution dashboard

For the campaign-level view, [app.sourceloop.ai/dashboards/traffic](https://app.sourceloop.ai/dashboards/traffic) rolls WS Form submissions up by source, medium, and campaign so you can see which channels are pulling weight.

![SourceLoop attribution dashboard with WS Form submissions grouped by source and campaign](/help/screenshots/sourceloop-attribution-dashboard.webp)

### Funnel reports

Build a funnel at [app.sourceloop.ai/funnels](https://app.sourceloop.ai/funnels/) with "WS Form submission" as the final step. Slice by source, content, or device to find the highest-converting paths.

![SourceLoop funnel report ending in a WS Form submission conversion step](/help/screenshots/sourceloop-funnel.png)

If paid acquisition is in the mix, mirror WS Form submissions back to **Google Ads, Meta, and LinkedIn as offline conversions** so the bidding algorithms train on real form fills instead of clicks. [Connect your Google Ads account](/help/connect-google-ads/) covers the wiring.

## Frequently Asked Questions

### Does this work with WS Form Lite (free)?

Yes. SourceLoop's tracking is browser-side and works the same on WS Form Lite as it does on WS Form Pro Edition, with no licence-tier dependencies.

### WS Form's advanced layout uses CSS Grid and Flexbox. Will the snippet break anything visually?

No. The SourceLoop snippet doesn't render any UI or inject any CSS, so WS Form's layout (no matter how complex) is unaffected.

### I use WS Form's "Action" system to push data to webhooks and integrations. Will those keep firing?

Yes. WS Form's actions continue to execute as configured. SourceLoop attaches attribution data on its end in parallel, completely separate from your action chain.

### My WS Form forms include calculations, conditional logic, and repeaters. Are submissions still tracked?

Yes. None of WS Form's advanced field types or logic affect tracking. SourceLoop only fires on the final submission, so any complexity inside the form happens entirely upstream.

### WS Form supports REST API submissions and headless workflows. Is that compatible with SourceLoop?

SourceLoop captures submissions made through a tracked page in a real browser. Pure REST API submissions (server-to-server, no visitor session) don't create attribution data, by design, since there's no visitor journey to attach.
