Skip to content
Cover illustration for Microsoft Ads offline conversions: how to import CRM outcomes into Microsoft Advertising

Microsoft Ads offline conversions: how to import CRM outcomes into Microsoft Advertising

How to send offline and CRM conversions to Microsoft Advertising (Bing): capture the MSCLKID, create an offline conversion goal, upload by file, schedule or API, add hashed email and phone for enhanced conversions, and fix the common errors.

Jamie IsabelBy 12 min read

Microsoft Ads offline conversions let you send outcomes from your CRM, such as qualified leads and closed deals, back to Microsoft Advertising and match them to the Bing ad click that started them. You save the MSCLKID with each lead, create an offline conversion goal, then upload each outcome by file, schedule or API.

This guide is part of our offline conversions series. It covers the Microsoft Advertising side only. Facts come from Microsoft’s own help pages and API reference, as of October 2026.

How Microsoft Ads offline conversions work

Microsoft’s offline conversion guide describes a short chain:

  1. Someone clicks your ad. With auto-tagging on, the landing page URL carries a unique msclkid.
  2. Your site keeps that ID and sends it with the lead form into your CRM.
  3. The lead becomes a sale later, on a call or in a meeting.
  4. You upload the click ID, the goal name and the conversion time to an offline conversion goal.
  5. Microsoft matches the row to the click and counts it as a conversion for that goal.

Microsoft recommends offline conversions for lead generation, where the sale happens offline. It says not to use them for store visits or in-store purchases. Offline goals don’t need a UET tag. The goals grid shows a dash for the tag ID and tracking status.

MSCLKID import vs enhanced conversions matching

Each uploaded row needs a way to match it to an ad. You can send the MSCLKID, hashed customer data, or both. The OfflineConversion reference says the MSCLKID “is optional when you provide a hashed email address or phone number for enhanced conversions.”

Match key

MSCLKID import

The MSCLKID from the ad click

Enhanced conversions matching

A SHA-256 hashed email address or phone number. The MSCLKID becomes optional.

1 / 6

From Microsoft Advertising Help on enhanced conversions and the OfflineConversion API reference, October 2026.

Send both when you can. The click ID gives an exact match, and the hashed data covers leads whose click ID was lost. Microsoft’s enhanced conversions page says formatting and hashing are mandatory for offline uploads, and that unhashed data returns an error in the upload status. In the API, the goal setting is IsEnhancedConversionsEnabled. If you don’t see an enhanced conversions option on your offline goal, check with Microsoft Advertising support before you rely on hashed-only rows.

What you need before you start

  1. Auto-tagging of Microsoft Click ID turned on. It is on by default, under Campaigns, then Settings, then Account level options, with the checkbox “Add Microsoft Click ID (MSCLKID) to URLs to allow conversion tracking”.
  2. Code on your landing pages that reads msclkid from the URL and stores it, because it isn’t carried to the next page.
  3. A lead form with a hidden msclkid field, plus the email, phone, a timestamp and the consent choice, saved on the CRM contact and linked to every deal.
  4. A conversion window that fits your sales cycle. Microsoft says a conversion uploaded more than 90 days after the last click won’t be imported.
  5. A transparency notice and user consent for the data you collect, as Microsoft’s offline conversion guide requires.
  6. For the API route only: a developer token, OAuth access to the account, and its account and customer IDs.

Microsoft’s auto-tagging page says the click ID appears as ?msclkid= on the landing page URL, and each click gets a new one. Its sample code sets a 90-day cookie. The Conversions API guide gives the same advice: keep the most recent value in a first-party cookie, local storage or a server-side store, overwrite it when a new one arrives, and keep it for 90 days.

Our default is to set that cookie from your own tracking domain, such as a server-side Google Tag Manager container on a subdomain like sgtm.example.com. Google recommends serving the server container from the same origin as your site, because cookies the server sets need the two to share a domain (custom domain guide). The server-side tagging guide covers the setup.

