Skip to content
ceaksan

Common Value-Sending Mistakes in OpenAI Ads: Decimal or Minor Unit?

OpenAI Ads expects monetary value as an integer in ISO 4217 minor units: 2599 for $25.99. The most common mistake is sending a decimal, because Meta CAPI, GA4, and Google Ads gtag all use decimals (25.99). Other traps: mis-scaling zero-decimal currencies like JPY, sending amount without currency, and confusing the Google Ads API micros value.

Jun 21, 2026 4 min read
TL;DR

OpenAI Ads expects monetary value as an integer in ISO 4217 minor units: $25.99 is sent as 2599, $129.99 as 12999, and currency is required when amount is present. The most common mistake is sending a decimal, because Meta CAPI, GA4, and Google Ads gtag all use decimal major units (25.99) while OpenAI Ads wants an integer. Other traps: scaling zero-decimal currencies like JPY as if they had two decimals, sending amount without currency, and confusing the micros (25990000) scale when pulling values only from the Google Ads API. A minor unit is a currency's subunit; in most currencies it is 1/100 (cent), in JPY there is none, in KWD it is 1/1000.

OpenAI Ads expects monetary value in a single format: an integer in the currency’s ISO 4217 minor unit. $25.99 is sent as 2599, $129.99 as 12999, and currency is required when amount is present1. Almost all value-sending errors come from misapplying this rule, and the most common is sending a decimal, because the value is a decimal in many other tools.

This post walks through those traps one by one. They all share the same root: scale. Sending the right number in the wrong unit silently shifts the conversion value by a factor of a hundred or a thousand.

The Minor Unit Scale

A minor unit is a currency’s subunit: the cent for USD, the kuruş for TRY. In most currencies the ratio is 1/100, so the value is multiplied by a hundred and turned into an integer. ISO 4217 defines this scale for every currency2. This is exactly the format OpenAI Ads expects: no decimal point, the value as an integer in minor units.

ConventionUnitHow $25.99 is written
OpenAI AdsInteger, minor unit2599
Meta CAPI, GA4, Google Ads gtagDecimal, major unit25.99
Google Ads API (Money type: cost, bid)Integer, x 1,000,00025990000

All three values express the same money but at different scales. OpenAI Ads accepts only the first row. The notable point is how common the second row is: the format used most often in conversion measurement is the decimal, so that is where the real trap lies.

Mistake 1: Sending a Decimal (Most Common)

The most frequent mistake is sending the value as a decimal major unit: 25.99. The reason is habit: Meta Conversions API, GA4, and Google Ads gtag send the conversion value as a decimal3. Someone coming from one of these instinctively writes 25.99 for OpenAI Ads too. But OpenAI Ads expects an integer minor unit; the correct value is 2599. The difference between major unit and minor unit is a factor of a hundred, so $25.99 can be mistakenly reported as $0.2599.

Mistake 2: Zero- and Three-Decimal Currencies

The “multiply by a hundred” rule is not universal. In ISO 4217 the minor unit scale varies by currency2:

  • Zero-decimal (JPY, KRW, etc.): there is no minor unit, the value is a direct integer. 2599 JPY is sent as 2599, not 259900. Multiplying by a hundred inflates the value a hundredfold.
  • Three-decimal (KWD, BHD, OMR): the minor unit is 1/1000. 1.5 KWD is sent as 1500. Multiplying by a hundred (150) shrinks the value tenfold.

A system working only with USD and EUR can get by on the “always multiply by a hundred” assumption, but it breaks the moment JPY or KWD enters. The minor unit scale per currency has to be taken from the ISO 4217 table.

Mistake 3: amount Without currency

The OpenAI Ads documentation is clear: if amount is sent, currency is required too1. Sending an amount without a currency leaves the event incomplete. Likewise, the event-level amount and the item-level amounts inside contents[] must be in the same minor unit scale; if one is in minor units and the other is a decimal, the total comes out inconsistent.

Mistake 4: The Google Ads API Micros Value

