Skip to content
UTMCAP

Changelog

What shipped, and when.

Every entry is a real day’s work, taken from the commits that made it. Things being built rather than shipped are on the features page , named as such.

1 added2 improved3 fixed

A weekly Copilot email, and the click id under its real name

Every Monday the Copilot emails you what it found that week, and Google and Microsoft links now carry their click id under its own name, so a visitor straight from an auto-tagged ad is caught too.

Added

  • A weekly Copilot summary by email, every Monday morning. It also writes on a quiet week, to say nothing needs you. It is on by default and can be turned off under Notifications

Improved

  • Google, Microsoft and YouTube links now pass the click id as gclid or msclkid, the platform’s own name. So the tag catches it whether the visitor came through your tracking link or straight from an auto-tagged ad
  • Muting “losing segments” in the Copilot settings now silences the grouped card too. Before, the grouped version kept coming back

Fixed

  • Tag Manager no longer shows loading bars for ever when a second account signs in on the same computer
  • The goal key can be cleared and replaced with your own. Before, deleting it filled the name back in straight away
  • No scrollbar flashes while the sidebar opens
5 added3 improved3 fixed

Triggers for leaving visitors, page events, and paid versus organic

Tag Manager can now fire a goal when a visitor leaves or is about to leave, can tell your own page code that a goal fired, and the reports can show paid and organic traffic apart.

Added

  • Leaves the page: a trigger that fires when the visitor goes, after staying the number of seconds you choose. It works on phones
  • About to leave: a trigger that fires when the mouse heads for the address bar or the back button. Desktop only, and the screen says so
  • Page event: a new action that tells your site’s own code a goal fired, so the page can react — for example, open a popup when someone is about to leave
  • Clicks log: “Paid only” and “Organic only” views. A click counts as paid when the ad platform sent its own click id
  • Tag Manager stats: look at one traffic source, or only organic visits, on the Stores and Leads tabs

Improved

  • The Copilot checks your biggest-spending campaigns every hour, not only each morning
  • Spend is no longer imported from a traffic source that has no campaign on it. Test still works, so you can check the login before you build the campaign
  • Emails from UTMCAP have a proper dark version, instead of colours your mail app guessed

Fixed

  • Triggers now fire on the snippet with both keys, the one Settings prints. Before, the tag asked for its triggers with the wrong key and got none
  • The copy button on the Tracking tab copies exactly what the field shows. It had been copying a broken address with no domain
  • Spend for an ad platform campaign that UTMCAP does not track is no longer shared out over your tracked clicks. One free click had been carrying $10.52
2 added4 improved1 fixed

Pay without leaving UTMCAP, and every sync in one place

Card payments now happen on UTMCAP’s own page, and Tools → Sync shows every spend and conversion feed, when it last ran, and whether it worked.

Added

  • A new checkout page: the plan, the price and what you get on one side, the card form on the other. Switch between monthly and yearly and see what a year saves. Stripe holds the card; UTMCAP never sees the number
  • Tools → Sync: every spend and conversion feed in one list, with when it last ran, whether it worked, and the platform’s own words when it did not. One button syncs them all

Improved

  • The Copilot only flags waste worth acting on: at least $5, or half a payout on bigger offers. Hundreds of tiny suggestions are gone
  • “Recent changes” in the Copilot panel shows the last seven days only
  • Search opens as a large box in the middle of the screen, finds every page — tools included — and matches words in any order
  • A Notes column on Campaigns

Fixed

  • A tab left open during an update no longer shows “This page stopped working”. It reloads itself once instead
2 added3 improved3 fixed

The Copilot opens beside your page and remembers your chats

The Copilot opens as a full-height panel and the page moves over to make room, it can fill the screen, and your past conversations are saved for you alone.

Added

  • Past Copilot conversations are saved. Only the person who asked can see them, and they stay until you delete them. Start a new chat at any time
  • Full screen for the Copilot, inside the page. Escape takes it back to a panel

Improved

  • The Copilot opens as a full-height panel, and the page narrows to make room instead of being covered
  • The sidebar button shows an arrow that points the way the sidebar will move
  • A connection whose login has gone switches its syncs off, instead of failing every hour

