Why is Razorpay attribution so hard to find?
Almost every revenue analytics tool integrates Stripe first and stops there. Indian businesses that collect by UPI, netbanking or RuPay through Razorpay are left sending purchase events from the page, or pasting numbers into a spreadsheet each month. Statsy supports the Razorpay webhook directly.
The gap is not technical. Razorpay has a perfectly good webhook, signs it properly and lets you attach your own metadata to a payment. It is simply that most analytics products are built for a Western checkout stack and never get around to it.
That means an Indian SaaS or D2C founder usually knows total revenue and total traffic, but not which of the two has anything to do with the other. The question “did the YouTube review actually sell anything, or was it the newsletter?” goes unanswered for want of a webhook handler.
How does Statsy connect Razorpay payments to visits?
Razorpay notes carry the visitor across the checkout. Razorpay lets you attach a notes object of key-value pairs to a payment or order, and returns it in the webhook. Statsy reads statsy_vid from there, matches the payment to that visitor and credits the touches before it.
Notes through checkout
Razorpay documents notes on its order and payment entities as a set of key-value pairs, up to 15 pairs of at most 256 characters each, returned with the entity. For hosted payment pages on rzp.io, the Statsy script appends notes[statsy_vid] to the link automatically for visitors in Full mode. For Checkout opened from your own code, set the same key in the notes option.
The signed webhook
Razorpay states that the hash signature is “calculated using HMAC with SHA256 algorithm; with your webhook secret set as the key and the webhook request body as the message”, and sends it in the X-Razorpay-Signature header. Statsy recomputes it and compares in constant time before recording anything.
Four events are used. payment.captured records a payment, subscription.charged records a renewal, refund.processed records a refund as a negative amount, and subscription.cancelled marks the customer as churned. Amounts arrive in paise and are stored in the currency Razorpay reports.
How do you set it up?
Add the script, create one webhook in the Razorpay dashboard, paste its secret into Statsy and tag your campaign links. If your payment buttons point at hosted Razorpay payment pages, nothing else is needed; the visitor identifier is appended to the link when it is clicked.
- Add the Statsy script, about 3 KB gzipped, to every page of your site.
- In the site’s integrations, choose Razorpay and copy the webhook URL. In the Razorpay dashboard, add a webhook with that URL, select the four events above and set a secret.
- Paste that secret back into Statsy. It is encrypted at rest and never shown again.
- For Razorpay Checkout opened from your own JavaScript or created on your server, read
statsy.visitorId()and pass it asnotes.statsy_vidon the order or payment. - Tag campaign links with UTM parameters, for example
utm_source=newsletter&utm_campaign=diwali. Referrers need no tagging.
Razorpay references, checked September 2026: webhooks, validating webhooks and the orders entity.
What do the reports show in rupees?
Revenue, customers, conversions, refunds and net revenue by channel, source, campaign, referrer, landing page and individual post. Sites owned from India report in rupees, formatted in the Indian numbering system, so lakhs read as lakhs rather than as awkward thousands.
| Breakdown | What it answers |
|---|---|
| Channel and source | Which categories and specific sources produced paying customers |
| Campaign | Which tagged campaign earned the money, with refunds subtracted |
| Landing page | Which entry page tends to start a buyer’s journey |
| Posts | Which exact post on X or LinkedIn sent visits, sign-ups and revenue, via its t.co or lnkd.in short link |
| Search queries | Which Google queries earn, when Search Console is connected |
| Visitor journeys | One customer’s touches and payments in order, so you can check a model against reality |
Payments in other currencies are recorded as Razorpay reports them and converted for the site’s reporting currency, so an international sale does not quietly become a rupee figure.
Does Statsy itself charge in rupees?
Yes. Customers in India pay in rupees through Razorpay by UPI, card or netbanking, and everyone else pays in US dollars through Lemon Squeezy. The currency is chosen from your country automatically, so an Indian founder never pays a conversion fee to buy analytics.
The Growth plan starts at ₹749 a month at 10,000 monthly events and both plans include every feature: revenue attribution, session replays, heatmaps, funnels, goals, journeys, the live visitor globe and the Posts breakdown. Growth covers up to five websites, Scale an unlimited number. Paying yearly charges for ten months. See pricing for the full ladder in rupees.
What will this not tell you?
Attribution is an estimate everywhere. Ad blockers, browser privacy settings and consent choices reduce what can be measured. Cookieless visitors are not linked across days, so their payments count toward revenue but reach a channel only through a match on email or customer id.
- Payments collected over a phone call, a QR code in a shop or a payment link shared on WhatsApp have no website visit to attribute.
- Statsy reads no ad spend, so it reports revenue and refunds but never return on ad spend.
- Settlements, fees and GST are Razorpay’s business; Statsy records the payment amount as the webhook reports it.
- Models are rules, not proof of cause. Compare two models and read a few real journeys before moving budget.