Connecting Concrete CMS to Microsoft Ads
Concrete CMS is a self-hosted PHP CMS used by small organisations and agencies, typically with commerce added through an add-on rather than built in. Microsoft Ads reaches an older, higher-income, more desktop-weighted audience than Google, and it is routinely the cheapest qualified traffic a B2B advertiser can buy. The join between them succeeds or fails on one thing: whether the MSCLKID reaches the Concrete CMS order before the conversion happens, because Microsoft Ads can only match a conversion it can tie back to a click it recognizes.
Free30 minutesNo obligation
Specific to this pair
Concrete CMS to Microsoft Ads offline conversions with the msclkid
Capture msclkid in the browser into a first-party cookie, since cached Concrete CMS pages may skip server code, and save it on the order or form entry. A scheduled job on your server can then upload offline conversions through file import or the Microsoft Advertising API: enquiries at modest value, paid outcomes for bidding once volume allows.
Self-hosting is the advantage here. Once the msclkid is stored against the order or form entry, a scheduled job on the same server can query the database and produce Microsoft's offline conversion upload directly, with no middleware. Check whether Microsoft's scheduled import from a file URL suits you, or push through the Microsoft Advertising API. Either way the goal has to exist as an offline conversion type before the first row will match.
The capture step is where Concrete sites lose clicks. Check whether your full page cache keys on the query string: if a cached copy is served for URLs carrying ?msclkid=, any server-side code that would read the parameter never runs. Capture it in the browser, write a first-party cookie, and have the add-on's order event or the form listener read that cookie when the record is created.
Many Concrete sites are lead generation for local organisations and professional services, which suits Microsoft's older, desktop-heavy searchers. Send two goals: the enquiry at a modest value, and the signed or paid outcome when it happens, matched to the same msclkid. Only the second should drive bidding once you have enough of them; until then, bid on the enquiry and report the outcome.
Concrete CMS → Microsoft Ads · what breaks
Why this join usually fails — Concrete CMS → Microsoft Ads
- 01
The MSCLKID never reaches Concrete CMS
Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed.
- 02
Commerce as an add-on, not a core feature
Which add-on is installed determines the entire integration surface, so nothing transfers between two Concrete sites without checking first.
- 03
Auto-tagging switched off
Microsoft auto-tagging is frequently disabled in accounts that were set up quickly or imported from Google, and without it no MSCLKID arrives at all — so the entire offline import has nothing to match against and fails silently.
- 04
Nothing reconciles afterwards
Microsoft Ads reports offline conversion uploads with rows accepted and rejected. A successful upload is not a matched conversion — check that conversions actually appear against campaigns afterwards.
Concrete CMS → Microsoft Ads · the fix
What working looks like — Concrete CMS → Microsoft Ads
The MSCLKID on every order
Conversions arriving in Microsoft Ads
Conversions appear against the campaign, ad group and keyword that produced the click, with the value you sent, and become usable for automated bidding.
Reconciled against the source
Concrete CMS → Microsoft Ads · architecture
How Concrete CMS and Microsoft Ads actually connect
- 1
Concrete CMS holds the truth
Self-hosted means you own and can query the data directly, which makes reconciliation straightforward once the identifier is present.
- 2
Microsoft Ads needs a click to match
Microsoft matches uploaded conversions to clicks using the MSCLKID, and the conversion goal must be created as an offline conversion type. The click has to fall inside Microsoft's import window — verify the current limit in your account rather than assuming it matches Google's.
- 3
The identifier is the bridge
The MSCLKID, captured at the visit and carried into the Concrete CMS order.
- 4
The event source decides reliability
Fire server-side. Page caching means the confirmation template may not execute.
- 5
Deduplication at the destination
Microsoft deduplicates on the combination of click identifier, conversion name and conversion time. Uploading the same click against a second conversion goal counts twice, which is the usual cause of inflated numbers here.
Concrete CMS → Microsoft Ads · normal or broken
Working vs. broken, side by side — Concrete CMS → Microsoft Ads
Normal, not a fault
The MSCLKID present on the order
Sent from the order-completed event from your commerce add-on
Deduplicated correctly
Microsoft deduplicates on the combination of click identifier, conversion name and conversion time. Uploading the same click against a second conversion goal counts twice, which is the usual cause of inflated numbers here.
Reconciles with the source
Actually broken
The MSCLKID missing on most records
Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed.
Sent from the browser
Which add-on is installed determines the entire integration surface, so nothing transfers between two Concrete sites without checking first.
Counted twice, or not at all
Microsoft auto-tagging is frequently disabled in accounts that were set up quickly or imported from Google, and without it no MSCLKID arrives at all — so the entire offline import has nothing to match against and fails silently.
Nobody has reconciled it
Concrete CMS → Microsoft Ads · diagnose
Diagnostic order — Concrete CMS → Microsoft Ads
- 01
Count orders carrying the MSCLKID
- 02
Follow one real conversion end to end
- 03
Identify which commerce add-on is in use
That decides where the order is created and what events exist to hook.
- 04
Confirm auto-tagging is enabled and check the upload diagnostics
One account setting decides whether any of this works. Then read the per-row errors on the upload rather than the success count.
- 05
Read the match rate, not the success message
Microsoft Ads reports offline conversion uploads with rows accepted and rejected. A successful upload is not a matched conversion — check that conversions actually appear against campaigns afterwards.
Concrete CMS → Microsoft Ads · prove
How it gets proven — Concrete CMS → Microsoft Ads
Source of truth
Your own database's order records, at agreed states.
- The MSCLKID confirmed present on a live order.
- Auto-tagging confirmed on, and the accepted count reconciled against conversions appearing in campaign reporting.
- Order attribute confirmed populated on a purchase through a cached page.
Concrete CMS → Microsoft Ads · free audit
What we check in the free audit
- Count orders carrying the MSCLKID
- Follow one real conversion end to end
- Identify which commerce add-on is in use
- Confirm auto-tagging is enabled and check the upload diagnostics
- Read the match rate, not the success message
Checked against
Your own database's order records, at agreed states.
Free30 minutesNo obligation
Concrete CMS → Microsoft Ads · when not to buy
When you don't need this — Concrete CMS → Microsoft Ads
- Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the MSCLKID.
- If your Concrete site is brochure-only with enquiries by form, treat it as a lead-gen site rather than a commerce one.
- If you are not running Microsoft Ads at meaningful spend, skip it — though for B2B the traffic is often cheaper and better qualified than people expect, which is worth testing before dismissing.
Concrete CMS → Microsoft Ads · what we deliver
What gets built — Concrete CMS → Microsoft Ads
Identifier capture into Concrete CMS
Capture the identifier and persist it as order attribute data through an event listener, server-side.
Event source: the order-completed event from your commerce add-on
Fire server-side. Page caching means the confirmation template may not execute.
Dispatch to Microsoft Ads
Offline conversion import through the Microsoft Advertising API or a scheduled upload.
Reversals where they exist
Order state changes recorded by the add-on.
Written guarantee
95%+ tracking accuracy
Measured against Your own database's order records, at agreed states.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Concrete CMS → Microsoft Ads questions, answered
Store the msclkid on the order, then upload a scheduled file or API batch of orders against an offline conversion goal. A cron job on your server can build it straight from the database.
Usually full page caching serves the landing page without running server-side code. Capture the parameter in the browser instead.
Almost always because the MSCLKID never reached the Concrete CMS order. Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed. Measure coverage before debugging the dispatch.
The MSCLKID, appended to your landing page URL when auto-tagging is enabled in the Microsoft Ads account. Auto-tagging is not on by default in every account, which is the single most common reason a Microsoft offline import finds nothing to match. Microsoft also supports enhanced conversions using hashed customer data as an alternative path.
The order-completed event from your commerce add-on. Fire server-side. Page caching means the confirmation template may not execute.
Microsoft Ads reports offline conversion uploads with rows accepted and rejected. A successful upload is not a matched conversion — check that conversions actually appear against campaigns afterwards.
More on Concrete CMS → Microsoft Ads
- Craft → Microsoft AdsConnecting Craft CMS to Microsoft Ads
- Concrete CMS → Google AdsConnecting Concrete CMS to Google Ads
- Concrete CMS → Apple Search AdsConnecting Concrete CMS to Apple Search Ads
RELATED GUIDES
Where Concrete CMS → Microsoft Ads fits in the rest of your tracking
- Microsoft · Local servicesMicrosoft Ads conversion tracking for local service businesses
- Microsoft · B2BMicrosoft Ads conversion tracking for B2B companies
- Microsoft × CRM DealsHow to reconcile Microsoft Ads against your CRM's closed-won deals
- Microsoft · Comparison page → demoHow to track comparison page visit to demo request for Microsoft Ads
- Umbraco → Microsoft AdsConnecting Umbraco to Microsoft Ads
- Concrete CMS → TikTokConnecting Concrete CMS to TikTok Events API
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Webflow → Microsoft AdsConnecting Webflow to Microsoft Ads
Free · 30 min
Get Concrete CMS and Microsoft Ads joined properly
Free30 minutesNo obligation