Fixed

  • Creating a traffic source now saves its Integration tab too. Before, you had to press Save a second time for the sync to start
  • PropellerAds spend syncs again. It stopped on 8 October when PropellerAds changed its API. Days now follow PropellerAds’ own US Eastern days
  • On the dark theme, the sample row after a successful Test is readable
2 added3 improved2 fixed

A faster Tag Manager, and changes to many rows at once

Tag Manager loads faster, and you can pause, switch on or delete many triggers, pixels or goals at once.

Added

  • Tag Manager: tick several triggers, pixels or goals and pause, switch on or delete them together
  • Each trigger, pixel and goal shows its id beside it

Improved

  • Tag Manager makes far fewer requests, so it opens and changes much faster
  • A trigger can be edited. The fields that cannot change are greyed out and say so
  • One place for help: Help → Live chat reaches a person. The separate Ask panel is gone

Fixed

  • Tag Manager no longer hangs on “Loading…” after a hard reload
  • Fewer false “broken link” emails. An offer link is no longer called broken because the network’s bare address answers with an error, and a slow link is asked a second time before it counts
2 added4 improved2 fixed

Sale values from the page, and choices that stay chosen

A pixel can now tell the ad network what a sale was worth, read straight off your page, and every filter and tab you pick is remembered — after a reload and on another computer.

Added

  • Values from the page: read the order total, or any other value, off your page when a goal fires. Name it revenue and every pixel sends it with no more setup
  • Leads report: WhatsApp, Calls, Forms and Sign-ups get columns of their own beside the total

Improved

  • Every filter, tab and chosen site is remembered for you, not for the browser — so it is the same after a reload and on your laptop
  • Picking an element now happens inside the Add a trigger dialog, right above the field it fills
  • What is live, and the Publish button, sit in each table’s toolbar. Pixels show whether they are live too
  • Reports menu: Repeat addresses is now called Traffic quality. The Leftover clicks screen is gone, because deleted campaigns keep their names in reports anyway

Fixed

  • Image pixels now fill in {{click_id}} and the other values. They had been sent with the placeholder text as typed
  • A goal, trigger or pixel that has not fired yet still shows in the stats, with zero and “never”, so you can tell it apart from one that was never made
8 added3 improved2 fixed

Tag Manager: triggers, pixels, publish and undo

Fire a goal when a visitor clicks, submits a form, sees something or stays a while, send it on to Meta, TikTok, Google and other pixels, and publish changes only when you are ready — with undo.

Added

  • Triggers: fire a goal when a visitor clicks an element, submits a form, sees an element, or spends a set time on the page. Each trigger matches in several ways, so renaming a class does not quietly break it
  • Pixels: when a goal fires, also fire the Meta, TikTok, Google Ads, Snapchat or Reddit pixel, or any image pixel. UTMCAP still records the conversion on its own side, so a blocked pixel costs the network its copy, not you yours
  • Pick mode: add ?utmcap_pick=1 to any page with the tag, click the element, and it appears in Tag Manager. No browser extension needed
  • Watch what visitors press: for a window you choose, see the buttons visitors pressed that no trigger covers yet, counted, and make a goal from one
  • Publish and undo: changes stay a draft until you publish them, and undo puts back exactly what was live before
  • Link parameters: add the click id, or a fixed value, to links that leave your site — for a partner’s checkout or a booking tool
  • A warning when a goal stops firing, judged against that goal’s own normal rhythm, on the goal’s row and in the bell
  • Reports → Tag Manager stats: Stores, Leads (with cost, accepted leads and cost per lead), Funnel and Live events. Triggers and pixels each show their own counts

Improved

  • Triggers and pixels are tables like Goals, and adding one opens a dialog
  • The install snippet has one shape everywhere: the account key in k= and the site key in s=
  • Shorter help on the Tracking tab, with a link to the full page in the manual

Fixed

  • Live events shows “no events” for a quiet hour, instead of looking like it is still loading
  • The Stores tab only reports stores, not every affiliate campaign in the account
1 improved1 fixed

Measurement is now Tag Manager, and CPA counts the sale

The Measurement page is now called Tag Manager, and cost per action divides cost by real conversions instead of by every step on the way to one.

Improved

  • Measurement is now called Tag Manager, in every language. The old address still takes you there

Fixed

  • CPA and conversion rate no longer count every funnel step — a product view, a cart, a WhatsApp tap — as a conversion. One buyer had been counted several times for one sale. The steps still show as what happened
