How to get hourly data for campaigns with Bing Ads API
Good afternoon team,
Currently at work we are facing the difficulty of getting the hourly data for the campaigns through the API. We can bring the data but not the same as shown in the Bing Ads UI.
We currently have a process for this written with the Python SDK that works, but we need to be able to replicate this with the API. Below are both examples both the python code and the Xml request in the API.
Python code:
days = int(os.environ.get("DAYS", 0))
time = reporting_service.factory.create('ReportTime')
time.CustomDateRangeEnd = reporting_service.factory.create('Date')
today = extract_time - timedelta(days= days)
today_est = extract_time.astimezone(pytz.timezone('US/Eastern'))
time.CustomDateRangeEnd.Day = today_est.day
time.CustomDateRangeEnd.Month = today_est.month
time.CustomDateRangeEnd.Year = today_est.year
beginning = today_est - timedelta(days=days)
time.CustomDateRangeStart = reporting_service.factory.create('Date')
time.CustomDateRangeStart.Day = beginning.day if extract_time.hour > 3 else (beginning - timedelta(days=days)).day
time.CustomDateRangeStart.Month = beginning.month
time.CustomDateRangeStart.Year = beginning.year
# time.PredefinedTime = 'LastSevenDays'
time.ReportTimeZone = 'EasternTimeUSCanada' report_request = reporting_service.factory.create('CampaignPerformanceReportRequest')
report_request.Aggregation = 'Hourly'
report_request.Format = report_file_format
report_request.ReturnOnlyCompleteData = return_only_complete_data
report_request.Time = time
report_request.ReportName = "Hourly Bing Report"
scope = reporting_service.factory.create('AccountThroughCampaignReportScope')
scope.AccountIds = {'long': [account_id]}
report_request.Scope = scope
report_columns = reporting_service.factory.create('ArrayOfCampaignPerformanceReportColumn')
report_columns.CampaignPerformanceReportColumn.append([
'TimePeriod'
'CampaignId'
'CampaignName'
'DeviceType'
'Network'
'Impressions'
'Clicks'
'Spend'
'AbsoluteTopImpressionRatePercent'
'AccountId'
'AccountName'
'AccountNumber'
'AccountStatus'
'AdDistribution'
'AdRelevance'
'AllConversionRate'
'AllConversions'
'AllCostPerConversion'
'AllReturnOnAdSpend'
'AllRevenue'
'AllRevenuePerConversion'
'Assists'
'AverageCpc'
'AverageCpm'
'AveragePosition'
'BaseCampaignId'
'CampaignLabels'
'CampaignStatus'
'CampaignType'
'ConversionRate'
'Conversions'
'CostPerAssist'
'CostPerConversion'
'Ctr'
'CurrencyCode'
'CustomerId'
'CustomerName'
'CustomParameters'
'DeliveredMatchType'
'ExpectedCtr'
'FinalUrlSuffix'
'LandingPageExperience'
'LowQualityClicks'
'LowQualityClicksPercent'
'LowQualityConversionRate'
'LowQualityConversions'
'LowQualityGeneralClicks'
'LowQualityImpressions'
'LowQualityImpressionsPercent'
'LowQualitySophisticatedClicks'
'PhoneCalls'
'Ptr'
'QualityScore'
'ReturnOnAdSpend'
'Revenue'
'RevenuePerAssist'
'RevenuePerConversion</
])
report_request.Columns = report_columns
Xml:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="https://bingads.microsoft.com/Reporting/v13" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://bingads.microsoft.com/Reporting/v13">
<env:Header>
<AuthenticationToken>auth_token</AuthenticationToken>
<CustomerAccountId>account_id</CustomerAccountId>
<CustomerId>customer_id</CustomerId>
<DeveloperToken>developer_token</DeveloperToken>
</env:Header>
<env:Body>
<tns:SubmitGenerateReportRequest>
<ReportRequest xsi:nil="false" xsi:type="CampaignPerformanceReportRequest">
<ExcludeColumnHeaders>false</ExcludeColumnHeaders>
<ExcludeReportFooter>true</ExcludeReportFooter>
<ExcludeReportHeader>true</ExcludeReportHeader>
<Format>Csv</Format>
<Language>English</Language>
<ReportName>Hourly Bing Report</ReportName>
<ReturnOnlyCompleteData>false</ReturnOnlyCompleteData>
<Aggregation>Hourly</Aggregation>
<Columns>
<CampaignPerformanceReportColumn>TimePeriod</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CampaignId</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CampaignName</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>DeviceType</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Network</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Impressions</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Clicks</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Spend</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AbsoluteTopImpressionRatePercent</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AccountId</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AccountName</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AccountNumber</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AccountStatus</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AdDistribution</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AdRelevance</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllConversionRate</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllConversions</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllCostPerConversion</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllReturnOnAdSpend</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllRevenue</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AllRevenuePerConversion</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Assists</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AverageCpc</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AverageCpm</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>AveragePosition</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>BaseCampaignId</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CampaignLabels</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CampaignStatus</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CampaignType</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>ConversionRate</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Conversions</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CostPerAssist</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CostPerConversion</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Ctr</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CurrencyCode</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CustomerId</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CustomerName</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>CustomParameters</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>DeliveredMatchType</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>ExpectedCtr</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>FinalUrlSuffix</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LandingPageExperience</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityClicks</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityClicksPercent</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityConversionRate</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityConversions</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityGeneralClicks</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityImpressions</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualityImpressionsPercent</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>LowQualitySophisticatedClicks</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>PhoneCalls</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Ptr</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>QualityScore</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>ReturnOnAdSpend</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>Revenue</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>RevenuePerAssist</CampaignPerformanceReportColumn>
<CampaignPerformanceReportColumn>RevenuePerConversion</CampaignPerformanceReportColumn>
</Columns>
<Filter xsi:nil="true"/>
<Scope>
<AccountIds xmlns:a1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a1:long>account_id</a1:long>
</AccountIds>
</Scope>
<Time>
<CustomDateRangeEnd>
<Day>27</Day>
<Month>07</Month>
<Year>2023</Year>
</CustomDateRangeEnd>
<CustomDateRangeStart>
<Day>27</Day>
<Month>07</Month>
<Year>2023</Year>
</CustomDateRangeStart>
<PredefinedTime xsi:nil="true"/>
<ReportTimeZone>EasternTimeUSCanada</ReportTimeZone>
</Time>
</ReportRequest>
</tns:SubmitGenerateReportRequest>
</env:Body>
</env:Envelope>
We want to know if our API request replicates what we have in the Python code, if you need more specific information we could continue by mail, thank you for your attention.
Best regards,