The five stages
What a rule holds
The editor has two steps. Step 1 sets the trigger and the destination. Step 2 sets the mapping and the conditions.
Property conditions
A rule with conditions sends only the trigger events whose properties match every condition. The rule does not send an event that fails a condition. It writes no row for that event. Other rules on the same trigger still send it. A property is a path into the event, such ascheckout, order.channel, or geo_country_code. Paths resolve the same way as value_path.
Comparison rules:
- Text compares without case and without leading or trailing spaces.
Stripeequalsstripe. - A missing property matches only is not, is not one of, and is not set.
>,≥,<and≤need a number.£12.50and1,299.00are numbers.2026-10-09andSKU-12are not, and do not match.
- Up to 5 conditions per rule. All of them must match.
- No conditions on
user_properties. - No conditions on personal fields, such as email, phone, IP address, name, or address.
- No conditions on identifiers, such as
user_idandvisitor_id. - No conditions on a Stripe
trial_startedrule.
property_conditions_invalid.
How the value resolves
Datalyr tries each source in order and stops at the first number it finds.- The rule’s
value_path, read against the event. - The rule’s
value_static. - The event’s own
value,revenue,total, oramount. - Zero.
parameter_mappings entry that targets value overrides all four.
Meta, TikTok, and Snapchat reject a purchase worth zero. We skip that delivery with the reason
zero_value_purchase rather than send a request that always fails.How identity resolves
We look for a click ID on the event itself first. If there isn’t one, we search history.
Datalyr also fills hashed match keys from the stored user profile and from the event’s
geo_city, geo_region, and geo_country_code.
An event carrying consent.marketing: false, consent.sale: false, or consent.ad_user_data: false ships with no user-level identifier at all.
Deduplication
Every platform receives the browser-mintedevent_id as its dedup key. The browser pixel fires with the same value, so the pair collapses into one conversion.
Datalyr also takes a 300-second Redis claim per event and rule. A queue redelivery inside that window is skipped instead of resent.
Statuses
Skip reasons
Retries
The dead-letter queue runs three rounds. After that the row reads
dropped. Google conversions never enter the queue, because Google validates the upload later through its own diagnostics poll.
Two circuit breakers protect a broken setup. Five straight 5xx responses pause one workspace and platform for 60 seconds. Ten auth or config failures pause one rule for one hour.
Verify
- Open Conversions. Select manage rules. Open your rule.
- Select send test event.
- Read the rule’s
matched,sent, andfailedcounts. - Open the newest row under
recent activity. - Confirm the response body carries the ad platform’s own acceptance field.
When it does not work
Next
- Conversions: read one delivery row end to end.
- Meta Ads: the exact fields and hashing per platform.
- Attribution: how a click ID reaches a server-side purchase.