4 added1 improved1 fixed

WhatsApp and phone leads, and a 30-day trial

The tag now catches taps on WhatsApp links and phone numbers by itself, and every new account starts with thirty days of every feature.

Added

  • WhatsApp click and Phone click goals, caught by the tag on its own — no code on your page. Both are in Add common goals
  • The click id is added to the WhatsApp message as a short Ref, so a chat can be matched to the ad that brought it
  • New accounts start on a 30-day trial with every feature on and 100,000 clicks. After that the account is on Free unless you upgrade, and nothing you built stops working
  • Report builder: the five shop steps as columns, and group or filter by any of them — for example, only clicks that started checkout

Improved

  • A WhatsApp or phone tap counts only when the visitor came from a paid click, so organic visitors do not fill your lead numbers

Fixed

  • A goal pressed on a landing page was sometimes not recorded, because the Tracking tab printed the account key instead of the site key. The campaign tag now carries the right key
3 added4 improved1 fixed

Store funnels, step by step

A connected Shopify shop now reports product views, carts, checkouts, sales and sign-ups by itself, and the reports show which step each click reached.

Added

  • A Shopify shop reports Product viewed, Add to cart and Checkout started by itself — no theme code. Purchases arrive from Shopify with the real total, and new customer accounts are counted too
  • Clicks log: a column and a filter for each step of a shop’s funnel
  • Clicks log: a Platform click id column, so you can see which clicks the ad platform actually sent and which came from a shared link

Improved

  • The funnel shows a shop’s steps in the order they happen, so no step reads over 100%
  • Tag Manager says whether the tag has been seen, not only whether a goal fired. A shop that is set up but has no sale yet shows blue, not amber
  • Live events: a repeating fault is one row with a count, so it does not push everything else off the list
  • Conversions log: a missing click shows as “no click” instead of a row of zeros

Fixed

  • Opening the clicks log from a link that names a campaign could show another campaign’s clicks
6 added1 improved

Shopify and WooCommerce stores

Connect a Shopify shop with one button and its orders and refunds come straight from Shopify, signed, while WooCommerce and other shops post theirs from their own server.

Added

  • Connect a Shopify shop with one button. Orders and refunds come from Shopify itself, signed, so the amount can be trusted
  • A refund lowers or cancels the sale it belongs to, so ROAS can go down as well as up
  • A daily check asks each shop for any order that was missed, and adds it
  • The click id is carried through Shopify’s checkout, so the sale is matched to the ad
  • Choose where a store’s orders come from — Shopify, WooCommerce or something else — and the Install tab shows only what that platform needs
  • Ready-to-paste code for posting orders from your own server, in Node, PHP, Python and curl

Improved

  • The Shopify snippet loads from your own tracking domain, so your theme does not tell visitors which tracker you use
3 improved4 fixed

Google and Microsoft campaigns without a redirect, done right

Google and Microsoft campaigns that never redirect now get a working call-to-action button and the right link to paste, and the tag only counts a visit when the page names a campaign.

Improved

  • The site tag only opens a visit when the page names a campaign — utm_id in the address, or &c= on the tag. Cost comes only from the address, never from the tag
  • The Integration tab says when the Google Ads account a source used has been removed, instead of looking connected
  • The “Organic routed by” column on Landing pages is gone, because nothing is routed that way any more

Fixed

  • On campaigns without a redirect, the call-to-action button sent visitors to a 404 page. It now works
  • The link icon on Campaigns copies the Final URL Google accepts, not a tracking link it would refuse
  • A Final URL no longer keeps the {click_id} placeholder in the ad
  • “Create one for me” reuses the Google or Microsoft conversion action it already made, instead of making another copy each time
1 added4 improved

Tidier forms, and an email when a connection breaks

Every form is laid out in clear groups, and you get an email when a Google, Meta or other ad connection stops working through no fault of yours.

Added

  • An email when an ad platform connection breaks — a revoked login or an expired token. It says once what to fix, and that the spend already recorded is safe

Improved

  • Every create dialog is laid out in the same named groups, including the largest ones
  • Every list page sits in the same card
  • Disconnecting an ad account switches off the syncs that used it, instead of leaving them to fail every hour
  • A sync whose login has gone says so, instead of showing a bare “401”