An ad click is carried through a form, a sales call and a CRM record before the outcome returns to an advertising report.

Create an offline conversion goal

Create one goal per CRM stage you want to send, such as qualified lead and closed won. The steps follow Microsoft’s offline conversion guide.

  1. In Microsoft Advertising, hover over Conversions in the left menu and select Conversion goals.
  2. Select Create conversion goal, then the Offline conversions type.
  3. Enter a goal name. Two goals can’t share a name, and your uploads must use this name exactly.
  4. Under Sharing, apply the goal to all accounts or one account.
  5. Under Revenue value, choose a fixed value, or a value that varies, with a default for rows sent without one.
  6. Set the Count and the Conversion window. The window can track up to 90 days in the past.
  7. Select Save, then wait 2 hours before the first upload.

Three settings are easy to get wrong:

  • Conversion window. Through the API it defaults to 30 days, with a maximum of 90 (OfflineConversionGoal reference). A deal that closes after the window isn’t counted, and changing the window doesn’t affect past conversions. Set it before the campaign runs.
  • Count. Unique counts only the first conversion after a click, a common choice for leads. All counts every conversion with a different time, a common choice for sales.
  • Scope. A goal applies to one account or to every account under the customer. You can’t change the scope later. To change it, create a new goal and pause the old one.

Creating an offline goal also turns on auto-tagging, for every account under the customer if the scope is customer level.

How to upload offline conversions to Microsoft Advertising

Microsoft documents three ways in: a one-time file, a scheduled file, or the API. Pick the first one that fits. Microsoft recommends uploading daily, and warns that automated bidding can suffer otherwise.

1. Upload a file once

  1. Download Microsoft’s Excel or CSV template from the offline conversion guide.
  2. Fill in one row per conversion and set the time zone. Save the file.
  3. Hover over Conversions in the left menu and select Offline conversions.
  4. On the Uploads tab, select + Upload, then Browse, and choose the file.
  5. Select Upload and preview. Review the results, and download the errors if there are any.
  6. Select Apply changes.
Offline conversion file, in the column order of Microsoft’s enhanced template
Parameters:TimeZone=EasternTimeUSCanada
Conversion Name,Conversion Time,Conversion Value,Conversion Currency,Microsoft Click ID,Hashed Email Address,Hashed Phone Number
Closed won,2026-10-20 15:07:01,12000,USD,<MSCLKID>,<SHA-256 of the normalized email>,<SHA-256 of the E.164 phone>

Set the time zone once in the Parameters row, or add it to each conversion time when rows span time zones. Microsoft’s list of time zone names avoids errors around daylight saving changes. You can also give a GMT offset, such as 2026-10-20 15:07:01-0500.

2. Schedule recurring imports

Scheduled imports pull a file from a URL on a set frequency. Microsoft says they are available in the redesigned Microsoft Advertising experience only.

  1. Host your Excel or CSV file at an HTTPS, HTTP, SFTP or FTP location, and refresh it before each run.
  2. Hover over Conversions and select Offline conversions, then open the Schedules tab and select + Schedule.
  3. Choose the source type, then enter the File URL and the username and password if the file needs them.
  4. Pick the upload frequency and time.
  5. Select Save and preview. The schedule saves only if Microsoft can reach the file, and the preview lists any errors.

For Google Sheets, open the sheet, select File, then Publish to the web, choose CSV or Excel, and use the published link as the File URL. Publishing makes the file reachable by that link, so keep only the columns the import needs, with email and phone already hashed.

3. The Campaign Management API

For your own pipeline, call ApplyOfflineConversions. It takes up to 1,000 conversions per request. Microsoft suggests sending as many as possible in each request when you have a lot to upload.

