Install
openclaw skills install microsoft-ads-cliMicrosoft Ads data analysis and reporting via microsoft-ads-cli. Use when the user wants to check Microsoft/Bing ad performance, pull campaign/ad group/keyword stats, explore ad account structure, inspect audiences, manage conversion goals, or retrieve performance reports. Triggers: "Microsoft Ads", "Bing Ads", "Microsoft Advertising", "bing ad performance", "microsoft campaign stats", "microsoft ad spend", "bing keywords", "microsoft audiences", "UET tags", "microsoft conversion goals", "bing search ads", "microsoft shopping ads", "microsoft performance max".
openclaw skills install microsoft-ads-cliYou have access to microsoft-ads-cli, a read-only CLI for the Bing Ads API v13. Use it to query ad accounts, pull campaign/ad group/keyword performance reports, inspect audiences, manage UET conversion goals, and analyze bid strategies across Search, Shopping, Audience, DynamicSearchAds, and PerformanceMax campaigns.
# Check if the CLI is available
microsoft-ads-cli --help
# Get authenticated user info
microsoft-ads-cli user
# List accessible ad accounts
microsoft-ads-cli accounts
If the CLI is not installed, install it:
npm install -g microsoft-ads-cli
The CLI requires a Microsoft OAuth2 access token and a Developer Token. Credentials are resolved in this order:
--credentials <path> flag (per-command)MICROSOFT_ADS_ACCESS_TOKEN + MICROSOFT_ADS_DEVELOPER_TOKEN (both required), plus optional MICROSOFT_ADS_CUSTOMER_ID and MICROSOFT_ADS_ACCOUNT_ID~/.config/microsoft-ads-cli/credentials.jsonThe credentials file format:
{
"access_token": "YOUR_ACCESS_TOKEN",
"developer_token": "YOUR_DEVELOPER_TOKEN",
"customer_id": "YOUR_CUSTOMER_ID",
"account_id": "YOUR_DEFAULT_ACCOUNT_ID"
}
access_token and developer_token are required. customer_id and account_id are optional but needed for most campaign management commands.
Before running any command, verify credentials are configured by running microsoft-ads-cli user. If it fails with a credentials error, ask the user to set up authentication.
Customer
+-- Ad Account
+-- Campaign (Search, Shopping, Audience, DynamicSearchAds, PerformanceMax)
| +-- Ad Group
| +-- Ad (AppInstall, DynamicSearch, ExpandedText, Hotel, Product, ResponsiveAd, ResponsiveSearch)
| +-- Keyword
| +-- Negative Keyword
+-- Budget
+-- Bid Strategy
+-- Label
+-- Audience (RemarketingList, CustomerList, Custom, InMarket, Product, SimilarRemarketingList, CombinedList)
+-- UET Tag
+-- Conversion Goal (Url, Duration, PagesViewedPerVisit, Event, AppInstall, OfflineConversion, InStoreTransaction)
Many commands accept --account-id <id> to override the default account from credentials. The campaigns command takes <account-id> as a required positional argument instead.
The Bing Ads API returns monetary values (Spend, AverageCpc, CostPerConversion, Revenue, budgets, bids) in the currency of the ad account. Report values are typically in the major currency unit as strings (e.g., "12.34" means $12.34). Budget and bid amounts from campaign management endpoints may be returned as decimal numbers.
All commands output pretty-printed JSON by default. Use --format compact for single-line JSON (useful for piping).
The accounts command supports pagination via --page-index and --page-size. Other listing commands return all results in a single response (no cursor-based pagination).
# List ad accounts (paginated)
microsoft-ads-cli accounts
microsoft-ads-cli accounts --page-index 0 --page-size 50
# Get a specific ad account
microsoft-ads-cli account 123456789
# Get the current authenticated user
microsoft-ads-cli user
accounts options:
--page-index <n> -- page index, 0-based (default 0)--page-size <n> -- results per page (default 100)# List all campaigns for an account
microsoft-ads-cli campaigns 123456789
# Filter by campaign type
microsoft-ads-cli campaigns 123456789 --type Search
microsoft-ads-cli campaigns 123456789 --type "Shopping PerformanceMax"
campaigns options:
--type <type> -- campaign type filter: Search, Shopping, Audience, DynamicSearchAds, PerformanceMax (space-separated for multiple, default all)# Get a specific campaign by ID
microsoft-ads-cli campaign 987654321
microsoft-ads-cli campaign 987654321 --account-id 123456789
campaign options:
--account-id <id> -- ad account ID# List ad groups for a campaign
microsoft-ads-cli adgroups 987654321
microsoft-ads-cli adgroups 987654321 --account-id 123456789
adgroups options:
--account-id <id> -- ad account ID# List ads for an ad group
microsoft-ads-cli ads 111222333
microsoft-ads-cli ads 111222333 --type ResponsiveSearch
microsoft-ads-cli ads 111222333 --account-id 123456789
ads options:
--account-id <id> -- ad account ID--type <type> -- ad type filter (default all: AppInstall, DynamicSearch, ExpandedText, Hotel, Product, ResponsiveAd, ResponsiveSearch)# List keywords for an ad group
microsoft-ads-cli keywords 111222333
microsoft-ads-cli keywords 111222333 --account-id 123456789
keywords options:
--account-id <id> -- ad account ID# List negative keywords for a campaign (default)
microsoft-ads-cli negative-keywords 987654321
# List negative keywords for an ad group
microsoft-ads-cli negative-keywords 111222333 --type AdGroup
negative-keywords options:
--account-id <id> -- ad account ID--type <type> -- entity type: Campaign or AdGroup (default Campaign)# List remarketing lists (default)
microsoft-ads-cli audiences
# List specific audience types (comma-separated)
microsoft-ads-cli audiences --type "RemarketingList,CustomerList"
microsoft-ads-cli audiences --type "Custom,InMarket,Product"
microsoft-ads-cli audiences --account-id 123456789
audiences options:
--account-id <id> -- ad account ID--type <type> -- audience type (comma-separated): Custom, InMarket, Product, RemarketingList, SimilarRemarketingList, CustomerList, CombinedList (default RemarketingList)# List all UET tags
microsoft-ads-cli uet-tags
microsoft-ads-cli uet-tags --account-id 123456789
uet-tags options:
--account-id <id> -- ad account ID# List all conversion goals
microsoft-ads-cli conversion-goals
# Filter by goal type (comma-separated)
microsoft-ads-cli conversion-goals --type "Event,OfflineConversion"
# Filter by UET tag IDs
microsoft-ads-cli conversion-goals --tag-ids 12345,67890
conversion-goals options:
--account-id <id> -- ad account ID--type <type> -- goal type (comma-separated): Url, Duration, PagesViewedPerVisit, Event, AppInstall, OfflineConversion, InStoreTransaction (default all)--tag-ids <ids> -- UET tag IDs to filter by (comma-separated, default all)# Get budgets by IDs (comma-separated)
microsoft-ads-cli budgets 111,222,333
microsoft-ads-cli budgets 111,222 --account-id 123456789
budgets options:
--account-id <id> -- ad account ID# Get bid strategies by IDs (comma-separated)
microsoft-ads-cli bid-strategies 111,222
microsoft-ads-cli bid-strategies 111 --account-id 123456789
bid-strategies options:
--account-id <id> -- ad account ID# List all labels for the account
microsoft-ads-cli labels
microsoft-ads-cli labels --account-id 123456789
labels options:
--account-id <id> -- ad account IDReports are asynchronous: submit a report request, then poll for its status. When the status is Success, the response includes a ReportDownloadUrl.
# Submit a campaign performance report
microsoft-ads-cli report 123456789 --start-date 2026-03-01 --end-date 2026-03-15
# With granularity
microsoft-ads-cli report 123456789 --start-date 2026-03-01 --end-date 2026-03-15 --granularity Weekly
# With custom columns
microsoft-ads-cli report 123456789 --start-date 2026-03-01 --end-date 2026-03-15 --columns "Impressions,Clicks,Spend,Conversions"
report options:
--start-date <date> -- start date, YYYY-MM-DD (required)--end-date <date> -- end date, YYYY-MM-DD (required)--granularity <gran> -- Daily, Weekly, Monthly, Summary (default Daily)--columns <cols> -- report columns, comma-separated (default: TimePeriod, AccountId, AccountName, CampaignId, CampaignName, CampaignStatus, Impressions, Clicks, Ctr, Spend, AverageCpc, Conversions, ConversionRate, CostPerConversion, Revenue)microsoft-ads-cli keyword-report 123456789 --start-date 2026-03-01 --end-date 2026-03-15
microsoft-ads-cli keyword-report 123456789 --start-date 2026-03-01 --end-date 2026-03-15 --granularity Monthly
keyword-report options:
--start-date <date> -- start date, YYYY-MM-DD (required)--end-date <date> -- end date, YYYY-MM-DD (required)--granularity <gran> -- Daily, Weekly, Monthly, Summary (default Daily)Default columns: TimePeriod, AccountId, CampaignId, CampaignName, AdGroupId, AdGroupName, Keyword, KeywordId, BidMatchType, DeliveredMatchType, Impressions, Clicks, Ctr, Spend, AverageCpc, Conversions, QualityScore
microsoft-ads-cli adgroup-report 123456789 --start-date 2026-03-01 --end-date 2026-03-15
microsoft-ads-cli adgroup-report 123456789 --start-date 2026-03-01 --end-date 2026-03-15 --granularity Summary
adgroup-report options:
--start-date <date> -- start date, YYYY-MM-DD (required)--end-date <date> -- end date, YYYY-MM-DD (required)--granularity <gran> -- Daily, Weekly, Monthly, Summary (default Daily)Default columns: TimePeriod, AccountId, CampaignId, CampaignName, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, Ctr, Spend, AverageCpc, Conversions, ConversionRate, CostPerConversion
# Poll for report completion
microsoft-ads-cli report-status abc123-report-id
When Status is Success, download the CSV from the ReportDownloadUrl in the response.
microsoft-ads-cli accounts to find accessible accountsmicrosoft-ads-cli campaigns <account-id> to see campaignsreport for the desired date range to get performance metricsreport-status until the report is readymicrosoft-ads-cli campaigns <account-id>report with appropriate date range and granularitymicrosoft-ads-cli adgroups <campaign-id>keyword-reportmicrosoft-ads-cli keywords <adgroup-id> to see keyword settings and bidskeyword-report for the account to get keyword-level metrics (impressions, clicks, spend, quality score)microsoft-ads-cli negative-keywords <entity-id> to understand exclusionsmicrosoft-ads-cli audiences to see remarketing lists and other audience typesmicrosoft-ads-cli uet-tags to check Universal Event Tracking setupmicrosoft-ads-cli conversion-goals to review conversion goal configuration--tag-ids to see which goals are tied to which tagsmicrosoft-ads-cli budgets <ids> to check budget configurationsmicrosoft-ads-cli bid-strategies <ids> to review bidding strategiesmicrosoft-ads-cli campaigns <account-id>microsoft-ads-cli adgroups <campaign-id>microsoft-ads-cli ads <adgroup-id> to inspect ad content and typesaccess_token and developer_token are configuredreport-status again after a short wait; reports can take time to generate