4 added4 improved2 fixed

Push.House, and a guard against fake click costs

Push.House joins the traffic sources with spend sync and Ads manager controls, and the tracker now refuses a click cost that is far above what a source normally charges.

Added

  • Push.House traffic source template, with its short lowercase macros
  • Push.House spend synced from its API, and in the Ads manager: block and unblock sites, pause and resume, daily budget, and a price per site
  • A maximum click cost on each campaign
  • Ads manager: count a campaign’s zones in one country at a time

Improved

  • The tracker learns what a source normally charges per click. A price far above that is refused, and the normal price is recorded instead — so a forged link cannot inflate your spend
  • The postback field lists every token as a chip that says what it means. A click puts it where your cursor is
  • The dashboard fits a phone: search folds into an icon, toolbars use icons, and the date picker works. Desktop is unchanged
  • A warning when clicks keep arriving from a source but its cost sync has never stored any spend

Fixed

  • Ads manager now shows why a network refused a change, instead of showing nothing
  • On the dark theme, blue and yellow notes are readable
1 added2 improved2 fixed

The menu in five languages, and a cleaner dark theme

Choose Russian, Spanish, Brazilian Portuguese or Hindi for the app, starting with the side menu, and the dark theme no longer shows bright light-theme patches.

Added

  • A language setting: English, Russian, Spanish, Brazilian Portuguese or Hindi. The side menu is translated first

Improved

  • Every dropdown in the app is the same list, with a tick against the current choice
  • Saving an integration clears the old error that described the settings you just replaced

Fixed

  • On the dark theme, coloured pills and warning banners no longer glow with their light-theme colours
  • Microsoft Advertising spend sync no longer says the developer token is missing when it is set
7 added2 improved

The Ads manager

Tools → Ads manager shows every zone or placement of a campaign with its cost, revenue and profit, and lets you block it, change its bid or stop the campaign from the same screen.

Added

  • Tools → Ads manager: every zone, site, widget or placement in a campaign, with cost, revenue and profit. Tick rows to block, unblock, or move the bid 20% up or down, or type a new bid
  • Stop and start a campaign, and see its daily budget, from the same screen
  • A Copilot column that says what each zone did — for example, no conversions on 340 clicks
  • Paste a list of placement ids into search to see just those rows
  • Google and Microsoft: change an ad group’s bid and the device bid adjustments
  • Several Snapchat accounts, as the other platforms already had
  • On Growth, Pro and Scale; the Free plan sees what the screen does instead of an empty table

Improved

  • Help → Live chat reaches a person, and “Talk to a human” opens it with your conversation copied
  • The Snapchat logo is large enough to read in the lists
3 added3 fixed

Snapchat Ads, both ways

Connect Snapchat, pick the ad account and pixel by name, and its spend comes in while your conversions go back out on Snapchat’s own click id.

Added

  • Snapchat Ads: connect the account and sync each campaign’s daily spend, swipes and impressions
  • Choose the Snapchat ad account by name instead of typing its ID, and the pixel from that account’s own list — both are long codes that look alike in Ads Manager, and a wrong one is not an error, just a sync that finds nothing
  • Send conversions back to Snapchat on the click id it puts on your landing page, so its delivery learns from sales the pixel never sees; the same order id goes to Google, Meta, TikTok and Snapchat, so no sale is counted twice

Fixed

  • The redirect method set on a path — hide the referrer, meta refresh, and the rest — is now used wherever the click is answered. Clicks answered at the edge were being sent on as a plain redirect whatever the path asked for, so a path set to hide the referrer still showed the offer where the visitor came from
  • The Copilot shows what a zone really cost when it is less than a cent — every cheap zone had been reading $0.00, so none could be told from another
  • On the dark theme, the clicks log’s totals row and the dashboard funnel’s last step are no longer pale bands across the page
3 added8 improved

The clicks log, smartlinks, and a bin for campaigns

The clicks log now counts and exports the whole range you asked for rather than the rows on screen, a deleted campaign can be brought back for thirty days, and a smartlink records which traffic source sent each click.

Added

  • Smartlinks: a traffic source tags the link, and the table shows what each one recorded
  • A bin for campaigns: deleting one can be undone for thirty days, and its path is never given to another campaign — so an old link cannot quietly start pointing somewhere new
  • Every bin can be emptied, because a deleted row’s name now outlives it