ApplyOfflineConversions over REST: one conversion
POST https://campaign.api.bingads.microsoft.com/CampaignManagement/v13/OfflineConversions/Apply
Authorization: Bearer <ACCESS_TOKEN>
DeveloperToken: <DEVELOPER_TOKEN>
CustomerId: <CUSTOMER_ID>
CustomerAccountId: <ACCOUNT_ID>

{
  "OfflineConversions": [{
    "ConversionName": "Closed won",
    "ConversionTime": "2026-10-20T20:07:01Z",
    "ConversionValue": 12000,
    "ConversionCurrencyCode": "USD",
    "MicrosoftClickId": "<MSCLKID>",
    "HashedEmailAddress": "<SHA-256 of the normalized email>",
    "HashedPhoneNumber": "<SHA-256 of the E.164 phone>"
  }]
}

Send ConversionTime in UTC. Microsoft says all API uploads need to be in GMT, and that conversions can be lost if you don’t convert the time. The response returns PartialErrors for rows that failed, so the valid rows still go through. Microsoft also has a sandbox, but offline conversions uploaded there aren’t attributed in sandbox reports.

4. The Bulk API

If you already manage the account through Bulk files, the Offline Conversion record takes the same fields, with column names such as Microsoft Click Id, Conversion Name and Hashed Email Address. One record can add, restate or retract a conversion. As in the API, the conversion time is in UTC.

Call tracking and partner tools

For phone sales, Microsoft names call-tracking providers that can import call conversions: Avanser, CallTrackingMetrics, Delacon, DialogTech, Infinity, Invoca, ResponseTap and Wildjar. Microsoft’s Conversions API guide also lists partner integrations, including HubSpot, Segment, Tealium and Stape. Before you rely on any tool, ask which Microsoft route it uses and whether it sends the MSCLKID and hashed customer data.

Field mapping

The same data goes into every route under slightly different names.

WhatUpload file columnAPI fieldNotes
Click IDMicrosoft Click IDMicrosoftClickIdThe 32-character GUID from msclkid. Required unless you send hashed email or phone for enhanced conversions.
GoalConversion NameConversionNameMust match the offline goal name exactly.
Conversion timeConversion TimeConversionTimeLater than the click. A time zone in the file; UTC in the API.
ValueConversion ValueConversionValueOptional. 0 to 999999999999, up to 3 decimals, with a period, not a comma. Falls back to the goal’s value.
CurrencyConversion CurrencyConversionCurrencyCodeOptional. Falls back to the goal’s currency.
EmailHashed Email AddressHashedEmailAddressTrim, lowercase, remove any +alias and any periods before the @, remove accents, then SHA-256.
PhoneHashed Phone NumberHashedPhoneNumberE.164 format, such as +14255551234, then SHA-256.
Attribution creditNot in the templateExternalAttributionCredit, ExternalAttributionModelOnly for goals set to use your own attribution model, which you can set only through the API.
From Microsoft Advertising Help on offline and enhanced conversions, the import template, and the OfflineConversion API reference, October 2026.

Upload windows and timing

Most missing conversions come down to one of these rules.

RuleWhat Microsoft saysWhat to do
Upload ageThe conversion time must be within the last 90 days, or the upload failsUpload daily, not at quarter end.
Click orderThe conversion time must be later than the click timeCheck time zones. Use UTC in the API.
Conversion windowThe conversion must fall inside the goal’s window: 30 days by default in the API, 90 at mostSet the window to your sales cycle before the clicks happen.
New goalWait 2 hours after creating a goal before uploading to itCreate goals the day before you start sending.
New clickWait an hour after an ad click before uploading a conversion for itBatch uploads rather than sending the second a form arrives.
Reporting delayUploaded data can take up to six hours to showCheck the next day before you debug.
DuplicatesThe same click ID, goal name and conversion time import once. The first copy wins.Keep the original conversion time when you resend a row.
From Microsoft Advertising Help on offline conversions and the OfflineConversion and ApplyOfflineConversions API references, October 2026.

