UTM Campaign Link Preflight & Fix Pack
Pricing
$20.00 / 1,000 results
UTM Campaign Link Preflight & Fix Pack
Validate campaign and newsletter URLs before launch. Detect missing, duplicate, or inconsistent UTM parameters, then apply your specified values and export corrected links, CSV files, and validation reports.
Pricing
$20.00 / 1,000 results
Rating
0.0
(0)
Developer
bread kim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
Private Apify Actor for marketing operators and agencies who need to check a batch of campaign links before an ad or newsletter send. It audits supplied URLs offline, identifies missing, empty, duplicate, mismatched, mixed-case, fragment-only, unknown, and macro-based UTM conditions, and prepares corrections only when the caller supplies an exact expected contract.
It is deliberately not a generic URL parser. It never visits a destination, resolves DNS, invokes an ad platform, or calls GA4. A READY result means only that this Actor found no unresolved contract finding; it does not prove reachability, tracking, attribution, acceptance, conversion, or ROI.
Input
Submit links with 1–1,000 unique IDs. An expected object is optional. When present it must contain nonempty utm_source, utm_medium, and utm_campaign; the four other canonical fields are optional. Values are exact and case-preserving. The Actor never invents or silently lowercases a value.
{"links":[{"id":"email_launch","url":"https://example.com/offer?sku=A%20B&utm_Source=Old&coupon=x%2By#details","expected":{"utm_source":"newsletter","utm_medium":"email","utm_campaign":"launch"}}]}
Only literal public-looking HTTP(S) URLs are accepted. URL credentials, local/private literal targets, malformed escaping, encoded controls, recognized credential fields, JWT-like values, private-key material, and bounded recognizable bearer/API-key forms are rejected. The credential-field policy runs before correction or output and applies to both query strings and fragments, including OAuth-style #key=value, SPA-style #/callback?key=value, and percent-encoded pairs.
Recognized field names are percent-decoded, stripped of separators, and compared case-insensitively. A fixed vocabulary covers ambiguous OAuth/session/signature names, while credential-family terms such as secret, password, credential, token, apiKey, privateKey, and accessKey are detected anywhere in the normalized name so provider prefixes and suffixes cannot bypass the policy. Consequently signed URLs containing fields such as X-Amz-Credential, X-Amz-Signature, X-Goog-Credential, GoogleAccessId, Policy, or Key-Pair-Id are blocked. This is deliberately conservative: credential-looking business names such as token_count, plus ambiguous fields named code, authCode, or policy, are rejected by default; use a non-credential-specific name such as coupon. Normal fields such as utm_source, sku, coupon, and campaign remain accepted and are preserved byte-for-byte during correction. The policy examines parameter names, not ordinary words in benign values. Detection is intentionally bounded, not universal: unknown secret formats or secrets placed under unknown field names may not be recognized, so users must remove credentials before submission.
Outputs
OUTPUT: authoritative summary; the default dataset receives exactly one identical record for valid input.FIXED_LINKS.csv: private handoff with explicitly authorized proposed URLs.REVIEW_REQUIRED.csv: IDs and actionable finding codes.REPORT.JSONandREPORT.MD: URL-redacted diagnostics and hashes.MANIFEST.JSON: SHA-256 and byte length of the exact stored bytes for every other payload.
proposedUrl may be a partial safe correction while status remains REVIEW_REQUIRED; it must not be treated as send-ready until remainingIssues is empty. Audit-only links never receive invented fixes. Platform macros require manual review and block correction.
Local verification
npm ci --ignore-scriptsnpm testnpm run typechecknpm run buildAUTOMATON_CONTAINER_SMOKE=1 node dist/main.js
The smoke mode is selected only by AUTOMATON_CONTAINER_SMOKE=1; it runs a fixed in-memory three-row demo without network or storage. Production storage traffic is restricted to https://api.apify.com, with redirects disabled, a 30-second timeout, a 2 MiB response bound, and no retry.
See SUPPORT.md for the safe support template and SECURITY_REVIEW.md for the threat model.