# Test events and the event log (/docs/ads/event-log)

The **Event log** tab on **Ads & conversions** shows every conversion event Mokanata sent to Meta and TikTok in the last 24 hours, and whether each one arrived. Use it with a test event to check a new destination works before real conversions flow.

<Callout title="Coming soon">
Sending conversions to Meta and TikTok works now. Google Ads conversions are coming soon. The screenshots show the sample workspace.
</Callout>

- **Who can use it:** Everyone can read the event log. Sending a test event needs **Connect ad platforms**, which owners and admins have by default; for other roles **Send test event** is disabled and says why. See [Roles and permissions](/docs/settings/roles).
- **Before you start:** At least one connected conversion destination (see [Send conversions to Meta and TikTok](/docs/ads/conversion-destinations)). For a test event, a test event code from the platform's Events Manager → Test events: a test needs one, so it never counts as a real conversion.

## Check match quality [#check-match-quality]

**Event match quality** at the top rates, for each destination, how well its events can be matched to real people, out of 10: **Great** (8 or more), **Good** (6 or more), **OK** (4 or more) or **Poor** (under 4, with a red bar). A note under each score says what would raise it.

![Event match quality: Meta 8.4 / 10 Great, TikTok 6.1 / 10 Good with scores from before the token expired, and Google Ads Not rated · connect to start sending](/screenshots/event-log/01-match-quality.webp)

A destination that isn't connected shows **Not rated · connect to start sending**; a newly connected one shows **Not rated yet · scores appear after events arrive**. To lift a score, add emails and phone numbers to more contacts: they're the match keys every destination uses.

## Read the event log [#read-the-event-log]

**Recent events** lists events newest first, with how many were sent in the last 24 hours and how many failed. Failed rows are tinted red.

![Recent events: 10 in the last 24 hours · 3 failed, with columns When, Event, Destination, Value, Match keys, event_id and Status, showing Sent, Deduplicated, Failed and Test rows](/screenshots/event-log/02-recent-events.webp)

| Column | What it shows |
|---|---|
| **When** | How long ago it was sent ("Just now", "3m ago", "1h ago"). |
| **Event** | The CRM event, over the contact (the name links to their record when they're in your contacts). |
| **Destination** | Meta or TikTok. |
| **Value** | The amount sent with it, or **None**. |
| **Match keys** | What was sent to match the person, such as phone and email (hashed). **None** in red means nothing could be matched. |
| **event_id** | The deduplication key. The same deal and event always gets the same one. |
| **Status** | The outcome, with the reason underneath when there is one. |

| Status | Meaning |
|---|---|
| **Sent** | Delivered to the destination. |
| **Deduplicated** | The destination already had an event with the same `event_id` (for example from your pixel) and dropped this copy. The conversion still counts once. |
| **Failed** | Not delivered; the reason shows underneath, like "401 · access token expired" or "Missing match keys: no phone or email on the contact". Mokanata tries again a few times, waiting longer each time; Meta and TikTok take nothing more than 7 days old. |
| **Test** | Sent with **Send test event**. It never counts as a conversion. |

## Filter the log [#filter-the-log]

<Steps>
<Step>

### Pick a filter [#pick-a-filter]

Click **Filter**, point at **Destination** or **Status** and tick what you want to see. Here, **Status** → **Failed**:

![The Filter menu open on Status, listing Sent, Deduplicated, Failed and Test](/screenshots/event-log/03-filter-status.webp)

</Step>
<Step>

### Narrow or clear it [#narrow-or-clear-it]

The filter shows as a chip, like **Status is Failed**. Click **Add** to filter on the other field too, click a chip to change it (or switch it to **is not**), its **×** to remove it, or **Clear all**.

![Recent events filtered to Status is Failed, showing three failed events with their reasons](/screenshots/event-log/04-failed-events.webp)

If nothing matches, **No events match** shows with **Clear filters**.

![No events match with two filters, Status is Failed and Destination is Google Ads, and the Clear filters button](/screenshots/event-log/05-no-events-match.webp)

</Step>
</Steps>

## Send a test event [#send-a-test-event]

<Steps>
<Step>

### Open Send a test event [#open-send-a-test-event]

Click **Send test event** on **Recent events**, or on a connected destination's card on the **Destinations** tab (which picks that destination for you).

</Step>
<Step>

### Choose the destination and event [#choose-the-destination-and-event]

- **Destination**: any connected destination.
- **Event**: one of the CRM events. The hint underneath says what the destination receives it as, for example "Meta receives it as Purchase".
- **Test event code**: fills in with the destination's saved code. It's required: copy it from Events Manager → Test events, so the event shows in the platform's test view and never counts as a real conversion.

![The Send a test event dialog with Destination Meta, Event Deal won (Meta receives it as Purchase) and Test event code TEST48213](/screenshots/event-log/06-test-dialog.webp)

</Step>
<Step>

### Send it and find it [#send-it-and-find-it]

Click **Send test event**. The toast gives the `event_id` to look for in Events Manager → Test events.

![The toast "Test event sent to Meta: Look for event_id rly_deal_won_i6cg in Events Manager → Test events"](/screenshots/event-log/07-test-sent.webp)

A new row tops the log for **Test contact**, with the status **Test** and the code you used.

![The top of Recent events with a new Deal won row for Test contact, $100, status Test, Test code TEST48213](/screenshots/event-log/08-test-row.webp)

</Step>
</Steps>

## Troubleshooting [#troubleshooting]

<Accordions type="single">
<Accordion title="Send test event is greyed out">
Either no destination is connected (point at the button: "Connect or resume a destination to send a test event"), or your role doesn't include **Connect ad platforms**. Connect or resume a destination on the **Destinations** tab, or ask an owner or admin.
</Accordion>
<Accordion title="The test dialog says no destination is connected">
The destination was disconnected or paused since you opened the page. Click **Go to Destinations**, connect or resume it, then send the test again.
</Accordion>
<Accordion title="Events fail with 401 · access token expired">
The destination's token expired. Click **Update token** on its card and paste a new one; the failed events are sent again and turn into **Sent**. See [Fix an expired token](/docs/ads/conversion-destinations#fix-an-expired-token).
</Accordion>
<Accordion title="Events fail with Missing match keys">
The contact has no phone number or email, so the destination can't tell who it was. Add one to the contact; future events for them will match.
</Accordion>
<Accordion title="I see two rows for the same deal">
One was sent and the other **Deduplicated**: both carry the same `event_id`, usually because your pixel sent the same purchase from your checkout. The destination keeps the first and drops the copy, so it counts once.
</Accordion>
</Accordions>

## Next steps [#next-steps]

<Cards>
<Card title="Send conversions to Meta and TikTok" href="/docs/ads/conversion-destinations" description="Connect destinations and choose the events." />
<Card title="Tracking tags" href="/docs/ads/tracking-tags" description="Pair a pixel with its server-side destination." />
<Card title="Ads & conversions" href="/docs/ads/ads-overview" description="Back to the results." />
</Cards>