If deals close later than 90 days after the click, send an earlier stage too, such as qualified lead or opportunity created. That gives Microsoft a signal inside the window, and the closed deal adds value when it lands in time.

Update or retract a conversion

Refunds, cancelled orders and mistakes can be corrected after upload. There are two adjustment types:

  • Restate changes the conversion’s value. Only the Conv. value and All conv. value columns change.
  • Retract removes the conversion from the count and sets its value to 0.

In the web UI, use Microsoft’s adjustment template and upload it like a normal file, or on a schedule. This is available in the redesigned experience only. Each row needs the original click ID, goal name and conversion time, plus the adjustment type and adjustment time. A restate also needs the new value. Each upload takes up to 100,000 rows. In the API, ApplyOfflineConversionAdjustments takes up to 1,000 adjustments per request, and the adjustment time can’t be earlier than the original conversion time.

Offline conversion import vs the UET Conversions API

Microsoft also has a Conversions API for UET, which sends events from your server instead of the browser. Its guide, last updated in October 2026, says it can carry CRM and offline events as well as website events. For CRM outcomes, the two routes differ most in how old an event can be.

Event age limit

Offline conversion import

Conversion time within the last 90 days

UET Conversions API

eventTime within the last 7 days

1 / 7

From Microsoft’s Conversions API guide, its Conversions API help page and the offline conversion docs, October 2026.

On access, Microsoft’s Conversions API help page says “Not everyone has this feature yet.” To check your account, open the UET section, edit a tag, select Save and next, and look for Use Conversions API under Set up tagging. That is where Microsoft says to copy the token. If the option isn’t there, plan CRM outcomes around offline conversion import.

If you use both, don’t send the same outcome twice to the same goal. The Conversions API deduplicates UET and server copies of an event by a shared eventId. Offline import deduplicates by click ID, goal name and conversion time. Pick one route for each CRM stage.

How to check that it works

  1. After a file upload, open Conversions, then Offline conversions, and read the Status column. Download the results to see any error messages.
  2. For scheduled imports, select Save and preview, then Download errors only to see rows that failed.
  3. For the API, log the PartialErrors and the TrackingId from each response, so you can trace a failed row later.
  4. Wait up to six hours, then look for conversions on the goal in your campaign reports.
  5. Compare goal conversions with the CRM for the same deals. Expect fewer: rows with old or other-account click IDs show as uploaded but don’t count.
  6. If nothing appears after a successful upload, review the file by hand and re-upload. Microsoft says to contact support if data is still missing.

Common errors and fixes

Error or symptomLikely causeFix
OfflineConversionNotAcceptedForGoal (5615)The goal was created less than 2 hours agoWait 2 hours, then resend.
OfflineConversionNameInvalid (5606)The name doesn’t match an existing offline conversion goalCopy the goal name exactly, including capitals and spaces.
OfflineConversionMicrosoftClickIdInvalid (5604)The click ID is malformed or truncatedSend the msclkid value exactly as it appeared in the landing page URL.
OfflineConversionTimeOutOfWindow (5609) or ClickIdDateTimeOutsideGoalConversionWindow (5617)The conversion is outside the goal’s conversion windowLengthen the goal’s window, up to 90 days, and send an earlier stage that falls inside it.
ConversionTimeEarlierThanClickTime (5616) or FutureConversionTimeCannotBeSet (5614)Usually a time zone mistakeSend UTC in the API. In files, set the Parameters time zone or add one to each row.
OfflineConversionsLimitExceeded (5601)More than 1,000 conversions in one API requestSplit the batch.
OfflineConversionPilotNotEnabledForCustomer (5613)The customer isn’t enabled for offline conversionsContact Microsoft Advertising support.
A file with hashed data and no click ID is rejectedThe goal is a regular offline goal, not an enhanced oneAdd the MSCLKID, or use a goal with enhanced conversions turned on.
Hashed data error in the upload statusEmail or phone was sent unhashedNormalize, then SHA-256 hash, before the file goes up.
OfflineConversionAdjustmentTimeEarlierThanConversionTime (5620)A restate or retract is dated before the original conversionUse the time of the change, not the original conversion time.
Upload succeeds, but fewer conversions showDuplicates, or click IDs that are too old or from another accountRemove duplicates and check you are uploading to the account that ran the ads.
Error names and codes from Microsoft’s operation error codes list and offline conversion help, October 2026.

