skills/form-attribution/SKILL.md
Implement the Form Attribution library on websites to capture UTM parameters, ad click IDs, referrer data, and other marketing attribution automatically. Use when the user needs to (1) add marketing attribution tracking to a website, (2) configure form attribution for specific use cases like cross-subdomain tracking or CRM integration, (3) troubleshoot form attribution issues, or (4) implement platform-specific patterns for Webflow, HubSpot, WordPress, or other select platforms.
npx skillsauth add 224-industries/agent-skills form-attributionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 |
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.
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 |
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)
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>
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
Respects Global Privacy Control (GPC) and Do Not Track (DNT) by default. When detected, no data is captured. Override with data-privacy="false".
For implementation patterns specific to Webflow, HubSpot, WordPress, Marketo, and certain other platforms, see references/platforms.md.
For common questions about compatibility, privacy, performance, and customization, see references/faq.md.
development
Generate SEO-optimized content for traditional search engines, AI answer engines, and generative AI platforms. Use when the user needs help writing or optimizing content for (1) Blog posts, articles, or web pages targeting organic search, (2) Content optimized for Google AI Overviews and featured snippets, (3) Answer Engine Optimization (AEO) for ChatGPT, Perplexity, and voice assistants, (4) Generative Engine Optimization (GEO) for AI citations, (5) E-E-A-T optimization, (6) Schema markup and structured data, (7) Keyword research and topic cluster planning, or any content requiring search visibility across traditional and AI-powered discovery.
development
Analyze CSV files, generate summary statistics, and create visualizations using Python and pandas. Use when the user uploads, attaches, or references a CSV file, asks to summarize or analyze tabular data, requests insights from CSV data, or wants to understand data structure and quality.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------