Backend, Tally Integration With Your Website or Custom Software (India, 2026): How It Actually Works, What It Costs, and When to Build vs BuyBackend
Backend

Tally Integration With Your Website or Custom Software (India, 2026): How It Actually Works, What It Costs, and When to Build vs Buy

RRRavi Rai·July 13, 2026·18 min read

If you run a business in India, there is a good chance your sales happen in one system and your accounting happens in TallyPrime, and the two have never spoken to each other. Someone bridges that gap by hand, copying orders into Tally one voucher at a time. It works until volume grows. Then it quietly costs you hours and introduces errors nobody spots until GST filing.

This guide is about closing that gap properly: connecting your website, e-commerce store, or custom software to TallyPrime so orders, invoices, ledgers, and stock flow in without anyone re-typing them. We have built these integrations for D2C stores, B2B distributors, and service firms running a CRM next to Tally, so this is written from what actually breaks in production, not a vendor brochure.

By the end you will understand how Tally really connects to another app, the three integration methods and when each fits, whether to buy a connector or build custom middleware, what the whole thing costs in 2026, and how to scope the project before you hire anyone.

Why this comes up: your sales live in one app, your books live in Tally

Every Indian SMB we work with hits the same wall. The sales happen in one place, and the accounting happens in TallyPrime, and nothing connects the two.

So someone pays the tax. Usually the accountant. They open the website admin (or the store dashboard, or the CRM), read off one order, then retype it into Tally as a sales voucher. Party ledger, item, quantity, GST, done. Then the next order. Then dozens more. We call it the re-keying tax, and it costs real hours plus the typos nobody catches until reconciliation.

Who feels it worst: D2C and e-commerce stores pushing dozens of orders a day, B2B distributors booking stock and party ledgers, and service firms running a CRM next to Tally for invoices and receipts.

When people say 'Tally integration with a website', this is what they actually mean: your own app pushing its sales, invoices, ledgers, and stock straight into Tally so nobody re-keys anything.

One clear line first. This is not GST e-invoicing. E-invoicing means generating an IRN on the government IRP portal (we cover GST e-invoicing and IRN generation separately). This is booking *your own* vouchers into *your own* Tally.

So how does your app actually push data into Tally? It starts with a fact most vendors skip over.

How Tally actually connects to another app (the part nobody explains plainly)

Here is the thing most vendors gloss over: TallyPrime is its own little web server. Go to F1 (Help) > Settings > Connectivity > Client/Server Configuration, set TallyPrime to act as Server, and enable the gateway (the TallyPrime help documentation lists the exact toggle labels for your release). Tally then starts listening for HTTP requests on its gateway port, 9000 by default. Once that is on, any other program on the same machine or network can talk to it. That is the whole foundation. No magic, no API keys, just a local server sitting there waiting.

The four real doors in:

  • XML over HTTP, the workhorse. You send a request to http://<tally-ip>:9000 and Tally answers.
  • TDL (Tally Definition Language), Tally's own scripting layer for custom reports, fields, and behaviour inside Tally itself.
  • ODBC, read-heavy, good for pulling data into Excel or Power BI, weaker for writing.
  • Prebuilt connectors, tools that wrap the above so you don't write raw XML.

Import vs export, in plain words. To push data in (create sales vouchers, customer ledgers, stock items), you POST an XML request with <REQUEST> type Import Data. To pull data out (a sales register, outstanding receivables, a stock summary), you send an Export Data request and Tally streams the report back.

The request envelope. Every message is an <ENVELOPE> with two parts: a <HEADER> (what you want, e.g. Import Data) and a <BODY> that holds one or more <TALLYMESSAGE> blocks (the actual voucher or master). Inside the header you must name the company and the financial year exactly as they appear in Tally. Get the company name off by one space, or point at the wrong FY, and Tally silently rejects or misfiles the voucher. This is one of the most common causes of failed imports we see.

The constraint you never escape. Tally has to be open, unlocked, and network-reachable at the moment of every request. Close Tally, lock the screen, or lose the LAN, and the integration stops. There is no background daemon.

On-prem vs cloud Tally. If Tally runs on a desktop in the office, your integration is only alive during office hours. If you host Tally on a cloud VM (AWS, or a managed Tally-on-cloud host), it can run 24x7 and your website can reach it any time. That one decision shapes the entire architecture, and we come back to it in detail below.

