On this page

Revenue attribution credits a sale back to the broadcast that reached that contact within the last 7 days, either automatically when you log a deal or instantly when a payment link is paid, and shows the total right on that campaign's own detail page. This article covers how to log a sale, how automatic attribution decides credit, and where the number actually appears.
Revenue attribution: first 5 of 6 steps
- 1Open the conversation where the sale happened
- 2Go to the Info panel and choose
- 3Let attribution resolve automatically, or override it
- 4Check the campaign's detail page
- 5Compare revenue across recent campaigns
Before you start
- Revenue attribution needs a conversation with the contact who bought; it is logged from the conversation, not from a standalone form.
- Anyone with permission to send messages in the inbox can log a deal, it is not restricted to admins.
- If you use Stripe payment links in chat, automatic attribution requires no setup beyond having the payment link feature configured. See collecting payments in chat.
Steps
- Open the conversation where the sale happened. Whether the deal closed by chat, by phone, or in person after a WhatsApp exchange, find that contact's conversation in the Inbox.

Go to the Info panel and choose Log Deal. Enter the amount and currency (INR by default); an order ID and notes are optional.
Let attribution resolve automatically, or override it. If you do not specify a broadcast, VGraple CRM checks whether this contact received a broadcast in the last 7 days and credits it automatically. To credit a different campaign, specify its
broadcast_idexplicitly when logging the deal.Check the campaign's detail page. Open the broadcast that should have received credit; once at least one sale is attributed, a Revenue stat tile appears next to the delivery funnel, showing the total.
Compare revenue across recent campaigns. From Broadcasts, open Compare and select up to five campaigns; the comparison table includes a Revenue row alongside cost, so you can see which campaigns actually made money, not just which had the best read rate.
Let payment links attribute themselves automatically. If you sent a payment link in chat and the customer paid through Stripe (or Cashfree, when available), the gateway's webhook creates the revenue event and attributes it the same way, with no manual Log Deal step needed.
What you will see
A campaign with attributed revenue shows a Revenue stat tile on its detail page, formatted in your organization's locale currency. The Compare view shows Revenue as a column across selected campaigns. A sale that does not attribute to any broadcast (organic revenue, from a contact who received no broadcast in the last 7 days) still counts in your organization's total revenue figures but does not appear against any specific campaign.
How does the 7-day automatic attribution window actually work?
Manually picking a broadcast for every single sale does not scale past a handful of deals a week, and forcing every sale into a campaign bucket, even ones with nothing to do with a recent send, produces numbers nobody trusts. When a deal is logged without an explicit broadcast, VGraple CRM looks up the most recent broadcast that reached this specific contact within the last 7 days and, if one exists, credits it automatically. The 7-day window is a deliberate judgment call rather than a claim of perfect causality: a sale that happens further out than a week from the last broadcast is treated as organic rather than force-attributed to a campaign that most likely had nothing to do with it.
You can always override the automatic pick by specifying a broadcast explicitly, which matters when two campaigns reached the same contact close together and you know from the conversation itself which one the customer actually mentioned.
Example
A salon sends a Friday flash-sale broadcast to 3,000 contacts. Forty of them book an appointment through WhatsApp over the following four days, some the same day, some three days later. Every one of those forty deals, logged from the conversation, auto-attributes to the Friday broadcast, giving the salon a real revenue figure for that specific campaign instead of a guess.
Settings and options
| Setting or field | What it does | Notes |
|---|---|---|
| Log Deal | Records a revenue event on a conversation | Amount and currency required; order ID and notes optional |
| Automatic broadcast attribution | Credits the broadcast that reached the contact in the last 7 days | Applies when no broadcast is specified explicitly |
| Manual broadcast override | Credits a specific broadcast you choose | Set via broadcast_id when logging the deal |
| Revenue stat tile | Shows attributed revenue on a campaign's detail page | Appears once at least one sale is attributed |
| Payment link auto-attribution | Logs revenue automatically when a chat payment link is paid | Requires payment collection set up under Stripe (or Cashfree, when available) |
Can revenue be attributed to more than one thing for the same sale?
Yes, in two independent ways at once. A sale attributes to a broadcast when one reached the contact within the automatic 7-day window (or was specified explicitly), and separately, if the same conversation carries Click-to-WhatsApp ad attribution, meaning the contact first messaged your business by tapping a Meta ad, that ad's identity travels alongside the revenue event too. These two attributions are resolved independently of each other, so a single sale can genuinely show both its originating broadcast and its originating ad in your reporting, rather than the system forcing a choice between crediting the ad or the campaign when in reality both contributed to the contact ending up in that conversation.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Revenue tile does not appear on a campaign | No sale has been attributed to it yet | Log a deal on a conversation with that campaign's contact, or wait for a payment link to be paid |
| A sale attributed to the wrong campaign | Two campaigns reached the same contact within 7 days and the automatic pick chose the more recent one | Specify the correct broadcast_id explicitly when logging the deal |
| A sale did not attribute to any campaign at all | The contact did not receive a broadcast within the 7 days before the sale was logged | Expected behavior; the sale counts as organic revenue in your overall totals instead |
| Payment link paid but no revenue event appeared | The gateway webhook has not been received yet, or payment collection is not fully configured | Check Settings, Payments for the gateway's connection status; webhooks typically arrive within moments of payment |
| Expected to see revenue in the exported CSV | The broadcast recipient CSV export does not currently include a revenue column | Check the campaign detail page or the Compare view for revenue instead of the export |
How does this compare to relying on read rate or reply rate alone?
A read rate or a reply rate tells you whether people opened and responded to a campaign, but neither tells you whether the campaign actually made money. Two campaigns can post nearly identical read rates and produce very different revenue, depending on the offer, the audience segment, and how well the message matched what that specific group was ready to buy. Revenue attribution closes that gap by carrying the funnel all the way through to a rupee figure, so a campaign's real performance is judged on the outcome that matters to the business, not a proxy for it.
This is also why the Compare view puts Revenue next to Cost for every selected campaign: a campaign that cost Rs 2,000 to send and produced Rs 40,000 in attributed revenue is a very different result from one that cost the same and produced nothing, even if their read rates looked identical on the day.
Related reading
Pair revenue attribution with tracking link clicks to see the full path from a click to a sale, and see exporting broadcast results for what the recipient-level CSV export actually contains.