Why Paid Signal exists
On cash on delivery those are not the same number — and the gap between them is exactly what your ad platform has spent your budget learning from. This page explains what that costs you, what changes when you fix it, and the one thing you have to do for any of it to work.
When someone checks out, your pixel fires a Purchase event. Meta, TikTok and Snapchat take that as truth: this person converted — go and find more like them.
On a prepaid store that is fair enough. The card was captured at checkout, so an order really is a sale. On cash on delivery it is not. The order is a promise to pay.
Some promises turn into cash at the door. Plenty do not: the parcel is refused, nobody answers, the address is wrong, the customer changed their mind somewhere between the ad and the knock. Your ad platform never hears about any of it. It learned from the order and moved on.
Your pixel measures intent. Your bank measures money. On COD those two numbers drift apart — and every campaign you run is optimising against the first one.
Take a simple month. The numbers below are made up — the shape is what matters, and yours will be different:
Without Paid Signal
The pixel counts every order at checkout. Your campaigns optimise toward all 100, and every Lookalike you build is seeded from all 100.
But only 60 of them paid you. The other 40 taught your campaigns to go and find more people who order and never pay — and they are sitting inside every audience you have seeded since.
With Paid Signal
One event per order, fired only when the money is confirmed. Fewer events — and every one of them is a customer who actually paid.
If someone later refunds, or the parcel comes back, that is recorded too, so the seed does not quietly rot over the following months.
The right-hand column looks worse in Ads Manager. That is the central difficulty with this product and it is worth being blunt about: your reported conversion count will go down, and your reported cost per conversion will go up.
Neither of those changed anything in the real world. They just stopped counting people who never paid you.
You were never really paying for 100 conversions. You were paying for 60 customers and telling yourself it was 100 — while pointing your optimisation at the wrong 40.
It never talks to your courier and never needs to. Everything hangs off one fact Shopify already knows: whether the order has been paid.
Card payments mark themselves paid at checkout. Cash on delivery does not — Shopify has no way to know your courier collected the money. So a delivered, fully-paid COD order stays "pending" forever unless somebody says otherwise, and no event is ever sent for it. Every one of those is a real paying customer your ad platforms never learn about.
Nothing else on this page matters if this is not handled. An app that never receives a "paid" signal will sit there looking perfectly connected and send nothing at all — which is exactly what it should do, and exactly what looks like a broken app if you do not know why.
Selling prepaid only? Nothing to do — card payments mark themselves paid at checkout and the event fires on its own.
If your courier marks orders Delivered in Shopify, Flow can mark them paid the second that happens. No app, no code, nobody remembering.
If your courier already writes fulfilment status back to Shopify, the Flow workflow above runs itself and you never touch an order again.
The practical option when you reconcile courier payouts once or twice a week.
Fine at low volume, and the most accurate — you are marking exactly what you were actually paid for.
Only automate this if "delivered" really does mean "paid" for you. If your courier marks parcels delivered before handing over the cash, or returns are settled later, you will be telling the ad platforms a customer paid when they have not — the exact bad signal Paid Signal exists to stop. When in doubt, mark orders paid against your payout reconciliation instead: slower, but true.
Once the event is firing there are two moves on every channel: bid on it, and build a Lookalike from it. All of this happens inside the ad platform's own console. There is no token to maintain and nothing that expires.
Meta treats server events exactly like pixel events — same dataset — which is what lets them seed an audience with no extra access at all.
Snapchat only accepts its own fixed event names, so choose one you do not use anywhere else — otherwise the audience mixes everyone who ordered with everyone who paid, and you are back where you started.
Google removed Similar Audiences in August 2023, so on Google the win is bidding rather than audiences.
| Look at | What it tells you |
|---|---|
| Events sent | Should climb as orders are marked paid — not at checkout. If it is flat while orders keep arriving, your COD orders are not being marked paid. |
| Collect rate | Paid ÷ placed. This is the number the whole product exists to expose. If it is 60%, then four in ten of your old "conversions" were fiction. |
| Reversal rate | The share of sent conversions whose order later returned or refunded. Under 10% is a healthy seed. Higher means you are still feeding the platforms money that came back. |
| Collect rate per channel | The uncomfortable one. A channel can deliver plenty of orders and collect badly — that is budget you have been defending with the wrong metric. |
Your pixel tracks checkouts. On prepaid that is the same thing as a purchase. On cash on delivery it is a promise, and a meaningful share of promises never turn into money. The pixel has no way to learn that — it stops watching the moment the browser closes.
This objection is legitimate and worth taking seriously. Ad platforms do need volume to learn, and if your verified-payer volume is very low, an algorithm can struggle.
The honest advice: do not switch everything at once. Run one campaign optimised on the verified event alongside your existing ones, give it a few weeks, and compare on the number that pays your wages — cash collected — rather than on conversions reported. If your volume really is too thin, use the verified event for Lookalikes and reporting and keep bidding on the pixel event until it is not.
Yes. Your reported ROAS was measuring orders placed. The money in your bank did not change when you installed this — only the honesty of the number describing it. Every decision you make from here is made against what actually collected.
Less, and we would rather say so than sell you something. Your orders mark themselves paid at checkout, so the main gap this closes does not exist for you.
What is still useful: server-side events that ad blockers cannot drop, refund corrections so returns do not pollute your audiences, and a full ledger of what actually collected after refunds.
Only one-way hashes. Email and phone are normalised and SHA-256 hashed before they ever leave your workspace — that is the format the ad platforms match on, and it cannot be reversed back into an address. Nothing readable is transmitted.
No. It reads your orders through Shopify's API and sends events from our server to theirs. There is nothing to paste into your storefront and nothing that can slow your site down.
Connect Shopify, mark your COD orders paid, and let your ad platforms learn from customers who actually paid you.
Start a free trial7 days · everything switched on · no card required
ليه Paid Signal موجود
وفي الدفع عند الاستلام الاتنين دول مش نفس الرقم — والفرق بينهم هو بالظبط اللي منصة الإعلانات قضّت ميزانيتك وهي بتتعلّم منه. الصفحة دي بتشرح الفرق ده بيكلّفك كام، وإيه اللي بيتغيّر لما تظبطه، والحاجة الوحيدة اللي لازم تعملها عشان أي حاجة من ده تشتغل.
لما حد يشتري من متجرك، البكسل بيبعت لمنصة الإعلانات رسالة معناها: «الشخص ده اشترى». المنصة بتاخد الرسالة دي على إنها الحقيقة، وتبدأ تدوّر على ناس تشبهه وتصرف ميزانيتك عليهم.
يعني إنت فعليًا بتقول للمنصة: «الناس دي كويسة، هاتلي زيّهم». والمنصة بتنفّذ حرفيًا — من غير ما تسأل لو الفلوس وصلتلك ولا لأ.
في الدفع المسبق (فيزا أو محفظة) الكلام ده مظبوط، لأن الفلوس اتسحبت وقت الشراء فعلًا. الطلب = بيع.
لكن في الدفع عند الاستلام، الطلب مش بيع — الطلب ده مجرد وعد بالدفع. فيه طلبات بتتسلّم وتتحصّل فلوسها، وفيه طلبات كتير بترجع: العميل مش بيرد، بيرفض الاستلام، العنوان غلط، أو غيّر رأيه قبل ما المندوب يوصل.
المنصة عمرها ما بتعرف اللي حصل ده. هي اتعلّمت من الطلب ساعة ما اتعمل، وخلاص. فأنت من غير ما تقصد بتدرّبها تجيبلك ناس تطلب وما تدفعش.
خد شهر بسيط كمثال. الأرقام دي من عندي — المهم الشكل مش الرقم، وأرقامك هتبقى مختلفة:
من غير Paid Signal
البكسل بيعدّ كل طلب وقت الشراء. حملاتك بتتحسّن على الـ ١٠٠ كلهم، وكل جمهور Lookalike بتبنيه بيتعمل من الـ ١٠٠ كلهم.
بس ٦٠ بس منهم هما اللي دفعوا. الـ ٤٠ التانيين علّموا حملاتك تدوّر على ناس تطلب وما تدفعش — وهما قاعدين جوّه كل جمهور بنيته من ساعتها.
مع Paid Signal
حدث واحد لكل طلب، بيتبعت بس لما الفلوس تتأكّد. أحداث أقل — بس كل واحد فيهم عميل دفع بجد.
ولو حد استرجع فلوسه بعدين، أو الطرد رجع، ده كمان بيتسجّل، فالجمهور ما يبوظش على مدار الشهور.
العمود اللي على الشمال هيبان أوحش في Ads Manager. وده أصعب حاجة في المنتج ده ولازم أقولهالك بصراحة: عدد التحويلات اللي هيتسجّل هيقلّ، وتكلفة التحويل اللي هتشوفها هتزيد.
ومفيش حاجة من دول غيّرت أي حاجة في الواقع. هما بس بطّلوا يعدّوا ناس أصلًا ما دفعتلكش.
إنت أصلًا عمرك ما كنت بتدفع تكلفة ١٠٠ تحويل. إنت كنت بتدفع تكلفة ٦٠ عميل وتقول لنفسك إنهم ١٠٠ — وفي نفس الوقت بتوجّه التحسين ناحية الـ ٤٠ الغلط.
وهو عمره ما بيكلّم شركة الشحن ولا محتاج. كل حاجة معتمدة على معلومة واحدة Shopify عارفها أصلًا: الطلب اتدفع ولا لأ.
الدفع بالفيزا بيسجّل نفسه مدفوع وقت الشراء. إنما الدفع عند الاستلام لأ — Shopify مالوش أي طريقة يعرف بيها إن المندوب حصّل الفلوس. فالطلب اللي اتسلّم واتدفع بالكامل بيفضل «قيد الانتظار» للأبد لو محدش قال غير كده، ومش بيتبعت عنه أي حدث. وكل طلب من دول ده عميل حقيقي دفعلك ومنصات الإعلانات مش هتعرف عنه حاجة.
مفيش حاجة تانية في الصفحة دي ليها لازمة لو النقطة دي مش مظبوطة. التطبيق اللي عمره ما وصلته إشارة «مدفوع» هيفضل قاعد شكله متوصّل تمام وما يبعتش أي حاجة — وده بالظبط اللي المفروض يعمله، وده بالظبط اللي هيبان كإن التطبيق باظ لو مش عارف السبب.
بتبيع بالدفع المسبق بس؟ مفيش حاجة مطلوبة منك — الدفع بالفيزا بيسجّل نفسه مدفوع وقت الشراء والحدث بيتبعت لوحده.
لو شركة الشحن بتسجّل الطلبات Delivered جوّه Shopify، Flow يقدر يعلّمها مدفوعة في نفس اللحظة. من غير تطبيق، من غير كود، ومن غير ما حد يفتكر.
لو شركة الشحن أصلًا بتكتب حالة التسليم جوّه Shopify، يبقى مسار Flow اللي فوق هيشتغل لوحده وإنت مش هتلمس أي طلب تاني.
الخيار العملي لو بتسوّي حساب التحصيل مع شركة الشحن مرة أو مرتين في الأسبوع.
مناسب لو الأعداد لسه قليلة، وهو الأدق — لأنك بتعلّم بالظبط اللي اتحصّل فعلًا.
ما تخلّيش ده أوتوماتيك غير لو «اتسلّم» عندك معناها فعلًا «اتدفع». لو شركة الشحن بتسجّل التسليم قبل ما تسلّمك الفلوس، أو المرتجعات بتتسوّى بعدين، يبقى إنت بتقول لمنصات الإعلانات إن عميل دفع وهو ما دفعش — ودي بالظبط الإشارة الغلط اللي Paid Signal موجود عشان يمنعها. لو مش متأكد، علّم الطلبات مدفوعة على أساس تسوية التحصيل الفعلية: أبطأ، بس صح.
لما الحدث يبقى بيتبعت، فيه خطوتين على كل قناة: زايد عليه، وابني منه جمهور Lookalike. وكل ده بيتعمل جوّه لوحة المنصة نفسها — مفيش رمز وصول تحافظ عليه ولا حاجة بتنتهي صلاحيتها.
Meta بتتعامل مع أحداث السيرفر زيّها بالظبط زي أحداث البكسل — نفس الـ dataset — وده اللي بيخلّيها تقدر تبني بيها جمهور من غير أي صلاحيات زيادة.
Snapchat بتقبل أسماء أحداثها هي بس، فاختار اسم إنت مش مستخدمه في حتة تانية — وإلا الجمهور هيخلط اللي طلب مع اللي دفع وترجع لنقطة الصفر.
Google ألغت Similar Audiences في أغسطس ٢٠٢٣، فالمكسب على Google في المزايدة مش في الجماهير.
| بصّ على | بيقولك إيه |
|---|---|
| الأحداث المُرسَلة | لازم تزيد كل ما تعلّم طلبات كمدفوعة — مش وقت الشراء. لو ثابتة والطلبات داخلة، يبقى طلبات الدفع عند الاستلام مش بتتعلّم مدفوعة. |
| نسبة التحصيل | المدفوع ÷ المطلوب. ده الرقم اللي التطبيق كله موجود عشان يوريهولك. لو طلع ٦٠٪، يبقى ٤ من كل ١٠ «تحويلات» قديمة كانت وهم. |
| معدّل الارتداد | نسبة التحويلات اللي بعتناها وبعدين الطلب رجع أو اتسترد. أقل من ١٠٪ يبقى جمهورك سليم. أعلى من كده بكتير يبقى لسه بتغذّي المنصات بفلوس رجعت منك. |
| نسبة التحصيل لكل قناة | دي الحاجة اللي مش بتعجب حد. القناة ممكن تجيبلك طلبات كتير وتحصّل وحش — وده بالظبط الميزانية اللي كنت بتدافع عنها بالمقياس الغلط. |
البكسل بيسجّل عمليات الشراء. في الدفع المسبق دي نفس البيعة. في الدفع عند الاستلام دي مجرد وعد، ونسبة معتبرة من الوعود دي عمرها ما بتتحوّل لفلوس. والبكسل مالوش أي طريقة يتعلّم ده — هو بيبطّل يتفرّج أول ما المتصفح يتقفل.
السؤال ده في محلّه فعلًا ويستاهل جدية. المنصات محتاجة عدد عشان تتعلّم، ولو عدد العملاء اللي بيدفعوا عندك قليل جدًا، الخوارزمية ممكن تتعب.
والنصيحة بصراحة: ما تغيّرش كل حاجة مرة واحدة. شغّل حملة واحدة على الحدث المؤكَّد جنب حملاتك الحالية، سيبها كام أسبوع، وقارن على الرقم اللي بيدفع مرتبك — الفلوس اللي اتحصّلت — مش على عدد التحويلات. ولو عددك فعلًا قليل أوي، استخدم الحدث المؤكَّد في بناء الجماهير وفي التقارير، وفضل مزايد على حدث البكسل لحد ما العدد يكبر.
أيوة. الـ ROAS اللي كنت بتشوفه كان بيقيس الطلبات مش الفلوس. الفلوس اللي في البنك ما اتغيرتش لما ركّبت التطبيق — اللي اتغيّر هو صدق الرقم اللي بيوصفها. وكل قرار هتاخده من دلوقتي هيبقى مبني على اللي اتحصّل فعلًا.
أقل، وأنا أفضّل أقولك كده بدل ما أبيعلك حاجة. طلباتك بتتسجّل مدفوعة وقت الشراء، فالمشكلة الأساسية اللي التطبيق بيحلّها مش موجودة عندك أصلًا.
اللي لسه مفيد: أحداث من السيرفر مانعات الإعلانات ما تقدرش تضيّعها، وتصحيح للاسترجاعات عشان المرتجعات ما تلوّثش جماهيرك، وسجل كامل باللي اتحصّل فعلًا بعد الاسترجاع.
بيبعت تشفير باتجاه واحد بس. الإيميل والتليفون بيتظبطوا ويتشفّروا بـ SHA-256 قبل ما يخرجوا من مساحتك خالص — ودي الصيغة اللي منصات الإعلانات بتطابق بيها، ومستحيل ترجع منها لعنوان تاني. مفيش أي حاجة مقروءة بتتبعت.
لأ. هو بيقرا طلباتك عن طريق API بتاع Shopify وبيبعت الأحداث من السيرفر بتاعنا للسيرفر بتاعهم. مفيش حاجة تلزقها في متجرك ولا حاجة ممكن تبطّئ موقعك.
وصّل Shopify، علّم طلبات الدفع عند الاستلام مدفوعة، وسيب منصات الإعلانات تتعلّم من عملاء دفعولك بجد.
ابدأ تجربة مجانية٧ أيام · كل الحاجات مفتوحة · من غير بطاقة