Campaigns are how LinkLane keeps your link inventory legible. Every link can optionally belong to a campaign — a name, a colour, a description — and every link can carry a UTM payload that gets appended to the destination URL at redirect time. Together they replace the spreadsheet most teams use to track 'which post drove what'.
What a campaign holds
- Name
- Unique per user. Renaming is fine; collisions return 409.
- Description
- Free-form prose, optional.
- Color
- Hex code. Used as a chip on the URL table and a tint on charts.
- Created at
- ISO timestamp, immutable.
The UTM builder
Open the marketing options panel on the create form and you'll see five inputs: source, medium, campaign, term, and content. LinkLane merges them into the destination URL with proper encoding, preserving any query params that were already there. PATCH a link with new UTMs and the old ones are replaced — not duplicated — by stripping all utm_* before reapplying.
The roll-up view
Each campaign has a detail page at /campaigns/:id with a 14-day trend, totals by device / country / referrer / browser, and a per-link breakdown that shows which lanes are pulling weight. Deleting a campaign unlinks its members (sets their campaign_id to null) but never deletes the underlying lanes — the history stays.
Link preview cards
On link creation LinkLane fetches the destination's og:title, og:description, og:image, and favicon via a 3-second BeautifulSoup parse. Unreachable URLs fail gracefully — you get a 200 with a null preview, not a 500. Refresh later via POST /api/links/{id}/refresh-preview if the destination page updates its metadata.
Plan gating
- Read access
- All authenticated users.
- Create / edit / delete
- Pro+ — free users get a 402 and an upsell.
- UTM builder
- Free for all plans on the create form.
