Practical guide
Google Ads cost_micros: convert micros to currency without errors
Google Ads cost_micros is spend expressed in millionths of the account currency: divide it by 1,000,000 to get the amount, so 12,500,000 micros is 12.50. Cost fields reported in micros must be converted before display, while some value fields are already in currency units. Keep the account currency attached to every amount, and never assume every numeric field shares the same scaling.
By Adlane · Updated
What Google Ads cost micros are and which fields use them
A micro is one millionth of a currency unit. The Google Ads API reports money in micros so that amounts can be carried as integers without rounding: 12,500,000 micros is 12.50 in the account currency. Fields with a micros suffix, such as cost_micros and a budget’s amount_micros, follow this rule.
Other money fields do not carry the suffix and are not all scaled the same way. Some derived cost metrics are returned as decimals that are still scaled in micros, while conversion value is reported in currency units. Check the field reference for the API version you use rather than inferring the unit from the name.
Convert cost_micros in code: GAQL, Python, JavaScript and SQL
The conversion is always the same: divide by 1,000,000 and keep customer.currency_code beside the result. Do it once, at the edge where data enters your system, and round only for display. The examples below select the currency in the same query so the unit never gets separated from the amount.
In the REST interface and JSON responses, int64 fields such as costMicros arrive as strings, so parse them before dividing. In Python, use Decimal (or keep integer micros) for totals that must reconcile exactly with the Google Ads interface.
SELECT
campaign.name,
customer.currency_code,
metrics.cost_micros,
metrics.average_cpc
FROM campaign
WHERE segments.date DURING LAST_30_DAYSfrom decimal import Decimal
MICROS = Decimal(1_000_000)
for batch in ga_service.search_stream(customer_id=customer_id, query=query):
for row in batch.results:
cost = Decimal(row.metrics.cost_micros) / MICROS
print(row.campaign.name, f"{cost:.2f}", row.customer.currency_code)// int64 fields arrive as strings in JSON, e.g. "costMicros": "12500000"
const cost = Number(row.metrics.costMicros) / 1_000_000;
const label = `${cost.toFixed(2)} ${row.customer.currencyCode}`; // "12.50 EUR"SELECT
campaign_id,
SUM(metrics_cost_micros) / 1e6 AS cost
FROM `project.dataset.ads_CampaignBasicStats_1234567890`
GROUP BY campaign_idWorked conversions: example field values and their amounts
The rows below are invented values for a single account whose currency is the euro. Divide micros by 1,000,000 and round for display only at the end; keep full precision in calculations.
| Field | Raw value returned | Converted amount | Note |
|---|---|---|---|
| metrics.cost_micros | 12,500,000 | 12.50 | Integer micros; divide by one million |
| campaign_budget.amount_micros | 50,000,000 | 50.00 | Average daily budget in micros |
| metrics.average_cpc | 1,250,000 | 1.25 | Decimal, still scaled in micros; confirm with a known value |
| metrics.cost_per_conversion | 8,333,333.33 | 8.33 | Derived from cost micros; undefined when conversions are zero |
| metrics.conversions_value | 95.5 | 95.50 | Already in currency units; do not divide |
| customer.currency_code | EUR | EUR | Attach to every amount above |
Illustrative example: one omitted conversion breaks every ratio
Illustrative example: a dashboard reads a cost_micros of 12,500,000 and displays it as 12,500,000.00. Spend for the month appears as twelve and a half million. Return on ad spend, calculated from a conversion value of 95.50, collapses to a tiny fraction and every campaign looks catastrophic.
A second invented dashboard converts the figure correctly on extraction and then again on display, showing 0.0000125. Spend looks negligible and every campaign looks miraculous. Both faults come from losing track of the unit between steps, and both are caught by comparing one known campaign total with the Google Ads interface.
Keep account currency attached to every amount
Each Google Ads account has its own currency, and a manager account can oversee clients in several. Adding 12.50 from a euro account to 12.50 from a dollar account produces a number with no meaning. Carry the currency code beside each amount from extraction through to presentation, and keep accounts in different currencies in separate totals.
If a separate analysis genuinely needs a combined figure, document the exchange-rate source, the rate used and the date it was taken, and label the result as converted. Never let the conversion happen silently inside a report; the reader must be able to see that it was done.
Add a known-value check whenever you add a financial field
A generic function that rescales every numeric field containing the word “value” is unsafe, because conversion value and cost-derived values are scaled differently. Convert field by field, using an explicit list of micros fields, and treat an unknown money field as a question rather than a guess.
For every new field, compare one reported figure against the same figure in the Google Ads interface for the same account, dates and timezone. Note the field name, unit, conversion applied and rounding rule beside the check. Any ratio with zero in the denominator should be displayed as unavailable rather than as zero.
Work with cost micros in Adlane
Connect the Google Ads account and ask a bounded question with dates and a goal, for example: “Show spend, clicks and conversions by campaign for last month in the account currency.” Adlane converts micros fields before presenting them and keeps the account currency, units and timezone with the evidence, so you can compare a figure with the Google Ads interface directly.
If the review suggests a budget change, the proposal shows the current and proposed amounts in the account currency for your approval; nothing is applied by the conversation, and new campaigns start paused. Treat any cross-account total as a question to raise rather than a number to accept, unless the currency and conversion method are stated.