The full list of offline conversion errors runs from code 5600 to 5627 in Microsoft’s operation error codes.

How Microsoft Ads fits with your other platforms

The groundwork is the same on every platform: save the click ID and contact details when the lead arrives, keep them on the CRM record, and send each stage inside the platform’s window. Only the field names and upload routes change. Our guide to offline conversions compares the match keys, hashing and upload windows for Google Ads, Meta, Microsoft, LinkedIn and TikTok.

Maven sends CRM outcomes, such as qualified leads and closed-won deals, to Microsoft Advertising as offline conversions, with the MSCLKID or hashed email and phone. To check the website side first, a Free Tracking Scan shows which tags load on your lead pages today.

Get the next one before it hits.

Short emails when Meta, Google, GA4 or LinkedIn change something that moves your numbers.

Frequently asked questions

What is the MSCLKID and how do I capture it?

The MSCLKID is the Microsoft Click ID, a 32-character GUID that Microsoft Advertising adds to your landing page URL on each ad click when auto-tagging is on. It is only in the landing page URL, so save it in a first-party cookie when the visitor lands, copy it into a hidden field on your lead form, and store it on the CRM record.

How long after the click can I import a Microsoft Ads offline conversion?

The conversion time must be within the last 90 days, later than the click, and inside the goal’s conversion window. Through the API the window defaults to 30 days and can go up to 90 days, so a deal that closes 45 days after the click only counts if the goal’s window is longer than 45 days. Set it before you start sending.

Can I import offline conversions without an MSCLKID?

Yes, with enhanced conversions. Microsoft’s API docs say the MSCLKID is optional when you send a SHA-256 hashed email address or phone number. The goal needs enhanced conversions turned on: Microsoft’s FAQ says a file with hashed data and no MSCLKID is rejected when it goes to a regular offline goal.

How long until uploaded conversions show in Microsoft Advertising?

Microsoft says to wait 2 hours after creating a new offline conversion goal before the first upload, and that uploaded conversion data can take up to six hours to show. It also suggests waiting an hour after an ad click before uploading a conversion for it.

Do offline conversion goals need a UET tag?

No. Microsoft’s help says UET tags aren’t required for offline conversion goals, so the UET tag ID and tracking status show a dash in the goals grid. You still need auto-tagging, so ad clicks carry an MSCLKID, and a way to keep that ID with the lead.

Is the UET Conversions API available in every account?

Not yet, according to Microsoft. Its Conversions API help page says “Not everyone has this feature yet.” To check your account, edit a UET tag and look for the Use Conversions API option under Set up tagging. If it isn’t there, use offline conversion import for CRM outcomes.

Can I change or remove an offline conversion after uploading it?

Yes. Restate changes the conversion’s value, and Retract removes it from the count. Use the adjustment template in the web UI, which is available in the redesigned experience only, or the ApplyOfflineConversionAdjustments operation, with up to 1,000 adjustments per request. The adjustment time can’t be earlier than the original conversion time.

Why does Microsoft show fewer conversions than I uploaded?

Microsoft lists a few reasons. Rows with the same click ID, conversion name and conversion time are imported once. Click IDs that are too old or belong to another account still show as uploaded, because the format is valid, but they don’t match. Conversions outside the goal’s conversion window aren’t counted.

Sources and references

Published October 26, 2026

Find what your tracking misses in about 10 seconds.

Run a Free Tracking Scan on your site and see every gap we find.