The integration methods compared: XML API, TDL, and ODBC

When your website, store, or CRM has to talk to TallyPrime, you have three real native options. Not ten. Three. Prebuilt connectors are a fourth path, but they just wrap these three, and we cover them under build vs buy.

XML over HTTP API. This is the default path and the one we reach for on most jobs. Tally accepts XML requests on the port from the last section and returns XML. TallyPrime added JSON import in Release 7.0, but for the API path we default to XML, which every TallyPrime build accepts over the HTTP gateway. It is language-agnostic, so your middleware can be written in Node, PHP, or Python and it does not care. You POST a request that says 'create this sales voucher' or 'give me this ledger balance', Tally does it, you read the response. This is how app data actually gets pushed into the books.

TDL (Tally Definition Language). This customises Tally itself: new fields, new reports, extra buttons, changed voucher layouts. It is genuinely powerful, but the code lives inside Tally and runs on Tally's terms (the language is documented by Tally Solutions). You need an actual Tally/TDL developer, not a web dev. Use it when the requirement is inside Tally (a custom invoice format, a new master field), not when the requirement is 'sync my website orders'.

ODBC. Read-oriented reporting into Excel, Power BI, or Google Sheets. Good for pulling numbers out. Clunky and weak for writing data in, and the connection is fiddly to keep alive. Treat it as a reporting tap, not an integration.

Here is the same comparison in plain words:

  • XML over HTTP is genuinely good at pushing and pulling vouchers, ledgers, and stock from any app. Where it falls down: Tally must be open, and XML is verbose.
  • TDL is genuinely good at custom fields, reports, and invoice formats. Where it falls down: it needs a Tally developer and lives inside Tally.
  • ODBC is genuinely good at reading into Excel or BI tools. Where it falls down: writing data is unstable and slow.

The practical answer. For website, CRM, or e-commerce work, it is almost always XML over HTTP driven by a middleware service you control. The middleware queues orders, maps GST/HSN and ledgers, retries when Tally is closed, and logs every push. TDL and ODBC play supporting roles around it, never the lead.

Connect Tally to a website, e-commerce store, or CRM: the real scenarios

Every integration comes down to the same move: something happens in your app, and a voucher or ledger gets created in TallyPrime over its XML port. What changes is the source and how often you push.

Website or lead form to Tally. A quote request or a paid order hits your site. The middleware first checks whether a party ledger exists (matched on name or GSTIN), creates it under Sundry Debtors if not, then posts a Sales voucher or a Receipt voucher for a prepaid order. The per-order data entry disappears.

Shopify, WooCommerce, or a custom store to Tally. Here each order carries line items, so you map every SKU to a Tally stock item, post the order as a Sales voucher with HSN codes and split CGST/SGST/IGST by the buyer's state, and let Tally reduce stock. Get the tax ledger mapping right once and reconciliation stops being a monthly fire.

CRM to Tally (our MultiVendor CRM as the worked example). When a deal moves to Won, we push the CRM customer as a ledger and the CRM invoice as a Sales voucher, keeping the CRM invoice number as the voucher reference so both systems agree.

One-way vs two-way. One-way push (app to Tally) covers most Indian SMBs, because accounts is the system of record and nobody wants website prices editable from Tally. Two-way sync (pulling outstanding balances or payment status back) costs more to build and test, so buy it only when your sales team genuinely needs live balances.

Near-real-time vs batch. Our rule of thumb: under roughly 50 to 100 orders a day, fire on each order. Above that, or when Tally sits on one office PC that isn't always awake, we run a scheduled batch every 15 to 30 minutes. Batch is also far kinder to debug when a voucher fails.

Build vs buy: off-the-shelf connector or custom middleware

What ready-made connectors do well. If your setup is a standard store feeding a standard books file, a packaged connector is the fastest way to stop double-entering vouchers. Off-the-shelf WooCommerce-to-Tally, Shopify-to-Tally, and Zoho-to-Tally connectors handle the common path well: a paid order becomes a sales voucher, the customer becomes a ledger, stock items map to Tally stock items, and CGST/SGST/IGST post to the right ledgers. For a single store with clean product data, expect setup in days, not weeks. This is the right call more often than founders think.