Improved

  • The clicks log loads as you scroll instead of asking you to press for more, says how many clicks there are, and its totals row counts the whole date range rather than the rows on screen
  • Sorting starts at the highest, can be switched off, and is remembered — and one press on a header changes one thing, not two
  • Views, filters and the drill-down chips are all asked of the query, so what you see and what you export are the same rows
  • The report builder’s totals, and the exports that quietly produced nothing
  • The Copilot is quieter: repeated advice is grouped into one line per campaign, suggestions can be limited or switched off in its own settings, and it now says whether the change you applied actually worked
  • Reports: the controls read as one sentence, and the toolbar is a single height
  • Text across the app is sharper and sized in real pixels rather than scaled, and the body face is Roboto
  • Connection type says Wifi rather than leaving it blank, and names a datacentre when the address belongs to one
2 added3 fixed

The click id has a field of its own

A platform’s click id no longer takes up one of your ten sub slots — it has its own field, and the slot it used to occupy is yours again.

Added

  • External ID: the traffic source’s own click id is kept in its own field, so all ten sub slots are free for what you want to track
  • Opening a source saved before this frees the slot its click id was using, and keeps the name on it

Fixed

  • Postback URLs are built on your tracking domain, not the dashboard’s — a network sending to the dashboard address was being turned away
  • The affiliate networks list hands out your account’s domain too, for the same reason
  • The URL preview is built by the same code that builds the real URL, so what you copy is what a visitor gets
3 added3 fixed

Parameters carry real names

A campaign URL now reads utm_source=example rather than sub1=example, so your reports and the network both see a name that means something.

Added

  • Give a parameter a name and that name is what appears in the link, instead of the slot number
  • Cost and the click-id slot are set on the Parameters screen, beside the values they belong with
  • Tokens that will arrive empty are marked as such before you build a link with them

Fixed

  • A cost smaller than a cent shows as what it is, instead of $0.00 — tier-3 traffic had been reading as free everywhere money appears
  • A parameter the URL already carries is no longer added a second time — a link pasted from a network could arrive with the same token twice
  • A postback that arrives on a wrong path is no longer a lost sale, and its parameters keep their names
2 added3 improved

Domains look after themselves, and visitors’ details are removed

A domain you add registers, verifies and renews on its own, and every visitor’s address and device details are removed once your plan’s retention window passes.

Added

  • A domain added by hand registers with Cloudflare on its own, and is marked verified when the tracker is seen answering on it
  • Past your plan’s retention window, each click keeps its numbers and loses the visitor — the address, the device and the referrer are removed, and nothing a report counts is deleted

Improved

  • Domains over your plan’s limit are warned about first and paused after three days, and come back the moment the plan covers them
  • The Domains page shows a paused domain as paused, and the address it shows is the one the server actually gives
  • A domain that is gone has its site and certificate taken down, rather than left renewing
6 added1 improved

An API you can build on, and webhooks

Read-only and expiring API keys, a documented API with a stability promise, and signed webhooks to your own URL that keep retrying for a day.

Added

  • API keys that expire and can be rotated, and read-only keys chosen when the key is made
  • Webhooks: signed events sent to your own URL, retried for a day if your endpoint is down
  • The API is described in full in the documentation, with an OpenAPI file, an Idempotency-Key header and a written promise about what will not change under you
  • A rate limit per plan, so one busy integration cannot starve another
  • Bring your own paid geo database, if you want home-broadband detection better than the built-in one
  • Link safety checks on Growth and above

Improved

  • Clicks, postbacks, goals, page views and visits are held and delivered rather than dropped when the tracker cannot reach the origin
4 added3 fixed

Your own domain, answered at the edge

A domain you point at UTMCAP is answered by the edge network rather than the origin, and the shared link domain is now a tracking domain in its own right.

Added

  • Customer domains are answered at the edge, close to the visitor
  • Several shared link domains, each switched on or off, and the shared domain works as a full tracking domain rather than only a short link
  • The landing page dialog offers the shared link domain directly
  • Free plans get the tracking tag from the shared domain

Fixed

  • Broken links in the notification bell and in emails
  • The “?” help panel can no longer be clipped by the edge of the screen
  • Dialogs open showing what is already known, instead of empty
