Connect Microsoft Advertising (Bing Ads) to your Shopify store
By the HonestTag team ยท Published October 16, 2026
HonestTag uploads each verified Shopify order to Microsoft Advertising as an offline conversion, from its server, through Microsoft's own API. An order from a Microsoft ad click is matched on its click ID (msclkid); any other order can be matched on the buyer's email and phone, hashed with SHA-256 before they leave HonestTag. You connect with a Microsoft sign-in and one account pick, and HonestTag sets up four purchase goals, reads your spend, and corrects Microsoft when you refund. This page lists what you need, the exact steps, what is sent and read, and how to check it works.
What you need
- A Microsoft Advertising account and a Microsoft login that can open it in the Microsoft Advertising web app. HonestTag works with the accounts that login can reach: Microsoft's get started guide says "the same accounts available in the Microsoft Advertising web application are available to the user programmatically through the API."
- A work, school or personal Microsoft login. Microsoft's OAuth guide says it authenticates "work or school accounts from Azure Active Directory (AAD) and personal Microsoft accounts (MSA)", and HonestTag's sign-in accepts both. Microsoft also documents a Google sign-in for its API; HonestTag's sign-in does not offer it, so a login that signs in to Microsoft Advertising with Google cannot connect here yet.
- No developer token of your own. Every Microsoft Advertising API call carries a developer token, and HonestTag sends its own. You only sign in.
- A paid HonestTag plan for delivery. On the free Mirror you can connect and save the account, and HonestTag reads your spend, but it never writes to your Microsoft account: the four goals are created, and orders sent, when you move to a paid plan. See pricing.
The Account ID and Customer ID are filled in from the account you pick. If you type them instead, Microsoft says that after you sign in to the Microsoft Advertising web app and open the Campaigns tab, the URL contains "an aid key/value pair that identifies your account ID" and "a cid key/value pair in the query string that identifies your customer ID". Both must be digits only. Microsoft adds: "Do not mistake the account number for the account identifier."
Connect Microsoft Advertising, step by step
- Open the Microsoft Advertising card. In your Shopify admin, open the HonestTag app, go to Setup, and open the Microsoft Advertising (Bing) card. Select Connect Microsoft.
- Sign in and grant access. Sign in with the Microsoft login you use for Microsoft Advertising and accept the access request. HonestTag asks for Microsoft Advertising access and a refresh token, nothing else.
- Pick the account. Back on the card, choose your account from the list. HonestTag fills in the Account ID and the Customer ID that belongs to it. With only one account, it is picked for you.
- Leave the goal name blank and save. Leave Your own purchase goal empty and select Save settings. On a paid plan HonestTag creates or adopts its four offline conversion goals and lists them on the card.
- Wait out the first two hours. Microsoft asks for a two hour wait after a goal is created before the first upload to it. HonestTag holds orders for that wait plus a 10 minute margin and sends them once it has passed. The card says until what time.
The sign-in is Microsoft's standard consent screen. HonestTag requests two permissions, msads.manage and offline_access; Microsoft's consent guide says to "Include offline_access to ensure that a refresh token is included in the response." HonestTag stores only that refresh token, encrypted, and does not store your password. The account list leaves out accounts Microsoft reports as Draft or Inactive. If you sign in again later with a different login that cannot see the saved account, HonestTag clears the account so nothing is sent to an account the new login cannot reach.
When you save, HonestTag reads the offline conversion goals on the account first. Goals that already exist with a HonestTag name are adopted with their window, count, revenue and scope as they are; HonestTag only turns enhanced conversions on for its four goal names, as described below. The rest are created in one request. If Microsoft refuses one, nothing is saved, and the message names the goal and Microsoft's reason.
The four purchase goals in Microsoft Advertising
On a paid plan, saving the card creates four offline conversion goals in your account, or adopts ones you already have with exactly the same name:
HonestTag_Purchase: every order.HonestTag_Purchase_NC: new customers.HonestTag_Purchase_RC: returning customers.HonestTag_Purchase_FCNC: new customers whose first recorded ad click was on a Microsoft ad.
Each is created as an Offline conversions goal in the Purchase category, scoped to the account, with a variable revenue value in your store's currency, a 30-day conversion window (43200 minutes, which Microsoft describes as "conversions that happen within 30 days after a click are tracked"), and the count set to Unique, which Microsoft defines as "Only the first conversion that happens after an ad click will be counted." They are created with Include in conversions turned off. Microsoft's ConversionGoal reference says that setting "will result in the goal's conversions no longer factoring into automated bidding calculations", so nothing HonestTag creates changes your bidding until you turn it on for a goal under Conversions, Conversion goals. Microsoft requires goal names to be "unique among all conversion goals belonging to the same customer", so a goal with a HonestTag name under another account or of another type blocks the save until you rename it.
To send purchases into an offline goal you already have instead of HonestTag_Purchase, type its exact name in Your own purchase goal. HonestTag uses it as it is and never creates or changes it, so it must exist first. Which goal to bid on: prospecting campaigns on HonestTag_Purchase_FCNC (or HonestTag_Purchase_NC if FCNC volume is too low), retargeting on HonestTag_Purchase_NC, retention on HonestTag_Purchase_RC, and only one of them as a campaign's bidding goal, because one new-customer order reaches several. The HonestTag conversion actions explains how new and returning are decided.
What HonestTag sends to Microsoft
For each eligible order HonestTag calls Microsoft's ApplyOfflineConversions operation with one offline conversion per goal the order counts toward. Each one holds:
- The goal name, the order time in UTC, which Microsoft requires ("The value must be in Coordinated Universal Time (UTC)"), and the order value and currency. The value is the order total net of tax, as for every destination. No products are sent; Microsoft's offline conversion has no product field.
- The Microsoft click ID (msclkid) when the shopper arrived from a Microsoft ad. HonestTag's first-party pixel reads it from the landing page address, and it is also read from the order's own landing page. Microsoft says the MSCLKID "is only available on the landing page URL", which is why it is captured on arrival.
- The buyer's hashed email and phone, on goals that have Microsoft's enhanced conversions turned on. HonestTag formats them as Microsoft's enhanced conversions page requires (email trimmed, lowercased, the part after a plus sign and the dots before the at sign removed, accents removed; phone in E.164 using the buyer's own country) and hashes each with SHA-256. Microsoft says that for offline conversions "both formatting and hashing the data is mandatory".
An order with a click ID goes to every goal it counts toward, and carries the hashes too where a goal is enhanced. Microsoft's OfflineConversion reference says "The MSCLKID is optional when you provide a hashed email address or phone number for enhanced conversions", so an order with no click ID goes only to the enhanced goals. If none is enhanced it is not sent, and the card says how to turn enhanced conversions on. An order with no click ID, no email and no phone is not sent. Microsoft keeps unmatched data out: "Microsoft will discard and delete any unmatched data."
HonestTag turns enhanced conversions on for its own four goals. Microsoft says "The account must have a goal with enhanced conversions turned on before setting IsEnhancedConversionsEnabled=true for an API goal entity." If Microsoft refuses the switch for that reason, the card asks you to turn it on once yourself, and HonestTag then turns it on for its other goals. A goal you named as your own is never changed; you turn enhanced conversions on for it yourself.
Microsoft's time rules apply. The order time "must be within the last 90 days", so an order older than that cannot be sent, and to be counted it "must be set later than the date and time of the recorded click" and fall inside the goal's 30-day window. After HonestTag creates a goal it holds that goal's orders for two hours plus a 10 minute margin, because Microsoft says "If you do not wait two hours, then your offline conversion data might not be applied." Consent rules are the same as for every destination and are stated on the server-side delivery page: for EU, EEA, UK and Swiss orders a conversion with no visitor record is not sent.
What HonestTag reads, and what it never touches
- Reads: daily spend, clicks and impressions for the account and its campaigns, from Microsoft's reporting service, plus Microsoft's qualified conversions and revenue columns as the platform-claimed figures in The Gap. Microsoft builds these reports on its side, so the first numbers can take a while after you connect. Microsoft says "The downloaded report data is always relative to UTC time", and the card shows how that day lines up with your store's day.
- Note on the claimed figures: Microsoft says data "will be excluded from the Conversions report column for any conversion goal with the ExcludeFromBidding property set to true", and its reporting reference says the same of the Revenue column. So while Include in conversions is off, HonestTag's own goals are not in the claimed conversions or revenue it reads.
- Writes: offline conversions and adjustments to the HonestTag goals (or to your own named goal), and, on a paid plan, the four goals themselves and the enhanced conversions setting on them.
- Never touches: campaigns, ad groups, ads, keywords, budgets, bids, audiences or your UET tags, never deletes a conversion goal, and never edits a goal you named as your own. A goal you created under one of the four HonestTag names is treated as HonestTag's and gets enhanced conversions turned on.
Avoid counting a purchase twice
Microsoft counts each goal on its own. If your store also has a UET tag with a purchase goal, for example from a tag app, Microsoft records the order once in that goal and once in HonestTag_Purchase. The two are not deduplicated against each other: Microsoft's shared event ID deduplication is for the same event sent by the UET tag and its Conversions API ("When UET JavaScript and CAPI send the same conversion event, pass the same stable deduplication value in eventId"), and HonestTag uses the offline conversions API instead. Keep Include in conversions on for only one purchase goal, so bidding learns from each order once. That is also why HonestTag's goals start with it off.
Within HonestTag's own uploads, a retry cannot double count: Microsoft says "the same conversion can't be applied more than once. If you send Microsoft Advertising duplicates, the first instance will be used and the others will be ignored." The duplicate purchase events guide shows how to find every purchase source on a store.
Refunds, edits and which orders are sent
- Refunds and cancellations: a full refund or a cancellation retracts the conversion and a partial refund restates it to the remaining value, through Microsoft's ApplyOfflineConversionAdjustments, in the goals the order's delivery record shows it was sent to. Microsoft's offline conversion help says Retract "lets you delete the conversion from the conversion count" and Restate "lets you update the revenue value associated with the conversion." An order sent without a click ID is adjusted on the same hashed email and phone, re-read from Shopify at refund time; if the order's email or phone was changed in between, Microsoft cannot match the adjustment. An order with no click ID is adjusted only when its delivery record shows it reached Microsoft. An order with a click ID is adjusted whether or not its delivery record is found; without the record, the goals come from your current goal setup.
- Order edits and upsells: when an edit or a post-purchase upsell changes the order's value, HonestTag restates the Microsoft conversion to the new value, up or down.
- Which orders: orders from your online store are sent. Point of sale orders are not sent to Microsoft Advertising, which says "Offline conversion tracking is not to be used if you want to track customer visits to your store"; the same sentence also covers customers' in-store purchases. Subscription renewals are not sent either; that is HonestTag's rule. The first order of a subscription is an online store checkout and is sent. Draft and phone orders are sent only on a store where phone and draft order matching is on, and only when the buyer's own first ad click was a Microsoft ad. Orders from other apps and sales channels are kept out unless you switch them on, as described in which orders are sent.
- Past orders: orders are sent as they are placed after you connect; connecting does not upload your order history. Spend is the exception: the first save reads up to 13 months of spend back.
How to check it works
- On the card. After you save, the card lists the goals it created and the ones it found already there, and when uploads to new goals start. Its status chip runs the same check as the nightly health probe: the sign-in still works, the login can still reach the account, every goal still exists and is not paused, and whether enhanced conversions are on.
- In HonestTag order proof. After the next online order, open it in the HonestTag app. The proof shows Microsoft Advertising, the delivery status and the goals the order landed in. A full acceptance shows as Accepted. If Microsoft accepts some goals and refuses others, the status still reads Accepted and the note names the refused goals.
- In Microsoft Advertising. Microsoft says conversions sent through the API show in the Microsoft Advertising web app, and "it can take up to six hours to view conversion data." Look in the All conversions and All Conv. value columns while Include in conversions is off. Microsoft also notes that "Click IDs that are too old or not associated with your account will still appear as having been uploaded successfully because the format is valid", so an accepted upload is not yet a counted conversion.
Error messages and what to do
- "Microsoft Advertising needs you to sign in again before this can be saved. Click Reconnect on this card." The stored sign-in no longer works. Microsoft says refresh tokens can "expire, are revoked, or lack sufficient privileges". Select Reconnect Microsoft.
- A sign-in your organization blocks. With a work or school login, the block comes from your organization's Microsoft tenant, not from HonestTag. For "tenant access, admin consent" issues Microsoft says to contact "Azure Support or your tenant administrator."
- "Customer ID must contain only digits." / "Account ID must contain only digits." Pick the account from the list, or copy the IDs from the cid and aid values in the Microsoft Advertising URL after you open the Campaigns tab, not the account number.
- "There is no offline conversion goal named ... on account ..., so nothing was saved." You typed your own goal name and that goal does not exist. Create it in Microsoft Advertising (Conversions, then Conversion goals, then Create conversion goal, then Offline conversions) or clear the field.
- "Microsoft Advertising would not create ... (Microsoft said ...), so nothing was saved." Usually a goal with that name already exists on the same customer under another account or as another goal type. Rename it there and save again. Goals HonestTag did create are reused on the next save.
- "Microsoft Advertising did not answer when we set up your conversion goals, so nothing was saved. Try again in a minute." Microsoft did not respond in time. Save again.
- "enhanced conversions are off on your Microsoft conversion goals, so orders that did not come from a Microsoft ad click are not sent to Microsoft". Orders with a Microsoft click are still sent. Turn on Enhanced conversions for
HonestTag_Purchaseunder Conversions, Conversion goals. - "... is paused in Microsoft Advertising, and Microsoft does not track conversions for a paused goal." Enable the goal under Conversions, Conversion goals.
- "no offline conversion goal named ... exists on the Microsoft Advertising account" or a goal that "no longer exists". A goal was deleted. Save the card again and HonestTag recreates its own goals.
- "the connected Microsoft login can no longer reach account ..." The login lost access to the account. Reconnect with a login that has access, or pick another account.
- Held for two hours. An order proof reading "held: Microsoft asks for a two hour wait after an offline conversion goal is created" is the wait above. It is sent after the time shown.
Disconnecting
Disconnect from the Microsoft Advertising card, or uninstall the app. Delivery and spend reads stop at once and the stored sign-in is deleted. Everything already measured stays, per the published retention schedule. The goals HonestTag created stay in your Microsoft Advertising account, and conversions already uploaded stay there too. Reconnect any time to resume.
Frequently asked questions
How do I send Shopify offline conversions to Microsoft Ads?
Connect Microsoft Advertising on the HonestTag Setup page. HonestTag uploads every eligible online store order to your account as an offline conversion through Microsoft's API, with the Microsoft click ID (msclkid) on every goal the order counts toward when the shopper came from a Microsoft ad, plus hashed email and phone on goals that have enhanced conversions on. An order with no click ID goes only to goals with enhanced conversions on. There is no spreadsheet to upload and no code to add to your theme.
Do I need my own Microsoft Advertising developer token?
No. Microsoft's API needs a developer token on every call, and HonestTag sends its own. Microsoft says a universal developer token "can be used to authenticate with any Microsoft Advertising user credentials", and that it "does not grant additional permissions to any Microsoft Advertising accounts". You only sign in with your own Microsoft login.
Will HonestTag change my bidding in Microsoft Ads?
Not by itself. HonestTag creates its four goals with Include in conversions turned off, so automated bidding ignores them until you turn that on for a goal yourself. It never creates, edits or pauses campaigns, ad groups, ads, budgets or bids.
Will Microsoft count a purchase twice if I also have a UET purchase goal?
Each goal counts separately, so a UET purchase goal and HonestTag_Purchase both record the same order. Keep Include in conversions on for only one purchase goal, so bidding learns from each order once.
Does HonestTag send refunds to Microsoft Advertising?
Yes. A full refund or a cancellation retracts the conversion and a partial refund restates its value, in the HonestTag goals the order's delivery record shows it was sent to, or, if that record is gone, the goals your current setup assigns it. An order with no click ID is adjusted only when its delivery record shows it reached Microsoft. An order edit or a post-purchase upsell restates the value up or down.
Why do I see no conversions in Microsoft right after connecting?
Three reasons are normal. Orders in the first two hours and 10 minutes after HonestTag creates a goal are held. Microsoft says it "can take up to six hours to view conversion data" after an upload. And while Include in conversions is off, the goals count in All conversions, not in Conversions.
Related: every HonestTag integration, server-side delivery, first-click attribution, which decides the FCNC goal, first-party tracking, and switching from another tracking app.