Campaign Link Pack

Build a landing-page × channel list, review the links, then give your publisher one clear handoff.

Version 0.1.0 · Updated 2026-11-02 · Page memory only

Use public, untagged landing URLs. This tool does not visit them, connect to analytics or guarantee tracking. Adding parameters can invalidate signed links.

Start fresh or restore source inputs

Restores source inputs only. Build again to recompute links.

1. Name the campaign

2. Add landing pages

3. Assign channels

Give each assignment a label, source and medium. Optional content distinguishes placements.

Enter source inputs or load the fictional example.

A link list your publisher can use

One campaign often has several landing pages and several places to share them. This tool creates every landing-page/channel combination, so a teammate can copy the correct link for a newsletter, community post or partner placement. Each assignment has a visible label and landing-page number. The text handoff keeps the original page and the generated link together. CSV provides a compact link list. JSON keeps the source inputs so you can restore them and build a revised pack.

Example: two pages and three channels

Load the example and build it. You should see six links for the open-day and registration pages across the member newsletter, community post and partner newsletter. The original lang=en%20US query and #details fragment stay in place. The new tags are appended before the fragment. Change a source input and the old results disappear; build again before sharing a new pack.

Tag rules and existing query text

The standard parameter names are utm_source, utm_medium and utm_campaign, with optional utm_id and utm_content. Outer whitespace is trimmed. Values keep their case and Unicode characters; new tag values are URL-encoded. Choose naming conventions deliberately: this tool does not merge case variants, infer the right marketing channel or configure analytics.

Other original query text is preserved, including its existing escape spelling and order. URLs containing existing utm_ parameters or recognized advertising click IDs are rejected rather than silently retagged. Start with a plain landing URL. Whitespace, embedded usernames/passwords, backslashes and malformed percent escapes are rejected. Identical normalized landing URLs, duplicate channel labels and duplicate generated links are also rejected. This is not a complete semantic duplicate detector: different URLs may still reach the same page or redirect.

Check the destination and tracking separately

No destination is fetched and no analytics service is contacted. A generated URL does not prove that the page exists, that a redirect retains tags or that analytics records a visit. Test the intended published destination in your own normal workflow before relying on it. Use appropriate public campaign links; this tool is not a detector or remover of personal data, credentials or confidential query values. It does not shorten links, publish messages, attribute conversions or predict traffic.

Limits and saved source

Use up to ten landing URLs and ten channels, creating at most one hundred links. Landing URLs are limited to 2,000 characters, generated URLs to 4,000, campaign name to 120, campaign ID to 80, channel label/source/medium to 80 and content to 120. Source fields cannot contain line breaks or control characters. JSON restore accepts only this app’s schema 1 UTF-8 source files up to 128 KiB, validates inputs and ignores any saved derived URLs. A malformed restore clears the previous export but does not replace your current inputs. Clear cancels a pending import and removes the inputs and results.

Privacy and downloaded files

All work happens in temporary page memory. There is no account, upload, browser-storage workspace or hidden network request. Closing or reloading this page discards its state. Files you download remain on your device until you delete them and contain the URLs and tags you entered. Do not send source packs or campaign URLs to people who should not see those values. A text or CSV handoff is not access control. The optional restore input reads a file locally; it does not send it anywhere.