7 added

The Copilot, and two-factor sign-in

Every morning the Copilot reads your campaigns and says what to block, scale or fix, and you can ask it anything about your tracking — nothing changes until you press Apply, and every change can be undone.

Added

  • The Copilot, at the top right of every page: each morning it reads every campaign’s last seven days and suggests the zones and placements to block, the split test that has a winner, the campaign losing money and the segment worth scaling — and says nothing until there is enough data to be sure
  • Apply a suggestion in one click on Starter and above, and undo it from Recent changes; the free plan sees its top three to act on by hand
  • Tracking health beside the suggestions: a macro the traffic source never filled in, clicks arriving without their click id, a landing page whose click-through collapsed, conversions that stopped, a cost sync or login that failed, a goal gone quiet, postbacks that matched no click
  • Ask the Copilot: questions about your campaigns and tracking, answered from your own reports, setup and the help pages — unlimited with your own Anthropic, OpenAI, Google Gemini or OpenRouter key on any plan, connected under Integrations → AI, or with UTMCAP’s built-in AI: 100 questions a month on Growth, 250 on Pro, 500 on Scale
  • Ask it to fix something and it prepares the change as a card, with the figures behind it — nothing changes until you press Apply
  • From a connected Google Ads or Microsoft Advertising account, the searches that spent without converting; from a connected Google Ads, MGID or ExoClick account, addresses that clicked again and again without converting
  • Two-factor sign-in: a code from an authenticator app at sign-in, with recovery codes, switched on under Settings → Security
17 added4 improved9 fixed

Several Microsoft and Meta logins, and Meta spend counted in full

Connect more than one Microsoft or Facebook login — a client’s beside your own — and Meta spend now reads every page of the report, so accounts with many campaigns are counted in full.

Added

  • Several Microsoft Advertising and Meta logins per account, as Google already had — each traffic source picks the one it uses
  • Microsoft asks which login to use when you connect, so a second one can be chosen
  • Pick the Meta ad account from a list, by name, instead of typing its act_ ID
  • Adsterra and NewsBreak traffic source templates, with their click id sent back in the postback
  • NewsBreak spend sync with just an API token — no saved report to make by hand in Ad Manager
  • TrafficJunky traffic source template, and its spend synced per campaign, a day at a time, from its API
  • {utmcap_id} — the click id under its own name, in offer and lander links and postbacks; {click_id} and every link already written with it keep working
  • Contributor and Viewer roles on the team — a contributor creates campaigns, offers and landing pages and changes only their own; a viewer sees everything and changes nothing
  • A Created by column on Campaigns, so you can see whose each one is
  • Select all in column settings — one box turns every column on or off, or only the ones a search matched
  • Every list and report opens with the columns that matter most, and Reset to defaults goes back to them — it had been switching every column on
  • Connection type and mobile operator are recorded on every click — Corporate for hosting networks, Cellular and the carrier for mobile ones — so reports show them and campaign rules on them match; connect a paid IP database for home broadband
  • Proxy, bot score, bot signals, arrival and the landing page button are recorded on every click — clicks through tracking links had been saving them blank
  • Conversions log: every parameter a network sends in its postback — aff_sub3, transaction_id, sale_amount and the rest — can be its own column
  • The same thirty-odd figures on Campaigns, Offers, Landing pages, Traffic sources and Affiliate networks — Bot %, Approve %, pending and rejected revenue, ROI (all), uEPC, EC, CPL, eCPM and more, off until you switch them on
  • Affiliate networks show their offers’ clicks, conversions, revenue, cost and ROI, for the date range you pick
  • Reports: the report builder and Trends offer every figure the lists do; the clicks and conversions logs show offer, lander and source by name, arrival, mobile operator, proxy, bot score, browser and OS versions and more — all off until you switch them on

Improved

  • A new dashboard: profit in a sentence, the path from click to cash, what needs attention and what is making money, and where the profit comes from
  • Measurement: choose the store or lead page from a dropdown that shows how each is doing, with its goals’ health beside it — the row of cards is gone
  • Names are unique within an account: two campaigns, offers, landing pages, networks, traffic sources, smartlinks, sites or goals can no longer share one. Existing duplicates were renamed “Name (2)”, and a second copy is named “(copy 2)”
  • “Create one for me” works straight away: it saves the Integration tab first, and with sending switched on, the new conversion action or goal is saved too

