Cron Expression Explainer & Checker (Free)
Free cron expression explainer: plain English, next run times in your time zone, and warnings for common mistakes. Crontab, GitHub Actions, Kubernetes.
View Cron Expression Explainer & Checker (Free)
Build UTM links for a whole campaign in one go, and catch the mistakes that send traffic to Unassigned.

Build UTM links one at a time or for a whole campaign sheet, and check the links you already sent. It catches the mistakes that make GA4 show Unassigned or (not set), or split one campaign into three rows. It also predicts the GA4 channel each link will land in. Python standard library only; runs offline.
python3 -m utmkit build https://example.com/pricing --source LinkedIn --medium paid_social --campaign "Q1 Launch"
# https://example.com/pricing?utm_source=linkedin&utm_medium=paid_social&utm_campaign=q1-launch (GA4 channel: Paid Social)
python3 -m utmkit build --csv campaign-sheet.csv --out tagged.csv
python3 -m utmkit check links.txt --out issues.csvThe screenshot is real output from the kit’s own commands. Tested from a fresh download of this exact zip: ./run_tests.sh ran 7 tests OK on Python 3.13 and 3.10.

| Check | Why it matters |
|---|---|
| MISSING_SOURCE / MISSING_MEDIUM / MISSING_CAMPAIGN | GA4 shows (not set) |
| UNASSIGNED | the source + medium pair matches no GA4 default channel rule (e.g. medium "newsletter" from "mailchimp"); a fix is suggested |
| UNKNOWN_PARAM | typos like utm_campain, utm_sorce |
| UTM_AFTER_FRAGMENT | /#/page?utm_...: GA4 reads utm from the query string, so the tags are lost |
| DUPLICATE_PARAM, EMPTY_VALUE, UPPERCASE_KEY | broken tags |
| CAPITALS, SPACES | Facebook and facebook become separate rows in GA4 |
| INCONSISTENT_NAMES | black-friday, Black_Friday and black friday across your links |
| PLACEHOLDER | {{campaign.name}} left in (fine if your platform fills it) |
The builder keeps existing query parameters and the #fragment, replaces old utm values, lowercases values and turns spaces into hyphens (--keep-case, --sep _). Parameters follow Google's list: utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content, utm_source_platform, utm_creative_format, utm_marketing_tactic. Channel prediction follows the rules for manual traffic on Google's "Default channel group" help page, with shortened source lists.
./demo.sh checks 12 example links (15 issues). ./run_tests.sh runs the tests. It's also a Claude Code plugin with a skill in skills/utm-links/.
Want more analytics tools? The SEO Analytics Tools Bundle has 4 tools that run on your own data (SEO Audit MCP Server, SEO Log File Analyzer, Keyword Cannibalization Checker, Content Decay Finder): https://youraitools.co/marketplace/seo-analytics-tools-bundle
Zip, 15 KB, v1.0, 15 files. Free to use, modify and share for any purpose, including commercial work, as long as this notice stays in copies. Not affiliated with or endorsed by Google.
Free UTM builder and checker: tag a whole campaign sheet, catch utm typos, capitals and spaces, and see which links GA4 will file as Unassigned.
Free cron expression explainer: plain English, next run times in your time zone, and warnings for common mistakes. Crontab, GitHub Actions, Kubernetes.
View Cron Expression Explainer & Checker (Free)4 back-office tools: payroll register reconciliation, employee census checker, SaaS spend finder, contract renewal tracker. Local CSV. $49 ($86 separately).
View Back-Office Ops Skills BundleSales ops bundle: pipeline hygiene checker, CRM duplicate cleanup and 4 HubSpot n8n workflows. Clean CRM, reliable forecast. $39 ($57 separately).
View Sales Ops Skills Bundle