Skip to content
Documentation

Send confirmed sales to Google Ads.

Export eligible commerce sales as a CSV, or let Google fetch an authenticated HTTPS feed. Set up click IDs, sale times, and stable conversion identifiers.

What this exports

Tools → Google Ads conversions lets a site administrator or owner export eligible sales from the site's server-side commerce integration. Download a CSV for a selected period, or create an authenticated HTTPS feed that Google can fetch on a schedule. Browser purchase events, goal totals, and imported aggregate reports do not become conversion rows.

Each row contains the Google click ID, your conversion action name, the actual sale time in UTC, its value and currency, and a stable conversion identifier. The value is net_amount: after discounts, excluding VAT or other tax and shipping. Values stay in their original currencies; Kehai does not convert them.

Prepare your commerce integration

  1. Enable Ecommerce in Settings → Modules and choose a supported commerce connection, or set up the authenticated commerce endpoint from your backend.
  2. Enable auto-tagging in Google Ads and create the conversion action that will receive imported sales. Copy its exact name, including capitalization. For purchases, choose Every if each separate sale should count. UTM tags and ValueTrack parameters describe campaigns; they do not replace the GCLID that Google adds to a qualifying click.
  3. Keep the relevant landing URL with the order in your own system. Send that site-relative URL as landing_path, with the original gclid value unchanged. Your site's query-parameter exclusions still apply: a blocked or missing GCLID cannot be exported.
  4. Send occurred_at as the actual confirmed sale time, in ISO 8601 with an explicit timezone: Z for UTC or an offset such as +02:00. It must be a real date from 1970 through the present, with seconds and optionally one to three fractional digits. Keep this time unchanged on retries.
commerce payload with conversion metadata
{
  "site": "YOUR_SITE_ID",
  "occurred_at": "2026-09-12T14:35:00Z",
  "currency": "EUR",
  "net_amount": 129.00,
  "landing_path": "/pricing?utm_source=google&utm_medium=cpc&gclid=REAL_GOOGLE_CLICK_ID",
  "items": [
    { "item_id": "PLAN-COMMERCE", "price": 129.00, "quantity": 1 }
  ]
}

The endpoint still requires your commerce key and persisted random idempotency key. Kehai creates a separate random conversion_id and keeps it stable for the accepted delivery; the export uses it as Google's Order ID. Do not supply conversion_id, ingest_id, a customer ID, or your shop's order number in the payload.

Kehai does not join a sale to browser visitor codes or search earlier visits to infer a click. Your integration supplies the order's landing context. Allow four to six hours after creating a new offline conversion action before the first upload, as described in Google's offline conversion tracking guide.

Download a CSV

  1. Open Tools → Google Ads conversions for the site.
  2. Select a period of at most 90 calendar days in the site's timezone and enter the exact Google Ads conversion action name. Entering a name in Kehai does not create that action in Google Ads.
  3. Choose All eligible sales or Initial subscription payments. Review the eligible and skipped counts, then download the CSV.
  4. In Google Ads, upload the file in Data Manager, or in Goals → Conversions → Uploads where that screen still accepts new connections. Run Preview and review row errors before applying the import.
CSV: the six columns; example identifiers only
Google Click ID,Conversion Name,Conversion Time,Conversion Value,Conversion Currency,Order ID
REAL_GOOGLE_CLICK_ID,Kehai purchase,2026-09-12 14:35:00+0000,129.00,EUR,47eb7297-9831-4cea-9df1-aef591201c05

The header is the first line. Conversion times use yyyy-MM-dd HH:mm:ss+0000, with UTC explicit on every row, so no separate timezone parameter is needed. Re-exporting a sale preserves its time and Order ID. Keep the same conversion action for repeat imports; Google's duplicate handling depends on the conversion identifiers and action.

If your account uses Data Manager, select the file source and conversion destination, map these six columns to the corresponding Google fields, and review its validation results. The action's configuration determines the required destination fields. Enhanced conversions for leads may require a different setup; this file contains GCLID-based sales, not customer contact data. See Google's file upload instructions and Data Manager file specification.

Let Google fetch an HTTPS feed

Choose the feed's payment scope when creating it. This choice is independent of the manual CSV selection and stays fixed for that feed. Existing feeds include all eligible payments.