Fixed

  • Meta spend for accounts with many campaigns is read in full — it stopped after the first 500 rows of the report
  • The browser no longer fills a saved login into the Meta Pixel ID and Conversions API token boxes
  • PropellerAds spend sync reads the report PropellerAds actually sends — by campaign and day, in UTC, spend before VAT
  • Conversions sent back to PropellerAds carry its own click id, so PropellerAds counts them
  • Adsterra spend syncs per campaign, with impressions — it was one total per day
  • A network’s postback password no longer shows in the conversions log, the click detail or the conversions export
  • Traffic sources: Leads shows conversions still pending — it repeated the Sales figure — and the CR total no longer counts each conversion twice
  • Reports grouped or filtered by offer count the offers behind a landing page — their clicks, cost and revenue had been filed under “no offer”
  • Postbacks to Outbrain, MGID, RichAds, EvaDav, RollerAds, Zeropark, ExoClick, PopAds, Clickadu, Taboola and Revcontent carry the platform’s own click id, so the platform can count them — existing sources were switched where they already recorded it
11 added7 improved3 fixed

Microsoft Advertising and Meta join Google, and stores are measured apart

Microsoft Advertising syncs spend and takes conversions back like Google Ads, Meta hears about each conversion through its Conversions API, and Measurement separates stores from lead pages.

Added

  • Microsoft Advertising: pick the account from a list, daily spend synced from its reports, and conversions sent back within seconds, matched on the msclkid
  • Pick the Microsoft offline conversion goal they are counted under — or have one created for you
  • Conversions sent to Meta’s Conversions API, matched on the fbclid, with your Pixel ID and a token from Events Manager
  • Stores, Lead capture and Live events as separate tabs on the Measurement page, with a card for each store and each lead page
  • Where it fires: every lander your lead campaigns sent clicks to, and whether the tag was seen on it
  • How many of your leads the buyer accepted, beside each lead goal
  • A tracking link for store campaigns that records the click and sends the visitor on to the store
  • Page-visit goals as a visible choice when creating a goal — no code needed
  • Separate switches for syncing cost and for sending conversions to Google Ads
  • Cloudflare and Namecheap as their own tabs when adding a domain
  • Copy buttons on the campaign URL previews in the traffic source form

Improved

  • Connecting Microsoft Advertising no longer asks for a developer token or account IDs — connect, pick the account, done
  • Meta traffic sources keep Meta’s click id without it being written into the tracking link
  • Lead campaigns no longer ask for a site — their pages are the landers in their Funnel
  • New stores and lead pages can start with the usual goals already added
  • Store campaigns show their alias and tracking domain, and take their address from the chosen store
  • Cost model, cost parameter, cost macro and traffic loss sit on the Main tab; the parameter table has its own Parameters tab
  • Turning off cost sync no longer stops conversions reaching Google — each has its own switch

Fixed

  • Store campaigns save without asking for an offer
  • Store and Google Ads clicks keep their first two sub ids
  • A goal fired on a lead page is matched to the campaign the visitor came from
6 added6 improved4 fixed

Real ad spend, and conversions back to Google Ads

Connect your ad accounts once and spend syncs every three hours into your own currency and straight into ROI, while Google Ads hears about each conversion within seconds.

Added

  • Ad spend synced on a timer, every three hours, for each connected source
  • Conversions sent to Google Ads the moment they arrive, matched on the gclid
  • Pick the Google Ads account and the conversion action from a list — or have one created for you
  • Ad accounts in Tools → Integrations: connect several Google logins, each under a name you choose
  • Several named Cloudflare and Namecheap accounts, with each provider’s real logo
  • Add a tracking domain straight from a connected Cloudflare or Namecheap account; the record is written and the certificate requested for you

Improved

  • Reports and ROI use the spend the ad platform reported, not an estimate
  • Synced spend is converted into your account’s currency at the day’s rate
  • Connecting Google Ads no longer asks for a developer token or API settings — connect, pick the account, done
  • Tracking domains point at us with a CNAME, and a new one is usually serving within minutes
  • The Tracking tab shows one tag, named after the campaign
  • Platform errors are shown as the platform wrote them, in red

