Convwatch
Convwatch

Conversion upload monitoring

Google said 200.
An hour later it rejected every conversion.

Offline conversion uploads fail quietly. Tokens expire, click IDs get mangled, a release stops calling the job. Convwatch checks what Google Ads, Meta and Microsoft Ads actually kept, and tells you in Slack within the hour.

For teams that upload conversions from their own backend or CRM. Built for the move to Google's Data Manager API. Read the field test.

Google Ads · conversion action 'Qualified lead' Sent vs kept
UploadedRequestSentAnswerAfter processing
13:498edf4943…2200 OKFAILED · 0 kept
13:49138b9e87…1200 OKFAILED · 0 kept
13:49adabf874…1200 OKFAILED · 0 kept
13:49d1842cc5…1200 OKFAILED · 0 kept
Reason: PROCESSING_ERROR_REASON_INVALID_GCLID × 5 · verdict arrived 65–74 min after upload. Recorded on a live Data Manager test account.

How it works

Two lines next to the code you already have.

Convwatch watches from the sender's side, so it sees the failure the moment it happens and the reason Google gives for it later.

1 · Wrap the upload

Add the SDK where you send conversions

// unchanged call, now observed
await monitor.track.dataManager(req,
  () => client.ingestEvents(req));

Your upload runs exactly as before and returns the same result. If Convwatch has a problem, your code never sees it.

2 · We reconcile

Sent, answered, and kept after processing

For every batch we record what you sent and what the platform answered. An hour later the SDK asks Google for its final verdict with your own credentials and reports the counts and reason codes.

3 · You hear about it

A Slack message when something breaks, and one when it's fixed

One alert per problem, written for the person who runs the ads, with the technical detail underneath for whoever fixes it.

What it catches

The five ways conversion uploads go dark.

Uploads stopped
Your job usually sends every 20 minutes and has been silent for 9 hours.
Access broken
Expired OAuth token, missing permission, conversion action deleted, account not allowlisted after the June 2026 cutoff.
Rejection spike
The platform normally rejects 2% of your events and rejected 40% in the last six hours.
Volume drop
You usually send 300 conversions a day and sent 40 yesterday.
Rejected after processing
The upload was accepted, then Google discarded the events an hour later. The alert names the reason, such as an invalid GCLID or missing consent.
Convwatch14:57
Critical: Google Ads rejected 100% of conversions sent to conversion action 'Qualified lead' after processing (latest 24 h of results).
google_data_manager / 123-456-7890 · diagnostic_gap · top reason PROCESSING_ERROR_REASON_INVALID_GCLID
Convwatch09:12
Critical: Uploads to Microsoft Ads goal 'Qualified lead' are failing: access token rejected (109).
microsoft_ads / 148023117 · auth_failure · failing since 08:40, 3 uploads
Convwatch10:05
Resolved: Uploads to Microsoft Ads goal 'Qualified lead' are going through again.

What leaves your servers

Counts and error codes. Nothing about the people behind the clicks.

Convwatch never asks for access to your ad accounts. Diagnostics are fetched by the SDK, inside your infrastructure, with credentials you already have.

We receive

  • Platform, account ID and conversion action ID
  • How many events you sent and how many were rejected
  • Platform error codes, such as INVALID_GCLID or 190.463
  • Request IDs, so a later verdict can be matched to its upload

We never receive

  • Click IDs: gclid, gbraid, wbraid, fbclid, msclkid
  • Emails, phone numbers, names or addresses, hashed or not
  • IP addresses or user agents of your visitors
  • Your Google, Meta or Microsoft credentials

Our server refuses any report that looks like it carries user data, so a misconfigured integration can't leak it to us by accident.

Planned pricing

Free catches the problem. Paid covers your whole setup.

Free

$0
  • One platform, up to 3 conversion actions
  • All five alerts, including rejected-after-processing
  • One Slack channel, 7-day history
  • Up to 10,000 upload reports a month

Team

$49 / month
  • Google Ads, Meta and Microsoft Ads
  • Unlimited conversion actions and reports
  • Several Slack channels and email, 90-day history

Agency

$179 / month
  • Everything in Team for up to 25 client businesses
  • A Slack channel per client
  • Weekly upload-health summary per client

Every account starts with 14 days of Team, then moves to Free unless you upgrade. Conversion actions over your plan's limit are still recorded and shown as not monitored, never dropped silently.

Founding members get 40% off for life. Everyone on the waitlist before launch qualifies.

Questions

Before you ask.

Doesn't Google already show this?

Google Ads shows a diagnostics status in its interface and warns when a source has been silent for 48 hours. You have to go and look. It also can't tell you that your own release stopped calling the upload, and it doesn't cover Meta or Microsoft.

Which platforms and languages?

Google Ads (Data Manager API and the legacy offline import), Meta Conversions API and Microsoft Ads offline conversions. The SDK is for Node.js today; any language can report through a plain HTTPS API. Python and PHP SDKs are planned.

We send through Zapier or a CDP. Does this help?

Not yet. Convwatch is built for teams whose own code or CRM integration sends the conversions. Tell us your setup on the form; it shapes what we build next.

What happens if Convwatch is down?

Your uploads carry on. The SDK reports in the background, never blocks the upload, and never throws into your code.

Waitlist

Get the first invites, and the founding-member price.

We're onboarding a handful of teams by hand first. If you upload conversions from your own code, we'd like to hear how it last broke.

Where do you upload conversions?

We use your email only to invite you and ask about your setup. See the privacy policy.