A site administrator can create a feed for a conversion action on the same Tools screen. Its rolling window includes eligible sales from the last 90 days through the current time, including the current day. Each fetch returns the same six-column format.

  1. Create the feed and copy the URL, username, and password. The password is shown once. The URL ends in /api/google-ads/FEED_UUID/conversions.csv; the username is that feed's UUID.
  2. In Google Ads Data Manager, connect an HTTPS file source. Enter the URL, username, and password in their separate fields, then map the columns and choose the conversion action.
  3. Validate or preview the import and review its results. Choose a manual, daily, or weekly schedule in Google, with the desired time and timezone. A daily schedule reduces the chance of missing Google's import window.

The feed requires HTTP Basic authentication over HTTPS; the URL alone does not grant access. Kehai stores a hash of the password. If you lose it, revoke the feed and create another. Revocation stops future downloads; it does not remove conversions Google already imported.

This uses Google's file import, without a Google Ads API or OAuth connection. A successful download is not proof that Google accepted every conversion. Check Google's import history and diagnostics after setup and after scheduled runs. Google's guides cover HTTPS source credentials and import schedules.

Map the columns in Data Manager

Data Manager lists the file's columns with underscores: Google_Click_ID, Conversion_Name, Conversion_Time, Conversion_Value, Conversion_Currency, and Order_ID. Five are mapped to fields; the sixth is the destination itself.

  • Event information. Conversion_Time to the conversion date and time, Order_ID to the transaction identifier. Leave event source empty.
  • Attribution details. Google_Click_ID to GCLID. Nothing is imported without this one, and it is not on the first screen.
  • Conversion value. Conversion_Value to the value, Conversion_Currency to the currency code.
  • Everything else stays empty. Measurement enhancement (GBRAID, WBRAID, IP address), consent, user agent, and session attributes. The file carries none of them, and a static value there would state something that was never measured.

Conversion_Name has no field of its own. The conversion action is the destination chosen for the connection, and the column carries the name entered in Kehai so the file reads on its own. Both must name the same action.

Google reads the file to learn its columns, so mapping needs at least one sale in it. A feed returning only its header cannot be mapped; connect after the first eligible sale exists.

Revoking a feed and creating another changes all three values, not only the password. The new feed has its own UUID, which is both the URL and the username. Data Manager reports a revoked feed exactly as it reports a wrong password, so check the feed is still listed as active in Kehai before re-entering anything.

Skipped rows, refunds, and import windows

All eligible sales includes every eligible positive sale. Initial subscription payments includes only the first confirmed positive payment for a subscription, including after a free trial. It does not mean a customer's first-ever purchase. Renewals, one-time sales, paid changes, and payments with unknown classification stay in your revenue reports but are outside this narrower export. Stripe checks available invoice history; a custom integration must supply the payment_type. Older records are not guessed or reclassified.

A sale is eligible only when it has a positive net amount, a valid currency, its explicit sale time, its stable conversion identifier, and a usable raw GCLID in the supplied landing context. The preview counts missing metadata, missing or invalid click IDs, refunds, other invalid rows, and otherwise eligible sales outside the selected payment scope separately.

Within the selected period, identical copies of a conversion ID export once; if their click IDs, actual times, amounts, or currencies conflict, that conversion is excluded and counted once as invalid instead of choosing one version.

Older rows without conversion metadata stay in Kehai's reports but are excluded from this export. A historical gclid=1 marker cannot recover the original click ID. A missing occurred_at is not replaced with the time Kehai received the row.

Refunds currently carry no reference to the original conversion. They are excluded from this sales file and do not automatically adjust conversions already sent to Google, so the file's total is not net revenue after refunds. Google handles retractions and value changes through a separate conversion adjustment process. Re-uploading the same sale with a different amount is not that process.

The 90-day export range does not override Google's deadline measured from the ad click or the conversion action's own window. A sale can be recent while its click is too old. Monthly uploads can therefore miss eligible clicks; use frequent imports and review rejected rows. Google documents the click-age limits and duplicate handling.

This export supports GCLID. It does not put GBRAID or WBRAID values into the GCLID column, and a campaign keyword is not a substitute. It does not export email addresses or phone numbers for enhanced conversions.

CSV and HTTPS are transfer methods; neither requires a Google Ads API connection. Use a lawful basis for the data you collect and share, and disclose Google as a recipient. Obtain consent where applicable law or Google's policies require it. The file format alone does not decide that requirement.

Kehai does not infer consent or automatically set Granted. The six-column file has no consent fields. Their absence does not mean consent was granted. Configure the destination for your actual use before importing.