form-attribution

SKILL.md

Form Attribution

A lightweight, zero-dependency script that automatically captures marketing attribution data and injects it into forms as hidden fields.

Resource Link/URL
CDN URL https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js
Docs https://form-attribution.flashbrew.digital/docs
GitHub https://github.com/Flash-Brew-Digital/form-attribution

Basic Implementation

Add before the closing </body> tag:

<script src="https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js" defer></script>

The script automatically captures UTM parameters, stores them in sessionStorage, and injects hidden fields into all forms.

Configuration Options

Configure via data attributes on the script tag:

Attribute Default Description
data-storage sessionStorage sessionStorage, localStorage, or cookie
data-field-prefix "" Prefix for hidden field names (e.g., attr_)
data-extra-params "" Additional URL parameters to capture (comma-separated)
data-exclude-forms "" CSS selector for forms to exclude
data-click-ids false Capture ad platform click IDs (gclid, fbclid, etc.)
data-debug false Enable debug panel overlay
data-privacy true Respect GPC/DNT privacy signals
data-storage-key form_attribution_data Custom storage key name

Cookie-specific options (when data-storage="cookie"):

Attribute Default Description
data-cookie-domain "" Cookie domain (e.g., .example.com)
data-cookie-path / Cookie path
data-cookie-expires 30 Expiration in days
data-cookie-samesite lax lax, strict, or none

What Gets Captured

URL Parameters (default): utm_source, utm_medium, utm_campaign, utm_term, utm_content, utm_id, ref

Metadata (automatic): landing_page, current_page, referrer_url, first_touch_timestamp

Click IDs (when data-click-ids="true"): gclid (Google), fbclid (Meta), msclkid (Microsoft), ttclid (TikTok), li_fat_id (LinkedIn), twclid (Twitter/X)

Common Configurations

With ad click ID tracking:

<script src="https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js"
  data-click-ids="true" defer></script>

Cross-subdomain tracking (cookies):

<script src="https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js"
  data-storage="cookie"
  data-cookie-domain=".example.com"
  data-cookie-expires="90"
  data-click-ids="true" defer></script>

CRM field prefix:

<script src="https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js"
  data-field-prefix="lead_"
  data-click-ids="true" defer></script>

Exclude forms (e.g., search, login):

<script src="https://cdn.jsdelivr.net/npm/form-attribution@latest/dist/script.min.js"
  data-exclude-forms=".no-track, #login-form, [data-no-attribution]" defer></script>

JavaScript API

The library exposes a global FormAttribution object:

FormAttribution.getData();              // Get all captured data
FormAttribution.getParam('utm_source'); // Get specific parameter
FormAttribution.getForms();             // Get tracked forms
FormAttribution.clear();                // Clear stored data
FormAttribution.refresh();              // Re-inject into forms

Privacy

Respects Global Privacy Control (GPC) and Do Not Track (DNT) by default. When detected, no data is captured. Override with data-privacy="false".

References (references/*)

Platform-Specific Patterns

For implementation patterns specific to Webflow, HubSpot, WordPress, Marketo, and certain other platforms, see references/platforms.md.

FAQ

For common questions about compatibility, privacy, performance, and customization, see references/faq.md.

Weekly Installs
6
First Seen
Jan 28, 2026
Installed on
claude-code5
gemini-cli5
opencode5
cline4
codex4
kiro-cli4