Where connectors break down. The trouble starts when your flow stops being generic. Custom fields (a dispatch code, a broker name, a project tag) usually have nowhere to land. Non-standard voucher structures, like a sales voucher that also books TCS or a cost centre split, either get dropped or forced into the wrong ledger. And most connectors are one-source-to-one-Tally. The moment you have a website plus an offline POS plus your own CRM (the kind of custom CRM development that carries its own fields) all needing to hit the same company file, an off-the-shelf tool cannot arbitrate between them.

What custom middleware buys you. A middleware layer (a small service that sits between your apps and TallyPrime's XML port) gives you control that a licence screen never will: your own field mapping, idempotency keys so a retried webhook does not create a duplicate voucher, retry-with-backoff when Tally is closed, a full audit log of every payload sent, and deliberate handling of GST edge cases (reverse charge, exempt vs nil-rated, HSN mismatches). When something fails at 11pm, you can read the log instead of guessing. This is the sort of custom software development services work we take on most weeks.

An honest framework. Buy if your flow is standard and single-source. Build if it is bespoke, has custom fields, or pulls from more than one system.

The money trade-off. Most connectors run on a recurring per-year licence, roughly ₹8,000 to ₹30,000 per year. A custom build is a one-time cost you own outright, commonly ₹40,000 for a simple one-way sync and up to ₹8,00,000+ for a multi-source setup, depending on voucher complexity. Over three years, bespoke and multi-source setups usually favour building. The cost section below breaks the tiers down properly.

A JSON-to-Tally-XML middleware: how we architect it in Node or PHP

The core pattern is simple once you see it. Your website, store, or CRM does not talk to Tally directly. It emits a plain JSON event ('order paid', 'invoice raised') to a small middleware service. That service maps the JSON to a Tally XML envelope and POSTs it to http://<tally-host>:9000. Tally receives the voucher and replies with its own XML.

The service structure is the same whether we build it in Node (Express or Fastify) or PHP (Laravel), and it follows the same REST API design best practices we use on any integration layer:

  1. Receive the event on a webhook route.
  2. Validate it: does the ledger exist, is the GST/HSN present, is the amount sane?
  3. Transform the JSON into the exact <TALLYMESSAGE> block the voucher type needs, with LEDGERNAME, AMOUNT, and the party details wrapped in ENVELOPE > BODY > IMPORTDATA.
  4. Send it to port 9000.
  5. Parse the response for <LINEERROR> or a created/altered count.

A queue and retry layer is not optional. Desktop Tally gets closed at 7pm, or someone is mid-entry and it is busy. Without a queue the POST fails and the sale vanishes from the books silently. We push every event into Redis (BullMQ) or a database-backed queue. If Tally is unreachable, the job waits and re-fires on a backoff. Nothing is lost.

Idempotency keys stop duplicate ledgers and vouchers. We tie a key to your order ID or invoice number. Before posting, the middleware checks whether that key already succeeded. So a retry, a double webhook, or a manual replay never creates two sales vouchers for the same order. This one control prevents the most common Tally-integration mess, and we come back to it below because it is the number one thing that goes wrong.

Log everything verbatim. We store the outbound XML and Tally's raw reply for every request. When the accountant asks why a voucher looks off, you open the log, not a debugger. We typically keep at least 90 days of logs, then prune older ones, since the payloads carry customer and GSTIN data you should not hoard.

Where it runs matters. For desktop Tally, the middleware sits on the same LAN, often the same machine or a small always-on PC. For cloud-hosted Tally, we run it on a small VPS (roughly ₹500 to ₹2,000 per month) that reaches Tally over a private tunnel (WireGuard or Tailscale), never an open public port.

The things that actually break (and how we handle each one)

Duplicate vouchers from retries with no idempotency. This is the number one thing that goes wrong. Your app posts a sale, Tally is slow, the request times out, your app retries, and now you have the same invoice twice in the books. The fix is the idempotency key from the last section: we store every posted voucher's key plus Tally's returned voucher ID in a small ledger table, and we check that table before any post and before any retry. No key means no duplicate.

The ledger master must exist before the voucher. Tally rejects a sales voucher if the party ledger is not already there. So our middleware checks for the party and tax ledgers first, auto-creates the ledger master (with the right group, GSTIN, and state) via XML, then posts the voucher in the same run.

GST, HSN, and tax-ledger mapping mismatches. Your app might call it 'GST 18%' while your accountant's Tally has a specific 'Output CGST 9% / SGST 9%' setup with HSN codes on the stock items. We build a mapping table, agreed with your accountant, that translates your app's tax fields to the exact ledger names and HSN codes in their company. Get this wrong and every GSTR-1 reconciliation becomes manual.

Company name or financial year mismatch. As noted earlier, Tally silently rejects the whole request if the SVCURRENTCOMPANY or the date falls outside the open financial year. We pin the exact company name and validate the voucher date against the active FY before sending.

Tally not running, machine asleep, or office internet down. On-prem Tally is offline more than you think. The durable queue in front (Redis or a simple DB table) means posts pile up safely and drain automatically when Tally is back. Nothing is lost, nothing is posted twice.

Voucher numbering clashes. If Tally auto-numbers and your app also forces a number, you get gaps or rejections. We pick one owner of the number, usually Tally, and store the returned number back against your order.

Typical build for this hardening: ₹40,000 to ₹90,000, which sits inside the simple one-way tier below.

On-prem vs cloud Tally, and reaching it safely over the internet

Desktop Tally on an office PC. This is the most common setup we see. TallyPrime is installed on one machine in the accounts room, and the XML server listens on port 9000 on that machine's local network only. Your middleware has to reach that machine. If the middleware also runs inside the office (same LAN), it just points at the PC's local IP, for example http://192.168.1.12:9000. If your website or web app lives on a hosted server, it cannot see that local IP at all. You need a secure tunnel between them.

Tally on a cloud VM or a Tally-on-cloud provider. Move Tally onto a Windows VM (AWS EC2, Azure, or a managed Tally-on-cloud host) and your hosted app can reach it reliably, because both sit on the internet. Expect roughly ₹800 to ₹2,500 per user per month for a managed Tally-on-cloud seat. This is what we recommend when uptime matters.

Connecting safely. Your options: a static IP plus firewall whitelist, a site-to-site or client VPN (WireGuard, OpenVPN), or a reverse tunnel (Cloudflare Tunnel, ngrok, Tailscale) from the Tally PC out to your middleware. VPN and reverse tunnel are safest because nothing is opened inbound on the office router.

Security rule we never break: do not port-forward or expose raw port 9000 to the public internet. The gateway has no built-in authentication. Anyone who finds it can read and post vouchers.

After go-live, keep the Tally licence activated on that exact machine, leave Gateway of Tally on port 9000, and confirm whether you are in single-user or multi-user (Gold) mode. Single-user locks the company while a report runs, which will stall your sync.

What it costs and how long it takes (India, 2026)

Pricing here is indicative for 2026 and reflects our own rate card; confirm current quotes before you budget.

Off-the-shelf connectors. If your setup is standard (WooCommerce or Shopify orders flowing into TallyPrime as sales vouchers), a ready-made connector is the cheapest start. Expect roughly ₹8,000 to ₹30,000 per year for a licensed plug-in or SaaS bridge, usually billed annually per Tally company or per site. Off-the-shelf WooCommerce-to-Tally, Shopify-to-Tally, and Zoho-to-Tally connectors sit in this band. The catch: they only map the fields the vendor decided to support.

Custom middleware. The moment your data does not fit a template, you are building. Rough ranges we quote:

  • Simple one-way sync (website orders into Tally, one company, standard GST): ₹40,000 to ₹1,00,000, delivered in 1 to 2 weeks.
  • Mapped two-way sync (stock and ledger balances flow back to the site, custom fields, HSN mapping): ₹1,25,000 to ₹3,50,000, 3 to 6 weeks.
  • Multi-source (website plus CRM plus marketplace into one or more Tally companies): ₹3,50,000 to ₹8,00,000+, 6 to 12 weeks.

Ongoing costs people forget. Middleware has to run somewhere. A small VPS to host the sync service is around ₹500 to ₹2,000 per month. Budget an annual maintenance retainer (we typically charge 15 to 20% of build cost) because every TallyPrime version upgrade can change XML behaviour and quietly break your import. On-prem Tally also means the machine and the sync service both have to stay awake.

What drives the price up. Custom fields, two-way writes, multiple source apps, and GST edge cases (inclusive vs exclusive tax, mixed HSN slabs, place-of-supply logic, credit notes). Each one adds mapping and testing time.

The cheapest sane path. A small store should buy a connector, live with its limits, and only build later. A growing B2B distributor with pricing tiers, multiple ledgers, and stock that must stay accurate across channels should skip the annual connector rental and commission custom middleware once, because the duplicate-ledger and reconciliation cleanup will cost more than the build.

How to scope your Tally integration before you hire anyone

The projects that go badly are the ones nobody scoped. Spend an afternoon on this and you will cut both cost and rework.

Write down exactly what data moves. One line per object: 'sales orders from Shopify create sales vouchers in Tally', 'customer master syncs both ways'. Note direction (one-way or two-way) and volume per day. This one page is what a developer actually quotes against.

Decide sync frequency and the tie-breaker. Real-time on order, or a batch every 15 minutes? More importantly, when the website says one price and Tally says another, who wins? Pick a source of truth per field before a line of code is written.

Confirm on-prem vs cloud Tally. Is TallyPrime on a shop-floor PC, a VPS, or something like Tally on AWS? The developer needs to reach port 9000, usually via a static IP, a VPN, or an agent running next to Tally. Sort this early; it blocks everything.

Get a sample voucher and ledger structure from your accountant up front. Real ledger names, GST/HSN codes, voucher types, and one exported XML voucher. Guessing the ledger tree is where duplicate ledgers get born.

Put the boring parts in the contract. Idempotency (no double-posting on retry), retry logic, a log of every push, and email alerts on failure. Ask for these by name, not 'good error handling'.

A quick website cost calculator helps you sanity-check the build budget while you scope. Off-the-shelf connectors run roughly ₹8,000 to ₹30,000 per year; custom middleware more. Do this homework and any developer you hire starts from a data map instead of a guess.

Frequently asked questions about Tally integration

Does Tally have an API, and can it connect to a website or custom software?

Yes, though not a REST API in the modern sense. TallyPrime runs a local HTTP-XML server on port 9000 once you enable Client/Server mode and set it to act as a server. Any app, in any language, can POST XML (newer builds also accept JSON) to create or read vouchers, ledgers, and stock. Your website or custom software connects through a middleware service that speaks that XML, not through a hosted cloud endpoint.

Does TallyPrime have to be open and running for the integration to work?

Yes. Tally must be open, unlocked, and network-reachable at the exact moment of every request, because there is no background service that runs when the app is closed. This is why on-prem Tally is effectively an office-hours integration. The standard fix is a durable queue in front of Tally, so events wait safely and drain automatically once Tally is back, and to host Tally on a cloud VM if you need 24x7 uptime.

Can I integrate cloud-hosted Tally with my web app, or does it only work on the office PC?

Both work, and the choice shapes the whole architecture. Desktop Tally on an office PC only listens on the local network, so a hosted web app has to reach it through a VPN or a reverse tunnel, never an exposed public port 9000. Cloud-hosted Tally on a Windows VM or a Tally-on-cloud provider sits on the internet alongside your app, so it is reachable any time and is what we recommend when uptime matters, at roughly ₹800 to ₹2,500 per user per month.

How much does Tally integration cost in India in 2026, and how long does it take?

A ready-made connector for a standard store runs about ₹8,000 to ₹30,000 per year and sets up in days. Custom middleware is a one-time build: ₹40,000 to ₹1,00,000 for a simple one-way sync in 1 to 2 weeks, rising to ₹3,50,000 to ₹8,00,000+ over 6 to 12 weeks for multi-source setups. Add a small VPS (around ₹500 to ₹2,000 per month) and a maintenance retainer, because Tally version upgrades can change XML behaviour.

Should I buy a ready-made Tally connector or get custom middleware built?

Buy if your flow is standard and single-source: one clean store feeding one company file with normal GST. Build if it is bespoke, has custom fields, non-standard vouchers (TCS, cost centres), or pulls from more than one system that all hit the same Tally company. Over three years, multi-source and bespoke setups almost always favour building, because the reconciliation cleanup a limited connector leaves behind costs more than the one-time build.

Will syncing orders into Tally create duplicate vouchers, and how is that prevented?

It can, and it is the single most common failure. A slow response, a timeout, a retried webhook, or a manual replay can post the same order twice. The prevention is idempotency keys: tie a stable key to your order ID or invoice number, store every posted voucher's key alongside Tally's returned voucher ID, and check that table before every post and every retry. No matching key, no duplicate.

The honest bottom line

Tally integration is not exotic, but it is unforgiving. The connection itself is a few lines of XML; the reason projects go sideways is everything around it, the queue, the idempotency, the exact ledger and GST mapping, and Tally simply being closed at the wrong moment. Get those right and the re-keying tax disappears for good. Get them wrong and you trade manual entry for duplicate-voucher cleanup, which is worse.

If you want a second opinion on whether to buy a connector or build, or you already know you need custom middleware done properly, that is the kind of work we do. Send us a sample voucher and a line on what data moves, and we will tell you honestly which path fits. Start at buildbyRaviRai.

If you already know you need Tally wired into your website, store, or CRM the right way, that is exactly what we build: idempotent middleware, clean GST and ledger mapping, a durable queue, and a full audit log of every push. Send us a sample voucher and one line on what data moves, and we will tell you honestly whether to buy a connector or build.

Talk to us about Tally integration
RR
Written by
Ravi Rai

Founder of buildbyRaviRai, a freelance web development agency based in Noida, India. 5+ years shipping Next.js, WordPress, Shopify, and Laravel projects for clients in India, USA, Canada, and the UK.

Keep Reading

Backend, How to Actually Accept Payments in India in 2026: UPI, Cards, Autopay, and What Each One Really CostsBackend

How to Actually Accept Payments in India in 2026: UPI, Cards, Autopay, and What Each One Really Costs

Taking money online in India works differently from almost anywhere else: a national rail that is free to accept, an RBI rulebook rewritten in 2025, recurring payments that do not behave like a US SaaS, and card rules that forbid storing a card number at all. This is the honest, practical guide for founders and developers: payment gateway versus aggregator, how UPI and cards and autopay actually work, what each method really costs, how to collect from customers abroad, and a checklist to go live without leaking money on fees or failing renewals.

Business, Website Builder vs Custom Website in India 2026: An Honest Decision GuideBusiness

Website Builder vs Custom Website in India 2026: An Honest Decision Guide

Wix, Squarespace, Shopify, or a custom build? The internet gives you absolute answers and both are wrong. The honest call depends on where your business is right now. This is the no-spin guide for Indian businesses in 2026: when a builder is genuinely the smart choice, when you have outgrown it, the real three-year cost, ownership and lock-in, and the migration path between them.

Backend, Passkeys in 2026: How Passwordless Login Actually Works (and Why You Should Add It)Backend

Passkeys in 2026: How Passwordless Login Actually Works (and Why You Should Add It)

Passwords get reused, phished, and forgotten, and in India there is an extra tax: SMS OTP that costs money and fails on weak signal. Passkeys fix all of it. They are the passwordless standard built on WebAuthn, supported by every major browser and OS, and phishing-proof by design. This is the developer-honest guide to how passkeys actually work, what changes on your server, the gotchas, and when to add them.

Backend, GST E-Invoicing in India 2026: How IRN, the IRP API, and QR Codes Actually Work (A Developer's Guide)Backend

GST E-Invoicing in India 2026: How IRN, the IRP API, and QR Codes Actually Work (A Developer's Guide)

E-invoicing is not 'generate a nicer PDF'. It is reporting each B2B invoice to a government portal (the IRP), getting back a signed IRN and QR code, and doing it inside the time limit. This is the developer-honest guide to how the IRP API works: the turnover threshold, the auth and encryption handshake, the invoice JSON schema, how the IRN is generated, the signed QR code, the 24-hour cancellation rule, and the mistakes that quietly break integrations.

Backend, REST API Design Best Practices 2026: How to Build APIs That LastBackend

REST API Design Best Practices 2026: How to Build APIs That Last

An API is a promise. Once a mobile app, a frontend, or a partner depends on yours, changing it is painful and breaking it is worse. The good news is that good API design is mostly a set of well-worn conventions, not genius. This is the practical guide to designing REST APIs in 2026: resource naming, using HTTP properly, versioning, auth, pagination, errors, idempotency, and the mistakes that haunt teams later.

bR

buildbyRaviRai Assistant

Replies within 24 hours

Chat on WhatsApp

+91 74289 19927 · Replies within 24 hours

Pick a quick message to start a conversation on WhatsApp, or type your own below. Your message pre-fills, you hit send from WhatsApp.

Or type your own

We'll send your message via WhatsApp Web or the WhatsApp app.