This trap concerns only a narrow group, but its consequence is large. The Google Ads API carries monetary fields in micros: 1 unit is expressed as 1,000,000 micros, so $25.99 becomes 259900004. This scale is seen mostly in fields like cost and bid; the conversion value sent via gtag is a decimal3. The confusion arises when a setup pulls a value in micros from the Google Ads API and passes it to OpenAI Ads as-is: 25990000 goes instead of 2599, and the amount inflates ten-thousandfold. Any setup moving values between two systems has to do the scale conversion explicitly.

Fix the scale once

The root of value errors is almost always scale confusion. Using a single helper that converts money to an integer minor unit in one place in the system gathers the decimal, micros, and per-currency scale differences into a single point. Recomputing the value at each send site is the real source of inconsistency.

Next Steps

Once the value and currency format is settled, the technical side of OpenAI Ads measurement is largely complete: the event taxonomy, identity matching, dedup, and value sending together form a consistent setup. What remains is connecting that setup to campaign management and reporting.

Footnotes

  1. Supported events (OpenAI Developers) — the minor units rule and example (“Send monetary values as integers in the standard ISO 4217 minor unit for the currency code you provide, for example 12999 for $129.99 with currency: \"USD\".”), amount is an integer and currency is required when sent, event-level and contents[] item-level amount/currency. 2
  2. Currency codes and minor units (Adyen Docs) — ISO 4217 minor unit scales: most currencies two decimals (1/100), currencies like JPY zero decimals (no minor unit), KWD/BHD/OMR three decimals (1/1000). 2
  3. Track transaction-specific conversion values (Google Ads Help) — the gtag conversion value is sent as a decimal (“pass the conversion value as a number, using a period as a decimal delimiter”), example 'value': 123.05, currency as an ISO 4217 code. 2
  4. Money (Google Ads API) — the Google Ads API carries monetary fields in micros: 1 unit = 1,000,000 micros, so $1.23 is expressed as 1230000.
Key Takeaways
  • 01 OpenAI Ads wants an integer minor unit: 2599 for $25.99. The most common mistake is sending a decimal (25.99).
  • 02 Meta CAPI, GA4, and Google Ads gtag conversion value all use decimal major units (25.99); OpenAI Ads, against that habit, expects an integer.
  • 03 Zero-decimal currencies (JPY, KRW) have no minor unit: 2599 JPY is sent as 2599, not 259900. Three-decimal ones (KWD, BHD, OMR) scale by 1/1000.
  • 04 Micros only appears in the Google Ads API Money type (cost, bid; x 1,000,000); the gtag conversion value is decimal. The confusion arises when pulling values from the API.
  • 05 If amount is sent, currency is required; event-level and item-level amounts must be in the same minor unit scale.
Frequently Asked Questions (FAQ)
+ What format does OpenAI Ads expect for value?

Monetary value is sent as an integer in the currency's ISO 4217 minor unit. $25.99 is written as 2599, $129.99 as 12999. The amount field is an integer, and when it is sent, the currency field becomes required as well.

+ Why is sending a decimal the most common mistake?

Because most other measurement tools use decimals: Meta Conversions API, GA4, and Google Ads gtag send the conversion value as a decimal major unit (25.99). Someone coming from one of these instinctively sends 25.99 to OpenAI Ads too, but OpenAI Ads expects an integer minor unit (2599). The difference between the two is a factor of one hundred.

+ Are micros and minor units the same thing?

No, and micros does not concern most setups. Micros is a scale in the Google Ads API Money type (1 unit = 1,000,000 micros), seen mostly in fields like cost and bid; the conversion value sent via gtag is a decimal. The confusion arises only in setups that pull a value in micros from the Google Ads API and pass it as-is to OpenAI Ads, where the value inflates ten-thousandfold.

+ How is value sent for currencies like JPY?

Zero-decimal currencies like JPY and KRW have no minor unit; the value is sent directly as an integer. 2599 JPY is written as 2599, not 259900. Three-decimal currencies like KWD, BHD, and OMR scale by 1/1000: 1.5 KWD is sent as 1500.