Table of Contents
ToggleThis free CAPI debugger checks the Conversions API events for chats that start from a Meta ad: Click-to-WhatsApp, Messenger and Instagram. It shows what Meta will reject, ignore or fail to match to the ad.
What it covers: business messaging conversions only, meaning events with action_source set to business_messaging. What it does not cover: website pixel events or purchase CAPI for a web store. For those, use Meta’s Payload Helper. The full field list is in Meta’s business messaging documentation.

A sample result: each finding names the field, the cost and the fix.
The CAPI debugger can also suggest a corrected payload, decode Meta’s error response, walk you through a missing ctwa_clid with a few questions, and export the result as a CSV or a PDF.
The CAPI debugger runs 56 checks, grouped by what they look at:
action_source or messaging_channel missing or wrong (the channel must be whatsapp, messenger or instagram, in lowercase), a missing or unsupported event name, event names in the wrong case, and a missing event_id.ctwa_clid missing, hashed, or carrying spaces or quote marks, and whatsapp_business_account_id missing or not digits only.page_id, page_scoped_user_id, instagram_business_account_id or ig_sid missing or hashed, and fields from one channel sent inside an event for another.event_id used twice, the same conversion sent twice, and channels mixed in one request.ctwa_clid is the only link between a WhatsApp chat and the ad that started it. It arrives in the referral object of the first message after the ad click. Save it then, and send it with every later conversion from that chat.
It often never reaches your system for one of these reasons:
Send the value exactly as it arrived. Never hash a click ID. If your chats now arrive without a phone number, see the WhatsApp BSUID checklist.
Messenger has no click ID. Messenger events are matched through the Page the chat happened on, using page_id and page_scoped_user_id, the sender ID from the Messenger webhook. Instagram events use instagram_business_account_id and the sender’s ig_sid. The CAPI debugger flags WhatsApp fields found in a Messenger event, and the other way round, because one template is often reused across channels.
A successful response only tells you Meta received the request. It does not tell you the event was matched to an ad. Each WhatsApp Business Account, Page and Instagram account has its own dataset, so an event sent to the wrong dataset fails. For example, sending a Messenger page_id to a WhatsApp dataset can return “No Page associated to the dataset”. Paste Meta’s response into the decoder tab to see the exact error and what to change.
It reads the payload. It cannot see whether the request reached Meta, how your webhook is timed, the settings in your dashboards, or how Meta decides to attribute a conversion. A clean result means the payload follows the rules. Use the test event tab to confirm that Meta records it.
If the findings are more than you want to fix yourself, use the buttons under the results to request a written fix plan. Everything is handled in writing, with no calls. You can also read about my WhatsApp conversion tracking setup service.
It runs 56 checks on Conversions API events for chats that start from Meta ads: WhatsApp, Messenger and Instagram. It looks at the request structure, action_source, messaging_channel, the IDs each channel needs, ctwa_clid, event names, event_id, value and currency, and event time, and it explains each problem with a fix.
No. It is built for business messaging conversions only, which are events with action_source set to business_messaging. For website and app events, use Meta’s Payload Helper.
ctwa_clid arrives in the referral object of the first message after an ad click. It is often missing when the number runs on the WhatsApp Business app alone, when an unofficial or QR-code API is used, or when the value is read from the wrong part of the webhook. Ads that run in WhatsApp Status are another documented cause: Meta omits ctwa_clid for messages that come from a Status ad.
No. Send them exactly as they arrived in the webhook. Hashing is for email and phone, and a hashed click ID or chat ID matches nothing.
Common causes are website fields inside a chat event, an event_time older than 7 days or in milliseconds, a wrong or missing action_source or messaging_channel, and invalid JSON. One invalid event can also fail the whole request. Paste the request into the CAPI debugger to see which of these applies.
A successful response only means Meta received the request. It does not mean the event was matched to an ad. Common causes are a missing click or chat ID, the wrong dataset for the channel, and a wrong or missing action_source or messaging_channel. Paste Meta’s response into the decoder tab to see the exact error.
No. A clean result means the payload follows the rules the checker knows. Delivery, webhook timing, dashboard settings and Meta’s own attribution decisions happen outside the payload, so confirm the result with a test event.
No. Every check runs in your browser. A report is saved on this site only if you create a share link or contact me from the fix plan page, and then it is stored with IDs masked and email, phone and access tokens removed, and deleted after 30 days. If you use the test event tab, your browser sends that request straight to Meta and your token never reaches this site.
Read more in Meta’s business messaging Conversions API documentation.
The same rules apply whether you are fixing Messenger CAPI or Instagram CAPI. Paste one event and the debugger shows which ID field is missing for that channel.
Built by Al-Fahad Hridoy, an Attribution & Tracking Consultant who sets up WhatsApp, Messenger and Instagram conversion tracking with the Meta Conversions API. Every check in this debugger is based on Meta’s official documentation, so you can verify each rule yourself.
Meta, WhatsApp, Messenger and Instagram are trademarks of their respective owners. This is an independent tool and is not affiliated with or endorsed by Meta.