This page explains how SmartDingo Form Tracker fills captured tracking data into your form fields: how a mapping works, how to write CSS selectors, how to find them with the page scanner, and how the plugin decides which form each configuration fills.
Note SmartDingo Form Tracker does not create form fields. It fills values into fields that already exist on your form. If you want a hidden
utm_source(or similar) field on a lead, add it in your form plugin first, then map to it here.
A form configuration is a named group of mappings. Each mapping has three parts, edited on SmartDingo Form Tracker → Settings under Form Configurations:
| Column | What it is |
|---|---|
| Tracked Field | Which stored value to fill (e.g. UTM Source). Only fields you enabled under Tracking Fields can be chosen. |
| CSS Selector | Which element on the page to fill (e.g. input[name="utm_source"]). |
| Hide | Optional. Visually hides the field’s wrapper on the page. |
When auto-fill runs, for each mapping the plugin:
value, then dispatches a bubbling input event and a bubbling change event.Those two events matter: many form plugins run validation, conditional logic, or “dirty field” detection only when a real input event fires. Dispatching them makes the programmatic fill behave like a visitor typing into the field.
Note A skipped mapping fails silently — there’s no visible error on the page. Always confirm fills with the Debug overlay (see below) rather than assuming they worked.
A selector is standard CSS, resolved with querySelector semantics (the first matching element wins per form). Common patterns:
| Pattern | Example | Use when |
|---|---|---|
| By ID | #utm-source-field | The field has a stable id — most reliable. |
| By class | .utm-source | The field has a distinctive class. |
| By name attribute | input[name="utm_source"] | The field has a name (very common for hidden tracking fields). |
| By data attribute | [data-name="utm_source"] | Builder-based forms (Fluent Forms, Elementor) expose data- attributes. |
Prefer an ID or name where you can — classes and positional selectors are more likely to change when you edit the form. If a selector is invalid, that single mapping is skipped and the rest still run.
Tick Hide on a mapping to conceal a visible input you don’t want visitors to see (for example a text field you’re repurposing to carry utm_source). After filling, the plugin walks up from the input to the nearest field wrapper and sets it to display: none. It recognizes these wrappers:
.wpcf7-form-control-wrap (Contact Form 7), .gfield (Gravity Forms), .wpforms-field (WPForms), .ff-el-group (Fluent Forms), .elementor-field-group (Elementor Pro), .wsf-field-wrapper (WS Form), .frm_form_field (Formidable Forms), .nf-field-container (Ninja Forms).form-group, .form-row, .field-wrapper, and finally the input’s direct parent element.Warning Hiding is cosmetic (CSS only). The field is still in the DOM and its value is still submitted. If your form already uses a proper hidden input (
type="hidden"), you don’t need the Hide option at all — the field is invisible on its own.
You don’t have to hand-write selectors. The Scan page button reads a real page and lists its form fields for you.
Auto-matching is heuristic: it matches when a field’s name, id, or label contains the parameter name (e.g. a field named utm_source, gclid, or landing-page). Rows it can’t match are left blank for you to fill — either by picking from the scanned-fields dropdown or by choosing Enter manually.
?sdft_scan=1The modal works by loading the target page with ?sdft_scan=1 appended. In that mode the plugin loads a selector-discovery scanner instead of the normal tracker. It:
manage_options) — it never loads for regular visitors.data-name → class → nth-child path.<form> element, grouped as Fields without <form> wrapper, so builder forms that don’t use a real <form> tag are still discoverable.All configurations are tried on every page, but each configuration fills exactly one form — its best match. When auto-fill runs, each configuration:
If every form a configuration matches has already been claimed by an earlier configuration, that configuration is skipped for this fill. Forms are identified by their id, data-id, or position on the page.
Note This is why you should create one configuration per form and give each form distinct selectors. If two configurations point at the same selector on the same form, only one wins it — and lead capture attributes the submission to that same winning configuration, so the form name on your leads stays correct. See Capturing leads.
The number of configurations you can save depends on your plan:
| Plan | Form configurations |
|---|---|
| (Free) | 1 |
| (Starter) | 5 |
| (Pro) | 25 |
The limit is enforced when you save and again when the tracker loads; extra configurations beyond your plan’s limit are dropped. One configuration can still hold many mappings, so a single form with a dozen tracked fields only uses one configuration.
Fills are attempted at three moments, so late-appearing forms are still covered:
The fastest way to confirm your mappings is the Debug overlay.
OK, EMPTY, PENDING (waiting on consent), or OFF (not enabled).FOUND or NOT FOUND, the match count, and a SKIPPED note if another configuration already claimed the form.Use it to catch the two most common problems: a selector that shows NOT FOUND (wrong or changed selector) and a field that shows EMPTY (not captured — check it’s enabled and that your test URL carried the parameter).
Warning Turn the Debug overlay off before going live. It only renders for administrators, but production sites should stay clean. See Before you go live.
You’ve spent the budget. You’ve run the campaigns. You deserve to know what actually worked. SmartDingo gives you complete, accurate, first-party attribution for every WordPress form submission. Start today on the forms you already use.
SmartDingo is a WordPress lead tracking plugin built for online marketers and WordPress developers who need accurate, cookieless attribution. It captures UTM parameters, traffic sources, landing pages, and full visitor journeys for every form submission, working seamlessly with Fluent Forms, Gravity Forms, Ninja Forms, WPForms, and other major WordPress form plugins. Whether you’re tracking leads from Google Ads, Meta, LinkedIn, or organic search, SmartDingo connects every lead to the marketing campaign that generated it.