Razorpay + Stripe Dual-Gateway Reconciliation: Daily Mismatch Alerts to Slack

Catch revenue discrepancies between Razorpay and Stripe every morning before your finance team opens their laptop.

The flow
Razorpay logo
Source
Razorpay
Stripe logo
Process
Stripe
n8n logo
Process
n8n
Airtable logo
Process
Airtable
Slack logo
Destination
Slack

The stack in the order it runs — data flows from the source through to where it lands.

Why this stack

If you run Razorpay for India/SEA and Stripe for global, you know the problem: two dashboards, two currencies, two payout cycles, no unified view. Most founders reconcile this in a spreadsheet once a week and find out about a failed payout or duplicate charge days too late. This playbook closes that gap with a daily automated run.

n8n is the right orchestration layer here. It has native HTTP Request nodes that work cleanly with both Razorpay's REST API and Stripe's SDK-style endpoints. You don't need Zapier's per-task pricing at this data volume. Airtable acts as the reconciliation ledger — structured enough to diff rows, flexible enough to add notes when a mismatch needs a human look. Claude does the anomaly narration so the Slack message isn't a raw data dump.

The Airtable layer is doing real work. It stores yesterday's snapshot so today's run can diff against it. Without that persistence layer, you're just shipping raw numbers with no comparison baseline. Don't skip it.

When NOT to use this: if QuickBooks or Xero is already pulling from both gateways via native integrations, this is redundant. Also skip it if your Razorpay volume is under 20 transactions/day — the reconciliation overhead isn't worth it at that scale. This playbook targets $10K–$200K MRR businesses with meaningful dual-gateway volume.

The stack (5)

  1. Razorpay logo

    Payments + payouts built for India.

    Webhooks and the reports API make revenue an automatable signal, not a dashboard you check.

  2. Stripe logo

    Global payments with first-class APIs.

    Events + Sigma let you wire billing into any ops report or alert.

  3. n8n logo

    Self-hostable workflow automation.

    Own your data and run unlimited steps without per-task pricing.

  4. Airtable logo

    Relational database with a spreadsheet face. Operational memory for every workflow I run.

    The audit trail across views, automations, and webhooks is unmatched in no-code land.

  5. Slack logo

    Team chat where most ops alerts and reports land.

    The default place a small team already lives — pipe reports here instead of email nobody opens.

How it runs

  1. 1

    Create the Airtable reconciliation base

    Create a new Airtable base called 'Revenue Reconciliation'. Add a table called 'Daily Ledger' with these fields: Date (Date), Stripe_Gross (Currency), Stripe_Refunds (Currency), Stripe_Net (Currency), Razorpay_Gross (Currency), Razorpay_Refunds (Currency), Razorpay_Net (Currency), Combined_Net (Currency), Delta_vs_Prior_Day (Currency), Mismatch_Flag (Checkbox), Notes (Long Text). This table is your audit trail. Never delete rows.

  2. 2

    Set up Stripe data pull in n8n

    In n8n, create a new workflow with a Schedule Trigger set to 07:00 daily. Add an HTTP Request node pointed at 'https://api.stripe.com/v1/balance/history' with query params 'created[gte]' and 'created[lte]' set to yesterday's Unix timestamps — use n8n's $now.minus(1, 'day').startOf('day').toUnixInteger() expression. Authenticate via Header Auth with your Stripe secret key as 'Bearer sk_live_xxx'. Add a Set node to extract 'amount', 'fee', 'net', and 'type' fields, then aggregate with a Function node that sums gross, refunds, and net separately.

  3. 3

    Set up Razorpay data pull in n8n

    Add a second HTTP Request node pointing at 'https://api.razorpay.com/v1/payments' with query params 'from' and 'to' set to yesterday's epoch timestamps. Authenticate via Basic Auth using your Razorpay Key ID and Key Secret. Razorpay returns amounts in paise, so add a Function node that divides all amounts by 100 and converts INR to USD using a fixed daily rate stored as a workflow variable — update that rate weekly. Extract 'amount' and 'amount_refunded', then compute net inline.

  4. 4

    Write the reconciliation row to Airtable

    Add an Airtable node in 'Create Record' mode pointing at your Daily Ledger table. Map the computed fields from both prior nodes into the corresponding columns. Set Combined_Net as Stripe_Net plus Razorpay_Net. Before the write, add a Function node that fetches yesterday's row via an Airtable 'List Records' node filtered by Date = yesterday, then compares Combined_Net against it — if the delta exceeds 15% in either direction, set Mismatch_Flag to true. If you ever batch-backfill, watch Airtable's 5-requests-per-second rate limit.

  5. 5

    Generate a narrative summary with Claude

    Add an HTTP Request node calling Claude's API at POST https://api.anthropic.com/v1/messages with model 'claude-3-5-sonnet-20241022'. Pass a prompt that includes yesterday's Stripe_Net, Razorpay_Net, Combined_Net, Delta_vs_Prior_Day, and Mismatch_Flag as interpolated variables. Instruct Claude: 'You are a finance ops assistant. Write a 3-sentence Slack message summarizing yesterday's revenue. If Mismatch_Flag is true, open with ALERT. Be specific with numbers. No fluff.' Cap max_tokens at 200.

  6. 6

    Post the digest to Slack with threshold-aware formatting

    Add a Slack node set to 'Post Message' targeting your #revenue-ops channel. Use the Claude output as the message body. Add a second conditional branch: if Mismatch_Flag is true, also post to #alerts with an @here mention and a direct link to the Airtable row — construct the URL as 'https://airtable.com/YOUR_BASE_ID/YOUR_TABLE_ID/RECORD_ID'. Daily noise stays in #revenue-ops. Real anomalies interrupt the right people in #alerts.

  7. 7

    Add a monthly rollup trigger

    Create a second n8n workflow triggered on the 1st of each month at 08:00. Use an Airtable 'List Records' node to pull all rows from the prior month, sum them in a Function node, and compute MoM growth. Post a separate Slack message to #finance with MoM Stripe net, Razorpay net, combined, and growth percentage. This monthly message is what you paste into your investor update — format it accordingly in the prompt to Claude.

Want me to build this for you instead?

Product Audit and CTO Mode run out of this same thinking. If you’re reading this thinking “I want this, but in my product” — let’s talk.

See services

More like this