Fixed

  • A week with no spend reads as no spend, not as a setup error
  • Ad account ids pasted with dashes work
  • No more warnings about an allowance you are still inside
  • A first payment is no longer lost when the card processor’s messages arrive out of order
6 added3 improved

Reports you can build, and support you can reach

The report builder stopped being a fixed set of tables: group by up to five dimensions at once, filter server-side, and compute fifteen more columns. Support moved into the product.

Added

  • Group a report by up to five dimensions, each in its own column
  • Fifteen more computed columns in the report builder
  • An event id in the clicks log, and origin columns on the conversions log
  • Smartlinks show where their clicks came from
  • Support conversations, inside the app
  • A help panel that answers from the manual and hands over to a person when it cannot

Improved

  • Filters run on the server, combine with OR inside one dimension, and show names rather than identifiers
  • A deleted campaign is named as deleted, instead of showing eight characters of hex
  • The emails the product sends you read like a product, not a debug notice
5 added2 improved2 fixed

A manual on its own hostname, and invoices

The documentation moved to docs.utmcap.com as static pages, so it stays up when the application does not. Billing gained the paperwork around it.

Added

  • docs.utmcap.com — the whole manual, with search and a diagram on every page
  • Links from the screens in the app to the pages that describe them
  • Find and download every invoice on your own account
  • A stated refund policy: fourteen days, and never for crypto payments
  • A reset link on sign-in, and an email code on sign-up

Improved

  • Customers can cancel their own subscription, and changing plan no longer bills twice
  • A repeat visitor is handed the click id they already have, rather than a new one

Fixed

  • {click_id} is filled only where a redirect actually brought the visitor
  • The application stopped handing out its origin address
5 added3 improved3 fixed

Plans that mean something, and tables that behave

A plan stopped being decoration: allowances are enforced, and the usage screen reads the same counter the limiter reads, so the two can never disagree about how much of your month is left.

Added

  • Pay for a plan in the app, with an invoice issued for every payment
  • A usage screen that reads the same counter the limiter reads
  • Freeze a column in a report, and keep its heading and total with it
  • Choose which emails you receive, on a Notifications tab
  • Breached-password detection and password age on your account

Improved

  • Plan allowances actually limit what an account can do
  • Every campaign, offer, lander, network and source has its own readable number
  • The account page moved into Settings

Fixed

  • Five columns that sorted on a field they never showed
  • The ID column sorts by the number it shows
  • A frozen column no longer scrolls over the table’s own headings
2 added1 improved

Redirects moved to the edge

The redirect is now decided on Cloudflare’s network rather than on one server: 97–104 ms warm, measured from a client in India, against 336 ms warm from the origin.

Added

  • Edge redirects, with the same decision engine running at the edge and on the origin
  • Connect buttons for Google Ads, Microsoft Ads, Meta and TikTok

Improved

  • Bot detection is tuned per account — your threshold and your signals, not a setting shared with everyone else
3 added2 improved

Campaigns that never redirect

Google and Microsoft parallel tracking needs a campaign with no redirect in it at all. Those can now be set up without workarounds.

Added

  • Google and Microsoft campaigns set up without a redirect
  • Create a measurement site without leaving the campaign form
  • A default tracking domain per account, so new campaigns start on it

Improved

  • The funnel splits by lander and ranks on money rather than on opt-ins
  • A campaign that cannot redirect can still open its own click
5 added2 improved

Knowing what a click was

Region, city, ISP and network number are resolved from data files on our own machines, and bot and proxy detection stopped depending on anyone else’s list.

Added

  • A Geo databases page: choose the source for each field separately
  • First-party bot and proxy detection, refreshed daily
  • Region, city, ISP and ASN on every click
  • Smartlinks: route a short link by rule, and record who followed it
  • A data corrector for missing conversions and missing cost

Improved

  • Windows 11 and the handset model are read correctly, which the user agent no longer states
  • A visitor’s address and country are read only from headers that can be trusted, so the geography on a click is right

Older than this, the product was not something anyone could sign up for, so there is nothing here worth publishing about it. If a change you were waiting on is missing, ask and we will tell you where it stands.

Point a domain at us and run a click through it.

The free plan takes a hundred thousand clicks a month and no card. If it does not do what you need, you have lost twenty minutes.