EntrySource Install free

Add-on for Contact Form 7

Every enquiry
arrives with
its receipt.

Contact Form 7 emails your submissions and forgets them. EntrySource keeps each one in your own database table, next to the campaign, ad click or referral that produced it.

Click IDs
28
Channels
62
External calls
0

Someone clicks this

https://yoursite.com/pricing/?utm_source=google&utm_medium=cpc&utm_campaign=spring-sale&gclid=Cj0KCQjw_TEST

They submit your form

Entry #418 Recorded Google Ads
name
Ada Lovelace
email
ada@example.com
Campaign
spring-sale
Click ID
gclid: Cj0KCQjw_TEST
First touch
Facebook — brand-launch (6 days earlier)
Visits
4 before submitting

Or three days later. The campaign is remembered for as long as you choose, so a form sent days after that click still arrives with every detail — first touch, last touch and the click ID.

Recognised by name, not filed under “Referral”

Google Ads
ChatGPT
Meta Ads
Perplexity
Bluesky
Microsoft Ads
Claude
LinkedIn
Mailchimp
Reddit Ads
TikTok
Gemini
Linktree
Mastodon
Yelp
Pinterest
HubSpot
Google Maps
Taboola
Discord
Snapchat Ads
Substack

Every source

Many ways in,
one table out.

Search, ads, AI assistants, social, chat, newsletters, maps and review sites all arrive differently. EntrySource reads each one, names it, and files it beside the answers.

Paid28 click IDs
Organic27 engines
AI29 assistants
30 networks
Eight traffic sources converging along curved paths into a single stored entry, with one paid click highlighted

How it works

Four steps, none of which you do.

No form edits, no shortcodes, no hidden fields to add. Activate it and the next submission is already attributed.

  1. 01

    They click

    An ad, a newsletter, a post. The tracker reads the campaign parameters and the referrer on landing.

  2. 02

    It's remembered

    First touch and last touch are kept in two cookies, for as many days as you choose.

  3. 03

    They submit

    Contact Form 7 sends the mail as usual. Nothing about the form changes.

  4. 04

    It's stored

    Answers and attribution land in your own table, ready to read, filter and export.

Works behind page caching Falls back to cookies without JavaScript Nothing leaves your server

What's recorded

The whole trail, not just the last click.

Campaign parameters

All five, exactly as they arrived.

  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content

Ad-click identifiers

Twenty-eight of them, so a click is attributed even with no UTMs on the link.

  • gclid
  • gbraid
  • wbraid
  • msclkid
  • fbclid
  • igshid
  • ttclid
  • li_fat_id
  • rdt_cid
  • twclid
  • yclid
  • mc_cid
  • mkt_tok
  • +15 more

Context

Where they came from and what they were looking at.

  • Referring URL and domain
  • Landing page of the visit
  • The page holding the form
  • Visits before submitting
  • Date of the very first visit

First touch and last touch, side by side

The campaign that first brought someone to the site is rarely the one they return through. Both are stored, so you can credit either.

First touch

brand-launch

Last touch

Google Ads

spring-sale

Paid and organic told apart

A shared Facebook post and a Meta ad both carry fbclid. The medium decides which is which, so your ad spend isn't credited with organic traffic.

?fbclid=abc
?fbclid=abc&utm_medium=paid-social Meta Ads

Inside wp-admin

Three screens, no dashboard to learn.

Form Entries
EntryForm ChannelCampaign Submitted
Ada Lovelace
ada@example.com
Enquiry form Google Ads
google / cpc
spring-sale 2 hours ago
Grace Hopper
grace@example.com
Quote request AI assistant
chatgpt.com
5 hours ago
Alan Turing
alan@example.com
Enquiry form Organic search
google.com
Yesterday
Katherine Johnson
kj@example.com
Enquiry form
newsletter / email
march-digest 2 days ago
Filter by form, channel, campaign or date Export CSV

Search runs across the answers themselves, not just the campaign fields.

Source Insights — last 30 days

Channel

Google Ads3448%
Organic search1623%
AI assistant913%
Email710%
Direct46%

Campaign

spring-sale2840%
march-digest710%
brand-launch69%
(not set)2941%

Also grouped by source, medium, referring domain, landing page and form. Example figures shown.

Settings — Mail-tags
Copy selected 2 mail-tags selected
Mail-tagValue
[_entrysource_channel] Detected channel, for example Google Ads
[_entrysource_utm_campaign] utm_campaign
[_entrysource_first_touch] Date of the very first visit
[_entrysource_summary] The whole source summary as a block

Tick what you need, copy, paste into the form's Mail tab. Twenty-seven tags in all.

In your notification email

Read the source without opening WordPress.

Tick one checkbox and the summary is appended to your notification automatically. Or place the tags exactly where you want them.

  • Works in the subject, the body and additional headers
  • A shorter [_esrc_…] alias for every tag
  • A direct link back to the stored entry

Contact Form 7 → Mail tab

Subject: Lead from [_entrysource_channel]

Name: [your-name]
Message: [your-message]

[_entrysource_summary]

What lands in your inbox

Lead from Google Ads

Name: Ada Lovelace
Message: Could you send pricing?

Channel:
Google Ads
Source / Medium:
google / cpc
Campaign:
spring-sale
Landing page:
/pricing/
First touch:
Facebook (6 days earlier)
Visits:
4

Privacy

Your database, your rules.

The plugin makes no external requests. Nothing is sent anywhere, because there is nowhere to send it to.

Consent-aware

Point it at your banner's cookie and tracking waits until consent is given.

IP optional

Store it, shorten it to 203.0.113.0, or don't store it at all.

Do Not Track

Honour the browser's request with one checkbox.

Retention

Delete entries automatically after a number of days you choose.

Export and erase

Wired into WordPress's own personal data tools, so requests are handled properly.

Per-form opt-out

Add consent_for:storage to a checkbox and nothing is stored unless it's ticked.

Free, and free of asterisks.

Everything on this page is in the plugin. No paid tier, no licence key, no feature that stops working after a trial.

Requires
Contact Form 7
WordPress
6.5 or newer
PHP
7.4 or newer
Licence
GPLv2 or later
External calls
None

Questions

The ones people actually ask.

Do I have to change my forms?

No. Storing entries and recording the source works with your existing forms exactly as they are. You only touch a form if you want a mail-tag in a particular spot in the email.

Does it work with page caching?

Yes. Campaign values are never printed into the cached HTML. The form carries one empty hidden field that the tracker fills in the visitor's own browser, so a cached page still records the right source.

What if the visitor blocks JavaScript?

The answers are still stored, and the plugin falls back to reading its cookies and the page URL on the server. Only data that has to come from the browser, such as the referrer of the landing page, may be missing.

Are spam submissions stored?

Only if you ask for it in the settings. By default they're skipped, because Contact Form 7 has already flagged them.

Will deleting the plugin remove my entries?

No, unless you tick the option that says so. That way an accidental deactivation never costs you your data.

Can editors see the entries?

By default only administrators can. The settings let you open the entries and insights screens to editors or authors too. Changing the settings always stays with administrators.